[Общий модуль] Динамическое формирование интерфейса

24.08.22

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

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

Добрый день, Коллеги!

Вы, наверное, знакомы с моей публикацией-шпаргалкой «Программное создание элементов формы». В конце той статьи имеется первая попытка создания общего модуля для облегчения разработки динамического интерфейса. Так же у меня на Инфостарт представлена функция по созданию динамического списка. Новая публикация содержит только общий модуль "Динамического формирование интерфейса" (ДФИ), собравший в себе всё лучшее из практики и прошлых статей, а так же новые функции.

 

Особенности модуля «Динамическое формирование интерфейса»

 Наименование функций совпадает с наименованием меню интерактивного создания элементов на форме.

 

 Описание функций

 

 Подготовлены структуры свойств

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

 

 Наличие специфических элементов

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

 

Общий модуль "Динамическое формирование интерфейса"

 
 Программный код для общего модуля "Динамическое формирование интерфейса"

 

   https://github.com/KotovDima1C/DFI/blob/master/ModuleDFI.bsl  

Демонстрация работы

 
 Код для демонстрации работы модуля во внешней обработке (тестировал 1С:ERP 2.4.11.088)

Достаточно создать новую обработку и добавить код в модуль формы. Установить форме метод "ПриСозданиеНаСервере". Так же стоит понимать, что общий модуль называется "ДФИ". Ниже демонстрация работы, все элементы созданы программно с помощью модуля "Динамического формирования интерфейса".

 

История версий

2.0.0.1 – первая версия модуля.

// Свежую версию смотрите на GitHub, история версий вестись впредь не будет

 

Резюме

Применение

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

Нюанс программного создания элементов

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

 

Всем удачного кодинга!

UI UX Интерфейс Динамически Программное создание Динамическое поле динполе элементы элемент

См. также

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

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

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

6000 руб.

16.01.2015    61712    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    16625    21    4    

35

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

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

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

27.12.2023    10568    745    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9487    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. Synoecium 777 28.08.20 09:59 Сейчас в теме
Отличная новость. Пользовался вашими предыдущими наработками по динамическому созданию элементов форм, некоторые моменты дорабатывал под свои нужды. Посмотрю, что появилось в этой версии.
На мой взгляд в современной доработке типовых без такого механизма делать нечего, первым делом добавляю эти модули в конфигурацию/расширение.
Demlan; user1804494; avmironov; vvdluua; davdykin; Evg-Lylyk; rpgshnik; +7 Ответить
2. rpgshnik 3625 28.08.20 10:02 Сейчас в теме
(1) спасибо, согласен с вами
user1804494; avmironov; +2 Ответить
3. Yashazz 4707 28.08.20 10:06 Сейчас в теме
Считаю эти экзерсисы малонужными. По месту проще сделать, не тягая весь модуль, а в большинстве случаев теперь можно применять расширение и делать элементы формы в конфигураторе - быстрее, проще, прозрачнее, управляемее.

Я подобный модуль написал ещё в 2014 году, но не вижу смысла выкладывать - такие наработки есть наверняка у каждого. Это ж тупейшая элементарщина.
user1564146; angabanga5; GATTUSO; AnryMc; Neuroproton; tsmult; slknnk; Ish_2; Nikiforov_001; sapervodichka; +10 21 Ответить
10. RocKeR_13 1314 28.08.20 11:31 Сейчас в теме
(3)
а в большинстве случаев теперь можно применять расширение и делать элементы формы в конфигураторе

А потом при обновлении платформы слетают, например, типы основных реквизитов у форм объектов и кнопка для обновления формы в расширении не помогает, что приводит к необходимости, по сути, ручного восстановления формы. Уже наступал на эти грабли, теперь в расширения тоже добавляю общий модуль для программного добавления своих элементов/реквизитов/команд форм. Да, если добавлено одно поле на одну форму, то может и нет смысла программно добавлять: если что, восстановить его нет проблем. Но если в расширении изменено форм десять и на них добавлено множество своих реквизитов/элементов/команд, то для их ручного восстановления может понадобиться больше времени, чем на написание программного добавления.
оggghhhiiu; avmironov; user1669811; eufes; JohnyDeath; rpgshnik; +6 Ответить
14. rpgshnik 3625 28.08.20 11:42 Сейчас в теме
(10) на днях делал обработку по групповому формированию документов. Программист до меня сделал процедуру, которая генерировала программно множество реквизитов, там реально десятки, таблицы, кнопки и т.п... Как я был счастлив скопировать её просто в обработку и после все элементы создались можно сказать сами, я только два реквизита свои добавил на форму интерактивно :)) а по новой всё настраивать я бы застрелился, ну точно не пара секунд. По этому да, в таких случаях тоже очень помогает.
programmer_87; avmironov; +2 Ответить
16. Yashazz 4707 28.08.20 11:53 Сейчас в теме
(14) Так это вы просто сгребли проблему из одного места в другое. Я считаю сам подход динамического рисования формы порочным.
17. Yashazz 4707 28.08.20 11:58 Сейчас в теме
(10) А программно будто сильно помогает))) Если типы "уехали", тут уж полюбому ревизовать код и декларации.
А вот как вы будете искать всё, подлежащее ревизии, если оно программно, я слабо понимаю - то ли дело поиск по элементам форм, да инструменты сравнения формы до и после, появившиеся в новых релизах. Если изменились, например, типовые группы элементов, так код просто лажать начнёт, и давай заново; а визуально быстрее и проще, и надёжнее.
Во множестве случаев незачем изменять форму, разумнее свою делать. И даже если изменено много, так это хоть сразу видно, удобно и быстро, а не лазить по модулям, где там чего добавляется, в каких случаях, да когда откуда вызывается.
21. SeiOkami 3418 28.08.20 18:28 Сейчас в теме
(3) то есть, это настолько ненужная и "порочная" (как вы пишите ниже) практика, что "наработки есть наверняка у каждого"?

