В типовой конфигурации «1С:Бухгалтерия» документы формируют проводки по заранее заложенным в конфигурацию алгоритмам. Нередко учетная политика или специфика хозяйственных операций организации требует формирования дополнительных бухгалтерских записей. Ручная корректировка проводок через флажок ручной настройки неудобна при регулярных операциях, так как отнимает много времени и сбрасывается при повторном проведении документа.
Разберем все доступные способы решения этой задачи: от штатных пользовательских механизмов до программных доработок с помощью подписок на события, расширений и прямого изменения кода конфигурации.
Прежде чем приступать к программной доработке, проанализируем, нельзя ли решить задачу стандартными средствами системы:
Если требуется, чтобы проводка формировалась строго в конкретном типовом документе (например, при реализации товаров или поступлении услуг), наиболее надежный путь — создание подписки на событие документа. Подписка срабатывает после штатной процедуры проведения, что позволяет гарантированно дополнить уже сформированный набор записей.
Разберем реализацию по шагам:
ПодпискаНаСобытие в конфигураторе (или в отдельном расширении).ДокументОбъект.РеализацияТоваровУслуг) или несколько документов, требующих аналогичной логики.ОбработкаПроведения.Посмотрим на пример процедуры-обработчика в общем модуле:
Процедура МоиПодпискиОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
// Получаем движения документа по регистру бухгалтерии
ДвиженияХозрасчетный = Источник.Движения.Хозрасчетный;
// Обязательно выставляем флаг записи набора
ДвиженияХозрасчетный.Записывать = Истина;
// Добавляем новую проводку
Проводка = ДвиженияХозрасчетный.Добавить();
Проводка.Период = Источник.Дата;
Проводка.Организация = Источник.Организация;
// Указываем счета дебета и кредита
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.02");
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.02");
// Заполняем субконто дебета и кредита
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПрочиеДоходыИРасходы] = Справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Прочие расходы");
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ВидыПлатежейВБюджетИФонды] = Перечисления.ВидыПлатежейВБюджетИФонды.Налог;
// Заполняем бухгалтерскую сумму
Проводка.Сумма = 1000;
// Заполнение налогового учета (для организаций на ОСНО)
Проводка.СуммаНУДт = 1000;
// Содержание проводки
Проводка.Содержание = "Дополнительное начисление расходов";
КонецПроцедуры
Важно: убедитесь, что в документе при отмене проведения не требуется специальных действий по очистке. Штатный механизм платформы при отмене проведения документа автоматически очищает все движения по регистрам, привязанным к документу-регистратору.
Если необходимо сохранить основную конфигурацию на полной поддержке («на замке»), используем механизм расширений. Современные версии платформы 1С:Предприятие 8.3 позволяют полноценно переопределять логику проведения документов в расширениях:
&После("ОбработкаПроведения").Рассмотрим структуру такого кода в модуле расширения:
&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
Если Отказ Тогда
Возврат;
КонецЕсли;
// Дополняем сформированные проводки
ЭтотОбъект.Движения.Хозрасчетный.Записывать = Истина;
НоваяЗапись = ЭтотОбъект.Движения.Хозрасчетный.Добавить();
НоваяЗапись.Период = ЭтотОбъект.Дата;
НоваяЗапись.Организация = ЭтотОбъект.Организация;
НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("26");
НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01");
НоваяЗапись.Сумма = 500;
КонецПроцедуры
Еще один вариант, который часто применяется разработчиками — создание подписки на событие ПередЗаписью регистра бухгалтерии РегистрБухгалтерииНаборЗаписей.Хозрасчетный. В этой точке можно перехватить готовый набор проводок перед его фиксацией в базе данных.
Однако проанализируем недостатки этого подхода:
При программном создании проводок в «1С:Бухгалтерии» критически важно соблюдать системные ограничения плана счетов и регистра бухгалтерии:
Сумма обязательно заполняем СуммаНУДт и СуммаНУКт. При наличии разниц заполняются СуммаПРДт/СуммаПРКт и СуммаВРДт/СуммаВРКт. Несоблюдение формулы БУ = НУ + ПР + ВР приведет к сбою регламентной операции «Закрытие месяца» и ошибкам в расчете налога на прибыль.КоличествоДт или КоличествоКт. Для валютных счетов обязательны реквизиты ВалютаДт/ВалютаКт и ВалютнаяСуммаДт/ВалютнаяСуммаКт.