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

Публикация № 1284403 28.08.20

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

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

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

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

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

 

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

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

 

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

 

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

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

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

 

Резюме

Применение

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

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

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

 

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

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Synoecium 762 28.08.20 09:59 Сейчас в теме
Отличная новость. Пользовался вашими предыдущими наработками по динамическому созданию элементов форм, некоторые моменты дорабатывал под свои нужды. Посмотрю, что появилось в этой версии.
На мой взгляд в современной доработке типовых без такого механизма делать нечего, первым делом добавляю эти модули в конфигурацию/расширение.
Demlan; user1804494; avmironov; vvdluua; davdykin; Evg-Lylyk; rpgshnik; +7 Ответить
2. rpgshnik 3371 28.08.20 10:02 Сейчас в теме
(1) спасибо, согласен с вами
user1804494; avmironov; +2 Ответить
3. Yashazz 4513 28.08.20 10:06 Сейчас в теме
Считаю эти экзерсисы малонужными. По месту проще сделать, не тягая весь модуль, а в большинстве случаев теперь можно применять расширение и делать элементы формы в конфигураторе - быстрее, проще, прозрачнее, управляемее.

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

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

Никогда не понимал людей, которые ругают публикацию, при этом хвастаясь, что "та я ещё N лет назад это делал, да ещё и в сто раз круче, но выкладывать не буду - лучше это обосру". 😒
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; +25 Ответить
22. Yashazz 4513 28.08.20 19:35 Сейчас в теме
(21) А вы не передёргивайте, товарисч. Я ничего не обсирал ни единым словом. Я высказался о подходе (что порочен имхо) и о уровне сложности задачи (тупейшая элементарщина). О публикации ничего не было. Далее, я не хвастался, а высказался. Я ничего не говорил о "крутейшем" своём модуле - исключительно, что делал похожее и давно.

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

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


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


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

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

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

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

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

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


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

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

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

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

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

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

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