Никогда не понимал людей, которые ругают публикацию, при этом хвастаясь, что "та я ещё N лет назад это делал, да ещё и в сто раз круче, но выкладывать не буду - лучше это обосру". 😒
DEG156; оggghhhiiu; 3gf; dammit666; SanchoD; pintov; svezr; tricolor; user779438; Mx00; user619846_n.taradanov; programmer_87; avmironov; ixijixi; director04; AlexeyPapanov; GATTUSO; lefthander; herfis; Somebody1; soulner; fatman78; fcrazy; mvxyz; user695525_d.varvashevich; Symbiat; boggonzikov; fvr2000; GetNight; kMidas; JohnyDeath; tps_01; +32 Ответить
22. Yashazz 4707 28.08.20 19:35 Сейчас в теме
(21) А вы не передёргивайте, товарисч. Я ничего не обсирал ни единым словом. Я высказался о подходе (что порочен имхо) и о уровне сложности задачи (тупейшая элементарщина). О публикации ничего не было. Далее, я не хвастался, а высказался. Я ничего не говорил о "крутейшем" своём модуле - исключительно, что делал похожее и давно.

Никогда не понимал людей, которые читают не что написано, а что хотят увидеть, и на пустом месте пытаются спровоцировать конфликт. Как вот означенный (возможно, тролль) SeiOkami попытался. Учитесь слышать окружающих, товарисч, и не судите по себе)
user977585; user1835472; _OLEG; AnryMc; tsmult; FiftyStars; +6 2 Ответить
23. SeiOkami 3418 28.08.20 19:39 Сейчас в теме
(22)

Я подобный модуль написал ещё в 2014 году, но не вижу смысла выкладывать - такие наработки есть наверняка у каждого. Это ж тупейшая элементарщина.


Я считаю сам подход динамического рисования формы порочным.


Вместо тысячи слов.
оggghhhiiu; SanchoD; avmironov; slknnk; rpgshnik; Evg-Lylyk; ixijixi; +7 Ответить
25. Yashazz 4707 28.08.20 19:43 Сейчас в теме
(23) Да. Потому что за эти 6 лет малость поплясал на этих граблях и сделал выводы. Учусь, тксзть, на своём опыте) И потому, что 6 лет назад расширения и платформа не могли того, что могут теперь.

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

Уймись, тролль, ты предсказуем.
user749894; _OLEG; AnryMc; redtram; tsmult; slknnk; +6 5 Ответить
53. Aletar 04.09.20 06:22 Сейчас в теме
(3) Мне кажется Вы слишком поспешны в суждениях. Что делать в ситуацих, когда до открытия формы ты не знаешь об его элементах. Как пример, БСП-ная подсистема Анкетирование. Там без подобной библиотеки не обойтись, чтобы построить форму для опроса. Расширения или хранения чего-то в макете в этом случае не сильно поможет.
avmironov; +1 Ответить
57. Yashazz 4707 04.09.20 13:05 Сейчас в теме
(53) Спокойно можно поработать с формой и без открытия. Расширение же применяется в момент компиляции формы на сервере, а не в момент открытия. И объявления переменных, и внепроцедурный общий серверный код, и событие ПриСозданииНаСервере - всё это преспокойно отрабатывает применительно к расширению и для ПолучитьФорму. Расширение уже активно прицеплено и всё ловится.

Другое дело, если типовые программные доработки формы засунуты куда-то в ПриОткрытии или вызовах после открытия... Но за такое надо бить по рукам, ващета.
58. Aletar 04.09.20 13:28 Сейчас в теме
(57) Если честно, не совсем понял. Событие ПриСозданииНаСервере в расширении отрабатывает - это понятно, но если нужно построить интерфейс формы в зависимости от данных справочника, все равно же нужно программно выводить элементы. Т.е. хоть и в расширении, но все равно при помощи подобной библиотеки.
59. Yashazz 4707 04.09.20 14:15 Сейчас в теме
(58) Если интерфейс формы существенным образом зависит от каких-либо данных, нужно делать свои специализированные формы, вызываемые из основной либо вместо основной. Статично делать, в конфигураторе, для расширения. И не лениться заимствовать нужную событийную логику. А если таких случаев получается зоопарк, значит, надо продумывать бизнес-процесс и методологию работы, а не кидаться программно клепать поля.
75. Aletar 26.11.21 14:13 Сейчас в теме
(59) Поздновато, конечно. Но все-таки отвечу раз вспомнил.

