Генерация управляемой формы на основе обычной (proof of concept)

06.11.19

Разработка - Работа с интерфейсом

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

Скачать файлы

Наименование Файл Версия Размер
Пример сгенерированных форм (суффикс Упр) для доната
.epf 70,09Kb
41
.epf 70,09Kb 41 Скачать

Каждый опытный разработчик пишет для себя инструменты. И чем больше опыт, тем больше задач приходится автоматизировать, в том числе и поддержка legacy-проектов, переход на новые версии платформы/базовой конфигурации и тд.

Одним из самых сложных таких переходов для многих был/остается переход на управляемые формы. Хорошо, когда код почти типовой - базовую конфигурации переделала сама 1С.  Но даже тогда остается задача переписать весь багаж своих привычных обработок на УФ.

Для примера, поиск по infostart'у фразы " для управляемых форм " - "Найдено 4696". Невероятная работа проделана сообществом...

Управляемые формы - это не новый дизайн интерфейса, это концепция разделения работы между клиентом и сервером.

В обычных формах:

  • практически всю работу делал клиент (тащил сырые данные с сервера, обрабатывал и отображал результат)
  • в любой момент в клиенте можно было делать синхронные, модальные и интерактивные вызовы/операции
  • чтобы выполнить код на сервере, нужно было постараться (вынести логику в специальный общий модуль). программисты мало задумывались о том, где код выполняется

В управляемых формах (толстый клиент не рассматриваем как атавизм):

  • клиент обеспечивает только отображение данных, пользовательский ввод и простейшие вычисления.
  • синхронные и модальные вызовы запрещены даже на клиенте
  • работа с данными из СУБД возможна только на сервере
  • код должен быть разделен на методы по контексту выполнения (клиент, сервер), а также в местах обратных вызовов (callbacks), т.к. код должен быть асинхронным

 

А ТаблицуЗначений за что???

 

В начале работы с УФ это все казалось очень и очень сложным, инертность мышления долго мешала писать правильно (спасибо, что хотя бы многопоточности нет). Но ближе к теме:

 

Переписывание кода для УФ - нетривиальная задача. Ее может сделать только программист...

 

Т.е. о генерации валидного кода можно сразу забыть. А как быть с самой формой? В УФ форма - это XML-файл в недрах конфигурации, который можно как выгрузить из конфигурации, так и загрузить обратно... А XML-файл можно сгенерировать программно.

 

Создание управляемой формы - это всего лишь генерация XML-файла...

 

Для этого нам понадобится

1) Декомпозиция обычной толстой формы на элементы и анализ их свойств

С этим сообщество разработчиков 1С разобралось достаточно давно, например здесь

 

Дерево элементов формы "ФормаКонсоли" обработки "ирКонсольЗаданий".

 

2) Генерация XML-файлов по дереву элементов и свойств обычной формы

Здесь-то и были сосредоточены основные усилия.

 

- нужно было исследовательским путем определить названия всех свойств всех возможных элементов управляемой формы и их соответствие свойствам элементов обычной формы

 
 Список элементов управления

 

- нужно было также определить названия всех возможных значений всех свойств этих элементов

 
 Список свойств

Да, впадать в исследовательский азарт - это такая себе черта характера.

 

- и всего лишь сгенерировать XML-файл управляемой формы и упаковать ее в конфигурацию. Самым сложным при этом оказалась группировка элементов, чтобы при масшабировании элементы адекватно растягивались/сдвигались на форме

 

Дерево элементов в упр. форме. Сгенерированные имена не отличаются красотой

 

В прикрепленных изображениях и в прикрепленном файле можно посмотреть исходную форму и результат работы на примере обработки ирКонсольЗаданий.epf из шикарной библиотеки "Инструменты разработчика". К сожалению, выложить файл бесплатно (за 0 SM) нельзя.

Генерация форм была выполнена на платформе 8.3.9.2309.

***

Это концептуальная статья, а сам инструмент в стадии глубокой альфа-версии, поэтому код генератора не выложен. Буду благодарен за конструктивные комментарии.

 

upd 14.11.19

