Быстрая кодогенерация программной доработки форм

28.12.20

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

Данная статья является описанием идеи по быстрому получению кода для программной доработки форм. А также приглашением к участию в реализации данной идеи (даже звездочке на гите буду рад).

Идея состоит в реализации продолжения модуля(фреймворка) для программной доработки форм FormEditor (repo на git).

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

На самом деле интересен фидбек и опираясь на него буду продолжать разработку.

Конечно, хотелось бы развития инструмента, в том числе и сообществом.

Думаю, стоит рассказать с самого начала...

 

Доработка типовой формы:

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

 

 

Мы делаем ее копию и интерактивно "натыкиваем", что нам нужно:

 

 

А дальше начинается самое интересное, то, ради чего пишется этот тизер.

Далее к работе подключается обработка, которая сравнивает 2 формы и находит отличия:

 

 

А дальше отличия преобразуются в код....

 

Предварительно, визуально обработка будет выглядеть так:

 

 

Нужно выбрать форму эталонную и доработанную:

 

 

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

 

 

Недостатки

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

Особенности

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

 

Было бы вам интересно пользоваться таким решением?

 

Ссылки:

Референсная обработка: //infostart.ru/public/304736/

 

Обработка "FormCodeGenerator"Проект на GitHub 

Статьи:

 

Группа в телеграмм: https://t.me/FormCodeGenerator1c

 

См. также

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

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

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

6000 руб.

16.01.2015    61796    43    59    

80

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

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

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

5000 руб.

14.01.2016    54402    16    21    

42

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

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

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

2400 руб.

29.06.2020    16697    21    4    

35

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

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

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

27.12.2023    10736    750    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9614    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 165 12.10.20 12:55 Сейчас в теме
4. huxuxuya 366 12.10.20 13:11 Сейчас в теме
2. malikov_pro 1292 12.10.20 12:56 Сейчас в теме
Как идея доработки основной конфигурации норм, но после нужно удалять доп. форму. Не понятно как объединить изменения если меняем повторно.
Сам пользуюсь по большей частью расширениями, в них программное добавление актуально, но как применить текущую наработку непонятно.
Возможно имеет смысл залезть чуть глубже и сравнивать выгрузки конфигураций, из этого формировать код.
3. huxuxuya 366 12.10.20 13:10 Сейчас в теме
(2) Я на питоне пытался идти по этому пути с выгрузкой в файлы и анализом XML - слишком дорого получается по трудозатратам и библиотеки по сравнению XML, плохо "жуют" хмл форм, плюс там идентификаторы внутри едут, через преобразование XML в JSON тоже делал, там похожая история.

Про удаление доп формы, на самом деле ты можешь взять, скопировать и вставить например в свою же внешнюю обработку и тогда удалять не надо из основной конфигурации...
5. K_A_O 538 12.10.20 14:23 Сейчас в теме
Для генерации кода есть отличная обработка.
https://infostart.ru/public/304736/
6. huxuxuya 366 12.10.20 14:38 Сейчас в теме
(5)Да, на нее опирался при начале разработки, добавил в описание ссылку на нее как на референсную.

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

надо прочтиать там все комментарии под обработкой, что то там много написано интересного...
7. Steelvan 302 12.10.20 16:53 Сейчас в теме
На секунду задумался.

Если я приму в этом участие как соавтор, то мне придется общаться с автором.
С учетом того русско-английского суржика, который употребляет автор, что-то у меня нет желания в этом участвовать.
8. huxuxuya 366 12.10.20 18:08 Сейчас в теме
(7) На английском только названии репозиториев, конфигурации и обработки.
Подумаю что можно с этим сделать, что бы не пугать потенциальных соавторов.
9. muskul 13.10.20 04:45 Сейчас в теме
10. davdykin 25 13.10.20 16:07 Сейчас в теме
На самом деле идея с программной доработкой формы - на мой взгляд насущная, т.к. доработка формы в расширении, лично мне не нравиться:
- я так и не нашел как можно "Обновить из стандартной" все формы
- Зачастую после обновления стандартной - у меня частенько слетали реквизиты в элементах, т.е. сам элемент на форме есть, но не связан с реквизитом - соответственно ничего не работало
- в целом механизм мне не показался удобным.
У программной доработки, на мой взгляд есть один существенный недостаток (помимо бОльших затрат на перваначальную доработку) - это последующая модификация формы, ведь если у вас есть форма оригинал, вы в ней программно добавляете 2 реквизита - добавить следующий реквизит через обработки генерации формы - будет не реально, т.к. копия формы - будет стандартная, без программно сгенерированных реквизитов..
Ну и мне больше понравилась идея - макет, где прописываются все программно добавляемые элементы:
- удобней отлаживать (можно отключить какой-то реквизит)
- Практически нет необходимости кодить - надо только правильно добавить строчку в макет
13. huxuxuya 366 14.10.20 11:29 Сейчас в теме
(10)
С макетом видел, идея тоже прикольная, но обкатать эту идею не разу не получалось, интересно какие там подводные камни есть.

