Почему реквизит отображается как «Произвольный» в расширении 1С и как это исправить

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

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

Проанализируем причину возникновения проблемы

Разберем ситуацию: вы добавили реквизит (например, тип Дата) в основной конфигурации, затем применили команду «Добавить в расширение». Однако на форме в расширении вместо ожидаемого поля ввода вы видите пустой элемент. Выясним причину: это происходит из-за обрыва связи в свойстве ПутьКДанным (DataPath). Когда платформа не может сопоставить элемент формы с конкретным полем объекта в текущем контексте расширения, она сбрасывает визуальные свойства элемента до базовых (тип Произвольный, пустое имя).

Рассмотрим основные факторы, приводящие к этому сбою:

  1. Специфические баги синхронизации: В версиях платформы, таких как 8.3.20.1674, наблюдаются ошибки кэширования метаданных между слоями основной конфигурации и расширения.
  2. Нарушение последовательности действий: Форма была добавлена в расширение раньше, чем сам реквизит объекта.
  3. Различие режимов совместимости: Если у расширения установлен режим совместимости ниже, чем у основной конфигурации, механизмы типизации могут работать некорректно.

Способ 1. Принудительное обновление «Пути к данным»

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

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

  1. Откроем форму документа в редакторе расширения.
  2. Найдем проблемный элемент в дереве элементов формы (слева).
  3. Перейдем в палитру свойств этого элемента.
  4. Найдем свойство Путь к данным. Скорее всего, там будет указано что-то вроде Объект.ИмяВашегоРеквизита, но платформа «не подхватывает» его тип.
  5. Нажмем на кнопку выбора (три точки) в этом поле и заново выберем реквизит из списка доступных данных объекта.
  6. Сохраним изменения и нажмем F7 для обновления конфигурации базы данных.

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

Способ 2. Корректная последовательность добавления объектов

Часто проблема возникает из-за того, что разработчик сначала переносит форму в расширение, а потом пытается «прокинуть» туда новые реквизиты. Рассмотрим правильный алгоритм работы, который минимизирует риск появления типа Произвольный.

Рекомендуемый порядок действий:

  1. Добавляем реквизит в основной конфигурации.
  2. Выполняем Обновить конфигурацию базы данных (синий цилиндр или F7).
  3. Нажимаем правой кнопкой мыши на реквизит и выбираем Добавить в расширение.
  4. Убеждаемся, что в дереве расширения у объекта (например, документа) этот реквизит появился и имеет правильный тип.
  5. Только после этого открываем форму в расширении. Если формы еще нет в расширении — добавляем ее.
  6. Перетаскиваем реквизит из правой колонки (Реквизиты) в левую (Элементы).

Способ 3. Синхронизация режимов совместимости

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

Проверим настройки:

  1. В конфигураторе откроем свойства расширения (правой кнопкой на корень расширения — Свойства).
  2. Найдем пункт Режим совместимости.
  3. Установим его в значение Использовать режим совместимости основной конфигурации или выставим точно такую же версию, как в основном окне свойств конфигурации.

Это критически важно для корректной работы метаданных и их типизации в управляемых формах.

Способ 4. Очистка кэша конфигуратора

Если вы уверены, что все действия выполнены верно, но тип Произвольный никуда не исчезает, мы имеем дело с проблемой кэширования. Платформа «помнит» старую структуру объекта и игнорирует изменения в расширении.

Попробуем выполнить следующие действия:

  1. Закроем Конфигуратор.
  2. Очистим временные файлы (кэш) текущей информационной базы.
  3. Запустим Конфигуратор заново.
  4. Если это не помогло, попробуем Удалить объект из расширения (только сам реквизит или форму) и добавить его повторно. Иногда помогает полное удаление формы из расширения (если на ней не было сделано много доработок) и её повторный захват после того, как структура реквизитов объекта была окончательно обновлена.

Разберем разницу: Реквизит объекта vs Реквизит формы

Важно не путать эти понятия при работе с расширением. Рассмотрим ситуацию подробнее:

Если вы добавили реквизит в основную конфигурацию, он должен быть добавлен в расширение как часть Объекта. В этом случае он связан с таблицей базы данных. Если же вы создаете реквизит прямо в редакторе формы расширения (на вкладке «Реквизиты»), он будет существовать только в рамках этой формы и не будет сохраняться в базу данных при записи документа. Ошибка с типом Произвольный чаще всего возникает именно с реквизитами объекта, которые «потерялись» при отображении на форме.

Для проверки программной доступности реквизита можно использовать простой код в модуле формы для отладки:


&НаСервере
Процедура ПроверитьТипРеквизитаНаСервере()
    // Проверим наличие реквизита в данных формы
    Попытка
        ТипЗначения = ТипЗнч(Объект.ИмяНовогоРеквизита);
        Сообщить("Тип реквизита в данных: " + Строка(ТипЗначения));
    Исключение
        Сообщить("Реквизит не найден в структуре объекта!");
    КонецПопытки;
КонецПроцедуры

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

Итоги

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

← На главную