Проверка наличия цен и остатков в перемещении. Розница 3
Клиенту нужен был собственный контроль остатков, потому что типовой был выключен. Чтобы допустимый остаток мог опускаться до минус одного.
А также контроль цен, чтобы при перемещении на точку по всем товарам был задан вид цен этой точки.
Код проверки получился простой и лаконичный:
&Перед("ПередЗаписью") Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) //Какой допустимый остаток возможен после проведения документа ДопустимыйПорогОстатка = -1; //Контролируем остатки и наличие цен //только если отправитель - главный склад Если РежимЗаписи = РежимЗаписиДокумента.Проведение И ЭтотОбъект.СтруктурнаяЕдиница = дор_С.ГлавныйСклад() Тогда ТЗ = ЭтотОбъект.Запасы.Выгрузить(, "НомерСтроки, Номенклатура, Характеристика, Количество"); З = Новый Запрос(); З.Текст = "ВЫБРАТЬ | Т.НомерСтроки КАК НомерСтроки, | Т.Номенклатура КАК Номенклатура, | Т.Характеристика КАК Характеристика, | Т.Количество КАК Количество |ПОМЕСТИТЬ ТН |ИЗ | &ТЗ КАК Т |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТН.НомерСтроки КАК НомерСтроки, | ТН.Номенклатура КАК Номенклатура, | ТН.Характеристика КАК Характеристика, | ЕСТЬNULL(ТЦ.Цена, 0) КАК Цена, | ЕСТЬNULL(ТО.КоличествоОстаток, 0) КАК Остаток, | ТН.Количество КАК Количество |ИЗ | ТН КАК ТН | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &ВидЦен) КАК ТЦ | ПО ТН.Номенклатура = ТЦ.Номенклатура | И ТН.Характеристика = ТЦ.Характеристика | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки( | &Дата, | Организация = &Организация | И СтруктурнаяЕдиница = &СкладОтправитель) КАК ТО | ПО ТН.Номенклатура = ТО.Номенклатура | И ТН.Характеристика = ТО.Характеристика"; Если ЭтотОбъект.Ссылка.Пустая() Тогда Граница = Новый Граница(ЭтотОбъект.Дата, ВидГраницы.Исключая); Иначе Граница = Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая); КонецЕсли; З.УстановитьПараметр("Дата", Граница); З.УстановитьПараметр("ТЗ", ТЗ); З.УстановитьПараметр("ВидЦен", ЭтотОбъект.СтруктурнаяЕдиницаПолучатель.РозничныйВидЦен); З.УстановитьПараметр("СкладОтправитель", ЭтотОбъект.СтруктурнаяЕдиница); З.УстановитьПараметр("Организация", ЭтотОбъект.Организация); Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Цена = 0 Тогда Сообщить("У товара не назначена цена: " + Выборка.Номенклатура + " " + Выборка.Характеристика); Отказ = истина; КонецЕсли; Остаток = Выборка.Остаток - Выборка.Количество; Если Остаток < ДопустимыйПорогОстатка Тогда Сообщить( "У товара перемещается: " + Выборка.Количество + " на остатке: " + Выборка.Остаток + " после проведения остаток: " + Остаток + ", что меньше допустимого: " + ДопустимыйПорогОстатка + "! " + " " + Выборка.Номенклатура + " " + Выборка.Характеристика); Отказ = истина; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры
Среда: Розница 3.0.12.237 Объем: 1 час




банальное исправление «вчерашнего» документа приведет к нарушению контроля остатков. Я уже не говорю про другие виды документов