Формы. Трудности программной работы

06.10.19

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

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

Перед предисловием

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

 
 Это информация из старого блога DevelPlatform.ru

И раз тема до сих пор актуальна, то поднимем ее еще раз. Немного добавив новой информации.

Предисловие

При разработке интерфейса решений на платформе 1С:Предприятие 8.x часто возникает необходимость изменения форм программным образом. В типовых конфигурациях программная модификация форм осуществляется, например, для механизма контактной информации, который в открываемой форме создает закладку "Контактная информация" и добавляет на нее соответствующие реквизиты, связанные с открываемым объектом.

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

Сегодня в статье будет идти речь о трудностях, с которыми можно столкнуться при программной модификации как управляемых, так и обычных форм. Также будет сделано небольшое сравнение среды разработки "Конфигуратор" с развитой, на мой взгляд", IDE "Visual Studio 2010" в части разработки интерфейсов.

Скучное дело

Именно так! Программное изменение формы это монотонное, скучное дело. Описывать в коде создаваемые элементы, их свойства и поведение. Практически всегда последовательность действий разработчика одинаковая: создал элемент, назначил свойства, по необходимости привязки (для обычных форм) и свойства отображения. После запустил режим 1С:Предприятие чтобы посмотреть на результат. Если в интерфейсе что-то не так, то возвращаемся обратно к коду и так далее.

Для примера сделаем в тестовой конфигурации документ "ПриходнаяНакладная", для которого добавим табличную часть "Товары" с реквизитами "Товар" и "Количество" с типами "СправочникСсылка.Товары" и "Число" соответственно.

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

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

  1. Поле "Номер".
  2. Поле "Дата".
  3. Табличную часть "Товары".
  4. Командную панель табличной части "Товары".

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

Для начала напишем программный код для создания элементов в управляемой форме документа  В конечном итоге она не должна отличаться от формы, созданной до этого конструктором. Для небольшого усложнения примера добавим колонке "Количество" обработчик события "ПриИзменении", по выполнении которого пользователю будет появляться предупреждение о введенном количестве.

Так мы получили программный код, который создает элементы формы, оговоренные ранее. Весь код занял 31 строчку, причем созданный интерфейс очень простой.

Ниже представлен алгоритм для программного создания элементов на управляемой форме с привязкой к колонке "Количество" процедуры обработчика события "ПриИзменении".

 
 Пример создания элементов для обычной формы

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

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

 
 Пример создания элементов для управляемой формы

Факт на лицо. Объем программного кода увеличился практически в пять раз! Время на его написание нужно существенно больше, чем в первом примере.

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

Сложности дальнейшей модификации

Из выше написанного вытекает следующее: даже если мы будем производить все изменения форм в типовой конфигурации, да и вообще в любой, программным образом, то рано или поздно наступит момент, когда добавление одного единственного элемента на форму станет настоящим адом! Представьте себе, что в сформированную ранее обычную форму нам нужно добавить еще одну табличную часть над уже существующей, да еще и вынести реквизиты и табличные части в отдельные закладки!

Написание программного кода для таких действий с элементами настолько усложнит алгоритм, что рано или поздно Вы откажитесь от программной модификации форм. Не согласны? Время покажет!

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

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

Немного критики

Развитие платформы 1С:Предприятие идет с такой скоростью, что иногда складывается устойчивое ощущение того, как платформа подобна инструменту, совершенствующемуся прямо у Вас в руках! В этом нет больших минусов, ведь развитие программы в итоге идет на пользу конечному потребителю, то есть пользователю. Но вот о разработчиках похоже подзабыли!

Предлагаю посмотреть на работу с интерфейсами в "Visual Studio 2010". Создадим простое приложение WindowsForm, и добавим на форму кнопку "button1". Заголовок изменен на "Devel 1C" (см. следующий скриншот).

При этом Visual Studio автоматически (!!!) создает программный код для элементов на форме. То есть если мы пользуемся конструктором форм, IDE все равно создает программный код для каждого элемента формы, заполняет его свойства и прочее.

