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