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