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