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

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