Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример_3.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Приложение в

Процедура создания документов «Перемещение товаров» со складов хранения на склад «Ежедневный»:

Процедура КнопкаВыполнитьНажатие(Кнопка)

ТолькоРезерв = Ложь;

//либо реализация либо для счета уже создали резерв

Если ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПоместитьВРезерв.Доступность = Ложь и ТипЗнч(ДокументОснование) = ТипЗнч(Документы.СчетНаОплатуПокупателю.ПустаяСсылка()) Тогда

КонецОбработки = Ложь;

Для Каждого СтрокаДанных из Товары Цикл

СтрокаДанных.Обработан = Ложь;

КонецЦикла;

ИначеЕсли Не ПроверкаДанных()Тогда

Возврат;

КонецЕсли;

Если Справочники.ПринадлежностьРезервов.НайтиПоРеквизиту("ПользовательРезерва",ДокументОснование.Контрагент)<> Справочники.ПринадлежностьРезервов.ПустаяСсылка() Тогда

ТекущийКонтрагент = Справочники.ПринадлежностьРезервов.НайтиПоРеквизиту("ПользовательРезерва",ДокументОснование.Контрагент).ВладелецРезерва;

Иначе

ТекущийКонтрагент = ДокументОснование.Контрагент;

КонецЕсли;

ЗапросДата = Новый Запрос;

ЗапросДата.УстановитьПараметр("Контрагент", ТекущийКонтрагент);

ЗапросДата.Текст = "ВЫБРАТЬ

| МАКСИМУМ(ТоварыВРезервеНаСкладах.Период) КАК Период

|ИЗ

| РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах";

Попытка

ДатаРезерва = КонецДня(ЗапросДата.Выполнить().Выгрузить().Получить(0).Период);

Исключение

ДатаРезерва = КонецГода(ТекущаяДата());

КонецПопытки;

Если ДатаРезерва<ТекущаяДата() Тогда

ДатаРезерва = ТекущаяДата();

КонецЕсли;

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ДатаРезерва",КонецДня(ДатаРезерва));

Если ДокументОснование.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000015")Тогда //детский мир москва

Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("00191"));

Иначе

Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("00007"));

КонецЕсли;

Запрос.УстановитьПараметр("Сезон", ДокументОснование.Сезон);

Запрос.УстановитьПараметр("Контрагент", ТекущийКонтрагент);

Запрос.Текст = "ВЫБРАТЬ

| ЗаказыПокупателейОстатки.ЗаказПокупателя,

| ЗаказыПокупателейОстатки.ЗаказПокупателя.СкладГруппа КАК Склад,

| ЗаказыПокупателейОстатки.КоличествоОстаток

|ИЗ

| РегистрНакопления.ЗаказыПокупателей.Остатки(

| &ДатаРезерва,

| ЗаказПокупателя.Контрагент = &Контрагент

| И ЗаказПокупателя.СкладГруппа В ИЕРАРХИИ (&Склад)

| И Номенклатура = &Номенклатура

| И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры

| И ЗаказПокупателя.Сезон = &Сезон) КАК ЗаказыПокупателейОстатки

|ГДЕ

| ЗаказыПокупателейОстатки.КоличествоОстаток > 0";

Для каждого СтрокаДанных из Товары Цикл

Если СтрокаДанных.Обработан = Ложь Тогда

Запрос.УстановитьПараметр("Номенклатура",СтрокаДанных.Номенклатура);

Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры",СтрокаДанных.ХарактеристикаНоменклатуры);

РезультатЗаказ = Запрос.Выполнить().Выгрузить();

Результат = РезультатЗаказ.Скопировать();

Результат.Свернуть("Склад", "КоличествоОстаток");

Если СтрокаДанных.Перемещено < СтрокаДанных.Количество Тогда

БудемПеремещатьКоличество = СтрокаДанных.Количество - СтрокаДанных.Перемещено;

Иначе

СтрокаДанных.Обработан = Истина;

Продолжить;

КонецЕсли;

Если ОпределитьБазовуюЦену(ТекущаяДата(),СтрокаДанных) = 0 Тогда

Сообщить(Строка(СтрокаДанных.Код) +" "+Строка(СтрокаДанных.Номенклатура)+ " нет базовой цены!");

Продолжить;

ИначеЕсли Результат.Количество()=0 Тогда //в резерве нет или отрицательное

Если ИзСвободыВРезерв(СтрокаДанных, БудемПеремещатьКоличество, ТекущийКонтрагент) = Истина Тогда //удалось

Если ТипЗнч(ДокументОснование) = ТипЗнч(Документы.СчетНаОплатуПокупателю.ПустаяСсылка()) Тогда

ПричинаКорректировки = Справочники.ПризнакиСписанияРезервов.Продажа;

ВыполнитьПеремещение(Запрос.Выполнить().Выгрузить(), СтрокаДанных, БудемПеремещатьКоличество, ПричинаКорректировки);

КонецЕсли;

Если СтрокаДанных.Количество <= СтрокаДанных.Перемещено Тогда

СтрокаДанных.Обработан = Истина;

КонецЕсли;

Продолжить;

Иначе

Сообщить(Строка(СтрокаДанных.Код) +" "+Строка(СтрокаДанных.Номенклатура) + " в свободе не достаточно. Замените или удалите позицию");

КонецЕсли;

//в резерве сколько то..

60