Как исправить ошибку «Поле объекта не обнаружено (УчетнаяПолитикаПоНДФЛ)» при проведении списания с расчетного счета в 1С:Бухгалтерия предприятия 2.0

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

При обновлении устаревающих, но все еще активно используемых конфигураций на платформе 1С:Предприятие пользователи и администраторы баз данных иногда сталкиваются с неожиданными критическими ошибками. Ярким примером является ситуация, возникшая после релиза обновления 2.0.66.111 для конфигурации «Бухгалтерия предприятия», редакция 2.0 (БП 2.0). При попытке провести документ Списание с расчетного счета (особенно при выплате заработной платы или перечислении налогов) система аварийно завершает работу, выдавая сообщение об ошибке в модуле менеджера регистра накопления НДФЛРасчетыСБюджетом.

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

Выясняем причину возникновения ошибки

Для начала проанализируем текст сообщения об ошибке, которое выводится на экран пользователя:

«Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {РегистрНакопления.НДФЛРасчетыСБюджетом.МодульМенеджера(27)}: Поле объекта не обнаружено (УчетнаяПолитикаПоНДФЛ)»

Давайте обратимся к конфигуратору и посмотрим, в каком месте кода происходит сбой. Проблемный участок находится в общем модуле или модуле менеджера регистра накопления НДФЛРасчетыСБюджетом:


Если ДобавлятьКарантинныеДни Тогда 
    СчитатьНерабочиеДниКарантинаРабочими = Новый Структура("ИгнорироватьДниС30МартаПо3Апреля, ИгнорироватьДниС4По30Апреля, ИгнорироватьДниС6По8Мая", Ложь, Ложь, Ложь); 
    ЗаполнитьЗначенияСвойств(СчитатьНерабочиеДниКарантинаРабочими, РегистрыСведений.УчетнаяПолитикаПоНДФЛ.Получить('20200101', Новый Структура("Организация", Организация))); 
    ВсеДни = РегистрыСведений.РегламентированныйПроизводственныйКалендарь.ДополнительныеНерабочиеДни;
    // ... дальнейший код
КонецЕсли;

Рассмотрим подробнее данный фрагмент кода. Ошибка возникает на строке обращения к регистру сведений УчетнаяПолитикаПоНДФЛ. Но почему это происходит? Дело в том, что в конфигурации «Бухгалтерия предприятия 2.0» физически отсутствует регистр сведений с именем УчетнаяПолитикаПоНДФЛ. Все настройки, связанные с учетной политикой организаций по расчетам с персоналом и налогообложению, в этой старой редакции хранятся в общем регистре сведений УчетнаяПолитикаОрганизаций.

Разработчики фирмы 1С при подготовке антикризисного пакета обновлений в 2020 году (связанного с переносом сроков уплаты НДФЛ из-за карантинных нерабочих дней) скопировали программный код («копипаст») из более современной конфигурации «Бухгалтерия предприятия 3.0» (БП 3.0) или «Зарплата и управление персоналом 3» (ЗУП 3), где данный регистр существует. В результате этой невнимательности типовой релиз БП 2.0.66.111 вышел с синтаксической и логической ошибкой, которая делает невозможным проведение любых платежных документов, формирующих движения по НДФЛ.

Способ 1. Официальное исправление (Рекомендуемый вариант)

Поскольку ошибка носила массовый характер и затрагивала абсолютно всех пользователей БП 2.0, фирма 1С оперативно зарегистрировала баг под номером 30173565. Практически сразу был выпущен исправленный релиз конфигурации.

Для полного и корректного устранения проблемы выполним следующие шаги:

  1. Создадим резервную копию нашей информационной базы (выгрузка .dt или копирование файла 1Cv8.1CD в безопасное место). Это обязательное правило перед любым обновлением!
  2. Скачаем дистрибутив обновления конфигурации «Бухгалтерия предприятия 2.0» версии 2.0.66.112 или выше.
  3. Установим обновление в режиме Конфигуратора через меню Конфигурация — Поддержка — Обновить конфигурацию.
  4. В исправленном релизе разработчики перенаправили запросы к корректным метаданным (регистру УчетнаяПолитикаОрганизаций) и исправили обращение к свойствам.
  5. Применим изменения базы данных (клавиша F7) и запустим сеанс в режиме «Предприятие». Проверим проведение документа Списание с расчетного счета — ошибка должна исчезнуть.

Способ 2. Временный ручной обход ошибки (Без полного обновления)

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

Выясним логику работы проблемного участка: условие Если ДобавлятьКарантинныеДни Тогда проверяет необходимость расчета сдвигов сроков уплаты НДФЛ по карантинным нерабочим дням 2020 года. Если ваша организация в этот период работала в штатном режиме или вам не требуется данный расчет по особым правилам переноса сроков, эту ветку алгоритма можно безопасно отключить.

Проанализируем шаги по ручной корректировке кода:

  1. Откроем базу данных в режиме Конфигуратор.
  2. Если конфигурация находится на поддержке без возможности редактирования, включим возможность изменений. Для этого перейдем в меню Конфигурация — Поддержка — Настройка поддержки и нажмем кнопку Включить возможность изменения. Для объектов конфигурации выставим статус "Сохранять поддержку с возможностью изменения".
  3. В дереве метаданных найдем объект Регистры накопления — НДФЛРасчетыСБюджетом. Нажмем по нему правой кнопкой мыши и выберем пункт Открыть модуль менеджера.
  4. Перейдем к строке 27 (или воспользуемся глобальным поиском по тексту ДобавлятьКарантинныеДни).
  5. Временно отключим выполнение данного блока кода. Самый простой и надежный способ — принудительно установить условие в значение Ложь. Заменим исходную строку: Если ДобавлятьКарантинныеДни Тогда на следующий вариант кода: Если Ложь Тогда // Временная заглушка ошибки релиза 2.0.66.111
  6. Также можно просто закомментировать весь блок кода внутри этого условия (от оператора Если до КонецЕсли включительно), используя символы // в начале каждой строки:
    
    // Если ДобавлятьКарантинныеДни Тогда 
    //     СчитатьНерабочиеДниКарантинаРабочими = Новый Структура("ИгнорироватьДниС30МартаПо3Апреля...", Ложь...); 
    //     ...
    // КонецЕсли;
    
  7. Сохраним изменения в модуле и обновим конфигурацию базы данных с помощью клавиши F7 (или синей бочки на панели инструментов).

После выполнения этих манипуляций проведение банковских документов возобновится в штатном режиме. Как только у вас появится возможность полноценно обновить конфигурацию до релиза 2.0.66.112 или более нового, обязательно сделайте это. При обновлении типовые объекты автоматически вернутся на стандартную поддержку 1С, а ручные исправления будут заменены корректным заводским кодом.

← На главную