Это полезно для ситуаций, когда форма генерируется по данными базы данных. Т.е. на этапе конфигурирования мы ещё не знаем как форма будет выглядеть. Например, подсистема Анкетирование в БСП, т.е. пользователь создает анкету: здесь будет такой вопрос, варианты ответов в видео радиокнопок (надо выбрать одно значение из нескольких). Дальше вопрос с произвольным полем ввода для ответа. А вот здесь нужно выбрать несколько значений из списка. Другой пользователь открывает анкету и по данным в базе генерируется форма.

И такие ситуации, когда подобные библиотеки могут пригодиться, в общем-то не так уж и редки.
60. Yashazz 4707 04.09.20 15:16 Сейчас в теме
(58) Или можно сделать свою либо расширенную форму, где на разных страницах предусмотреть варианты полей и внешнего вида в зависимости от данных. И ими рулить.
4. Yashazz 4707 28.08.20 10:08 Сейчас в теме
Другое дело, если б кто-то довёл до ума настоящее создание элементов формы - как это делает сама платформа - средствами СКД, условного оформления итд. На внутреннем процессоре. Я нечто подобное начал было, да руки не доходят.
Ещё можно поиграть с табличным документом - отрисовать на нём "копию" формы. Чисто средствами СКД. Это, имхо, интереснее, чем в сотый раз публиковать, как на форме поле или кнопочку делать...
user749894; tsmult; slknnk; Ish_2; +4 5 Ответить
9. leosoft 165 28.08.20 10:20 Сейчас в теме
(4)
На внутреннем процессоре


А можно поподробнее - о каком процессоре идет речь и как его пощупать?
15. Yashazz 4707 28.08.20 11:52 Сейчас в теме
(9) А о процессоре СКД и макете компоновки. Дело в том, что 95% решений на СКД работают со схемой и настройками ДО того, как скомпоновать макет, т.е. скармливают ему, а дальше по накатанной. Тогда как избирательное изменение уже готового макета не менее интересно, и позволяет фактически отрисовать форму (как, собственно, это и делает движок 1С) со всеми её элементами без особенного напряга. Там появляется ряд возможностей, которых у настройки "до того" просто нет.
29. Ish_2 1104 31.08.20 03:14 Сейчас в теме
(4)
Ещё можно поиграть с табличным документом - отрисовать на нём "копию" формы. Чисто средствами СКД. Это, имхо, интереснее, чем в сотый раз публиковать, как на форме поле или кнопочку делать...

Какая задача при этом решается ?
Допустим, задали какие-то настройки СКД вывели результат в Табличное поле формы какого-то документа, разрешили для редактирования определенные ячейки. При проведении документа
для каждой разрешенной для редактирования ячейки по ЭлементуРасшифровки определяем набор аналитик и записываем полученные данные в какой-то регистр.
Угадал ?
56. Yashazz 4707 04.09.20 12:18 Сейчас в теме
(29) Ага, в точку! Именно так.
35. bmk74 233 31.08.20 13:49 Сейчас в теме
(4)
Другое дело, если б кто-то довёл до ума настоящее создание элементов формы