Код хранится в файле "<ИмяФормы>.Designer.cs", связанный с файлом самой формы. На следующем скриншоте представил часть модуля файла "Designer.cs", в которой среда разработки создает код создания элементов формы.

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

Помощник 

Сказки сказками, но маловероятно, что фирма "1С" имеет приоритетную задачу по улучшению работы среды разработки платформы в части пользовательского интерфейса. Даже не смотря на появление EDT особого прогресса в этой части пока так и нет.

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

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

Инструмент не дошел до финальной версии и до сих пор находится в глубокой альфе в виде эксперимента. Сил и времени на него так и не нашлось. Да и со временем изменил свое отношение к программной работе с формами и не пытаюсь применять его везде. Только там, где без этого никуда.

Вместо заключения

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

Платформа 1С:Предприятие 8.x не имеет собственных инструментов в помощь разработчику для программной работы с формой и ее элементами. Все, что есть - это синтаксис помощник с описанием доступных свойств элементов и описание методов программной работы. Весь рутинный труд по описанию каждого свойства элементов в программном коде ложится на плечи программиста.

Остается надеяться, что среда разработки платформы 1С:Предприятие 8.x будет развиваться и вбирать в себя все лучшее современных IDE. А пока на помощь Вам могут придти инструменты из списка ниже.

 
 А что можете сказать Вы?

Другие ссылки

Интересные инструменты для работы с формами:

обычные управляемые формы программное создание элементов

См. также

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

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

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

6000 руб.

16.01.2015    61699    43    59    

80

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

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

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

5000 руб.

14.01.2016    54316    16    21    

42

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

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

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

2400 руб.

29.06.2020    16623    21    4    

35

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

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

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

27.12.2023    10564    745    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9485    150    acces969    31    

115

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

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

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

1 стартмани

05.07.2022    3577    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12010    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ids79 8275 06.10.19 15:40 Сейчас в теме
Интересный материал, спасибо.
Насчет приоритетов фирмы 1С, у меня часто складывается такое впечатление, что они стремятся не то что упростить, а усложнить разработку и доработку своих продуктов.
Вот взять конфигурации для сравнения: УТ 10.3 и УТ 11, ЗУП 2.5 и ЗУП 3.1.
Да, возможностей больше, но сложность доработки возросла в кубе как минимум. Объем кода увеличился чуть ли не в 10 раз.
Не знаю уж с чем это связано, но факты на лицо.
А взять какую-нибудь конфигурацию 7.7, там вообще не так много было документов, в модуле которых было больше 1000 строк кода.
А сейчас что...
Darklight; duhin; avk72; maksa2005; davdykin; MCV; babys; Yakud3a; zqzq; morin; rpgshnik; YPermitin; +12 Ответить
3. acanta 06.10.19 16:03 Сейчас в теме
(1) в 7ке был меньше словарный запас. При желании весь синтакс помощник 7ки можно было перевести. Проблема в локализации метаданных и кода для поддержки и разработки местными специалистами.
YPermitin; +1 Ответить
7. пользователь 06.10.19 18:23
(1) спасибо на добром слове!
2. MVK80 06.10.19 15:52 Сейчас в теме
(0), Юрий, этот инструмент должен быть однозначно, на мой взгляд, в интересных инструментах в статье: Генерация кода управляемой формы (декомпиляция элементов)
zqzq; fancy; rpgshnik; YPermitin; acanta; +5 Ответить
5. пользователь 06.10.19 18:22
(2) Точно!

Я совсем забыл про эту публикацию. "Лайк, репост" и добавил ссылку на нее в свою статью.

