Почему в 1С:Бухгалтерии 3.0 при записи проводки нулевая сумма НУ заменяется на сумму БУ и как это исправить?

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

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

Анализ проблемы: почему система изменяет данные?

Такое поведение — не ошибка, а результат работы штатного механизма конфигурации «1С:Бухгалтерия», который предназначен для автоматизации учета по ПБУ 18/02 «Учет расчетов по налогу на прибыль организаций». Основная задача этого механизма — обеспечить выполнение контрольного соотношения: БУ = НУ + ПР + ВР, где ПР — постоянные разницы, а ВР — временные разницы.

Когда вы формируете набор записей регистра бухгалтерии и нажимаете «Записать», перед фактической записью в базу данных срабатывают системные обработчики. Один из них, а именно процедура ОбработатьПроводкиНалоговогоУчета, проверяет, были ли суммы налогового учета заполнены вручную или программно. Если система считает, что суммы НУ не были рассчитаны (а именно так она по умолчанию и думает), она запускает процедуру ЗаполнитьСуммыНалоговогоУчета. Эта процедура, видя пустую или нулевую сумму НУ при наличии суммы БУ, делает предположение, что данные НУ просто не заполнены, и «исправляет» ситуацию, копируя сумму из БУ в НУ.

Таким образом, система пытается «помочь» пользователю, предотвращая появление необоснованных расхождений между видами учета. Наша задача — явно указать системе, что мы заполнили суммы НУ осознанно, и автоматическое вмешательство не требуется.

Решение: как сообщить системе о намеренном заполнении сумм НУ

Для управления поведением механизма автоматического заполнения сумм НУ в платформе 1С предусмотрен специальный флаг. Его нужно установить в дополнительное свойство набора записей регистра бухгалтерии. Этот флаг называется "СуммыНалоговогоУчетаЗаполнены".

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


Движения.Хозрасчетный.ДополнительныеСвойства.Вставить("СуммыНалоговогоУчетаЗаполнены", Истина);

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

Практический пример кода в обработке проведения

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

Исходный код, который не работает как ожидалось:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)

    // ... код получения данных из документа ...

    // Формирование движений
    Движения.Хозрасчетный.Записывать = Истина;

    // Цикл по табличной части документа
    Для Каждого ТекСтрокаТЧ Из Объект.Товары Цикл
        
        Проводка = Движения.Хозрасчетный.Добавить();
        Проводка.Период = Дата;
        Проводка.Организация = Организация;
        Проводка.Содержание = "Списание расходов, не принимаемых в НУ";
        
        Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Затраты; // Например, счет 26
        Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Материалы; // Например, счет 10.01

        // Указываем аналитику (субконто)
        // ...

        // Заполняем суммы
        Проводка.Сумма = ТекСтрокаТЧ.СуммаБУ; // Например, 1000 руб.
        Проводка.СуммаНУДт = ТекСтрокаТЧ.СуммаНУ; // Здесь мы передаем 0
        Проводка.СуммаНУКт = ТекСтрокаТЧ.СуммаНУ; // И здесь тоже 0
        
    КонецЦикла;

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

После проведения документа с таким кодом, в проводке СуммаНУДт будет равна 1000 руб. вместо ожидаемого нуля.

Теперь добавим одну строку для корректной работы. Правильный вариант кода:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)

    // ... код получения данных из документа ...

    // Формирование движений
    Движения.Хозрасчетный.Записывать = Истина;
    
    // ВАЖНО: Устанавливаем флаг до добавления проводок или перед записью движений
    Движения.Хозрасчетный.ДополнительныеСвойства.Вставить("СуммыНалоговогоУчетаЗаполнены", Истина);

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

        // Указываем аналитику (субконто)
        // ...

        // Заполняем суммы
        Проводка.Сумма = ТекСтрокаТЧ.СуммаБУ; // 1000 руб.
        Проводка.СуммаНУДт = ТекСтрокаТЧ.СуммаНУ; // 0
        Проводка.СуммаНУКт = ТекСтрокаТЧ.СуммаНУ; // 0
        
        // После установки флага система автоматически рассчитает ПР
        // СуммаПРДт будет равна 1000 (БУ - НУ)
        
    КонецЦикла;

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

С этим изменением проводка будет записана корректно: сумма БУ будет равна 1000, сумма НУ — 0, а система автоматически рассчитает и запишет постоянную разницу (ПР) в дебет счета в размере 1000 рублей, обеспечивая целостность учета.

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

← На главную