Ну а как вам такое Создание элементов и поиском найти можно и ничего программировать не нужно
Оберон; +1 Ответить
37. Yashazz 4707 31.08.20 23:28 Сейчас в теме
(35) А я примерно так свою механику и делал. Иначе сдохнуть можно, даже просто поддерживать всё это хозяйство, не говоря уж о развитии.
5. infosoft-v 867 28.08.20 10:15 Сейчас в теме
Дмитрий, спасибо за удобную библиотеку.
Не могли бы вы указать адрес репозитория GitHub с этой библиотекой?
Cthulhu; rpgshnik; +2 Ответить
7. rpgshnik 3625 28.08.20 10:18 Сейчас в теме
(5) планирую, укажу в будущем, пока нету :(
54. rpgshnik 3625 04.09.20 09:07 Сейчас в теме
(5) Разместил - https://github.com/KotovDima1C/DFI.git
baracuda; VAAngelov; Cthulhu; OAC_soft; Interrupted; infosoft-v; +6 Ответить
6. leosoft 165 28.08.20 10:17 Сейчас в теме
Я правильно понимаю, что можно этот общий модуль в расширение закинуть и использовать во внешних обработках и расширениях?
8. rpgshnik 3625 28.08.20 10:19 Сейчас в теме
(6) в пределах того расширения, да. Если в конфигурации в целом, то в саму конфигурацию.
11. RocKeR_13 1314 28.08.20 11:37 Сейчас в теме
(8) Если расширение активно, то из внешних обработок можно обращаться к объектам этого расширения, в т.ч. и к общим модулям
rpgshnik; +1 Ответить
12. rpgshnik 3625 28.08.20 11:39 Сейчас в теме
(11) хм, настолько с расширениями не работал. Спасибо, попробую.
13. RocKeR_13 1314 28.08.20 11:41 Сейчас в теме
(12) у меня просто в одной публикации есть решение в виде расширения и внешней обработки; так вот по началу переносил когда изменения из расширения в обработку и не везде заменял вызовы общих модулей расширения, то возникал конфуз: у меня все работало (расширение-то активно), а у пользователей - нет))
rpgshnik; +1 Ответить
18. Yashazz 4707 28.08.20 12:00 Сейчас в теме
(11) Внешние обработки на этапе разработки в конфигураторе НЕ видят никаких расширений. Поэтому писать код будете вслепую.
19. krollzlat 28.08.20 12:09 Сейчас в теме
Нечто подобное используем у себя в конфигурации. Для тех кому нравится эта идея, но не хочется вскрывать большинство форм, советую обратить внимание на процедуру МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
SPonomareff; neverhood_05; okulus; rpgshnik; +4 Ответить
20. rpgshnik 3625 28.08.20 15:35 Сейчас в теме
(19) да всё верно, именно там так же использую модуль в этой переопределеяемой процедуре
24. Yashazz 4707 28.08.20 19:42 Сейчас в теме
А так по самой публикации - ну, есть, есть что покритиковать. Навскидку: во-первых, мне не кажется правильным подход множества аргументов в функциях. Потому что потом менять трудно при доработках. Разумнее передавать структуру параметров, тем более что у некоторых действий их штук 8-10 запросто может быть. Во-вторых, мне не нравится числовая нотация служебных полей (то же выравнивание) - почему бы не передавать сразу системные перечисления?
Если вдумаюсь - могу ещё накидать.
gmw; _OLEG; okulus; rpgshnik; +4 Ответить
30. rpgshnik 3625 31.08.20 03:55 Сейчас в теме
(24) ну вот хорошая критика, спасибо.
26. dhurricane 28.08.20 20:45 Сейчас в теме
Спасибо большое за то, что поделились.

Хотелось бы сделать небольшое замечание. Очень неудобно читать код, где используются "магические" числа в качестве аргументов. Подозреваю, Вы их использовали вместо системных перечислений, преследуя цель более компактного кода. Мне кажется, компромиссом бы здесь было использование строк вместо чисел: "Авто", "Лево", "Право" и т.д.