Не все объекты из толстых форм могут быть отображены на управляемой форме (к примеру, объект ПостроительОтчета), но в целом можно генерировать довольно похожие на оригинал формы.

Консоль запросов из ИР

Становится примерно такой. Похоже?

 

 

P.s. если задаться целью, можно даже так:

Результат автоматической генерации

но из за сильных отличий построения UI в 7.7 и УФ результат слишком кривой (в основном мешает управление слоями в форме 7.7)

управляемые формы ненормальное программирование

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61705    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54320    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16624    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10565    745    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9486    150    acces969    31    

115

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3581    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12013    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. dandykry 9 06.11.19 11:55 Сейчас в теме
Отдаленно похожее делал. Нужна была форма для отображения свойств элементов формы. Форма родилась, но успеть за развитием платформы не удалось (переименованием, дополнением, расширением свойств). В какой то новой платформе строка

Выполнить (ИмяРеквизитаФормы  + " = НекоеЗначение; ")

Перестала работать. Теперь необходимо писать
Выполнить ("ЭтотОбъект." + ИмяРеквизитаФормы  + " = НекоеЗначение; ")


Переписывать не стал и просто бросил. Жду когда расширения до ума доведут.

По поводу обработки-генератора. Думаю она все равно не сделает 100% работы. И даже 50% думаю не сумеет. Дело в том, что в обычных формах многое работало на привязках. В управляемых формах этого нет - все решается группами формы. Из-за этого все равно придется форму перерисовывать, чтобы она отображалась нормально. И лично я сделал бы это заново, а не перетаскивал лишнее из старой обработки. Из старой нужна только специфичная логика - запросы, заполнение документов, печать и пр. Все то, что к отображению данных на форме не относится по большей части
tormozit; A_Max; bulpi; +3 Ответить
2. user700211_a.straltsou 226 06.11.19 16:35 Сейчас в теме
(1)
По поводу обработки-генератора. Думаю она все равно не сделает 100% работы. И даже 50% думаю не сумеет. Дело в том, что в обычных формах многое работало на привязках. В управляемых формах этого нет - все решается группами формы. Из-за этого все равно придется форму перерисовывать, чтобы она отображалась нормально

Я с вами согласен в том плане, что если форма простая - ее легче нарисовать вручную. Но если сложная... Под спойлером "Список свойств" 38 свойств элементов управления, которые можно взять из старой формы
7. dandykry 9 07.11.19 07:18 Сейчас в теме
(2) Я писал и о простых, и о сложных формах. Особенно о формах, которые делал не сам лично.
На сколько я помню, элементы формы различаются и в свойствах, и в событиях. После генерации все равно придется это протыкивать и смотреть все ли работает как нужно, или теперь нужно даже то, что перенеслось переделывать, потому что теперь "это не работает так же" или теперь это не работает на клиенте и логику нужно тащить на сервер. Ко всему прочему конфигурация без БСП - это велосипеды, либо очень простая конфигурация. А внедрять БСП так или иначе придется, а это еще работа с формами.
Это все равно труд, как в том, чтобы разобраться в механизмах формы, как и в том, как это теперь будет работать, и как это теперь нужно переделать. Просто моё мнение - легче сделать заново. Сразу можно разбираться в реализованных механизмах и адаптировать их под управляемый интерфейс. Конечно в некоторых простых формах удобно.

Мысль очень напоминает "Конвертация информационных баз системы «1С:Предприятие 7.7»" - когда конфигурация 7.7 превращалась в 8.2. На мою память эту вещь я использовал всего 1 раз только для "попробовать". Реальные переводы делались руками, потому что дешевле по времени.

