При автоматизации нестандартных хозяйственных операций (например, при реализации недвижимости, когда переход права собственности регистрируется позже передачи объекта) возникает необходимость разнести отражение бухгалтерского и налогового учета по разным датам. Однако при попытке программно обнулить ресурсы СуммаНУДт или СуммаНУКт разработчики часто сталкиваются с тем, что после записи набора платформа автоматически перезаписывает их значением бухгалтерской суммы (Сумма). Разберем, почему это происходит и как правильно решить данную задачу.
В типовых конфигурациях 1С (таких как «Бухгалтерия предприятия») логика ведения учета опирается на балансовый принцип и требования ПБУ 18/02:
БУ = НУ + ПР + ВР (где БУ — бухгалтерский учет, НУ — налоговый учет, ПР — постоянные разницы, ВР — временные разницы).
Если в проводке по счету, на котором включен признак налогового учета, заполнена сумма БУ, а разработчик принудительно обнуляет СуммаНУ, СуммаПР и СуммаВР, типовой модуль набора записей регистра Хозрасчетный расценивает налоговый учет как незаполненный. В обработчиках перед записью срабатывает алгоритм автоматического выравнивания, который дублирует значение из БУ в НУ, предотвращая нарушение базового равенства.
Кроме того, при формировании проводок через создание отдельного набора записей РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей() в процессе проведения документа сам документ при завершении транзакции может перезаписать движения собственным стандартным набором.
Если требуется жестко зафиксировать движения документа и исключить их автоматический пересчет типовыми механизмами проведения, необходимо задействовать флаг РучнаяКорректировка непосредственно в объекте документа. Проанализируем, как это реализовать программно:
Источник.Движения.Хозрасчетный.РучнаяКорректировка = Истина.Посмотрим на пример кода, позволяющий зафиксировать измененные движения:
// Предположим, что в таблице ПроводкиТЗ сформированы нужные строки движений
Источник.Движения.Хозрасчетный.Загрузить(ПроводкиТЗ);
Источник.РучнаяКорректировка = Истина;
Источник.Записать();
Установка флага РучнаяКорректировка указывает платформе, что движения отредактированы пользователем или специальным алгоритмом, поэтому стандартные типовые процедуры пересчета и автозаполнения НУ при проведении будут пропущены.
С методологической точки зрения, если выручка или себестоимость в налоговом учете признаются в другой период относительно бухгалтерского учета, возникает временная разница. Чтобы модуль регистра не пытался восстановить СуммаНУ, мы должны явно соблюсти равенство БУ = НУ + ПР + ВР.
Разберем, как должны заполняться ресурсы проводки, если в текущем документе отражается только БУ:
Сумма (БУ) = Значение суммы операции.СуммаНУДт / СуммаНУКт = 0.СуммаВРДт / СуммаВРКт = Значение суммы операции (со знаком плюс или минус, в зависимости от направления разницы).СуммаПРДт / СуммаПРКт = 0.Посмотрим на пример заполнения проводки в цикле:
Для Каждого Проводка Из Проводки Цикл
Если Проводка.СчетДт = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД
И Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ГотоваяПродукцияОтгруженная Тогда
Проводка.СуммаНУДт = 0;
Проводка.СуммаНУКт = 0;
// Отражаем временную разницу для соблюдения равенства БУ = НУ + ПР + ВР
Проводка.СуммаВРДт = Проводка.Сумма;
Проводка.СуммаВРКт = Проводка.Сумма;
Проводка.СуммаПРДт = 0;
Проводка.СуммаПРКт = 0;
КонецЕсли;
КонецЦикла;
При таком подходе равенство выполняется (БУ = 0 + 0 + ВР), типовой алгоритм контроля не перезаписывает СуммаНУ, а процедура закрытия месяца корректно рассчитывает отложенные налоговые активы и обязательства (счета 09 и 77).
Если ситуация связана со стандартными операциями с особым переходом права собственности (например, продажа объектов недвижимости или товаров в пути), рекомендуется использовать штатный документооборот:
Использование штатных механизмов или правильное заполнение временных разниц гарантирует корректность формирования декларации по налогу на прибыль и исключает расхождения при закрытии периода.