В практике 1С-разработчика часто возникает классический конфликт интересов: с одной стороны, фирма-вендор выпускает обновление, в котором меняет расположение полей в типовой форме; с другой стороны, пользователи, привыкшие годами вводить данные «на автомате», требуют вернуть всё как было. Рассмотрим детально, как решить эту задачу, минимизировав затраты на последующую поддержку конфигурации, и проанализируем различные подходы — от пользовательских настроек до программного вмешательства.
Прежде чем приступать к кодингу, проанализируем ситуацию с точки зрения бизнеса. Изменение положения полей может показаться мелочью, но для оператора, который вводит 100+ документов в день, это критический фактор скорости. Однако каждое изменение типового объекта — это «интерфейсный долг», который придется оплачивать при каждом обновлении системы. Выясним причину недовольства: если это простая привычка, она пройдет за 2-3 дня. Если же новое расположение полей действительно нарушает логику бизнес-процесса (например, поля, заполняемые последовательно, оказались на разных вкладках), доработка обоснована.
Самый правильный и «безопасный» путь в системе 1С:Предприятие 8.3 — это использование встроенного механизма настройки управляемых форм. Разберем по шагам, почему это предпочтительнее:
Управление настройками пользователей (в БСП) скопировать эти настройки всем остальным.Важный нюанс: Иногда программно установлено свойство группы РазрешитьИзменениеСостава = Ложь. В этом случае пользователь не сможет переместить реквизит. Если это ваш случай, переходим к техническим методам.
Если «ручные» настройки не подходят, используем расширение конфигурации. Рассмотрим подробнее, почему программный метод лучше визуального редактора расширений. Если вы просто перетащите поля в визуальном редакторе расширения, то при обновлении типовой конфигурации, если 1С удалит или переименует родительскую группу, форма может перестать открываться.
Правильнее использовать метод Переместить() в процедуре ПриСозданииНаСервере. Проанализируем пример кода:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Определяем элементы, которые нужно переместить
ЭлементДляПеремещения = Элементы.Автор;
НовыйРодитель = Элементы.ГруппаОсновное; // Куда перемещаем
ЭлементПередКоторымСтавим = Элементы.Дата; // Опционально
Попытка
Элементы.Переместить(ЭлементДляПеремещения, НовыйРодитель, ЭлементПередКоторымСтавим);
Исключение
// Если в новом релизе структура изменилась, форма всё равно откроется
ЗаписьЖурналаРегистрации("ОшибкиИнтерфейса", УровеньЖурналаРегистрации.Предупреждение,,,
"Не удалось переместить поле Автор на форме");
КонецПопытки;
КонецПроцедуры
Такой подход гарантирует работоспособность формы даже после радикальных обновлений вендора, так как мы используем безопасный перехват события.
В случаях, когда типовая форма изменилась настолько сильно, что программно «двигать» элементы становится слишком трудоемко, разберем вариант с созданием собственной формы. Мы копируем старую форму из предыдущего релиза (или создаем свою с нуля) и назначаем ее основной. Чтобы не снимать объект с поддержки, воспользуемся модулем менеджера объекта.
Рассмотрим использование обработчика ОбработкаПолученияФормы. Этот метод позволяет подменить стандартную форму на вашу в момент вызова:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта" Тогда
// Подставляем нашу кастомную форму из расширения
ВыбраннаяФорма = "Документ.ЗаказКлиента.Форма.ФормаОбъектаКастомная";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Преимущество: Вы полностью контролируете интерфейс. Недостаток: Если в типовую форму добавят важный новый функционал (например, работу с маркировкой или новыми налогами), вам придется вручную переносить эти изменения в свою кастомную форму.
Подводя итог, проанализируем, какой стратегии придерживаться программисту в штате (fixie):
ИспользоватьСтарыйИнтерфейс и в коде расширения проверять её значение. Это позволит гибко управлять поведением системы.Выясним итоговую позицию: если заказчик настаивает и готов платить за поддержку (или руководство предприятия осознает издержки), лучшим техническим решением будет программная модификация формы через расширение. Это наиболее сбалансированный путь между удобством пользователя и стабильностью системы.