Как исправить ошибку «Предопределенный элемент отсутствует в данных» для кода вычета 253 в 1С:Бухгалтерия

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

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

Данная ошибка стала особенно актуальной в 2024 году в связи с введением нового кода вычета 253 (вычет на взносы по программе долгосрочных сбережений) — поможет обработка проверки НДФЛ и вычетов 253. Проанализируем ситуацию: платформа 8.3 разделяет понятие предопределенного элемента в метаданных и соответствующей ему записи в таблице базы данных. Если при обновлении или в результате сбоя связь между ними не установилась, мы получаем неработающий функционал.

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

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

  1. «Скачкообразное» обновление: переход сразу через несколько релизов может привести к пропуску фоновых обработчиков. Предварительный анализ конфигурации позволяет выявить риски пропуска обновлений данных.
  2. Отключенное автообновление: для конкретного справочника в свойствах может быть установлен режим, запрещающий автоматическое создание предопределенных данных.
  3. Особенности РИБ: в распределенных информационных базах предопределенные элементы иногда не передаются корректно из главного узла в подчиненные.
  4. Ручное вмешательство: если кто-то ранее пытался создать элемент с таким же кодом вручную или удалил «битую» ссылку, связь с конфигуратором могла окончательно разорваться.

Способ 1: Использование программных методов платформы

Проанализируем самый быстрый и правильный с точки зрения архитектуры 1С способ. Мы можем принудительно заставить систему инициализировать предопределенные данные. Для этого нам понадобятся инструменты разработчика или консоль кода (поможет инструменты разработчика и консоль кода 1С).

Рассмотрим пример кода, который сбрасывает текущее состояние инициализации и запускает обновление для справочника ВидыВычетовНДФЛ:


// Сначала сбрасываем признак инициализации, чтобы система «забыла» о неудачной попытке
Справочники.ВидыВычетовНДФЛ.УстановитьИнициализациюПредопределенныхДанных(Ложь);

// Устанавливаем режим автоматического обновления предопределенных данных
Справочники.ВидыВычетовНДФЛ.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.Авто);

// Запускаем процедуру обновления для всей информационной базы
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто);

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

Способ 2: Ручное создание и привязка по «Имени предопределенных данных»

Если программное обновление не помогло, разберем альтернативный вариант, который часто называют «ручной привязкой». Посмотрим на ситуацию глубже: можно увидеть, что у каждого элемента в 1С есть скрытый реквизит ИмяПредопределенныхДанных. Именно он связывает запись в базе с объектом в конфигураторе.

Выполним следующие шаги:

  1. Зайдем в режим «Предприятие» и откроем справочник ВидыВычетовНДФЛ.
  2. Проверим, нет ли уже созданного вручную элемента с кодом 253. Если он есть, но у него нет значка «шарика» (признака предопределенности), мы будем работать с ним. Если его нет — создадим новый элемент вручную.
  3. Используя консоль запросов или обработку «Групповое изменение реквизитов» (с включенным отображением служебных реквизитов), найдем поле ИмяПредопределенныхДанных.
  4. Запишем в это поле точное имя из конфигуратора — в нашем случае это Код253.

Рассмотрим, как это сделать программно для конкретной ссылки:


// Предположим, ВычетОбъект — это ссылка на созданный вами вручную элемент
ОбъектВычета = ВычетОбъект.ПолучитьОбъект();
ОбъектВычета.ИмяПредопределенныхДанных = "Код253";
Попытка
    ОбъектВычета.Записать();
    Сообщить("Связь с конфигуратором успешно установлена!");
Исключение
    Сообщить("Ошибка записи: " + ОписаниеОшибки());
КонецПопытки;

Способ 3: Метод «Сравнения и объединения» с очисткой

Иногда проблема кроется в «зависших» ссылках в самой конфигурации базы данных. Разберем более сложный, но эффективный метод, предложенный опытными пользователями. Суть заключается в том, чтобы заставить систему «пересчитать» связи через временное удаление значения.

Алгоритм действий следующий:

  1. Сделаем резервную копию базы (это обязательный шаг перед любыми манипуляциями с конфигуратором).
  2. В конфигураторе снимем справочник ВидыВычетовНДФЛ с поддержки (или включим возможность редактирования).
  3. Временно очистим значение Имя предопределенных данных у проблемного элемента в конфигураторе или попробуем выполнить сравнение-объединение с чистой конфигурацией того же релиза, принудительно обновив только этот справочник.
  4. После обновления конфигурации БД вернемся к выполнению методов из Способа 1.

Дополнительные рекомендации и профилактика

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

Также стоит помнить о настройках прав доступа. Проверьте, не ограничены ли права текущего пользователя на чтение или изменение предопределенных данных. Хотя в типовой Бухгалтерии 3.0 такие ограничения для администратора редкость, в сильно доработанных базах это может стать препятствием.

Важный момент для РИБ: если вы работаете в подчиненном узле, помните, что предопределенные элементы должны прийти из «головы» в виде данных. Если в главном узле элемент Код253 создан и исправен, а в подчиненном — нет, выполните полную синхронизацию данных, не пытаясь создавать элемент в периферийной базе вручную, чтобы избежать дублей (создания элементов с разными GUID).

Подводя итог, можно сказать, что «победить эту гадину», как выразился автор вопроса, проще всего через программную установку ОбновлениеПредопределенныхДанных.Авто. Это наиболее чистый метод, который восстанавливает штатную логику работы платформы 1С.

← На главную