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