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

06.11.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Пример сгенерированных форм (суффикс Упр) для доната
.epf 70,09Kb
61
61 Скачать бесплатно

Каждый опытный разработчик пишет для себя инструменты. И чем больше опыт, тем больше задач приходится автоматизировать, в том числе и поддержка 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 Платные (руб)

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

6000 руб.

16.01.2015    62984    44    59    

82

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

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

2400 руб.

29.06.2020    18850    26    6    

41

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

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

1500 руб.

06.10.2020    10222    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.08.2024    16781    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7339    smielka    37    

100

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

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

27.12.2023    14782    913    elcoan    47    

117

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

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

2 стартмани

10.04.2023    11909    162    acces969    31    

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

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

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


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

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

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

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

В целом, если Ваш конвертор появится в свет, то я скачаю его за стартмани, чтобы посмотреть реализацию и возможно заимствовать в будущем.
3. Perfolenta 206 06.11.19 18:01 Сейчас в теме
и когда, хоть приблизительно, можно ожидать инструмент?
4. user700211_a.straltsou 227 06.11.19 20:00 Сейчас в теме
(3) Зависит от загруженности. Пока могу ваши формы сконвертить, если в личку пришлете
5. Perfolenta 206 06.11.19 21:23 Сейчас в теме
(4) а в каком виде их можно прислать?
6. user700211_a.straltsou 227 06.11.19 23:42 Сейчас в теме
(5) epf или cf со списком нужных форм
17. Aparatus 17 28.01.20 16:14 Сейчас в теме
(6) Странно, что инструмент ещё не в массах, эта штука теперь обязана быть точно так же, как и, например консоль скд и прочие ништяки - у каждого. Спасибо автору за помощь, перенеслось всё просто идеально. Огромная благодарность. Жаль, что сконвертированный результат не пригодился постановщику задачи, но это к теме не совсем имеет отношения.
8. SerVer1C 815 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 227 11.11.19 12:48 Сейчас в теме
(10) Я не являюсь автором ИР и могу только помочь ее автору с конвертацией
12. tormozit 7229 20.11.19 09:22 Сейчас в теме
Посмотрел на картинки и на сгенерированную форму редактор объекта БД. Сразу бросилось в глаза
- контекстные меню встраиваются как командные панели
- некоторые таблицы со своими командными панелями не отображаются (например таблица результата в окне консоли запросов)
Согласен, что даже в текущем виде конвертор облегчает работу по переводу формы на управляемый вариант. Однако основные затраты в большинстве случаев все таки будут в переработке модуля и там даже частичный конвертор сделать будет намного сложнее.
13. user700211_a.straltsou 227 20.11.19 10:17 Сейчас в теме
(12)
контекстные меню встраиваются как к

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

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

В управляемой версии получаем на форме элемент Таблица "РезультатКоллекция" без колонок, который в режиме просмотра формы не отображается.
16. tormozit 7229 20.11.19 10:52 Сейчас в теме
(15) Наверное тогда стоит в конверторе добавить настройку "создавать пустые колонки при отсутствии колонок в оригинале" - будет добавляться дочерний реквизит реквизита-коллекции и связанное с ним поле таблицы формы. Ведь для оценки корректности конвертации предпросмотр формы - самый эффективный способ.
18. cprit 901 14.09.20 10:57 Сейчас в теме
Добрый день!
Есть ли возможность пощупать самому на ваш конвертер форм? Хотя бы в прототипе.
19. user700211_a.straltsou 227 14.09.20 14:37 Сейчас в теме
(18) Пока не планирую выпускать в свободный доступ
20. tormozit 7229 14.09.20 14:59 Сейчас в теме
(18) Кажется задача не настолько уж сложна. Сделай управляемую форму, состоящую из всех типов элементов или найди навороченную готовую. Изучи устройство в xml: дерево элементов, список реквизитов и список команд. Сделай заготовку/пустышку управляемой формы и выгрузи ее в xml. Загрузи этот xml в построитель DOM. Бери любую реализацию построения дерева элементов обычной формы. Обходи это дерево и в построитель DOM пустышки управляемой формы добавляй соответствующие элементы структуры управляемой формы. Понятно, что будет много шероховатостей, но в целом первую рабочую версию получить можно будет думаю через 40 часов.
21. cprit 901 14.09.20 16:00 Сейчас в теме
(20) Все так. И решение может проще оказаться. Я со своей задачей и руками справлюсь-быстрее будет. Но вот насколько это будет востребовано сообществом - большой вопрос.
Из опыта работы с 1С-ным конвертером из 7.7 в 8.0 могу сказать, что проще было с нуля нарисовать, чем брать сконвертированное. Хотя по виду они были идентичны.
Тут как писалось ранее- будет проблема с конвертацией кода.
22. fixin 4273 30.07.21 15:21 Сейчас в теме
Вот кто так пишет статьи? Я прочитал вдоль и поперек и не понял, что делает твой конвертер?
Надо ли запускать исходную форму или достаточно выгрузить в конфигураторе ее в XML и т.п.
23. CheBurator 2712 30.07.21 15:53 Сейчас в теме
(22) это инструмент для разработчика, а не для девелопера.. ;-)
24. fixin 4273 30.07.21 17:46 Сейчас в теме
(23) Какая разница? Описание должно быть понятным. Можешь ответить что это за инструмент? Что во что он конвертирует?
25. user700211_a.straltsou 227 02.08.21 09:29 Сейчас в теме
(24) В статье показана возможность генерации управляемых форм на основе обычных. Также представлены результаты такой генерации как доказательство концепции
26. fixin 4273 02.08.21 10:51 Сейчас в теме
(25) спасибо КЭП, это я и так понял. Вопрос, через какие механизмы.
27. fixin 4273 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 227 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 Сейчас в теме
Добрый день! Вместо обработки Конвертор форм на почту отправилась обработка Консоль заданий для обычных форм, как я могу получить правильную обработку?
31. bolush 01.10.24 11:52 Сейчас в теме
К сожалению, я ожидал готовое решение в виде обработки, но вместо этого получил обработку, который предназначен для регламентных задач, а не для заявленной цели. Понимаю, что автор делился концепцией, но для меня это оказалось бесполезным. Рекомендую всем внимательнее читать описание, чтобы не тратить время впустую.
Оставьте свое сообщение