Код
62. rpgshnik 3371 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 3371 14.10.20 07:37 Сейчас в теме
67. genayo 30.10.20 14:26 Сейчас в теме
Начал на практике использовать библиотеку, нахожу ошибки. Как сообщать об ошибках?
68. rpgshnik 3371 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 804 15.08.21 11:51 Сейчас в теме
Странно, что вы всегда создаете реквизиты без "Сохраняемые данные", особенно в контексте примера. Руками модифицированность везде устанавливать не удобно будет.
Дмитрий74Чел; +1 Ответить
73. Sure 161 06.11.21 13:18 Сейчас в теме
Спасибо автору за труд. У меня не взлетело только "Тублер" и "Выключатель". "Тублер" - в слове "туМблер" ошибка. И такое просочилось что сюда, что в Git. А "Выключатель" - видимо, у меня ещё не обновлённая версия платформы.
74. kraspila 85 16.11.21 11:11 Сейчас в теме
Решение хорошее, динамические создание элементов актуально в обновляемых конфигурациях. К сожалению, функции-обработчики команд всё равно должны быть в коде формы, их не удаётся вынести в общий модуль. Когда это можно будет сделать типовые формы вообще не придётся менять.
76. kudim 21.12.21 14:36 Сейчас в теме
Отличная работа! Самому постоянно приходится в Комплексной автоматизации допиливать элементы в типовые формы (Само собой программно! )
77. userMKA 13.01.22 13:53 Сейчас в теме
Добрый день.
Подскажите, пожалуйста, как обновить динамический список, созданный программно?
Есть Документ, , у которого формируется программный ДС "ИсторияПодписания".
Подписание происходит тоже по программной кнопке "Подписать" (= запись в РС ИсторияПодписания).
При открытии ранее записанного объекта все красиво отображается.(вся история)
Создаю новый объект. Форма открыта. Записываю. Нажимаю кнопку "Подписать", а данные в ДС Истории не обновляются(.
На Клиенте ЭтаФорма.ИсторияПодписания.Обновить() - не работает.
Закрываешь/открываешь - все есть.
78. user1346763 20.02.22 23:35 Сейчас в теме
Не смог создать таблицу на форме для ТЧ! Выдает ошибку "Недопустимое значение".
Как мне кажется, из-за ошибки в процедуре "СоздатьКолонкиДляТаблицыФормы". Путь к данным формируется строками:
	ИмяСписка = ТаблицаФормы.Имя; 
...
		НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки;

А нужно, чтобы путь к данным начинался с "Объект."!
Я изменил строчку и стало работать:
		НоваяКолонкаТаблицы.ПутьКДанным = ТаблицаФормы.ПутьКДанным + "." + ИмяКолонки;
79. user1346763 25.02.22 23:35 Сейчас в теме
Оказывается, ни гитхабе уже кто-то предложил это решение еще прошлой осенью, но, видимо, поддержка и развитие данной библиотеки давно заброшены((. Жаль, придется искать альтернативы, а то есть потребность в данной функциональности...
81. alei1180 12.05.22 11:40 Сейчас в теме
(79) Библиотека живет. Предложенные изменения доработки рассматриваются автором. Актуальный код на гитхаб есть в главной ветке.
rpgshnik; +1 Ответить
80. pavel_pozdeev 314 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 Сейчас в теме
я кстати соглашусь пожалуй с тем не популярным мнением, что этот модуль - лишний мусор. он очень не гибкий, к нему надо привыкать. и в целом-то это просто палки в колеса.
85. angabanga5 08.02.23 12:11 Сейчас в теме
(84) создание в ручную на много проще и не ловит странные баги вроде того, что не видит команду кнопки) ну это вообще прикол. и это я про текущую версию модуля говорю
86. mikl79 117 21.02.23 08:45 Сейчас в теме
Добрый день, спасибо, отличный модуль, начал использовать!
Не хватило - не создается заголовок в таблице формы.
87. mikl79 117 21.02.23 12:55 Сейчас в теме
обнаружил одну ошибку - при создании флажка, функция не возвращает этот флажок:
Функция СздПолеФлажок(Форма,
	ИмяПоля,
	РодительПоля,
	Заголовок,
	тВидФлажка = 0,
	ПутьКДанным = "",
	СтруктураСвойств = Неопределено,
	СтруктураСобытий = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	НовыйЭлемент = СздПоле(Форма,ИмяПоля,РодительПоля,Заголовок,2,ПутьКДанным,СтруктураСвойств,СтруктураСобытий,ЭлементПеред);
	Если тВидФлажка <> 0 Тогда
		НаборВидов = "Флажок
		|Тумблер	
		|Выключатель";
		ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,тВидФлажка));
		НовыйЭлемент.ВидФлажка = ВидФлажка[ВидПоля];
	КонецЕсли;	
	
КонецФункции
Показать
88. Pavel_Vladivostok 58 18.04.23 06:40 Сейчас в теме
Прекрасная разработка, спасибо что сэкономили немного времени на решении аналогичной задачи.
Оставьте свое сообщение

См. также

Подсистема 1С "Визуальные инструменты АФРОДИТА" (Панель показателей и виджетов)

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

Создайте свою панель показателей и виджетов в любой конфигурации 1С с помощью подсистемы 1С "Визуальные инструменты АФРОДИТА". Дашборды на начальном экране изменят ваш подход к интерфейсу и рабочему месту.

10800 руб.

20.03.2023    6964    7    20    

24

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

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

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

5000 руб.

14.01.2016    52139    15    21    

38

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

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

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

2 стартмани

10.04.2023    6076    130    acces969    28    

103

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

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

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

1 стартмани

05.07.2022    1526    kalyaka    2    

16

Программный интерфейс для доработки форм

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

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

25.11.2021    6772    AtamanovYS    19    

122

[mobile] Переносим HTML интерфейс на 1С

Работа с интерфейсом Мобильная разработка Платформа 1С v8.3 Мобильная платформа Конфигурации 1cv8 Бесплатно (free)

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

02.11.2020    13766    leobrn    82    

106

Редактор графов

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

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

1000 руб.

06.10.2020    7548    4    7    

6

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

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

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

2400 руб.

29.06.2020    13063    15    4    

22

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    180691    user5300    40    

291

Простой и красивый интерфейс

Работа с интерфейсом Мобильная разработка Мобильная платформа Бесплатно (free)

Разработчики мобильных приложений на платформе 1С сталкиваются с проблемой адаптации сгенерированного платформой интерфейса под удобство использования. О том, какие приемы помогут сделать интерфейс красивым и удобным, на конференции Infostart Event 2019 Inception рассказал руководитель отдела мобильной разработки компании «1С-Рарус» Никита Бакшеев.

30.01.2020    20979    Baksheev-Nikita    36    

110

СКД. Шаг 3. Используем макеты для оформления отчета

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

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

13.01.2020    72393    aximo    23    

199

[СКД] Вывод картинки в результат любого отчета на СКД

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

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    16200    John_d    18    

122

[Взрыв шаблона!] Новый способ программной настройки условного оформления

Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

01.12.2019    30579    73    mszsuz    13    

161

Управляемые формы. Изменение формы списка или формы объекта без внесения изменений в типовые формы (без использования расширений)

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

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

12.11.2019    21553    John_d    29    

125

"Живые" картинки со Snap.SVG

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

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    16597    blackhole321    7    

94

Создание асинхронных виджетов

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

Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

16.10.2019    16399    Infostart    19    

156

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

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

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

06.10.2019    14744    Infostart    32    

116

Альтернативный способ добавления элементов и реквизитов на формы

Работа с интерфейсом Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

09.09.2019    26129    46    bmk74    9    

83

[Шпаргалка] Программное создание элементов формы

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

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

06.09.2019    209300    rpgshnik    87    

863

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    56221    ids79    23    

224

[Механизм интерфейса] Свой флажок (чекбокс)

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

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

1 стартмани

09.08.2019    32181    29    rpgshnik    44    

172

Форма отчета СКД

Работа с интерфейсом Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Описание объекта ОбщиеФормы – ФормаОтчета.

01.08.2019    22468    vasilev2015    5    

89

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

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

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    72734    Infostart    57    

334

Быстрый ввод неудобных символов

Работа с интерфейсом Бесплатно (free)

Использование Alt-кодов для ввода “[”, “]”, “”, “&”, “#”, “|”

15.04.2019    20075    pparshin    30    

97

Программное добавление элементов на управляемую форму

Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Пример добавления Команд, Полей ввода, Групп, Страниц, Реквизитов, Обработчиков событий.

1 стартмани

13.02.2019    145456    74    spec8s    47    

256

Расширение: Темы для 1С 8.3

Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Расширение позволяет сменить цвет оформления для интерфейса Такси.

3 стартмани

10.02.2019    33865    213    spec8s    29    

60

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

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

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    34681    Synoecium    46    

215

Подмена заголовка 1С

Универсальные функции Работа с интерфейсом Россия Бесплатно (free)

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

08.12.2018    12451    moolex    26    

26

Шпаргалка разработчика для работы с формами

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

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

3 стартмани

31.10.2018    22098    95    ELAM    3    

30

Открывашка ячеек таблиц

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

Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм

1 стартмани

27.10.2018    29193    16    tormozit    39    

107