В целом, если Ваш конвертор появится в свет, то я скачаю его за стартмани, чтобы посмотреть реализацию и возможно заимствовать в будущем.
3. Perfolenta 203 06.11.19 18:01 Сейчас в теме
и когда, хоть приблизительно, можно ожидать инструмент?
4. user700211_a.straltsou 226 06.11.19 20:00 Сейчас в теме
(3) Зависит от загруженности. Пока могу ваши формы сконвертить, если в личку пришлете
5. Perfolenta 203 06.11.19 21:23 Сейчас в теме
(4) а в каком виде их можно прислать?
6. user700211_a.straltsou 226 06.11.19 23:42 Сейчас в теме
(5) epf или cf со списком нужных форм
17. Aparatus 17 28.01.20 16:14 Сейчас в теме
(6) Странно, что инструмент ещё не в массах, эта штука теперь обязана быть точно так же, как и, например консоль скд и прочие ништяки - у каждого. Спасибо автору за помощь, перенеслось всё просто идеально. Огромная благодарность. Жаль, что сконвертированный результат не пригодился постановщику задачи, но это к теме не совсем имеет отношения.
8. SerVer1C 746 07.11.19 08:21 Сейчас в теме
Идея интересная, не бросайте развивать её.
9. Eret1k 07.11.19 13:37 Сейчас в теме
"В начале работы с УФ это все казалось очень и очень сложным, инертность мышления долго мешала писать правильно (спасибо, что хотя бы многопоточности нет)."

Не только инертность.
Не было подхода MVC.
Когда во всем остальном мире девелопмента все активно начали использовать подход MVC, тут в виду закрытости мира 1С, не могли и представить альтернативы.
10. Cyberhawk 135 11.11.19 11:01 Сейчас в теме
Ну что, когда ждем ИР для тонкого клиента?
11. user700211_a.straltsou 226 11.11.19 12:48 Сейчас в теме
(10) Я не являюсь автором ИР и могу только помочь ее автору с конвертацией
12. tormozit 7133 20.11.19 09:22 Сейчас в теме
Посмотрел на картинки и на сгенерированную форму редактор объекта БД. Сразу бросилось в глаза
- контекстные меню встраиваются как командные панели
- некоторые таблицы со своими командными панелями не отображаются (например таблица результата в окне консоли запросов)
Согласен, что даже в текущем виде конвертор облегчает работу по переводу формы на управляемый вариант. Однако основные затраты в большинстве случаев все таки будут в переработке модуля и там даже частичный конвертор сделать будет намного сложнее.
13. user700211_a.straltsou 226 20.11.19 10:17 Сейчас в теме
(12)
контекстные меню встраиваются как к

- контекстные меню встраиваются как командные панели
исправлю, инструмент все еще в разработке
- некоторые таблицы со своими командными панелями не отображаются
не отображаются табличные поля без колонок. это стандартное поведение УФ
Спасибо за оценку работы и буду рад помочь в переводе ИР на УФ
14. tormozit 7133 20.11.19 10:24 Сейчас в теме
(13)
Получается у тебя некоторые таблицы с колонками конвертируются в таблицы без колонок?
ИР на управляемые формы переводить я не собираюсь. Но конвертор твой действительно будет полезен сообществу.
15. user700211_a.straltsou 226 20.11.19 10:45 Сейчас в теме
(14)
Получается у тебя некоторые таблицы с колонками конвертируются в таблицы без колонок?

Нет. В обработке "ирКонсольЗапросов" табличное поле "РезультатКоллекция" не имеет колонок Реквизиты Данные - пустой, реквизит ТипЗначения - ТаблицаЗначений (колонки создаются при отображении результатов РезультатКоллекция.Значение = мРезультатЗапроса.Выгрузить)