И маленькое предложение. При создании новых элементов, не связанных с реквизитами, т.к. параметр "Заголовок" необязательный, когда он не указан, будет использовано имя создаваемого элемента. Было бы удобнее, если заголовок генерировался из имени, расщепляя его на слова, как это происходит при интерактивном добавлении элементов на форму.
mikl79; antonio_i; Дмитрий74Чел; JohnyDeath; Yashazz; rpgshnik; +6 Ответить
38. rpgshnik 3625 01.09.20 09:33 Сейчас в теме
(26) спасибо за замечания, попробую учесть
27. malikov_pro 1288 29.08.20 08:07 Сейчас в теме
1. Ожидать ли на GitHub?
2. Как связать программно добавленный реквизит формы с реквизитом объекта? Проблема: в расширении при добавлении реквизита и импорте формы в нее добавленный реквизит не добавить. Либо делать отдельный реквизит и программно читать, писать, либо импортировать объект формы что влечет за собой импорт всех используемых объектов. (в примере не нашел, возможно не внимательно код смотрел).
33. rpgshnik 3625 31.08.20 04:00 Сейчас в теме
(27) 1 - планируется.
2 - про объект будет доработка.
55. rpgshnik 3625 04.09.20 09:07 Сейчас в теме
28. user649290_jenia1592 29.08.20 15:45 Сейчас в теме
Спасибо за публикацию! Отличный модуль! Только вот создание таблиц на форме из данных объекта не работало, у вас там не предусмотрено это. Немного дописал и все получилось. Скрин доработки во вложении)
Прикрепленные файлы:
TerveRus; rpgshnik; sapervodichka; +3 Ответить
31. rpgshnik 3625 31.08.20 03:57 Сейчас в теме
(28) хороший вариант с объектом, спасибо
32. slawa 26 31.08.20 04:00 Сейчас в теме
Для какой конфигурации сделана тестовая обработка?
34. rpgshnik 3625 31.08.20 04:42 Сейчас в теме
(32) исправил теперь подходит для 1С:ERP 2.4.11.088, тестировал для публикации на голой конфиге с наброском метаданных схожих с ЕРП по памяти :)
36. bmk74 233 31.08.20 13:53 Сейчас в теме
Не сочтите за рекламу..но все таки мой способ полегче будет
Создание элементов
Элементы и реквизиты всегда можно найти в макете, т.е поиском можно пройтись..
И ни строчки кода писать не нужно, если не нужны обработчики
42. kirillkr 29 02.09.20 10:21 Сейчас в теме
(36) плюс программной генерации элементов - при выгрузке конфигурации в Git нагляднее виден код что поменялось, чем XML файл с данными табличного документа.
43. bmk74 233 02.09.20 11:31 Сейчас в теме
(42)А какой в этом скрытый смысл ?, Выгружать конфу в git, Не я понимаю если сотня разработчиков пишет один код и есть супервайзер который потом или принимает request или отклоняет...но это редкость...
44. kirillkr 29 02.09.20 12:03 Сейчас в теме
(43)
тут вопрос философский. Например у нас в компании руководители, от слова "совсем" не знают (не программируют) 1С. Поэтому по совсем разным проектам и направлениям они кидают разным сотрудникам не вдаваясь в подробности, кто в какой области специалист. Иногда задачи прилетают людям, которые упорно не могут научиться программировать в типовых конфигурациях на УФ, и весь код пишут по старинке как на 8.0-8.2. После работы таких людей я как раз и анализирую какие изменения были сделаны и сам вношу корректировки, потому что обучить невозможно, а заменить смысла нет, т.к. это не его специализация - он в другом силен.
39. SizovE 262 02.09.20 08:32 Сейчас в теме
Форму то создать можно, а вот процедуры по элементам управления (ПриАктивизации, ПриИзменении) в общий модуль не вытащить, все равно руками на форму добавлять. Вот хорошо бы 1С это сделала
Yashazz; rpgshnik; +2 Ответить
40. rpgshnik 3625 02.09.20 08:40 Сейчас в теме
(39) это катастрофически не хватает, согласен.
45. Cyberhawk 135 03.09.20 11:18 Сейчас в теме
(39) На форму обычно достаточно добавить только пару универсальных точек входа (на клиенте и на сервере контекстно), причем в довольно многих типовых формах такие точки уже есть - это обработчики команд с "Подключаемый_" в начале имени.
46. SizovE 262 03.09.20 15:34 Сейчас в теме
(45) Ну как же, пару ) у Вас событий у элемента обычно ПриАктивизацииСтроки, ПриИзменении, НачалоВыбора, ...там их намного больше чем пару
47. Cyberhawk 135 03.09.20 17:42 Сейчас в теме
(46) По количеству параметров довольно много событий, у которых он (параметр) только один - это "Элемент".
Соответственно, и обработчик (точка входа в модуле формы) может быть у разных событий один и тот же.
48. SizovE 262 03.09.20 19:02 Сейчас в теме
(47) А как при этом тогда определить, что за событие? И те, которые я назвал как минимум имеют разное количество параметров.
А ведь есть еще и ПриНачалеРедактирования, и т.д.

Если мы решаем частную задачу, то да, это решение, ОДНАКО, зачем для частной задачи динамическая форма.
А если универсальную, то не хватает возможностей.

Так что 1С немного недоработала, абсолютно непонятно почему нельзя писать ОбщийМодульКлиент.ПриНачалеРедактирования, вроде не сложно им такое было сделать, но не стали.
49. Cyberhawk 135 03.09.20 20:06 Сейчас в теме
(48)
как при этом тогда определить, что за событие?
По значению первого параметра, где будет "сидеть" элемент формы.
С остальным не спорю - платформе есть куда стремиться.
Мой посыл был скорее в том, что если нужно извернуться, то в современных типовых это худо-бедно (иногда) можно сделать уже и без добавления в модуль формы точек входа.
50. SizovE 262 03.09.20 21:09 Сейчас в теме
(49)Главное непонятно почему они это не сделали. Это было бы удобно не только для этого, так можно было бы и формы создавать быстрее. Ну да ладно )
41. kirillkr 29 02.09.20 10:18 Сейчас в теме
(0).
Большая просьба
1. В шапка указать лицензию опубликованного модуля. Для возможности или невозможности встраивать в свою конфигурацию.
2. По возможности код выложить в Git, например в gist.github.com (тут даже не нужен установленный git), чтобы визуально видеть изменения в новых версиях модуля.
Спасибо.
brr; rpgshnik; +2 Ответить
51. rpgshnik 3625 04.09.20 04:09 Сейчас в теме
(41) разместил в Git https://github.com/KotovDima1C/Infostart/blob/master/DFI
лицензию чуть позже сделаю
kirillkr; +1 Ответить
52. rpgshnik 3625 04.09.20 05:50 Сейчас в теме
61. Andry.Boris 59 10.09.20 01:07 Сейчас в теме
День добрый!
Как создать поле, со списком выбора значений, привязанным к реквизиту объекта?
Конструкция ДФИ.СздВыпадающийСписок - в данном случае не подходит, так как нет привязки к реквизиту объекта.
Использовал конструкцию ДФИ.СздПоле с передачей СтруктураСвойств - выдает ошибку.

