Untitled
unknown
plain_text
2 years ago
7.3 kB
3
Indexable
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) // Согласно условию закупка производится на основании Заказа покупателя, реализуем ввод на основании Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда ЗаказПокупателя = ДанныеЗаполнения.Ссылка; Для Каждого ТекСтрокаСписокНоменклатуры Из ДанныеЗаполнения.СписокНоменклатуры Цикл НоваяСтрока = СписокНоменклатуры.Добавить(); НоваяСтрока.Количество = ТекСтрокаСписокНоменклатуры.Количество; НоваяСтрока.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура; КонецЦикла; КонецЕсли; КонецПроцедуры Процедура ОбработкаПроведенияОУ(Отказ) // ДВИЖЕНИЯ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ (СТАРАЯ МЕТОДИКА ПРОВЕДЕНИЯ) Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.ОстаткиНоменклатуры.Записать(); // Установка блокировки данных в регистре по Заказу покупателя документа и списку номенклатур табличной части Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.УстановитьЗначение("ЗаказПокупателя", ЗаказПокупателя); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Блокировка.Заблокировать(); // Получение данных для формирования движений Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество |ПОМЕСТИТЬ ВТ_СписокНоменклатуры |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура, | ВТ_СписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ВТ_СписокНоменклатуры.Количество КАК КоличествоВДокументе |ИЗ | ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | ЗаказПокупателя = &ЗаказПокупателя | И Номенклатура В | (ВЫБРАТЬ | ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура | ИЗ | ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры)) КАК ОстаткиНоменклатурыОстатки | ПО ВТ_СписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("ЗаказПокупателя", ЗаказПокупателя); // Обход результатов запроса Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Превышение = Выборка.КоличествоВДокументе - Выборка.КоличествоОстаток; Если Превышение > 0 Тогда // Контроль наличия номенклатуры Сообщение = Новый СообщениеПользователю; Сообщение.Текст = СтрШаблон("Превышение остатка по номенклатуре %1 в количестве %2", Выборка.НоменклатураПредставление, Превышение); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; // Движение по регистру Остатки номенклатуры Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход(); Движение.Период = Дата; Движение.ЗаказПокупателя = ЗаказПокупателя; Движение.Номенклатура = Выборка.Номенклатура; Движение.Количество = Выборка.КоличествоВДокументе; Движение.Сумма = Выборка.КоличествоВДокументе / Выборка.КоличествоОстаток * Выборка.СуммаОстаток; КонецЦикла; КонецПроцедуры
Editor is loading...