В управляемой версии получаем на форме элемент Таблица "РезультатКоллекция" без колонок, который в режиме просмотра формы не отображается.
16. tormozit 7133 20.11.19 10:52 Сейчас в теме
(15) Наверное тогда стоит в конверторе добавить настройку "создавать пустые колонки при отсутствии колонок в оригинале" - будет добавляться дочерний реквизит реквизита-коллекции и связанное с ним поле таблицы формы. Ведь для оценки корректности конвертации предпросмотр формы - самый эффективный способ.
18. cprit 872 14.09.20 10:57 Сейчас в теме
Добрый день!
Есть ли возможность пощупать самому на ваш конвертер форм? Хотя бы в прототипе.
19. user700211_a.straltsou 226 14.09.20 14:37 Сейчас в теме
(18) Пока не планирую выпускать в свободный доступ
20. tormozit 7133 14.09.20 14:59 Сейчас в теме
(18) Кажется задача не настолько уж сложна. Сделай управляемую форму, состоящую из всех типов элементов или найди навороченную готовую. Изучи устройство в xml: дерево элементов, список реквизитов и список команд. Сделай заготовку/пустышку управляемой формы и выгрузи ее в xml. Загрузи этот xml в построитель DOM. Бери любую реализацию построения дерева элементов обычной формы. Обходи это дерево и в построитель DOM пустышки управляемой формы добавляй соответствующие элементы структуры управляемой формы. Понятно, что будет много шероховатостей, но в целом первую рабочую версию получить можно будет думаю через 40 часов.
21. cprit 872 14.09.20 16:00 Сейчас в теме
(20) Все так. И решение может проще оказаться. Я со своей задачей и руками справлюсь-быстрее будет. Но вот насколько это будет востребовано сообществом - большой вопрос.
Из опыта работы с 1С-ным конвертером из 7.7 в 8.0 могу сказать, что проще было с нуля нарисовать, чем брать сконвертированное. Хотя по виду они были идентичны.
Тут как писалось ранее- будет проблема с конвертацией кода.
22. fixin 4252 30.07.21 15:21 Сейчас в теме
Вот кто так пишет статьи? Я прочитал вдоль и поперек и не понял, что делает твой конвертер?
Надо ли запускать исходную форму или достаточно выгрузить в конфигураторе ее в XML и т.п.
23. CheBurator 3119 30.07.21 15:53 Сейчас в теме
(22) это инструмент для разработчика, а не для девелопера.. ;-)
24. fixin 4252 30.07.21 17:46 Сейчас в теме
(23) Какая разница? Описание должно быть понятным. Можешь ответить что это за инструмент? Что во что он конвертирует?
25. user700211_a.straltsou 226 02.08.21 09:29 Сейчас в теме
(24) В статье показана возможность генерации управляемых форм на основе обычных. Также представлены результаты такой генерации как доказательство концепции
26. fixin 4252 02.08.21 10:51 Сейчас в теме
(25) спасибо КЭП, это я и так понял. Вопрос, через какие механизмы.
27. fixin 4252 02.08.21 12:29 Сейчас в теме
Обработки выгружаются в DataProcessors
Формы обработок в подкаталог Forms
При этом обычные формы выгружаются в файл с расширением BIN, внутри что-то похоже на ЗначениеВСтрокуВнутр.
Управляемые формы выгружаются в нормальный XML.

Поэтому все же для распаковки обычной формы лучше использовать деструктивный анализ (Run-time)
Сам файл управляемой формы довольно несложный:
    
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
    <ChildItems>
        <InputField name="Автомобиль" id="1">
            <DataPath>Объект.Автомобиль</DataPath>
            <ContextMenu name="АвтомобильКонтекстноеМеню" id="2"/>
            <ExtendedTooltip name="АвтомобильРасширеннаяПодсказка" id="3"/>
        </InputField>
    </ChildItems>
    <Attributes>
        <Attribute name="Объект" id="1">
            <Type>
                <v8:Type>cfg:DataProcessorObject.ТестОбработка</v8:Type>
            </Type>
            <MainAttribute>true</MainAttribute>
        </Attribute>
    </Attributes>
Показать


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

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

https://forum.mista.ru/topic.php?id=870651
28. user700211_a.straltsou 226 03.08.21 09:44 Сейчас в теме
(27) Вы статью читали? В ней все написано по пунктам
1) Декомпозиция обычной толстой формы на элементы и анализ их свойств (деструктивный анализ)
2) Генерация XML-файлов по дереву элементов и свойств обычной формы
Все

Проверено и реализовано еще в 2019 году. Даны примеры результатов в виде скринов. Сам конвертер не прилагает
29. aalu14 22.12.22 14:43 Сейчас в теме
А где можно получить сие чудо?
30. TreeDogNight 22 27.02.24 15:45 Сейчас в теме
Добрый день! Вместо обработки Конвертор форм на почту отправилась обработка Консоль заданий для обычных форм, как я могу получить правильную обработку?
Оставьте свое сообщение