Код
62. rpgshnik 3625 10.09.20 04:16 Сейчас в теме
(61)
ТекстЗаголовка = "В приказе печатать как:";
СтруктураСвойств = Новый Структура;
СтруктураСвойств.Вставить("КнопкаВыпадающегоСписка",Истина);
СтруктураСвойств.Вставить("РедактированиеТекста",Ложь);
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить("как специалиста","как специалиста");
СписокВыбора.Добавить("по должности сотрудника","по должности сотрудника");
СтруктураСвойств.Вставить("СписокВыбора",СписокВыбора);
ДФИ.СздПоле(ЭтаФорма,"МетодОбозначенияДолжности",Элементы.ГруппаСтраницаДополнительнаяПравая,ТекстЗаголовка,1,"Объект.МетодОбозначенияДолжности",СтруктураСвойств);

ОбщийМодуль.ДФИ.Модуль(285)}: Поле объекта недоступно для записи (СписокВыбора)


Стоить заметить, что все методы по созданию элементов являются - функциями и возвращают элементы.
По этому рекомендую решение следующее (замечу, что и кода стало меньше):

	ТекстЗаголовка = "В приказе печатать как:";
	СтруктураСвойств = Новый Структура;
	СтруктураСвойств.Вставить("КнопкаВыпадающегоСписка",Истина);
	СтруктураСвойств.Вставить("РедактированиеТекста",Ложь);
	нЭлемент = ДФИ.СздПоле(ЭтотОбъект,"МетодОбозначенияДолжности",Элементы.ГруппаСтраницаДополнительнаяПравая,ТекстЗаголовка,1,"Объект.МетодОбозначенияДолжности",СтруктураСвойств);
	нЭлемент.СписокВыбора.Добавить("как специалиста","как специалиста");
	нЭлемент.СписокВыбора.Добавить("по должности сотрудника","по должности сотрудника");
Показать


Свойства защищенные от записи не обрабатываются в модуле.
63. InJey 15.09.20 10:02 Сейчас в теме
Хочу сказать автору большое спасибо за труд! Для себя приобрел много полезного!
boggonzikov; rpgshnik; +2 Ответить
64. PanKir 70 13.10.20 09:49 Сейчас в теме
(0) у Вас опечатка в 77 строке...
функция ОписаниеТипаДокумент, а в подсказке написано Справочник
rpgshnik; +1 Ответить
65. PanKir 70 13.10.20 10:23 Сейчас в теме
(0)
ещё заметил как и в конце статьи «Шпаргалка» (https://infostart.ru/1c/articles/1118319/), так и тут - не очень логично использовать цифровые параметры для булевых свойств:
процедура «ПолучитьСостояниеРастягиванияЭлементаПоВертикали» и ей подобные использует параметр «Состояние», которое по умолчанию равно 0, а что делать в таком случае - ничего не сказано.
Тут вполне логичнее сразу использовать Булево в качестве параметра, значение по умолчанию которого устанавливается аналогично как и при стандартном создании элемента вручную, в конфигураторе...
Дмитрий74Чел; +1 Ответить
66. rpgshnik 3625 14.10.20 07:37 Сейчас в теме
67. genayo 30.10.20 14:26 Сейчас в теме
Начал на практике использовать библиотеку, нахожу ошибки. Как сообщать об ошибках?
68. rpgshnik 3625 02.11.20 07:13 Сейчас в теме
(67) можете сообщать в данную публикацию или в личку, как удобнее
69. kldhgr 19.03.21 18:53 Сейчас в теме
Добавил функцию:

// Создание описания составного типа из объекта метаданных Определяемый тип
//
// Параметры:
//  ИмяОпределяемогоТипа - Строка - Имя объекта метаданных Определяемый тип в дереве метаданных
//
Функция ОписаниеОпределяемогоТипа(ИмяОпределяемогоТипа) Экспорт
	
	Возврат Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы[ИмяОпределяемогоТипа].Тип.Типы());	
	
КонецФункции
Показать
70. user1319017 28.04.21 12:33 Сейчас в теме
Спасибо! Давно искал такую штуку. Буду использовать.
71. nialorg 28.06.21 08:07 Сейчас в теме
Огромнейшее спасибо!

Есть дополнение к коду, т.к. команды создаются, но не удаляются:
//Удалить команды ранее созданные программно!
//
//Параметры:
//	МассивУдаляемыхКоманд - Массив - Содержит строковые типы с именами удаляемых команд, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО!
Процедура УдлКоманды(Форма,МассивУдаляемыхКоманд) Экспорт
	Для Каждого текКоманда Из МассивУдаляемыхКоманд Цикл
		Если Форма.Команды.Найти(текКоманда) <> Неопределено Тогда
			Форма.Команды.Удалить(Форма.Команды[текКоманда]);
		КонецЕсли;		
	КонецЦикла;	 	
КонецПроцедуры
	
