При работе с расширениями в платформе 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 все будет функционировать без проблем. Таким образом, для целей разработки можно:
Смена режима совместимости конфигурации в данном случае не поможет, так как проблема связана непосредственно с работой конфигуратора конкретной версии платформы, а не с режимом выполнения кода. Для программного обхода ограничений визуального редактора подойдёт пример динамического создания и удаления элементов формы.
Теперь, когда мы выяснили причину проблемы и знаем, как ее обойти с помощью обновления платформы, давайте подробно рассмотрим правильную последовательность действий для создания полностью новой формы элемента справочника в расширении. Этот механизм актуален для всех версий платформы, где нет упомянутого бага.
Прежде чем создавать новую форму для справочника, нам необходимо дать расширению "знать" об этом справочнике. Это не означает, что мы полностью копируем справочник в расширение, а лишь заимствуем его для возможности модификации и работы с ним в контексте расширения. Эта операция позволяет нам:
Чтобы добавить справочник в расширение:
Только после выполнения этого шага расширение получит информацию о структуре справочника, и его реквизиты станут доступны для использования.
После того как справочник заимствован в расширение, мы можем приступить к созданию для него новой формы:
Мы получим новую, пока еще пустую форму, которая не связана ни с каким объектом.
Это критически важный шаг. Новая пустая форма в расширении по умолчанию не знает, с каким объектом она должна работать. Мы должны явно указать ей это:
Объект (это стандартное имя для основного реквизита).СправочникОбъект.Номенклатура или СправочникСсылка.Номенклатура (в зависимости от того, как вы планируете работать с данными). В случае формы элемента обычно используется СправочникОбъект.ИмяСправочника.После установки флага "Основной реквизит", платформа понимает, что данная форма предназначена для работы с экземпляром указанного справочника, и его поля должны быть доступны.
После выполнения шага 3, реквизиты основного объекта (то есть поля вашего справочника) станут доступны для размещения на форме. Вы можете перетаскивать их из панели "Реквизиты" в область элементов формы. Если вы работали на платформе 8.3.27.1859 и столкнулись с проблемой, именно после этих действий и обновления платформы вы увидите, что реквизиты основного объекта наконец-то появились и их можно размещать на форме. Для быстрой настройки состава полей можно использовать инструмент для добавления реквизитов и элементов на управляемые формы без кодирования.
Мы выяснили, что проблема с невидимостью реквизитов при создании новой формы элемента в расширении на платформе 8.3.27.1859 является багом конфигуратора. Основное решение — это обновление платформы. Однако, помимо этого, мы детально рассмотрели правильный алгоритм создания новой формы элемента справочника в расширении, который включает в себя:
Следуя этим шагам и обеспечив работу на стабильной версии платформы, мы сможем эффективно создавать и дорабатывать формы в расширениях 1С, расширяя функциональность стандартных конфигураций без изменения их кода.