Благодарю!
4. ids79 8275 06.10.19 17:55 Сейчас в теме
Еще вот хорошая статья на тему программного создания элементов форм.
fancy; rpgshnik; YPermitin; +3 Ответить
6. пользователь 06.10.19 18:22
(4) Да, тоже читал. Ссылку также добавил.
Лайк и репост уже давно там оставил :)
8. ZloyProger 8 07.10.19 09:22 Сейчас в теме
Очередная благодарность автору) Когда только начал работать с управляемыми формами наивно полагал - что вот оно счастье, но оказалось что форма управляется кем угодно, но не программистом :-) (может и слишком громко сказано и возможно я не всё ещё научился готовить, бесспорно за один уход от привязок (брр.. вспомню вздрогну этот ад обычных форм и малопонятные, труднодиагностириуемые глюки с ними) можно неистово плюсовать, но маловато! маловато! © Падал прошлогодний снег), но вот здеся описал прямо в статье суть проблемы с управлением шириной колонок при программном создании, красивого и универсального решения которой пока так и не нашел( Буду признателен за идеи)
YPermitin; +1 Ответить
9. пользователь 07.10.19 10:06
(8) спасибо)

Но то что мало это да. Тема очень большая.
10. RustIG 1301 07.10.19 10:51 Сейчас в теме
(0) не на том форуме поднимаете проблемы :( ... сейчас 2019 год - а проблемы 2013 года еще не решены.... не в то ведомство пишите, значит.... одна статья - слишком маленькая никому не известная песочница.... вот если бы каждый лайк за статью уходил сразу письмом в отдел развития платформы 1С.... смогёте такое автоматизировать? :)
YPermitin; +1 Ответить
11. пользователь 07.10.19 10:52
(10) проще из разработки на платформе 1С уйти, чем эту проблему решить :)
12. RustIG 1301 07.10.19 10:54 Сейчас в теме
(11) если решать одному, то "да", проще уйти... а если сообща?!....
YPermitin; +1 Ответить
13. пользователь 07.10.19 10:54
14. RustIG 1301 07.10.19 11:03 Сейчас в теме
(13) есть
идея ;№1. создайте тему (ветку) на форуме разработчиков 1с - можете несколько тем - у вас вроде несколько тем актуальных...
ссылку на тему оставьте здесь - с подписью "поддержите решение вопроса".
я бы перешел и уже там поставил лайк...
при этом описывая проблему на форуме разработчиков , можете оставить ссылку на статью...

идея №2. Разработать внешнюю обработку для отправки писем-вопросов в техподдержку 1С.
Создать пару полей в ней: ссылка на статью ИС + идентиф. собственные данные. Письмо генерируется шаблонно.
YPermitin; +1 Ответить
15. пользователь 07.10.19 11:52
(14) идеи хорошие. Надо подумать.

Но про ответы со стороны фирмы "1С" я отношусь с пессимизмом. Причина в бюрократиии, маленького веса таких сообщений в общем потоке. Все таки в приоритете, думаю, вопросы от больших клиентов и стратегии развития платформы.
16. RustIG 1301 07.10.19 12:40 Сейчас в теме
(15) по сути вы только что снизили приоритет своих вопросов...
больше уверенности, коллеги 1с-ники!
к примеру, сравнение объектов - элементов и свойств - было бы актуально для любых платформ - на обычных и управляемых форм...
...мы сами не знаем куда нас приведут наши идеи... (я о черных лебедях)
17. пользователь 07.10.19 12:43
(16) мои слова - это результат опыта. Если у вас другой, то жто отлично :)
18. RustIG 1301 07.10.19 12:45 Сейчас в теме
(17) я понял, но вы про опыт одного человека.
я предлагаю объединять умы - вместе пробовать изменить ситуацию.
19. RustIG 1301 11.10.19 05:48 Сейчас в теме
(15) в тему https://m.habr.com/ru/post/470561/
можно расшатать их только совместными усилиями....
20. RustIG 1301 15.10.19 01:30 Сейчас в теме
21. davdykin 25 21.10.19 08:10 Сейчас в теме
Спасибо за статью, да, декомпеляция форм - мега инструмент, большое спасибо автору, выручал уже не раз, учитывая возросшую необходимость актуализации, в том числе и 10.3, иногда приходится переписывать на программную доработку элементов, дабы сэкономить на обновлениях.
22. awk 741 30.04.20 08:28 Сейчас в теме
платформа не может сравнивать две формы на различие состава элементов и значений их свойств (больше относится к обычным формам, управляемые имеют больше возможностей для сравнения / объединения),


