Стоит ли менять типовую форму под требования заказчика и как это сделать правильно

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

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

Анализ ситуации: Удобство против Технологичности

Прежде чем приступать к кодингу, проанализируем ситуацию с точки зрения бизнеса. Изменение положения полей может показаться мелочью, но для оператора, который вводит 100+ документов в день, это критический фактор скорости. Однако каждое изменение типового объекта — это «интерфейсный долг», который придется оплачивать при каждом обновлении системы. Выясним причину недовольства: если это простая привычка, она пройдет за 2-3 дня. Если же новое расположение полей действительно нарушает логику бизнес-процесса (например, поля, заполняемые последовательно, оказались на разных вкладках), доработка обоснована.

Решение 1: Пользовательская настройка формы

Самый правильный и «безопасный» путь в системе 1С:Предприятие 8.3 — это использование встроенного механизма настройки управляемых форм. Разберем по шагам, почему это предпочтительнее:

  1. Кнопка «Еще» — «Изменить форму»: Система позволяет любому пользователю самостоятельно переставлять элементы, объединять их в группы или скрывать ненужные. Это не требует внесения изменений в конфигурацию.
  2. Административное управление настройками: Если пользователей много (например, 50 «девочек» в отделе продаж), администратор может настроить форму под одним пользователем, а затем с помощью типовой обработки Управление настройками пользователей (в БСП) скопировать эти настройки всем остальным.

Важный нюанс: Иногда программно установлено свойство группы РазрешитьИзменениеСостава = Ложь. В этом случае пользователь не сможет переместить реквизит. Если это ваш случай, переходим к техническим методам.

Решение 2: Программное изменение формы в расширении

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

Правильнее использовать метод Переместить() в процедуре ПриСозданииНаСервере. Проанализируем пример кода:


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

Такой подход гарантирует работоспособность формы даже после радикальных обновлений вендора, так как мы используем безопасный перехват события.

Решение 3: Создание альтернативной формы

В случаях, когда типовая форма изменилась настолько сильно, что программно «двигать» элементы становится слишком трудоемко, разберем вариант с созданием собственной формы. Мы копируем старую форму из предыдущего релиза (или создаем свою с нуля) и назначаем ее основной. Чтобы не снимать объект с поддержки, воспользуемся модулем менеджера объекта.

Рассмотрим использование обработчика ОбработкаПолученияФормы. Этот метод позволяет подменить стандартную форму на вашу в момент вызова:


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    Если ВидФормы = "ФормаОбъекта" Тогда
        // Подставляем нашу кастомную форму из расширения
        ВыбраннаяФорма = "Документ.ЗаказКлиента.Форма.ФормаОбъектаКастомная";
        СтандартнаяОбработка = Ложь;
    КонецЕсли;
    
КонецПроцедуры

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

Рекомендации по управлению разработкой

Подводя итог, проанализируем, какой стратегии придерживаться программисту в штате (fixie):

  1. Оцените TCO (Total Cost of Ownership): Объясните заказчику, что любая доработка формы увеличивает время (и стоимость) каждого последующего обновления. Иногда достаточно показать расчеты, чтобы желание «вернуть как было» пропало.
  2. Используйте функциональные опции: Если мнения в коллективе разделились, можно внедрить константу ИспользоватьСтарыйИнтерфейс и в коде расширения проверять её значение. Это позволит гибко управлять поведением системы.
  3. Инструкции вместо кода: Часто дешевле написать короткую инструкцию или записать видео для пользователей, объясняющее логику нового интерфейса 1С, чем переписывать систему. Помните, что 1С стремится к стандартизации UI (интерфейс «Такси»), и ваши правки могут сделать систему «чужой» для новых сотрудников.

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

← На главную