Как настроить автоматическое формирование дополнительных проводок при проведении документа в 1С:Бухгалтерии

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В типовой конфигурации «1С:Бухгалтерия» документы формируют проводки по заранее заложенным в конфигурацию алгоритмам. Нередко учетная политика или специфика хозяйственных операций организации требует формирования дополнительных бухгалтерских записей. Ручная корректировка проводок через флажок ручной настройки неудобна при регулярных операциях, так как отнимает много времени и сбрасывается при повторном проведении документа.

Разберем все доступные способы решения этой задачи: от штатных пользовательских механизмов до программных доработок с помощью подписок на события, расширений и прямого изменения кода конфигурации.

Вариант 1. Штатные возможности программы без изменения кода

Прежде чем приступать к программной доработке, проанализируем, нельзя ли решить задачу стандартными средствами системы:

  1. Настройка счетов учета: если проблема заключается не в количестве строк проводок, а в используемых счетах, проверяем регистры сведений счетов учета номенклатуры, расчетов с контрагентами и номенклатурных групп. Корректно заданные счета позволяют получать нужные проводки в документах без единой строчки кода.
  2. Справочник «Типовые операции»: если операция носит нестандартный характер, но повторяется регулярно, настраиваем типовую операцию. Этот инструмент позволяет создать шаблон бухгалтерских проводок с формулами расчета сумм, привязкой субконто и автоматическим заполнением в документе «Операция, введенная вручную».

Вариант 2. Подписка на событие «ОбработкаПроведения» документа

Если требуется, чтобы проводка формировалась строго в конкретном типовом документе (например, при реализации товаров или поступлении услуг), наиболее надежный путь — создание подписки на событие документа. Подписка срабатывает после штатной процедуры проведения, что позволяет гарантированно дополнить уже сформированный набор записей.

Разберем реализацию по шагам:

  1. Создаем новый объект метаданных ПодпискаНаСобытие в конфигураторе (или в отдельном расширении).
  2. В свойстве Источник выбираем нужный документ (например, ДокументОбъект.РеализацияТоваровУслуг) или несколько документов, требующих аналогичной логики.
  3. В свойстве Событие выбираем ОбработкаПроведения.
  4. Создаем общий серверный модуль (или используем существующий с признаком «Сервер») и указываем процедуру-обработчик.

Посмотрим на пример процедуры-обработчика в общем модуле:


Процедура МоиПодпискиОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем движения документа по регистру бухгалтерии
    ДвиженияХозрасчетный = Источник.Движения.Хозрасчетный;
    
    // Обязательно выставляем флаг записи набора
    ДвиженияХозрасчетный.Записывать = Истина;
    
    // Добавляем новую проводку
    Проводка = ДвиженияХозрасчетный.Добавить();
    Проводка.Период = Источник.Дата;
    Проводка.Организация = Источник.Организация;
    
    // Указываем счета дебета и кредита
    Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.02");
    Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.02");
    
    // Заполняем субконто дебета и кредита
    Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПрочиеДоходыИРасходы] = Справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Прочие расходы");
    Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ВидыПлатежейВБюджетИФонды] = Перечисления.ВидыПлатежейВБюджетИФонды.Налог;
    
    // Заполняем бухгалтерскую сумму
    Проводка.Сумма = 1000;
    
    // Заполнение налогового учета (для организаций на ОСНО)
    Проводка.СуммаНУДт = 1000;
    
    // Содержание проводки
    Проводка.Содержание = "Дополнительное начисление расходов";
    
КонецПроцедуры

Важно: убедитесь, что в документе при отмене проведения не требуется специальных действий по очистке. Штатный механизм платформы при отмене проведения документа автоматически очищает все движения по регистрам, привязанным к документу-регистратору.

Вариант 3. Использование расширения конфигурации

Если необходимо сохранить основную конфигурацию на полной поддержке («на замке»), используем механизм расширений. Современные версии платформы 1С:Предприятие 8.3 позволяют полноценно переопределять логику проведения документов в расширениях:

  1. Добавляем документ в расширение конфигурации.
  2. Открываем модуль объекта документа в расширении.
  3. Создаем обработчик проведения с аннотацией &После("ОбработкаПроведения").

Рассмотрим структуру такого кода в модуле расширения:


&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Дополняем сформированные проводки
    ЭтотОбъект.Движения.Хозрасчетный.Записывать = Истина;
    НоваяЗапись = ЭтотОбъект.Движения.Хозрасчетный.Добавить();
    НоваяЗапись.Период = ЭтотОбъект.Дата;
    НоваяЗапись.Организация = ЭтотОбъект.Организация;
    НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("26");
    НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01");
    НоваяЗапись.Сумма = 500;
    
КонецПроцедуры

Вариант 4. Перехват события «ПередЗаписью» набора записей регистра

Еще один вариант, который часто применяется разработчиками — создание подписки на событие ПередЗаписью регистра бухгалтерии РегистрБухгалтерииНаборЗаписей.Хозрасчетный. В этой точке можно перехватить готовый набор проводок перед его фиксацией в базе данных.

Однако проанализируем недостатки этого подхода:

  1. Источником события является набор записей, а не сам документ. Чтобы получить реквизиты документа-регистратора (организацию, контрагента, договор), потребуется выполнять дополнительный запрос к базе данных.
  2. Это увеличивает нагрузку на СУБД и может провоцировать взаимоблокировки при массовом проведении документов несколькими пользователями.
  3. Подписка срабатывает абсолютно для всех документов конфигурации, записывающих данный регистр, поэтому внутри обработчика обязательно требуется проверка типа регистратора.

Важные правила заполнения регистра «Хозрасчетный»

При программном создании проводок в «1С:Бухгалтерии» критически важно соблюдать системные ограничения плана счетов и регистра бухгалтерии:

  1. Налоговый учет и разницы: если организация работает на ОСНО, кроме ресурса Сумма обязательно заполняем СуммаНУДт и СуммаНУКт. При наличии разниц заполняются СуммаПРДт/СуммаПРКт и СуммаВРДт/СуммаВРКт. Несоблюдение формулы БУ = НУ + ПР + ВР приведет к сбою регламентной операции «Закрытие месяца» и ошибкам в расчете налога на прибыль.
  2. Проверка субконто: нельзя устанавливать субконто, которых нет на счете в плане счетов. Обращение к несуществующему виду субконто вызовет аварийное завершение транзакции проведения.
  3. Количественный и валютный учет: если у счета включен признак количественного учета, обязательно заполняем КоличествоДт или КоличествоКт. Для валютных счетов обязательны реквизиты ВалютаДт/ВалютаКт и ВалютнаяСуммаДт/ВалютнаяСуммаКт.
← На главную