Почему после обновления 1С:ERP не формируются или некорректно отражаются проводки по налоговому учету резервов отпусков?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Налоговый учет
← К списку

Мы сталкиваемся с распространенной проблемой, которая возникает после обновления конфигурации 1С:ERP, в частности, при переходе с версии 2.5.22.87 на 2.5.22.106 и выше. Основная сложность заключается в некорректном формировании проводок по налоговому учету (НУ) в документе "Отражение зарплаты в финансовом учете", особенно в части резервов на оплату отпусков. Давайте вместе разберем эту ситуацию, выясним причины и найдем эффективные решения.

Выясняем причину проблемы: Некорректное формирование проводок по НУ

После обновления многие пользователи обнаруживают, что документ "Отражение зарплаты в финансовом учете" перестает корректно формировать проводки по налоговому учету для резервов отпусков. Симптомы могут быть разными: суммы по НУ либо полностью отсутствуют, либо формируются неверно, что приводит к расхождениям между бухгалтерским (БУ) и налоговым учетом.

Мы заметили, что в проблемных релизах (например, 2.5.22.109) могут отсутствовать строки, касающиеся "Отпуска за счет обязательств", в то время как в предыдущих версиях (2.5.22.87) они формировались корректно. Это указывает на изменение логики формирования проводок в новых версиях конфигурации.

Следует помнить, что учет резервов на оплату отпусков — это достаточно сложный участок, требующий внимательной настройки. Организации могут самостоятельно определять, формировать ли резервы в налоговом учете, а также использовать разные методы расчета (нормативный, метод обязательств/МСФО) для БУ и НУ.

Пошаговый анализ и диагностика проблемы

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

  1. Сравнение релизов: Мы восстановили файловые копии конфигураций обоих релизов — 2.5.22.87 (корректный) и 2.5.22.106/109 (проблемный). Это позволило нам пошагово сравнить поведение системы при формировании проводок.

  2. Анализ общего модуля РеглУчетПроведениеСервер: Мы проверили этот общий модуль, так как он часто содержит логику, отвечающую за формирование проводок в регламентированном учете. Хотя он может влиять на процесс, в данном случае проблема оказалась глубже.

  3. Проверка настроек учета: Мы тщательно проанализировали настройки учета, связанные с ПБУ 18 "Учет расчетов по налогу на прибыль организаций" и статьями затрат. Корректные настройки критически важны для правильного формирования проводок. Рассмотрим примеры, как должны выглядеть проводки:

    • Затратный метод ПБУ 18:

      • Дт 96 - Кт 70 :: +суммаБУ ... +суммаВР
      • Дт 26 - Кт 70 :: 0 БУ ... +суммаНУ и -суммаВР

    • Балансовый метод ПБУ 18:

      • Дт 96 - Кт 70 :: +суммаБУ ... 0 НУ
      • Дт 26 - Кт 70 :: 0 БУ ... +суммаНУ

    Если настройки статей затрат или способы отражения зарплаты некорректны, это может привести к неверным проводкам.

  4. Использование замера производительности и отладчика: Мы включили замер производительности и сформировали проводки, чтобы определить, какие объекты конфигурации участвуют в процессе. Выяснилось, что проводки формируются в Обработка.ОтражениеДокументовВРеглУчете. Далее, углубившись с помощью отладчика, мы обнаружили, что ключевой участок кода находится в РегистрБухгалтерии.Хозрасчетный.МодульМенеджера.

  5. Выявление ключевого участка кода: Мы обнаружили, что проблема кроется в процедуре ЗаполнитьСуммыНалоговогоУчета(Проводки) модуля менеджера регистра бухгалтерии. В этом участке кода происходит автоматическое присвоение суммы в налоговый учет, что не всегда корректно для резервов. Рассмотрим проблемный фрагмент:

    
    Если Не БухгалтерскийУчетВызовСервераПовтИсп.ЭтоСчетЦелевоеФинансирование(СчетДт) Тогда
        // Налоговые суммы по этим счетам рассчитываются в первичном документе по особым правилам
        СвойстваСчетаДт = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(СчетДт);
        Если СвойстваСчетаДт.НалоговыйУчет
            И Проводка.СуммаНУДт = 0
            И Проводка.СуммаПРДт = 0
            И Проводка.СуммаВРДт = 0 Тогда
            Проводка.СуммаНУДт = Проводка.Сумма;
        КонецЕсли;
    КонецЕсли;
    

    Именно строка Проводка.СуммаНУДт = Проводка.Сумма; при определенных условиях приводит к некорректному заполнению сумм по НУ, особенно когда резервы в НУ не должны формироваться или должны иметь другую сумму.

Варианты решения проблемы

После выявления корневой причины, мы можем рассмотреть несколько подходов к решению этой проблемы. Важно понимать, что есть как временные, так и официальные методы исправления.

Временное решение через расширение (для диагностики/быстрого устранения)

