diamond АШ Tlg

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

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

Регламентированный учёт (БУ)

Иногда не всё можно настроить через ГФУ, особенно если модифицированы типовые счета учёта или созданы свои новые, или аналитики просят сложный алгоритм заполнения не укладывающийся в типовые механизмы ERP. Далее приведён способ несложной доработки, позволяющий "прибить гвоздями" некоторые проводки, дозаполнить пустые субконто, удалить лишние строки или сделать реверс.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Международный учёт (МСФО)

Откройте общий модуль МеждународныйУчетПроведениеСервер, найдите процедуру ОтразитьПорциюДокументов. Здесь вы должны сами решить где вставить врезку, главное это сделать после 4-х вызовов процедур с именем Отразить(), которые легко увидите в самом начале.

Процедура ОтразитьПорциюДокументов(ДокументыКОтражениюВУчете, ПараметрыОтраженияВМеждународномУчете,
		ПараметрыФормированияПроводок)
	
	[типовой код]

	// + 
	АШ_МеждународныйУчетПроведениеСервер.КорректировкаПроводок(ДокументыКОтражениюВУчете, ПараметрыОтраженияВМеждународномУчете,
		ПараметрыФормированияПроводок, ТаблицаПроводок);
	// -
	
	[типовой код]

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

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

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

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

	// Место для добавления новых видов документов

	КонецЕсли;

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

// Корректировать проводки МУ документа РезервыПоОплатеТруда
//
// Параметры:
//  РегистраторСсылка - ДокументСсылка - ссылка на документ регистратор движений
//  ТаблицаПроводок - ТаблицаЗначений - софрмированные ранее типовые проводки, которые потом будут записаны
Процедура КорректироватьПроводкиРезервыПоОплатеТруда(РегистраторСсылка, ТаблицаПроводок)

	// делаете что хотите, но т.к. регистратор это ссылка то реквизиты документа получать
	// через ОбщегоНазначения.ЗначениеРеквизитаОбъекта() или своим запросом

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

// Корректировать проводки МУ документа СчетФактураПолученныйАванс
//
// Параметры:
//  РегистраторСсылка - ДокументСсылка - ссылка на документ регистратор движений
//  ПараметрыФормированияПроводок - Структура - заполненные параметры, нужны для вызова некоторых типовых функций
//  ТаблицаПроводок - ТаблицаЗначений - софрмированные ранее типовые проводки, которые потом будут записаны
Процедура КорректироватьПроводкиРезервыПоОплатеТруда(РегистраторСсылка, ПараметрыФормированияПроводок, ТаблицаПроводок)

	// пример инверсии
	Для Каждого Строка Из ТаблицаПроводок Цикл
		Если Строка.Сумма < 0 И Строка.СчетКт = ПланыСчетов.Международный.НДСПоАвансамПолученным Тогда
			РегистрыБухгалтерии.Международный.ИнвертироватьПроводку(
				Строка, 
				ПараметрыФормированияПроводок.ИнвертируемыеПоля,
				ПараметрыФормированияПроводок.ИнвертируемыеРесурсы,
				ПараметрыФормированияПроводок.КоличествоСубконто
			);
		КонецЕсли;
	КонецЦикла;

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