Перевод конфигурации с обычных форм на управляемые — одна из самых трудозатратных задач для разработчика 1С. Основная сложность заключается не столько в «перерисовывании» интерфейса, сколько в полном изменении парадигмы работы приложения: переходе от модальности к немодальности и разделении кода на клиентский и серверный контексты. Проанализируем, как оптимизировать этот процесс и какие инструменты актуальны на текущий момент.
Разберем ситуацию: у вас есть форма документа с сотней реквизитов и сложной иерархией групп. Расставлять их вручную в редакторе управляемой формы — задача на несколько часов. Для ускорения этого этапа рассмотрим использование конвертеров. Существуют как встроенные механизмы (например, в составе Библиотеки стандартных подсистем), так и сторонние внешние обработки. Эти инструменты позволяют:
Важно понимать, что ни один конвертер не перенесет программный код модуля формы без ошибок, так как логика Толстого клиента принципиально несовместима с Тонким клиентом. Однако экономия времени на визуальном проектировании может составить до 30–50% от общего времени задачи.
Выясним основную причину, по которой «простенькая» форма может отнимать 20 часов работы. В обычных формах весь код выполняется в одном контексте. В управляемом приложении нам необходимо четко разделять процедуры. Проанализируем алгоритм рефакторинга:
&НаСервере или, что еще правильнее, в модуль менеджера объекта.&НаКлиенте) оставляем только взаимодействие с пользователем: открытие предупреждений, вопросов, выбор файлов.ЭтотОбъект, мы работаем с данными формы через переменную Объект.Если в обычной форме вы писали:
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Весь код в одной куче
Запрос = Новый Запрос("ВЫБРАТЬ...");
Результат = Запрос.Выполнить();
Предупреждение("Готово!");
КонецПроцедуры
То в управляемой форме нам придется разделить это на две части:
&НаКлиенте
Процедура КомандаВыполнить(Команда)
ВыполнитьДействиеНаСервере();
ПоказатьПредупреждение(, "Готово!");
КонецПроцедуры
&НаСервере
Процедура ВыполнитьДействиеНаСервере()
Запрос = Новый Запрос("ВЫБРАТЬ...");
// Обработка данных
КонецПроцедуры
Проанализируем одну из самых острых проблем — вывод дополнительных данных в списках. В обычных формах для этого использовалось событие ПриПолученииДанных табличного поля, где разработчики часто писали запросы в цикле, что катастрофически замедляло систему.
В управляемых формах основным инструментом становится Динамический список. Рассмотрим, как правильно перенести логику «раскраски» или вывода доп. полей:
ЛЕВОЕ СОЕДИНЕНИЕ прямо в тексте запроса динамического списка. Это позволит СУБД подготовить данные одной порцией.В 2024–2025 годах на помощь программисту приходят нейросети (LLM). Посмотрим, чем они могут быть полезны при миграции. ИИ отлично справляется с задачей «контекстного разделения». Вы можете скопировать процедуру из обычной формы и попросить нейросеть разбить её на клиентскую и серверную части, учитывая доступность методов. Например, ИИ быстро определит, что Сообщить() доступно везде, а Вопрос() нужно заменить на ПоказатьВопрос().
Также рекомендуем обратить внимание на Enterprise Development Tool (EDT). В отличие от стандартного конфигуратора, EDT обладает более мощными механизмами рефакторинга, позволяя быстрее находить ссылки на переменные и методы, которые перестали быть доступными в управляемом контексте.
Если при попытке запустить форму в режиме Толстый клиент (управляемое приложение) возникают ошибки, выясним их причину. Чаще всего это связано с обращением к глобальным переменным в модуле приложения, которые не определены для данного режима.
Рассмотрим шаги для исправления:
ПараметрыСеанса.#Если Сервер Тогда, #Если ТолстыйКлиентОбычноеПриложениеТогда, чтобы изолировать несовместимый код.Подводя итог, можно сказать: «волшебной кнопки» не появилось, но связка из конвертера интерфейса, динамических списков и помощи ИИ позволяет сократить время перевода формы с нескольких дней до нескольких часов.