Если вам необходимо оперативно восстановить корректное формирование проводок до выхода официального патча или обновления, вы можете использовать расширение конфигурации. Этот метод позволяет внести изменения, не снимая конфигурацию с поддержки.

  1. Создаем расширение: В режиме конфигуратора создайте новое расширение.

  2. Добавляем модуль менеджера: В расширение добавьте модуль менеджера регистра бухгалтерии РегистрБухгалтерии.Хозрасчетный.

  3. Переопределяем процедуру: Используйте аннотацию &Вместо(с контролем) для переопределения процедуры ЗаполнитьСуммыНалоговогоУчета. Это позволит вам внести изменения в ее логику.

  4. Изменяем проблемную строку: Внутри переопределенной процедуры вы можете закомментировать проблемную строку или добавить условие для ее выполнения. Например, мы можем закомментировать строку, которая принудительно устанавливает СуммаНУДт:

    
    &Вместо("ЗаполнитьСуммыНалоговогоУчета")
    Процедура ЗаполнитьСуммыНалоговогоУчета(Проводки)
        Для Каждого Проводка Из Проводки Цикл
            // ... существующий код до проблемного участка ...
            Если Не БухгалтерскийУчетВызовСервераПовтИсп.ЭтоСчетЦелевоеФинансирование(Проводка.СчетДт) Тогда
                СвойстваСчетаДт = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Проводка.СчетДт);
                Если СвойстваСчетаДт.НалоговыйУчет
                    И Проводка.СуммаНУДт = 0
                    И Проводка.СуммаПРДт = 0
                    И Проводка.СуммаВРДт = 0 Тогда
                    // Проводка.СуммаНУДт = Проводка.Сумма; // Закомментировали проблемную строку
                    // Или добавили условие, например, чтобы не трогать 96 счет НУ
                    // Если Не (Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Счет96
                    //          И Проводка.ВидДвижения = ВидДвиженияБухгалтерии.Дебет
                    //          И Проводка.СуммаНУДт = 0) Тогда
                    //     Проводка.СуммаНУДт = Проводка.Сумма;
                    // КонецЕсли;
                КонецЕсли;
            КонецЕсли;
            // ... остальной код ...
        КонецЦикла;
    КонецПроцедуры
    

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

Этот подход позволил нам подтвердить, что именно в этом месте кроется "корешок зла", и временно решить проблему.

Официальное исправление от 1С

Мы рады сообщить, что фирма "1С" признала наличие этой ошибки, зарегистрировав ее под номером 00-00785775. Это означает, что проблема является типовой и требует официального исправления.

  1. Выпущенный патч: Для версий 2.5.22.109 и 2.5.24.62 был выпущен специальный патч EF_00_00785775, который предназначен для исправления данной ошибки. Мы рекомендуем применять официальные патчи, так как они протестированы разработчиками и гарантируют корректную работу системы.

  2. Исправление в новых версиях: В более свежих версиях конфигурации, начиная с 2.5.22.114, эта ошибка уже устранена в типовой поставке. Если у вас есть возможность обновиться до этих версий, это будет наиболее предпочтительным решением.

  3. Суть технического исправления: Официальное решение проблемы заключалось в явном заполнении полей СуммаНУДт и СуммаНУКт значением СУММА(Строки.Сумма). Это изменение было внесено в метод ТекстОтраженияВРеглУчете() модуля менеджера документа "Отражение зарплаты в финансовом учете", в области ТекстЗапросаНачисленоПоСтатьям, во всех трех подзапросах. Пример, как это выглядит:

    
    СУММА(Строки.Сумма) КАК СуммаНУДт
    ...
    СУММА(Строки.Сумма) КАК СуммаНУКт
    

    Это гарантирует, что суммы по налоговому учету будут корректно передаваться из первичных данных.

Что делать, если проблема возникла в прошлых периодах?

Обновление конфигурации может повлиять на корректность проводок даже за уже закрытые периоды. Если вы обнаружили некорректные проводки по НУ после обновления в прошлых месяцах, вам необходимо:

  1. Применить исправление: Установите патч или обновитесь до версии, где ошибка уже исправлена.

  2. Перепровести документы: После применения исправления, перепроведите документ "Отражение зарплаты в финансовом учете" за те периоды, где были обнаружены расхождения. Это позволит системе сформировать правильные проводки.

  3. Использовать механизмы корректировки: В случае необходимости, для исправления ошибок прошлых периодов, 1С предусматривает различные механизмы, такие как внесение изменений в текущем периоде с помощью новых документов, отражающих корректировки, или использование документа "Сторнирование начислений".

Мы выяснили, что причиной проблемы является изменение в логике формирования проводок по налоговому учету резервов отпусков после обновления 1С:ERP. К счастью, фирма "1С" оперативно отреагировала и выпустила официальные исправления. Мы рекомендуем всегда следовать рекомендациям разработчика и применять официальные патчи или обновляться до актуальных версий для обеспечения стабильной и корректной работы вашей системы.

← К списку