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

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

Работа с расширениями в среде 1С:Предприятие 8.3 — это мощный инструмент, который, однако, иногда преподносит неприятные сюрпризы. Одна из самых распространенных проблем, с которой сталкиваются разработчики: реквизит, добавленный в табличную часть объекта через расширение, упорно не отображается в списке «Путь к данным» при попытке вывести его на форму. Кажется, что всё сделано правильно — реквизит в дереве метаданных есть, форма заимствована, но связать их не получается.

В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем поведение различных версий платформы и изучим пошаговые алгоритмы решения — от стандартных манипуляций в конфигураторе до «хирургического» вмешательства в XML-структуру формы.

Причина 1: Нарушение последовательности заимствования объектов

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

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

  1. Сначала заимствуем сам объект (например, Документ ЗаказПокупателя).
  2. Заимствуем его табличную часть (например, Товары).
  3. Добавляем в эту табличную часть новый реквизит в расширении.
  4. И только после этого заимствуем форму документа.

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

Причина 2: Особенности версии платформы (баги 8.3.13–8.3.15)

Проанализируем техническую сторону вопроса. В версиях платформы начиная с 8.3.13 и вплоть до некоторых релизов 8.3.15 наблюдался подтвержденный баг конфигуратора. При добавлении реквизитов в расширение визуальный редактор формы переставал видеть эти данные в диалоге выбора пути. Это связано с механизмом кэширования метаданных и отрисовки свойств элементов формы.

Если вы столкнулись именно с этой проблемой, стандартные методы «обновить» или «перезагрузить» могут не помочь. В этом случае рассмотрим метод правки XML-файла конфигурации, который является практически стопроцентным решением:

  1. Выгрузите расширение в файлы (Меню «Конфигурация» -> «Разгрузить конфигурацию в файлы»).
  2. Найдите в папке выгрузки XML-файл нужной вам формы.
  3. Откройте его любым текстовым редактором (например, Notepad++).
  4. Найдите описание вашей табличной части и вручную добавьте описание нового элемента формы, указав в атрибуте dataPath путь к вашему новому реквизиту.
  5. Загрузите конфигурацию из файлов обратно в расширение.

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

Причина 3: Различие типов элементов InputField и LabelField

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

Проанализируем пример кода, который может быть в XML при ручной правке:


<InputField name="ТоварыМойНовыйРеквизит" id="2000">
    <DataPath>Объект.Товары.МойНовыйРеквизит</DataPath>
    <ContextMenu name="ТоварыМойНовыйРеквизитКонтекстноеМеню" id="2001"/>
    <ExtendedTooltip name="ТоварыМойНовыйРеквизитРасширеннаяПодсказка" id="2002"/>
</InputField>

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

Метод 4: Программное создание элементов формы

Если визуальный редактор подводит, а работать с XML кажется слишком сложным, рассмотрим наиболее надежный с точки зрения стабильности метод — программное создание колонки табличной части. Этот способ гарантированно работает в режиме «Предприятие», так как к моменту выполнения кода на сервере все метаданные расширения уже полностью инициализированы.

Для этого в модуле заимствованной формы создадим процедуру-обработчик ПриСозданииНаСервере (после выполнения стандартной обработки):


&НаСервере
&ВИзмененииИКонтроле("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Создаем новый элемент формы - поле табличной части
    ИмяЭлемента = "ТоварыМойРеквизит";
    Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
        
        НовыйЭлемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Элементы.Товары);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "Объект.Товары.МойРеквизит";
        НовыйЭлемент.Заголовок = "Доп. Инфо (Расширение)";
        
    КонецЕсли;
    
КонецПроцедуры

Разберем по шагам, что делает этот код:

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

Посмотрим на ситуацию шире. Иногда проблема кроется не в коде, а в окружении разработки. Проанализируем два важных фактора:

  1. Режим совместимости. Убедитесь, что режим совместимости расширения совпадает с режимом совместимости основной конфигурации. Если в расширении он выше, некоторые механизмы заимствования могут работать некорректно.
  2. Очистка кэша. 1С активно кэширует структуру метаданных. Если вы добавили реквизит, но его не видно, попробуйте закрыть конфигуратор, почистить кэш базы данных и зайти снова. Часто это решает проблему «невидимости» объектов.

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

← На главную