//Удалить команду ранее созданную программно!
//
//Параметры:
//	ИмяРеквизита - Строка - Имя удаляемой команды на форме, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО!
Процедура УдлКоманду(Форма,ИмяКоманды) Экспорт 
	МассивУдаляемыхКоманд = Новый Массив;
	МассивУдаляемыхКоманд.Добавить(ИмяКоманды);
	УдлКоманды(Форма,МассивУдаляемыхКоманд);	
КонецПроцедуры
Показать
72. suepifanov 935 15.08.21 11:51 Сейчас в теме
Странно, что вы всегда создаете реквизиты без "Сохраняемые данные", особенно в контексте примера. Руками модифицированность везде устанавливать не удобно будет.
Дмитрий74Чел; +1 Ответить
73. Sure 163 06.11.21 13:18 Сейчас в теме
Спасибо автору за труд. У меня не взлетело только "Тублер" и "Выключатель". "Тублер" - в слове "туМблер" ошибка. И такое просочилось что сюда, что в Git. А "Выключатель" - видимо, у меня ещё не обновлённая версия платформы.
74. kraspila 89 16.11.21 11:11 Сейчас в теме
Решение хорошее, динамические создание элементов актуально в обновляемых конфигурациях. К сожалению, функции-обработчики команд всё равно должны быть в коде формы, их не удаётся вынести в общий модуль. Когда это можно будет сделать типовые формы вообще не придётся менять.
76. kudim 21.12.21 14:36 Сейчас в теме
Отличная работа! Самому постоянно приходится в Комплексной автоматизации допиливать элементы в типовые формы (Само собой программно! )
77. userMKA 13.01.22 13:53 Сейчас в теме
Добрый день.
Подскажите, пожалуйста, как обновить динамический список, созданный программно?
Есть Документ, , у которого формируется программный ДС "ИсторияПодписания".
Подписание происходит тоже по программной кнопке "Подписать" (= запись в РС ИсторияПодписания).
При открытии ранее записанного объекта все красиво отображается.(вся история)
Создаю новый объект. Форма открыта. Записываю. Нажимаю кнопку "Подписать", а данные в ДС Истории не обновляются(.
На Клиенте ЭтаФорма.ИсторияПодписания.Обновить() - не работает.
Закрываешь/открываешь - все есть.
78. vikb11 20.02.22 23:35 Сейчас в теме
Не смог создать таблицу на форме для ТЧ! Выдает ошибку "Недопустимое значение".
Как мне кажется, из-за ошибки в процедуре "СоздатьКолонкиДляТаблицыФормы". Путь к данным формируется строками:
	ИмяСписка = ТаблицаФормы.Имя; 
...
		НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки;

А нужно, чтобы путь к данным начинался с "Объект."!
Я изменил строчку и стало работать:
		НоваяКолонкаТаблицы.ПутьКДанным = ТаблицаФормы.ПутьКДанным + "." + ИмяКолонки;
92. rmIvanT 68 24.12.23 12:36 Сейчас в теме
(78)
Выдает ошибку "Недопустимое значение".

И с фиксом та же проблема.
93. rmIvanT 68 24.12.23 13:12 Сейчас в теме
(92) Нашёл в чём проблема, вместо ТекстаЗапроса, передавал Новый Запрос()
79. vikb11 25.02.22 23:35 Сейчас в теме
Оказывается, ни гитхабе уже кто-то предложил это решение еще прошлой осенью, но, видимо, поддержка и развитие данной библиотеки давно заброшены((. Жаль, придется искать альтернативы, а то есть потребность в данной функциональности...
81. alei1180 12.05.22 11:40 Сейчас в теме
(79) Библиотека живет. Предложенные изменения доработки рассматриваются автором. Актуальный код на гитхаб есть в главной ветке.
rpgshnik; +1 Ответить
80. pavel_pozdeev 315 07.04.22 11:39 Сейчас в теме
Проблема в СздКолонкаТаблицыФормы(): Если добавляю поле флажок, то указанный в СздКолонкаТаблицыФормы параметр Заголовок не работает, а в заголовок выводит синоним реквизита.
82. softbear 2 21.06.22 17:31 Сейчас в теме
В функции СздКолонкаТаблицыФормы Есть параметр заголовок, но не устанавливается нигде вместо этого берет имя колонки.
83. Asuneft 2 28.11.22 09:13 Сейчас в теме
Возможно ли указывать место в ТЧ, перед/за каким реквизитом будет создаваться новый?
84. angabanga5 08.02.23 12:04 Сейчас в теме
я кстати соглашусь пожалуй с тем не популярным мнением, что этот модуль - лишний мусор. он очень не гибкий, к нему надо привыкать. и в целом-то это просто палки в колеса.
user977585; +1 Ответить
85. angabanga5 08.02.23 12:11 Сейчас в теме
(84) создание в ручную на много проще и не ловит странные баги вроде того, что не видит команду кнопки) ну это вообще прикол. и это я про текущую версию модуля говорю
86. mikl79 118 21.02.23 08:45 Сейчас в теме
Добрый день, спасибо, отличный модуль, начал использовать!
Не хватило - не создается заголовок в таблице формы.
87. mikl79 118 21.02.23 12:55 Сейчас в теме
обнаружил одну ошибку - при создании флажка, функция не возвращает этот флажок:
Функция СздПолеФлажок(Форма,
	ИмяПоля,
	РодительПоля,
	Заголовок,
	тВидФлажка = 0,
	ПутьКДанным = "",
	СтруктураСвойств = Неопределено,
	СтруктураСобытий = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	НовыйЭлемент = СздПоле(Форма,ИмяПоля,РодительПоля,Заголовок,2,ПутьКДанным,СтруктураСвойств,СтруктураСобытий,ЭлементПеред);
	Если тВидФлажка <> 0 Тогда
		НаборВидов = "Флажок
		|Тумблер	
		|Выключатель";
		ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,тВидФлажка));
		НовыйЭлемент.ВидФлажка = ВидФлажка[ВидПоля];
	КонецЕсли;	
	
КонецФункции
Показать
88. Pavel_Vladivostok 58 18.04.23 06:40 Сейчас в теме
Прекрасная разработка, спасибо что сэкономили немного времени на решении аналогичной задачи.
89. igor_1c 17 14.07.23 17:49 Сейчас в теме
Может быть кэширование, если код разместить в модуле в признаком "Повторное использование возвращаемых значений" на время сеансов?
90. pavel_pozdeev 315 10.08.23 17:11 Сейчас в теме
В Функция СздКолонкаТаблицыФормы(Форма, .. не используется параметр Заголовок. Надо добавить в тело что то типа:
Если ЗначениеЗаполнено(Заголовок) Тогда
НовыйЭлемент.Заголовок = Заголовок;
КонецЕсли;
91. user1564146 23.11.23 09:44 Сейчас в теме
Немного конструктивной критики:
1. Методы общего модуля нарушают правила читаемости кода, описанные на ИТС. Например, количество параметров метода д.б. не более 7, в идеале 1-2 (у нас для этого используется функция конструктор с параметрами), или длина одной строки не более 120 символов;
2. Слишком пересложенный модуль, много лишних функций. ОписаниеТиповСтрока, дата и тд есть в бсп ОбщегоНазначения, а для ссылок и булева это излишне - быстрее будет написать Новый ОписаниеТипов("Булево") (а такие как новый квалификаторстроки вообще не представляю применимость);
3. Как продолжение п.2 про сложность: так и не смог понять зачем в этой концепции обработка. Это все нарушает принцип KISS.
94. Student1C 57 26.01.24 12:13 Сейчас в теме
Подскажите, а как программно указать действие для "Расширенной подсказки" Поля формы?
Например после указания ЭлементФормы.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
95. SlavaVNL 8 09.02.24 14:18 Сейчас в теме
ОГРОМНАЯ благодарность за Ваш труд и за его бескорыстное распространение. Я не понимаю почему этого модуля до сих пор нет в штатной БСП.
По поводу чисел в параметрах - ничего ужасного. благодаря синтаксис помощнику ставим курсор после запятой, жмем контр + пробел и читаем описание параметров. Все просто и удобно . Всякие "лево", "по ширине" читать конечно легче, но это более громоздко.

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

Еще при создании выбора из списка передается массив. добавил туда возможность передавать список значений
спЗначений = Новый СписокЗначений;
	спЗначений.Добавить("ТолькоОстатки", "Свободные остатки");
	спЗначений.Добавить("ВсеСерии", "Все серии");
	ПрограммноеИзменениеФорм.СздПереключатель(Форма, 
											"РежимОтображенияСерий1", 
											грВыборПоИерархииОтборы, 
											"", 
											спЗначений, 
											2,  
											, 
											Новый Структура("ПриИзменении", "РежимОтображенияСерийПоИерархии_ПриИзменении"),
											,
											"РежимОтображенияСерий"); 
Показать


и сама процедура:

Если ТипЗнч(МассивЗначений) = Тип("Массив") Тогда
		Счетчик = 0;
		Для Каждого текЭлемент Из МассивЗначений Цикл
			НовыйЭлемент.СписокВыбора.Добавить(Счетчик, текЭлемент);
			Счетчик = Счетчик + 1;
		КонецЦикла;
	Иначе
		Для Каждого текЭлемент Из МассивЗначений Цикл
			НовыйЭлемент.СписокВыбора.Добавить(текЭлемент.Значение, текЭлемент.Представление);
		КонецЦикла;
	КонецЕсли;
Показать
96. soldatkin 11 07.03.24 10:19 Сейчас в теме
Привет
Спасибо
а можно ссылку на GitHub?
97. Batman 165 08.03.24 11:24 Сейчас в теме
(96) В комментариях в ответе № 52 - не то, о чём Вы спрашиваете?
Оставьте свое сообщение