Обман 1С с датой платежа. УТ 11.4
Иногда чтобы не ковырять в расширениях длинные модули процедур, проще обмануть 1С.
Сами понимаете, что такой длинный модуль не хочется расширять через «Изменения и контроль»:
Поэтому элегантная обманка решает проблему, расширяем ОМ.ПродажиСервер:
&Вместо("ПроверитьКорректностьЭтаповГрафикаОплаты") Процедура дор_ПроверитьКорректностьЭтаповГрафикаОплаты(Знач ДокументПродажи, СуммаОплатыПоДокументу, СуммаЗалогаПоДокументу, УчитыватьВариантОплаты, Отказ, ПривязыватьСообщенияКГиперссылке) Если ТипЗнч(ДокументПродажи) = Тип("ДокументОбъект.ЗаказКлиента") Тогда //Осипов 2023-12-26 не контролируем корректность этапов оплаты //Нужно контролировать только дату оплаты ТЗ = ДокументПродажи.ЭтапыГрафикаОплаты.Выгрузить(); ЕстьОшибка = ложь; Для Каждого Строка ИЗ ДокументПродажи.ЭтапыГрафикаОплаты Цикл Если Строка.ДатаПлатежа < ДокументПродажи.Дата Тогда Строка.ДатаПлатежа = ДокументПродажи.Дата; ЕстьОшибка = истина; КонецЕсли; КонецЦикла; ПродолжитьВызов(ДокументПродажи, СуммаОплатыПоДокументу, СуммаЗалогаПоДокументу, УчитыватьВариантОплаты, Отказ, ПривязыватьСообщенияКГиперссылке); Если ЕстьОшибка Тогда ДокументПродажи.ЭтапыГрафикаОплаты.Загрузить(ТЗ); КонецЕсли; КонецЕсли; КонецПроцедуры
Сначала я хотел вообще просто контроль отключить, но потом подумал, что все же суммы контролировать надо. Поэтому сделал такой ловкий трюк для обхода контроля. Хорошо, 1С берет оъект, а не лезет запросом в базу, на транзакцию записи для обмана я бы точно не решился.
Среда: УТ 11.4.13.46. Объем: 0.5 час
Свежие комментарии