Работа с расширениями в 1С:Предприятие 8.3 — это стандарт современной разработки, позволяющий модифицировать типовые конфигурации без снятия их с поддержки. Однако программисты часто сталкиваются с ситуацией, когда новый реквизит, созданный в расширении, упорно не желает появляться в списке доступных полей формы. В рамках этой статьи мы подробно разберем, как правильно добавлять реквизиты, почему они могут «пропадать» и как настроить сложные связи метаданных, такие как движения документов по новым регистрам. При необходимости можно воспользоваться готовым решением для добавления произвольных свойств к справочникам и документам.
Представим типичную задачу: нам необходимо добавить булевый флаг ПроверкаПроведена в справочник Номенклатура и вывести его на форму элемента. Рассмотрим последовательность действий, которая гарантирует результат:
Номенклатура в расширение (правой кнопкой мыши по объекту в основной конфигурации — Добавить в расширение).Булево.Казалось бы, на этом этапе реквизит должен стать доступен везде, но при открытии заимствованной формы элемента в расширении мы видим, что в структуре данных Объект нашего нового поля нет. Проанализируем причину этой ситуации.
Проблема заключается в том, что редактор управляемых форм в расширении не всегда автоматически синхронизирует структуру данных заимствованного объекта. Чтобы «подтянуть» изменения, выполним следующие шаги:
Рассмотрим подробнее работу в окне редактора формы. В верхней панели инструментов редактора (над деревом реквизитов формы) расположена важная команда — Обновить расширение формы. Нажмем на нее. После этого платформа принудительно перечитает состав метаданных объекта в контексте расширения.
Проверим дерево реквизитов слева. В ветке Объект должен появиться наш созданный реквизит. Теперь мы можем привычным движением перетащить его в правую часть окна — в список элементов формы. Если кнопка обновления не помогла, выясним причину в свойствах самого расширения.
Важный нюанс: обратим внимание на Назначение расширения. Если ваше расширение имеет тип Исправление (Patch), оно предназначено для оперативного исправления кода. Для добавления новых данных, которые должны храниться в базе (новые реквизиты), следует использовать тип Адаптация или Дополнение. Также проверьте Режим совместимости расширения — он не должен быть выше режима совместимости основной конфигурации, а для стабильной работы с реквизитами рекомендуется использовать версию платформы не ниже 8.3.15.
Иногда программисты сталкиваются с тем, что свойства заимствованного объекта (например, справочника или документа) в расширении кажутся заблокированными (серыми). Рассмотрим, как изменить основную форму объекта или длину номера, если поля ввода недоступны.
Посмотрим на палитру свойств заимствованного объекта. Слева от каждого свойства (например, рядом с полем Основная форма объекта) находится небольшой чек-бокс (флажок). По умолчанию он снят, что означает использование значения из основной конфигурации. Чтобы переопределить это свойство в расширении:
Это правило работает для большинства метаданных: от длины кода справочника до состава движений документа, при изменении которых для контроля правильности учета используется автоматическая сверка проводок между базами.
Разберем более сложную ситуацию, когда существующий в основной конфигурации документ должен делать движения по новому регистру, созданному исключительно в расширении. Проанализируем алгоритм действий:
Регистр накопления или Регистр сведений.Теперь документ официально считается регистратором для этого регистра в контексте расширения. Однако помните о рисках: если расширение будет удалено из базы, все записи в этом регистре, сделанные данным документом, будут безвозвратно удалены. Для обеспечения сохранности данных при критических обновлениях некоторые специалисты используют методику «документа-пустышки», который связан с основным документом через реквизит и выступает техническим регистратором, но в большинстве случаев штатного механизма расширений достаточно.
Если вы обновили форму, проверили свойства и назначение расширения, но реквизит так и не появился, мы имеем дело с особенностями кэширования метаданных платформой 1С. Выполним «чистку» по следующему списку, при этом для автоматизации обслуживания и тестирования баз применяется программа для автоматического обновления 1С:
Такая процедура заставляет платформу полностью перестроить таблицы метаданных расширения (с префиксами _Ext) и корректно сопоставить их с основной конфигурацией. Как показывает практика, это решает 90% «необъяснимых» проблем с видимостью объектов.
После того как мы успешно вывели реквизит на форму, нам может понадобиться программная работа с ним. Помните, что в модулях расширения мы можем обращаться к новому реквизиту напрямую, как если бы он был частью основной конфигурации. Рассмотрим пример кода в модуле формы элемента (аннотация &После):
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Обращаемся к реквизиту, созданному в расширении
Если Объект.ПроверкаПроведена Тогда
Элементы.ГруппаСпецИнформации.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
КонецЕсли;
КонецПроцедуры
Использование аннотаций &Перед, &После и &Вместо позволяет внедрять логику обработки новых реквизитов, не нарушая работу типовых механизмов конфигурации. Подводя итог, можно сказать, что ключ к успеху в работе с расширениями — это внимательность к типам расширений, использование кнопки обновления формы и понимание механизмов заимствования свойств через флажки в палитре свойств.