В расширении тоже не нравится программная доработка форм..

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

Программная же доработка формы выглядит так:

Процедура ПриСозданииНаСервере

//Где то тут добавляем элементы и реквизиты программно

КонецПроцедуры

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

т.е.

Процедура ПриСозданииНаСервере

//Где то тут добавляем элементы и реквизиты программно

//Грабим все реквизиты и элементы формы после программной доработки

Итого: Добавить следующий реквизит через обработки генерации формы - будет реально :)
т.к. эталоном может выступать форма уже после того как отработали обработчики программного добавления элементов

КонецПроцедуры
15. davdykin 25 14.10.20 16:01 Сейчас в теме
(13)
1. Не совсем понял, почему не нравиться доработка через расширение
2. По дальнейшей доработки, не совсем понял что с чем вы собираетесь сравнивать, ведь, у нас в режиме предприятия - нет эталона, а в режиме конфигуратор - нет дработанной.

В расширении, если конфигурация на БСП, в принципе можно не захватывать формы, во многих формах вызываются процедуры общих модулей, которые достаточно перехватить.
18. huxuxuya 366 14.10.20 17:13 Сейчас в теме
(15)
1. Поддерживать сложно расширения, если их много, лишние телодвижения, отвалиться могут, изменения сложно увидеть, трёхстороннего нет...
2. При дальнейшей доработке, если какие то независимые блоки логики добавлять на форму то доработанная форма не нужна, если вносить какие то правки в те места где уже элементы программно сформированы кодом, то да, вы правы только вручную кодом. Вы правы, колонку в программно доработанную таблицу придется вручную добавлять.

С расширением интересная идея, если эту обработку в расширение пихнуть, то может в этом расширении и можно будет хранить и эталонную(на случай если она в поставке изменится) и доработанную форму...
14. huxuxuya 366 14.10.20 11:35 Сейчас в теме
(10)
А как при макете будут выглядеть обработчики элементов форм, там ПриИзменении, а для команд, когда логика нужна с описанием оповещения это как реализуется?
16. davdykin 25 14.10.20 16:09 Сейчас в теме
(14)Оповещение, насколько помню - прописываешь имя процедуры которое есть в расширение формы и на его основе генеришь "Действие", которое устанавливаешь на определенные события..
17. huxuxuya 366 14.10.20 16:56 Сейчас в теме
(16) Значит и ПриИзменении так же в расширении формы должно быть...
Просто думал что макет будет без расширений жить, просто в доработанной конфигурации.
И главная идея, в одном месте одну строчку добавил и все.. больше нет изменений формы, а все остальное в макете жить будет.
19. Brawler 454 16.10.20 08:29 Сейчас в теме
(10) Мне тоже не нравится наследование форм в расширениях.
Я вообще даже за то чтобы ты типа отнаследовал в расширение некую форму, но не как форму, а только ее модуль и все!!!
ТОЛЬКО МОДУЛЬ! (с правом выбора типа наследования естественно, модуль или вся форма с модулем формы)
Чтобы не париться потом обновлением форм по всему расширению.
Все изменения естественно делать только программно.

