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

Вариант финишной корректировка проводок БУ и международного учёта с минимальным вмешательством в типовую конфигурацию.
Регламентированный учёт (БУ)
Откройте общий модуль РеглУчетПроведениеСервер, найдите процедуру СформироватьХозрасчетный и вставьте новый вызов перед самой записью регистра бухгалтерии:
Процедура СформироватьХозрасчетный(ВыборкаСтатусов, ВыборкаХозрасчетный, ВыборкаХозрасчетныйДополнение, ВыборкаХозрасчетныйСторно)
[типовой код]
// + Вставить тут
АШ_РеглУчетПроведениеСервер.КорректировкаПроводок(ВыборкаСтатусов, НаборЗаписей);
// -
НаборЗаписей.Записать();
КонецПроцедуры
Создать новый общий серверный модуль АШ_РеглУчетПроведениеСервер (назовите как хотите) и добавьте вызываемую процедуру:
// Общая точка входа для корректировки проводок по БУ, не предназначена
// для тяжелых расчетов.
// Параметры:
// ВыборкаСтатусов - выборка запроса - содержит реквизиты документа регистратора
// НаборЗаписей - движения - сформированные, но ещё не записанные движения по РБ Хозрасчетный
Процедура КорректировкаПроводок(ВыборкаСтатусов, НаборЗаписей) Экспорт
ТипРегистратора = ТипЗнч(ВыборкаСтатусов.Ссылка);
// Для каждого типа документа корректировку выполнять в отдельных процедурах, далее
// пример для 2 типов документов:
Если ТипРегистратора = Тип("ДокументСсылка.ПриемкаТоваровНаХранение") Тогда
КорректировкаПроводок_ПриемкаТоваровНаХранение(ВыборкаСтатусов, НаборЗаписей);
ИначеЕсли ТипРегистратора = Тип("ДокументСсылка.ОтгрузкаТоваровСХранениия") Тогда
КорректировкаПроводок_ОтгрузкаТоваровСХранениия(ВыборкаСтатусов, НаборЗаписей);
// другие обрабатываемые типы регистраторов добавлять здесь
КонецЕсли;
КонецПроцедуры
// пример заполнения Субконто2 реквизитом документа при некоторых условиях
Процедура КорректировкаПроводок_ПриемкаТоваровНаХранение(ВыборкаСтатусов, НаборЗаписей)
Если ВыборкаСтатусов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если ВыборкаСтатусов[0].ХозяйственнаяОперация = ... Тогда
Для Каждого Проводка Из НаборЗаписей Цикл
Если Проводка.СчетДт = ... Тогда
Проводка.СубконтоДт2.Вставить(
ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры,
ВыборкаСтатусов[0].Договор
);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Международный учёт (МСФО)
Откройте общий модуль МеждународныйУчетПроведениеСервер, найдите процедуру ОтразитьПорциюДокументов. Здесь вы должны сами решить где вставить врезку, главное это сделать после 4-х вызовов процедур с именем Отразить(), которые легко увидите в самом начале.
Процедура ОтразитьПорциюДокументов(ДокументыКОтражениюВУчете, ПараметрыОтраженияВМеждународномУчете,
ПараметрыФормированияПроводок)
[типовой код]
// +
АШ_МеждународныйУчетПроведениеСервер.КорректировкаПроводок(ДокументыКОтражениюВУчете, ПараметрыОтраженияВМеждународномУчете,
ПараметрыФормированияПроводок, ТаблицаПроводок);
// -
[типовой код]
КонецПроцедуры
Создать новый общий серверный модуль АШ_МеждународныйУчетПроведениеСервер (назовите как хотите) и добавьте вызываемую процедуру:
// Общая точка входа для корректировки проводок по МУ, не предназначена
// для тяжелых расчетов.
// Параметры:
// ДокументыКОтражениюВУчете - выборка запроса - может пригодится
// ПараметрыОтраженияВМеждународномУчете - Структура - Содержит ссылку на регистратор в поле Документы
// ПараметрыФормированияПроводок - Структура - Содержит параметры, требуемые для вызова типовых процедур
// ТаблицаПроводок - ТаблицаЗначений - сформированные, но ещё не записанные движения в РБ Международный
Процедура КорректировкаПроводок(ДокументыКОтражениюВУчете, ПараметрыОтраженияВМеждународномУчете,
ПараметрыФормированияПроводок, ТаблицаПроводок) Экспорт
Если ТаблицаПроводок.Количество() = 0 Или Не ПараметрыОтраженияВМеждународномУчете.Свойство("Документы") Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ПараметрыОтраженияВМеждународномУчете.Документы) = Тип("ДокументСсылка.РезервыПоОплатеТруда") Тогда
КорректироватьПроводкиРезервыПоОплатеТруда(ПараметрыОтраженияВМеждународномУчете.Документы, ТаблицаПроводок);
ИначеЕсли ТипЗнч(ПараметрыОтраженияВМеждународномУчете.Документы) = Тип("ДокументСсылка.СчетФактураПолученныйАванс") Тогда
КорректироватьСчетФактураПолученныйАванс(ПараметрыОтраженияВМеждународномУчете.Документы, ПараметрыФормированияПроводок,
ТаблицаПроводок);
// Место для добавления новых видов документов
КонецЕсли;
КонецПроцедуры
// Корректировать проводки МУ документа РезервыПоОплатеТруда
//
// Параметры:
// РегистраторСсылка - ссылка на документ регистратор движений
// ТаблицаПроводок - ТаблицаЗначений - софрмированные ранее типовые проводки, которые потом будут записаны
Процедура КорректироватьПроводкиРезервыПоОплатеТруда(РегистраторСсылка, ТаблицаПроводок)
// делаете что хотите, но т.к. регистратор это ссылка то реквизиты документа получать
// через ОбщегоНазначения.ЗначениеРеквизитаОбъекта() или своим запросом
КонецПроцедуры
// Корректировать проводки МУ документа СчетФактураПолученныйАванс
//
// Параметры:
// РегистраторСсылка - ссылка на документ регистратор движений
// ПараметрыФормированияПроводок - Структура - заполненные параметры, нужны для вызова некоторых типовых функций
// ТаблицаПроводок - ТаблицаЗначений - софрмированные ранее типовые проводки, которые потом будут записаны
Процедура КорректироватьПроводкиРезервыПоОплатеТруда(РегистраторСсылка, ПараметрыФормированияПроводок, ТаблицаПроводок)
// пример инверсии
Для Каждого Строка Из ТаблицаПроводок Цикл
Если Строка.Сумма < 0 И Строка.СчетКт = ПланыСчетов.Международный.НДСПоАвансамПолученным Тогда
РегистрыБухгалтерии.Международный.ИнвертироватьПроводку(
Строка,
ПараметрыФормированияПроводок.ИнвертируемыеПоля,
ПараметрыФормированияПроводок.ИнвертируемыеРесурсы,
ПараметрыФормированияПроводок.КоличествоСубконто
);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

