В мире 1С Предприятия механизм расширений является мощным инструментом для доработки типовых конфигураций без изменения их исходного кода. Это позволяет нам сохранять конфигурацию на поддержке и автоматически получать обновления от разработчиков. Однако, когда дело доходит до форм, возникает закономерный вопрос: как обеспечить стабильность наших доработок при регулярных обновлениях основной конфигурации? Давайте вместе разберемся в этом вопросе и рассмотрим лучшие практики.
Прежде чем углубляться в детали работы с формами, давайте кратко вспомним, почему расширения стали неотъемлемой частью разработки на платформе 1С. Механизм расширений (доступный с платформы 8.3.6) позволяет нам изменять поведение типовых объектов, добавлять новые реквизиты, элементы и команды, не снимая конфигурацию с поддержки. Это ключевое преимущество, которое значительно упрощает процесс сопровождения систем и снижает трудоемкость при внедрении изменений.
Многие разработчики, привыкшие к визуальному конструктору форм, начинают дорабатывать формы в расширениях именно таким способом – перетаскивая элементы, изменяя их свойства прямо в редакторе. На первый взгляд, это кажется самым простым и логичным путем. Однако, мы выясним, что такой подход сопряжен со значительными рисками при обновлениях.
Рассмотрим подробнее, почему визуальная доработка может стать источником проблем. При обновлении основной конфигурации разработчики 1С могут вносить изменения в типовые формы: менять порядок элементов, добавлять новые, удалять старые, изменять их свойства или даже полностью перерабатывать форму. Если наша расширенная форма была изменена визуально, то после обновления типовой формы существует высокая вероятность того, что:
Это подтверждает опасения многих наших коллег, которые на собственном опыте сталкивались с "квестами" по восстановлению форм после обновлений. Особенно остро проблема проявляется, если типовая форма была значительно переработана.
Тем не менее, платформа 1С предоставляет механизм для синхронизации визуально измененных форм. Для этого существует команда "Расширения – Обновить расширение формы". Мы должны регулярно использовать эту команду, чтобы перенести изменения из основной конфигурации в нашу расширяющую форму и затем адаптировать свои доработки. Однако, даже с этим механизмом ручная адаптация может быть очень трудоемкой, особенно если типовая форма была значительно переработана.
Анализируя опыт сообщества и рекомендации экспертов, мы приходим к выводу, что программное изменение форм является предпочтительным подходом для обеспечения стабильности при обновлениях. Этот метод позволяет нам добавлять реквизиты, элементы управления и команды непосредственно через код модуля формы.
Почему программный подход надежнее? Если мы добавляем элементы и реквизиты программно, то даже при значительном изменении типовой формы наши доработки не "съедут" и не потеряют работоспособность. Код будет выполняться после загрузки формы, динамически создавая необходимые элементы и реквизиты. Это практически гарантирует, что наши доработки останутся на месте и будут работать корректно, независимо от того, как сильно изменится стандартная форма.
Давайте посмотрим на пример программного добавления реквизита и элемента на форму:
Добавление реквизита:
Для добавления нового реквизита в расширяемую форму, мы можем использовать метод ДобавитьРеквизит() объекта ИзменяемыеРеквизиты. Этот метод позволяет определить имя, тип и другие свойства реквизита. Например, если нам нужно добавить реквизит типа "Строка" для хранения дополнительной информации:
&НаКлиенте
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем новый реквизит формы
Если Не Свойство("ДополнительныйРеквизит") Тогда
ЭтаФорма.ИзменяемыеРеквизиты.Добавить("ДополнительныйРеквизит", Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(100)));
КонецЕсли;
КонецПроцедуры
Добавление элемента формы, связанного с реквизитом:
После добавления реквизита, мы должны создать элемент управления, который будет отображать этот реквизит на форме. Для этого используем методы объекта Элементы. Например, добавим текстовое поле для нашего ДополнительныйРеквизит:
&НаКлиенте
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ... (код добавления реквизита)
// Добавляем элемент формы
Если ЭтаФорма.Элементы.Найти("ДополнительныйРеквизитПоле") = Неопределено Тогда
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ДополнительныйРеквизитПоле", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаВажныеДанные); // Предположим, есть группа для размещения
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ДополнительныйРеквизит";
НовыйЭлемент.Заголовок = "Дополнительная информация";
НовыйЭлемент.Положение = ПоложениеЭлементаНаФорме.Авто; // Или явно указать
КонецЕсли;
КонецПроцедуры
В этом примере мы сначала проверяем, существует ли уже реквизит и элемент, чтобы избежать повторного создания при повторных вызовах процедуры.
Некоторые компании даже придерживаются политики, запрещающей прямое редактирование свойств форм в расширениях, требуя реализацию всех изменений исключительно кодом. Мы видим, что это не просто прихоть, а обоснованная мера для обеспечения стабильности и упрощения поддержки.
Для успешной работы с формами в расширениях 1С при регулярных обновлениях, мы рекомендуем придерживаться следующих практик:
ПриОтрисовке) и методы изменения свойств, таких как ЦветФона, Жирный, Доступность, Видимость, или метод УстановитьСтиль.Следуя этим рекомендациям, мы сможем эффективно использовать механизм расширений, обеспечивая стабильность и надежность наших систем 1С при минимальных затратах на сопровождение и обновление.
← К списку