Как правильно работать с формами в расширениях 1С при обновлении типовой конфигурации?

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

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

Зачем вообще нужны расширения?

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

Визуальная доработка форм в расширении: риски и особенности

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

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

  1. Форма "разъедется", то есть элементы сместятся, наложатся друг на друга или потеряют свои свойства.
  2. Доработки перестанут работать корректно.
  3. Форма вовсе перестанет открываться из-за конфликтов в структуре.

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

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

Программная доработка форм: стабильность и надежность

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

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

Давайте посмотрим на пример программного добавления реквизита и элемента на форму:

  1. Добавление реквизита:

    Для добавления нового реквизита в расширяемую форму, мы можем использовать метод ДобавитьРеквизит() объекта ИзменяемыеРеквизиты. Этот метод позволяет определить имя, тип и другие свойства реквизита. Например, если нам нужно добавить реквизит типа "Строка" для хранения дополнительной информации:

    
    &НаКлиенте
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        // Добавляем новый реквизит формы
        Если Не Свойство("ДополнительныйРеквизит") Тогда
            ЭтаФорма.ИзменяемыеРеквизиты.Добавить("ДополнительныйРеквизит", Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(100)));
        КонецЕсли;
    КонецПроцедуры
    
  2. Добавление элемента формы, связанного с реквизитом:

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

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

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

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

Общие рекомендации и лучшие практики

Для успешной работы с формами в расширениях 1С при регулярных обновлениях, мы рекомендуем придерживаться следующих практик:

  1. Предпочитайте программную доработку: По возможности, добавляйте реквизиты, элементы и команды на формы программно. Это минимизирует риски "разъезжания" форм при обновлениях.
  2. Регулярно обновляйте расширения форм: Если вы все же используете визуальную доработку, не забывайте использовать команду "Расширения – Обновить расширение формы" после каждого обновления основной конфигурации.
  3. Тестируйте после каждого обновления: После каждого обновления типовой конфигурации обязательно проверяйте корректность работы и внешний вид всех расширенных форм. Адаптируйте компоновку форм, если это необходимо.
  4. Избегайте прямого изменения типового кода: Всегда стремитесь реализовывать изменения через расширение формы и обработчики событий, не пытаясь напрямую модифицировать исходный код типовой конфигурации.
  5. Условное оформление: Для условного оформления полей форм в расширениях используйте обработчики событий формы (например, ПриОтрисовке) и методы изменения свойств, таких как ЦветФона, Жирный, Доступность, Видимость, или метод УстановитьСтиль.
  6. Добавляйте собственные формы: Расширения позволяют не только дорабатывать существующие, но и добавлять собственные формы, назначать их основными для объектов конфигурации или вызывать программно.
  7. Различайте обновление и новую установку: При работе с расширениями важно понимать разницу между обновлением существующей версии и установкой новой. Будьте осторожны, если расширение хранит данные, чтобы избежать их потери.
  8. Перезапускайте 1С: После обновления расширения часто рекомендуется перезапустить сеанс 1С, а иногда и выполнить полный импорт/синхронизацию данных, если это предусмотрено логикой работы.
  9. Помните об ограничениях: Не все доработки можно реализовать через расширения. Например, мы не можем удалить существующие команды в заимствованной форме, но можем доработать их обработчики или добавить новые.

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

← К списку