diamond АШ Tlg

1С ERP: способ корректировки проводок бухгалтерского учёта

Вариант финишной корректировка проводок БУ с минимальным вмешательством в типовую конфигурацию.

Откройте общий модуль РеглУчетПроведениеСервер, найдите процедуру СформироватьХозрасчетный и вставьте новый вызов перед самой записью регистра бухгалтерии:

Процедура СформироватьХозрасчетный(ВыборкаСтатусов, ВыборкаХозрасчетный, ВыборкаХозрасчетныйДополнение, ВыборкаХозрасчетныйСторно)
	
	[типовой код]

	// + Вставить тут 
	АШ_РеглУчетПроведениеСервер.КорректировкаПроводок(ВыборкаСтатусов, НаборЗаписей);
	// -
	
	НаборЗаписей.Записать();

КонецПроцедуры

Создать новый общий серверный модуль АШ_РеглУчетПроведениеСервер (назовите как хотите) и добавьте вызываемую процедуру:

// Общая точка входа для корректировки проводок по БУ, не предназначена
// для тяжелых расчетов.
// Параметры:
// 		ВыборкаСтатусов - выборка запроса - содержит реквизиты документа регистратора
// 		НаборЗаписей - движения - сформированные, но ещё не записанные движения по РБ ВыборкаХозрасчетный
Процедура КорректировкаПроводок(ВыборкаСтатусов, НаборЗаписей) Экспорт

	ТипРегистратора = ТипЗнч(ВыборкаСтатусов.Ссылка);

	// Для каждого типа документа корректировку выполнять в отдельных процедурах, далее
	// пример для 2 типов документов:
	Если ТипРегистратора = Тип("ДокументСсылка.ПриемкаТоваровНаХранение") Тогда
		КорректировкаПроводок_ПриемкаТоваровНаХранение(ВыборкаСтатусов, НаборЗаписей);
	ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.ОтгрузкаТоваровСХранениия") Тогда
		КорректировкаПроводок_ОтгрузкаТоваровСХранениия(ВыборкаСтатусов, НаборЗаписей);

	// другие обрабатываемые типы регистраторов добавлять здесь

	КонецЕсли;
	
КонецПроцедуры

// пример заполнения Субконто2 реквизитом документа при некоторых условиях
Процедура КорректировкаПроводок_ПриемкаТоваровНаХранение(ВыборкаСтатусов, НаборЗаписей)

	Если ВыборкаСтатусов.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	Если ВыборкаСтатусов[0].ХозяйственнаяОперация = ... Тогда
		Для Каждого Проводка Из НаборЗаписей Цикл
			Если Проводка.СчетДт = ... Тогда
				Проводка.СубконтоДт2.Вставить(
					ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,
					ВыборкаСтатусов[0].Договор
				);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

КонецПроцедуры