Обман 1С с датой платежа. УТ 11.4

Иногда чтобы не ковырять в расширениях длинные модули процедур, проще обмануть 1С.

Сами понимаете, что такой длинный модуль не хочется расширять через «Изменения и контроль»:

Поэтому элегантная обманка решает проблему, расширяем ОМ.ПродажиСервер:

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

Сначала я хотел вообще просто контроль отключить, но потом подумал, что все же суммы контролировать надо. Поэтому сделал такой ловкий трюк для обхода контроля. Хорошо, 1С берет оъект, а не лезет запросом в базу, на транзакцию записи для обмана я бы точно не решился.

Среда: УТ 11.4.13.46. Объем: 0.5 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *