Мы сталкиваемся с распространенной и довольно специфической ситуацией в 1С:Бухгалтерии Предприятия 3.0 (БП 3.0), когда после очередного обновления системы или при синхронизации данных с 1С:Зарплата и управление персоналом (ЗУП) начинают формироваться проводки по резервам отпусков в налоговом учете (НУ). Это происходит даже в тех случаях, когда в учетной политике организации четко указано не вести расчет резервов отпусков в НУ, а соответствующий флаг в документе и настройках отжат.
Давайте вместе разберем эту проблему, выясним ее корни и предложим эффективные пути решения, чтобы восстановить корректный учет.
Проанализируем ситуацию с учетом информации от пользователей и дополнительными данными. Основная сложность заключается в том, что система, несмотря на явные настройки, продолжает генерировать НУ-суммы. Мы выяснили, что причина кроется в особенностях работы одного из служебных модулей при проведении документов, связанных с резервами.
Рассмотрим подробнее механизм, который приводит к появлению нежелательных НУ-проводок:
Взаимодействие с ПБУ 18: Мы часто видим, что подобные проблемы возникают при использовании ПБУ 18 "Учет расчетов по налогу на прибыль организаций", особенно при ведении учета балансовым методом. В этом случае система активно работает с временными разницами (ВР) и отложенными налоговыми активами (ОНА), что может влиять на алгоритмы формирования проводок, даже если НУ-учет резервов отключен.
Двойной прогон процедуры ПередЗаписью: Выяснилось, что при проведении документа (например, "Резерв отпусков") мы попадаем в процедуру ПередЗаписью модуля набора записей регистра бухгалтерии дважды. Это является ключевым моментом в возникновении ошибки.
Анализ первого прогона:
На первом этапе внутри процедуры ПередЗаписью последовательно вызываются другие служебные процедуры, например, ОбработатьПроводкиНалоговогоУчета и ОчиститьНеИспользуемыеСуммы.
При первом вызове ОбработатьПроводкиНалоговогоУчета проводки формируются вполне корректно, включая бухгалтерский учет (БУ) и временные разницы (ВР). Например, мы можем увидеть что-то подобное:
Дт 96 Кт 70 (БУ) = 100, ВРДт = 100
Дт 20 Кт 70 (НУ) = 100, ВРДт = -100
Затем, при вызове ОчиститьНеИспользуемыеСуммы, особенно в контексте ПБУ 18 балансовым методом, суммы временных разниц (ВР) обнуляются. Проводки после этого выглядят так:
Дт 96 Кт 70 (БУ) = 100, ВРДт = 0
Дт 20 Кт 70 (НУ) = 100, ВРДт = 0
Обратите внимание, что сумма НУ по дебету 20 счета осталась, а ВР обнулились.
Анализ второго прогона и возникновение ошибки:
При повторном попадании в процедуру ПередЗаписью и повторном вызове ОбработатьПроводкиНалоговогоУчета, система попадает под определенное условие, которое и приводит к некорректному заполнению НУ-сумм.
Мы видим следующее условие в коде:
Если СвойстваСчета.НалоговыйУчет
И Проводка.СуммаНУДт = 0
И Проводка.СуммаПРДт = 0
И Проводка.СуммаВРДт = 0 Тогда
Проводка.СуммаНУДт = Проводка.Сумма;
КонецЕсли;
После первого прогона, как мы выяснили, поля Проводка.СуммаНУДт, Проводка.СуммаПРДт и Проводка.СуммаВРДт для некоторых проводок действительно могут быть равны нулю. При этом СвойстваСчета.НалоговыйУчет в данном контексте относится к характеристике самого счета из плана счетов (например, счета 96.01 или 20.01), а не к настройке ведения резервов в НУ. Если счет имеет признак налогового учета, то условие СвойстваСчета.НалоговыйУчет будет истинным.
Таким образом, все условия выполняются, и система принудительно устанавливает Проводка.СуммаНУДт = Проводка.Сумма. Это приводит к тому, что в дебете 96-го счета (или другого затратного счета) внезапно появляется сумма НУ, хотя по учетной политике она не должна формироваться.
Для устранения этой ошибки мы можем применить несколько подходов. Основное решение заключается в точечной доработке кода, которая позволит "обойти" некорректную логику.
Это наиболее прямое и эффективное решение, предложенное опытными разработчиками. Суть его заключается в добавлении дополнительного условия в ту самую проблемную конструкцию, которую мы рассмотрели выше. Нам необходимо убедиться, что система не будет принудительно заполнять сумму НУ, если резерв отпусков в НУ отключен.
Шаги по реализации:
Нам потребуется открыть конфигурацию в режиме "Конфигуратор".
Найдите модуль набора записей регистра бухгалтерии. Обычно это РегистрБухгалтерии.НаборЗаписей.МодульОбъекта или аналогичный.
Найдите процедуру ПередЗаписью.
Внутри этой процедуры найдите блок кода, который содержит условие, приводящее к ошибке (тот самый, где Проводка.СуммаНУДт = Проводка.Сумма;). Это может быть функция ЗаполнитьСуммыНалоговогоУчета или непосредственно код в ОбработатьПроводкиНалоговогоУчета.
Мы добавим дополнительную проверку, которая будет учитывать, что резерв отпусков в НУ отключен. Для этого нам понадобится получить информацию о настройках учета резервов.
Давайте посмотрим на пример доработанного кода:
// ... фрагмент кода до проблемного участка ...
// Проверяем, нужно ли формировать резервы отпусков в НУ
Функция РезервыОтпусковНУВключены()
ПараметрыУчетаЗарплаты = ОбщегоНазначенияЗКГ.ПолучитьНастройкиУчетаЗарплаты();
Возврат ПараметрыУчетаЗарплаты.РезервыОтпусковФормироватьВНУ;
КонецФункции
// ... далее внутри проблемного блока, где происходит присвоение СуммаНУДт ...
// Ищем условие:
// Если СвойстваСчета.НалоговыйУчет
// И Проводка.СуммаНУДт = 0
// И Проводка.СуммаПРДт = 0
// И Проводка.СуммаВРДт = 0 Тогда
// Проводка.СуммаНУДт = Проводка.Сумма;
// КонецЕсли;
// Изменяем его, добавляя дополнительную проверку:
Если СвойстваСчета.НалоговыйУчет
И НЕ РезервыОтпусковНУВключены() // Добавляем это условие!
ИЛИ (СвойстваСчета.НалоговыйУчет И НЕ РезервыОтпусковНУВключены() И Проводка.СчетДт.Код = "96.01") // Или если это 96 счет и НУ отключен
И Проводка.СуммаНУДт = 0
И Проводка.СуммаПРДт = 0
И Проводка.СуммаВРДт = 0 Тогда
// Добавляем дополнительную проверку, чтобы не затрагивать другие счета,
// если вдруг там НУ должен быть
Если НЕ РезервыОтпусковНУВключены() И (Проводка.СчетДт.Код = "96.01" ИЛИ Проводка.СчетДт.Код = "20.01") Тогда // Пример счетов
// Ничего не делаем, пропускаем присвоение СуммаНУДт
Иначе
Проводка.СуммаНУДт = Проводка.Сумма;
КонецЕсли;
КонецЕсли;
Важный момент: Код выше является примером и требует адаптации под конкретный релиз и место вставки. Главное – добавить проверку на РезервыОтпусковНУВключены() и, возможно, на код счета дебета, чтобы исключить счет 96.01 (или другие счета, используемые для резервов) из автоматического заполнения НУ при отключенном учете резервов в НУ. Функция ОбщегоНазначенияЗКГ.ПолучитьНастройкиУчетаЗарплаты() поможет нам получить актуальные настройки.
Сохраните изменения в конфигурации.
Внимание: Любая доработка типовой конфигурации требует осторожности и понимания последствий. Перед внесением изменений обязательно создайте резервную копию базы данных.
Хотя проблема, как мы выяснили, лежит глубже, всегда полезно еще раз тщательно проверить все настройки, чтобы исключить другие возможные причины.
Настройки учетной политики: Убедитесь, что в вашей учетной политике организации (раздел "Главное" – "Учетная политика") для нужного года отключено формирование резервов отпусков в налоговом учете.
Настройки зарплаты: Перейдите в раздел "Зарплата и кадры" – "Настройки зарплаты" – "Порядок учета зарплаты". На вкладке "Резервы отпусков" убедитесь, что флаг "Формировать резервы отпусков в налоговом учете" снят. Также проверьте настройки для каждого года.
Настройки резервов (справочник): Если у вас используются отдельные элементы справочника "Резервы отпусков", убедитесь, что в их настройках также отсутствуют признаки ведения НУ.
Обновления и патчи: Мы всегда рекомендуем проверять актуальность вашего релиза 1С. Фирма "1С" регулярно выпускает обновления и патчи, которые могут исправлять подобные ошибки в механизмах расчета и учета резервов. Возможно, в одном из будущих релизов эта конкретная проблема будет исправлена типовым образом.
Мы разобрали сложный случай с некорректным формированием сумм налогового учета по резервам отпусков. Понимание двойного прогона модуля и условий, приводящих к ошибке, позволяет нам точечно решить проблему путем доработки кода. Всегда помните о важности тестирования изменений и создания резервных копий.
← К списку