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

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

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

Анализ проблемы: невидимость реквизитов в конфигураторе

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

Данное поведение не является стандартным или ожидаемым. На самом деле, это известная ошибка платформы 1С:Предприятие 8.3.27.1859. Эта ошибка проявляется именно в конфигураторе и препятствует нормальной работе с реквизитами на формах, созданных в расширениях. Таким образом, проблема кроется не в наших действиях по созданию формы или добавлению объектов, а в работе самого инструмента разработки.

Решение проблемы: обновление платформы

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

Мы понимаем, что не всегда есть возможность оперативно обновить рабочую платформу, особенно если речь идет о продуктивной среде на крупном предприятии (как в упомянутом случае с "КАМАЗом"), где согласование обновлений может занимать длительное время. Однако важно отметить, что данная ошибка проявляется только в конфигураторе. Это означает, что если мы разработаем и опубликуем расширение на другой, более старой или новой платформе, где конфигуратор работает корректно, то в режиме "Предприятие" на целевой платформе 8.3.27.1859 все будет функционировать без проблем. Таким образом, для целей разработки можно:

  1. Обновить платформу на своем рабочем месте или тестовом стенде до версии, где ошибка исправлена (например, 8.3.25 или более новая).
  2. Использовать другую рабочую станцию с более старой или новой версией платформы для разработки форм в расширениях, а затем переносить изменения в основное хранилище или на продуктивную среду.

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

Правильный механизм создания новой формы элемента в расширении (после устранения бага)

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

1. Добавляем объект конфигурации в расширение

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

  1. Изменять свойства заимствованного объекта.
  2. Добавлять к нему новые реквизиты, табличные части и команды.
  3. Создавать для него новые формы.

Чтобы добавить справочник в расширение:

  1. Откройте расширение в конфигураторе.
  2. Перейдите в дерево конфигурации расширения.
  3. Найдите нужный справочник в основной конфигурации (через основную конфигурацию).
  4. Кликните правой кнопкой мыши по справочнику и выберите "Добавить в расширение".

Только после выполнения этого шага расширение получит информацию о структуре справочника, и его реквизиты станут доступны для использования.

2. Создаем новую, пустую форму элемента в расширении

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

  1. В дереве конфигурации расширения найдите заимствованный справочник.
  2. Разверните его и найдите ветку "Формы".
  3. Кликните правой кнопкой мыши по ветке "Формы" и выберите "Добавить" -> "Форму элемента".
  4. Платформа предложит мастер создания формы. Обычно мы выбираем "Пустая форма", чтобы создать форму с нуля.

Мы получим новую, пока еще пустую форму, которая не связана ни с каким объектом.

3. Добавляем основной реквизит формы

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

  1. В окне формы перейдите на вкладку "Реквизиты".
  2. Нажмите кнопку "Добавить реквизит формы" (зеленый плюс).
  3. Задайте имя реквизита, например, Объект (это стандартное имя для основного реквизита).
  4. Укажите тип данных для этого реквизита. Это должен быть тип ссылки на ваш справочник. Например, если справочник называется "Номенклатура", то тип будет СправочникОбъект.Номенклатура или СправочникСсылка.Номенклатура (в зависимости от того, как вы планируете работать с данными). В случае формы элемента обычно используется СправочникОбъект.ИмяСправочника.
  5. Самое главное: для созданного реквизита в его свойствах установите флажок "Основной реквизит". Этот флаг связывает форму с данными объекта, который она должна отображать и редактировать.

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

4. Размещаем реквизиты объекта на форме

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

Резюме и выводы

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

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

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

← На главную