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