Почему за такой вариант топлю?
Ну вот у меня ERP, на одном из релизов платформы отнаследовал форму "Заказа клиента".
Программно всякие изменения сделаны, а на самой форме ничего не делали.
Обновляем конфигурацию на след релиз.
Появилась потребность обновить форму.
Обновляю форму в расширении.
Запускаю базу.
Открываю заказ клиента.
Первое что кидается в глаза, пустое поле хозяйственной операции, а в списке выбора тоже пустота, вернее 4 пункта без названий. И это было не одно такое заглючившее поле.
Пришлось восстанавливать работоспособность.
Ну это я считаю косяк!
И я не хочу с ними сталкиваться!
Хочу просто модуль формы иметь в доступе и в него вносить изменения.
20. FatPanzer 16.10.20 09:16 Сейчас в теме
(19) Ну так не изменяйте захваченную форму, изменяйте только модуль.
Какие проблемы-то?
21. Brawler 454 16.10.20 09:46 Сейчас в теме
(20) Ну так только модуль и изменяли, ни одного "пикселя" не сдвинули на самой форме, а баги платформы или что это хрен его знает по итогу ломают форму при ее обновлении при переходе на новые релизы конфигурации.
24. davdykin 25 16.10.20 13:41 Сейчас в теме
(21)Вы попробуйте, не захватывать форму, захватите общий модуль, который вызывается при создании формы, и в нем уже меняйте форму. В БСП по-моему такой модуль есть, погуглите, я думаю найдете.

В принципе, я не против редактирования форм в расширении, но мне не нравиться как это сделано сейчас )) . При нынешнем раскладе - программное изменение - видится предпочтительным вариантом.
25. FatPanzer 16.10.20 13:42 Сейчас в теме
(24)
В БСП по-моему такой модуль есть, погуглите, я думаю найдете.
Нет, это частные решения в конфигурациях. Например, в УТ это модуль "СобытияФорм", где прописаны все серверные обработчики событий формы из модуля форм... Есть такой же и клиентский.
В БСП только свои переопределяемые модули - для своих же подсистем. Остальная общая логика реализуется разработчиками конкретного решения.
26. Brawler 454 16.10.20 14:27 Сейчас в теме
(24) Со временем при большом числе доработок эти модули превращаются в СУПЕР модули, а хотелось бы все же программный код хранить ближе к тем объектам для которых он предназначен, а уже что-то общее выносить в общие модули.
27. FatPanzer 16.10.20 14:33 Сейчас в теме
(26) Ну, надо предложить 1С реализовать в платформе дополнительные модули для форм, объектов и менеджеров, команд и прочих модулей приложений и сеансов. И будет счастье.
Отличная идея, кстати. Причем, уже реализованная. В виде расширений...
29. huxuxuya 366 21.10.20 10:53 Сейчас в теме
(27) На самом деле нет ничего плохого внутри модуля формы, например внизу хранить весь обслуживающий код, который не является типовым. При обновлении это проблем не вызывает и удобно что сразу видно что в форме доработано.

Для простых доработок удобно использовать "СобытияФорм", но к сожалению это да, превращается в огромные простыни, и не у всех конфигураций есть такие переопределяемые модули для форм.
23. davdykin 25 16.10.20 13:39 Сейчас в теме
Как только ты захватил форму в расширение - она скорее всего перестала "обновляться" из основной конфигурации, даже если на саму форму ничего не выносили
11. sytkosa 119 14.10.20 05:39 Сейчас в теме
(10) Если не сложно приведите ссылку на обработку где реализовано идея - макет , где прописываются все программно добавляемые элементы. Я думаю сообществу можно еще раз напомнить о ней. Сам найти быстро по поиску не смог.
12. davdykin 25 14.10.20 09:11 Сейчас в теме
(11)https://infostart.ru/1c/articles/560508/
Вот эта доработка, но здесь предлагается регистр сведений, мне эта идея не понравилась, я все хотел переделать на встроенный макет, чтобы вместе с обновлением конфигурации обновлялись и программные доработки, но руки не дошли пока
22. capitan 2466 16.10.20 12:56 Сейчас в теме
Мужик с женским фото на аватарке и ником хухухуйя на гитхабе...
За одно это только плюс поставил
user1433102; JohnyDeath; FatPanzer; +3 Ответить
28. huxuxuya 366 21.10.20 10:28 Сейчас в теме
(22) Спасибо, хотя бы один позитивный комментарий во всем треде :))

Кстати благодаря комментариям тут, немного поменялось виденье того как кодогенерация должна быть устроена, что бы было все еще проще в части подготовительных работ.
Оставьте свое сообщение