Рассмотрим достаточно распространенную ситуацию, с которой столкнулись многие специалисты при обновлении типовых баз конфигурации 1С:Управление производственным предприятием (УПП) до релиза 1.3.194.2. При попытке открыть документ «Начисление ЗП работникам организации» система выдает критическую ошибку:
Поле объекта не обнаружено (УдержатьНДФЛАванса)
{Документ.НачислениеЗарплатыРаботникамОрганизаций.Форма.ФормаДокумента.Форма(2855)}: ЭлементыФормы.УдержатьНДФЛАванса.Видимость = НачалоМесяца(ПериодРегистрации) = ДобавитьМесяц(ПроведениеРасчетов.ДатаЗакона263ФЗ, -1) И ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца;
{Документ.НачислениеЗарплатыРаботникамОрганизаций.Форма.ФормаДокумента.Форма(1500)}: ПоказатьФлажокУдержатьНДФЛАванса;
Проанализируем данную проблему подробнее, выясним причину ее возникновения и разберем по шагам доступные способы восстановления работоспособности системы.
Появление реквизита УдержатьНДФЛАванса напрямую связано с масштабными изменениями в законодательстве, а именно в учете НДФЛ с 1 января 2023 года согласно Федеральному закону № 263-ФЗ. По новым правилам работодатели обязаны исчислять и удерживать НДФЛ при каждой выплате дохода, включая аванс (зарплату за первую половину месяца). Для реализации этого механизма разработчики добавили новый флаг на форму документа начисления зарплаты.
Техническая причина ошибки кроется в рассинхронизации программного кода и визуальных элементов формы при обновлении через файл обновления (формат .cfu). В модуле формы разработчики прописали логику управления видимостью чекбокса, обращаясь к ЭлементыФормы.УдержатьНДФЛАванса.Видимость. Однако сам элемент управления на форму либо забыли поместить при сборке файла обновления, либо платформа некорректно объединила форму при накатывании релиза. В результате при открытии документа код пытается найти элемент, которого физически нет в интерфейсе, что и вызывает исключение.
Посмотрим на самое надежное и быстрое решение, если у вас нет возможности или желания переписывать код. Проблема проявляется только при последовательном обновлении файлом .cfu. Полный дистрибутив конфигурации (файл .cf) содержит целостные метаданные, в которых реквизит на форме присутствует изначально.
1Cv8.cf релиза 1.3.194.2.После этого элемент корректно появится на форме, и ошибка при открытии документа исчезнет.
Разберем ситуацию, когда вы можете немного подождать или имеете под рукой свежие обновления. Разработчики 1С признали наличие проблемы в релизе 1.3.194.2. Для исправления этой ошибки был оперативно выпущен следующий релиз — 1.3.195.1.
Если вы столкнулись с этой проблемой, самым логичным шагом будет просто продолжить обновление и накатить следующий патч 1.3.195.1 (или более новый), в котором этот баг метаданных уже устранен официально. Обновление производится стандартным способом через поддержку пользователя.
Если у вас нет полного файла .cf, нет доступа к новым релизам, а зарплату считать нужно прямо сейчас, проанализируем, как можно решить проблему вручную.
Вариант А: Добавление реквизита на форму
НачислениеЗарплатыРаботникамОрганизаций.ФормаДокумента.УдержатьНДФЛАванса.Это позволит коду находить нужный элемент и отрабатывать без ошибок. Однако помните, что нужно правильно настроить привязки данных реквизита, чтобы значение сохранялось в документе.
Вариант Б: Комментирование проблемного кода
В качестве быстрого «костыля», чтобы документ хотя бы открывался, можно закомментировать строки, вызывающие ошибку:
// ЭлементыФормы.УдержатьНДФЛАванса.Видимость = НачалоМесяца(ПериодРегистрации) = ДобавитьМесяц(ПроведениеРасчетов.ДатаЗакона263ФЗ, -1) И ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца;
// ПоказатьФлажокУдержатьНДФЛАванса;
Внимание: при использовании этого метода функционал удержания НДФЛ с аванса может работать некорректно или его визуальный контроль будет недоступен. Данный метод стоит использовать только как крайнюю временную меру до установки нормального обновления конфигурации.