В процессе эксплуатации и обновления конфигурации 1С:Бухгалтерия 3.0 специалисты часто сталкиваются с неприятной ситуацией: в конфигураторе предопределенный элемент справочника существует, но в режиме «Предприятие» система его «не видит», выдавая ошибку: «Справочник.ВидыВычетовНДФЛ.Код253. Предопределенный элемент отсутствует в данных». Рассмотрим подробно, почему возникает эта проблема и какими способами ее можно победить.
Данная ошибка стала особенно актуальной в 2024 году в связи с введением нового кода вычета 253 (вычет на взносы по программе долгосрочных сбережений) — поможет обработка проверки НДФЛ и вычетов 253. Проанализируем ситуацию: платформа 8.3 разделяет понятие предопределенного элемента в метаданных и соответствующей ему записи в таблице базы данных. Если при обновлении или в результате сбоя связь между ними не установилась, мы получаем неработающий функционал.
Прежде чем переходить к лечению, разберем по шагам, почему так происходит. В современных версиях платформы 1С предопределенные элементы создаются не автоматически в момент изменения структуры, а при первом запуске системы или через специальные механизмы обновления данных. Основные причины сбоя:
Проанализируем самый быстрый и правильный с точки зрения архитектуры 1С способ. Мы можем принудительно заставить систему инициализировать предопределенные данные. Для этого нам понадобятся инструменты разработчика или консоль кода (поможет инструменты разработчика и консоль кода 1С).
Рассмотрим пример кода, который сбрасывает текущее состояние инициализации и запускает обновление для справочника ВидыВычетовНДФЛ:
// Сначала сбрасываем признак инициализации, чтобы система «забыла» о неудачной попытке
Справочники.ВидыВычетовНДФЛ.УстановитьИнициализациюПредопределенныхДанных(Ложь);
// Устанавливаем режим автоматического обновления предопределенных данных
Справочники.ВидыВычетовНДФЛ.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.Авто);
// Запускаем процедуру обновления для всей информационной базы
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто);
После выполнения этого кода рекомендуется перезапустить сеанс. Также можно применить решения из коллекции универсальных обработок — для этой задачи подойдёт консоль кода и редактор объектов 1С. В большинстве случаев система при старте обнаружит отсутствие элемента Код253 и создаст его автоматически, связав с метаданными.
Если программное обновление не помогло, разберем альтернативный вариант, который часто называют «ручной привязкой». Посмотрим на ситуацию глубже: можно увидеть, что у каждого элемента в 1С есть скрытый реквизит ИмяПредопределенныхДанных. Именно он связывает запись в базе с объектом в конфигураторе.
Выполним следующие шаги:
ВидыВычетовНДФЛ.ИмяПредопределенныхДанных.Код253.Рассмотрим, как это сделать программно для конкретной ссылки:
// Предположим, ВычетОбъект — это ссылка на созданный вами вручную элемент
ОбъектВычета = ВычетОбъект.ПолучитьОбъект();
ОбъектВычета.ИмяПредопределенныхДанных = "Код253";
Попытка
ОбъектВычета.Записать();
Сообщить("Связь с конфигуратором успешно установлена!");
Исключение
Сообщить("Ошибка записи: " + ОписаниеОшибки());
КонецПопытки;
Иногда проблема кроется в «зависших» ссылках в самой конфигурации базы данных. Разберем более сложный, но эффективный метод, предложенный опытными пользователями. Суть заключается в том, чтобы заставить систему «пересчитать» связи через временное удаление значения.
Алгоритм действий следующий:
ВидыВычетовНДФЛ с поддержки (или включим возможность редактирования).Имя предопределенных данных у проблемного элемента в конфигураторе или попробуем выполнить сравнение-объединение с чистой конфигурацией того же релиза, принудительно обновив только этот справочник.Проанализируем ситуацию с кэшем. Часто бывает так, что в базе данные уже поправились, но клиентское приложение продолжает выдавать ошибку. В этом случае выполним очистку кэша сервера (для клиент-серверных версий) или удалим базу из списка и добавим ее заново (для файловых версий).
Также стоит помнить о настройках прав доступа. Проверьте, не ограничены ли права текущего пользователя на чтение или изменение предопределенных данных. Хотя в типовой Бухгалтерии 3.0 такие ограничения для администратора редкость, в сильно доработанных базах это может стать препятствием.
Важный момент для РИБ: если вы работаете в подчиненном узле, помните, что предопределенные элементы должны прийти из «головы» в виде данных. Если в главном узле элемент Код253 создан и исправен, а в подчиненном — нет, выполните полную синхронизацию данных, не пытаясь создавать элемент в периферийной базе вручную, чтобы избежать дублей (создания элементов с разными GUID).
Подводя итог, можно сказать, что «победить эту гадину», как выразился автор вопроса, проще всего через программную установку ОбновлениеПредопределенныхДанных.Авто. Это наиболее чистый метод, который восстанавливает штатную логику работы платформы 1С.