Как перевести обычную форму 1С на управляемую: инструменты, методы и рефакторинг кода

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

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

Инструменты автоматизации и «перерисовка» интерфейса

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

  1. Прочитать структуру реквизитов обычной формы.
  2. Автоматически создать аналогичные элементы на управляемой форме.
  3. Перенести дерево групп и командную панель.

Важно понимать, что ни один конвертер не перенесет программный код модуля формы без ошибок, так как логика Толстого клиента принципиально несовместима с Тонким клиентом. Однако экономия времени на визуальном проектировании может составить до 30–50% от общего времени задачи.

Рефакторинг кода и разделение контекстов

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

  1. Выделение бизнес-логики: Весь код, который работает с данными (запросы к БД, расчеты, работа с объектом), должен быть вынесен в процедуры с директивой &НаСервере или, что еще правильнее, в модуль менеджера объекта.
  2. Интерфейсная логика: На клиенте (&НаКлиенте) оставляем только взаимодействие с пользователем: открытие предупреждений, вопросов, выбор файлов.
  3. Передача данных: Вместо прямого обращения к ЭтотОбъект, мы работаем с данными формы через переменную Объект.

Если в обычной форме вы писали:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Весь код в одной куче
    Запрос = Новый Запрос("ВЫБРАТЬ...");
    Результат = Запрос.Выполнить();
    Предупреждение("Готово!");
КонецПроцедуры

То в управляемой форме нам придется разделить это на две части:


&НаКлиенте
Процедура КомандаВыполнить(Команда)
    ВыполнитьДействиеНаСервере();
    ПоказатьПредупреждение(, "Готово!");
КонецПроцедуры

&НаСервере
Процедура ВыполнитьДействиеНаСервере()
    Запрос = Новый Запрос("ВЫБРАТЬ...");
    // Обработка данных
КонецПроцедуры

Замена обработчика ПриПолученииДанных (OnGetData)

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

В управляемых формах основным инструментом становится Динамический список. Рассмотрим, как правильно перенести логику «раскраски» или вывода доп. полей:

  1. Произвольный запрос: Вместо программного перебора строк, добавьте нужные данные через ЛЕВОЕ СОЕДИНЕНИЕ прямо в тексте запроса динамического списка. Это позволит СУБД подготовить данные одной порцией.
  2. Условное оформление: Для изменения цвета текста или фона строк используйте вкладку «Условное оформление» в настройках списка или программную настройку КомпоновщикНастроек. Это избавляет от необходимости писать код внутри событий отрисовки.

Использование ИИ и современных сред разработки (EDT)

В 2024–2025 годах на помощь программисту приходят нейросети (LLM). Посмотрим, чем они могут быть полезны при миграции. ИИ отлично справляется с задачей «контекстного разделения». Вы можете скопировать процедуру из обычной формы и попросить нейросеть разбить её на клиентскую и серверную части, учитывая доступность методов. Например, ИИ быстро определит, что Сообщить() доступно везде, а Вопрос() нужно заменить на ПоказатьВопрос().

Также рекомендуем обратить внимание на Enterprise Development Tool (EDT). В отличие от стандартного конфигуратора, EDT обладает более мощными механизмами рефакторинга, позволяя быстрее находить ссылки на переменные и методы, которые перестали быть доступными в управляемом контексте.

Режим «Гибридного» запуска и работа с глобальными переменными

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

Рассмотрим шаги для исправления:

  1. Проверьте свойства глобальных переменных. Если они используются для хранения кэшированных данных, рассмотрите возможность их переноса в ПараметрыСеанса.
  2. Используйте инструкции препроцессора #Если Сервер Тогда, #Если ТолстыйКлиентОбычноеПриложениеТогда, чтобы изолировать несовместимый код.
  3. Включите в свойствах конфигурации флаг «Использовать управляемые формы в обычном приложении». Это позволит вам постепенно внедрять новые формы в старую систему, не ломая её целиком.

Подводя итог, можно сказать: «волшебной кнопки» не появилось, но связка из конвертера интерфейса, динамических списков и помощи ИИ позволяет сократить время перевода формы с нескольких дней до нескольких часов.

← На главную