Может. В том числе, различия обычных форм, платформа может показать графически. То есть две картинки с подсветкой изменений.
23. pm74 199 30.04.20 11:21 Сейчас в теме
плюсик поставил
эх вот написал бы кто статью про логику НЕпрограммного размещения элементов уф -такси , Был бы премного благодарен. Ширина, максимальная ширина, автомаксимальная ширина .. вот это все
26. Yashazz 4707 05.05.20 12:37 Сейчас в теме
(23) А нет там никакой логики, что бы ни рассказывали платформописатели. Глюк на глюке, срань полная. Да ещё от релиза к релизу меняется способ косячить. А нормально эти "управляемые" формы так и не управляются.
24. w.r. 643 30.04.20 21:45 Сейчас в теме
Если программно описывать элементы формы, и без того огромное количество кода в модуле формы станет еще больше. В VS используются языки программирования, поддерживающие ООП, то есть код можно разделить на классы и сделать наследование. В 1С такого нет. 1С взять бы пример в этом плане с ABAP
25. Yashazz 4707 04.05.20 12:50 Сейчас в теме
Эх, Юрий... Всё так... И костылей для программной доработки/анализа/декомпиляции написана куча, и хмл-работа с формами вроде есть... А всё ж как были УФ уродством, так и остались. Как был весь этот, простихосспади, "интерфейс" ублюдочным, так и остался. Как были обычные формы гибкими, удобными и адекватными, так и остаются по сей день. А фирма 1С, вместо чтоб упростить работу разработчиков конфигураций, упрощает работу разработчиков платформы. Как они тогда купили этот чёрный ящик под названием УФ, вставили тяп-ляп в платформу, нате мучайтесь, а только потом сами с ним стали разбираться... Вспомните чудовищное уродство первых релизов. Вспомните попытку MDI-окон (вот уж просто башку оторвать за такое). Про красоты масштабирования, выравнивания, использование рабочего места на экране итд - просто молчу. И когда уже казалось, что хуже некуда - они сляпали "Такси". Который предназначался для мобильного приложения и так в нём и не заработал. Муахаха. А что с 2013 года нормально ничего не сделано - ну так 1С вон "систему взаимодействия" запилила зато, прогресс блин)
27. pm74 199 06.05.20 08:11 Сейчас в теме
(25) MDI это когда много окошек или все в одном ? Последний вариант удручает если честно.
28. Yashazz 4707 06.05.20 08:48 Сейчас в теме
(27) MDI - много независимых окошек. Это вообще был лютый кошмар. Причём, пока им на конференции бухгалтеров ума не вложили, с большим скандалом, они всюду писали, какое стало прогрессивное и крутое... А теперь наворачивают и наворачивают всё новые бесполезные приблуды, вместо чтоб довести до ума хотя бы базовый функционал.
Поручик; +1 Ответить
32. Поручик 4670 30.12.22 08:50 Сейчас в теме
(28) Почему-то именно мне MDI удобнее. "Такси" до сих пор не перевариваю.
29. RustIG 1301 06.05.20 22:40 Сейчас в теме
(25) Эмоционально поддерживаю, поскольку располагать элементы на управляемой форме все равно не стало легче по сравнению с обычными формами. Одна надежда, что однажды запилю свою нетленку для веба на платформе 1с... И тут обычные формы не помогут...

Откуда у вас такая инсайдерская информация?
купили этот чёрный ящик под названием УФ

они сляпали "Такси". Который предназначался для мобильного приложения
31. Yashazz 4707 07.05.20 08:36 Сейчас в теме
(29) Рустем, работал я в 2015 г. с человеком "оттуда", вот и информация. Он на всех злой был, а потому, по его собственным словам, "начхал" на запрет разглашения, и много интересного рассказал. Поскольку некоторые его данные потом подтвердились в практике разработки, не имею оснований сомневаться и в остальных словах.
30. Fox-trot 156 06.05.20 23:49 Сейчас в теме
Оставьте свое сообщение