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

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

Приемы и методы разработки

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

Версия 2.0.0.1 + добавил GitHub

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

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

 

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

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

 

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

 

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

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

 

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

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

 

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

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

Ссылка на GITHUB https://github.com/KotovDima1C/DFI.git

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

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

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

 

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

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

 

Резюме

Применение

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

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

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

 

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

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

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

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

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

Никогда не понимал людей, которые ругают публикацию, при этом хвастаясь, что "та я ещё N лет назад это делал, да ещё и в сто раз круче, но выкладывать не буду - лучше это обосру". 😒
herfis; Somebody1; soulner; fatman78; fcrazy; mvxyz; user695525_d.varvashevich; Symbiat; boggonzikov; fvr2000; getnight; kMidas; JohnyDeath; tps_01; +14 Ответить
22. Yashazz 4106 28.08.20 19:35 Сейчас в теме
(21) А вы не передёргивайте, товарисч. Я ничего не обсирал ни единым словом. Я высказался о подходе (что порочен имхо) и о уровне сложности задачи (тупейшая элементарщина). О публикации ничего не было. Далее, я не хвастался, а высказался. Я ничего не говорил о "крутейшем" своём модуле - исключительно, что делал похожее и давно.

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

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


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


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

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

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

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

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

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


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

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

Ну а как вам такое Создание элементов и поиском найти можно и ничего программировать не нужно
37. Yashazz 4106 31.08.20 23:28 Сейчас в теме
(35) А я примерно так свою механику и делал. Иначе сдохнуть можно, даже просто поддерживать всё это хозяйство, не говоря уж о развитии.
5. infosoft-v 573 28.08.20 10:15 Сейчас в теме
Дмитрий, спасибо за удобную библиотеку.
Не могли бы вы указать адрес репозитория GitHub с этой библиотекой?
rpgshnik; +1 Ответить
7. rpgshnik 2723 28.08.20 10:18 Сейчас в теме
(5) планирую, укажу в будущем, пока нету :(
54. rpgshnik 2723 04.09.20 09:07 Сейчас в теме
6. leosoft 155 28.08.20 10:17 Сейчас в теме
Я правильно понимаю, что можно этот общий модуль в расширение закинуть и использовать во внешних обработках и расширениях?
8. rpgshnik 2723 28.08.20 10:19 Сейчас в теме
(6) в пределах того расширения, да. Если в конфигурации в целом, то в саму конфигурацию.
11. RocKeR_13 978 28.08.20 11:37 Сейчас в теме
(8) Если расширение активно, то из внешних обработок можно обращаться к объектам этого расширения, в т.ч. и к общим модулям
rpgshnik; +1 Ответить
12. rpgshnik 2723 28.08.20 11:39 Сейчас в теме
(11) хм, настолько с расширениями не работал. Спасибо, попробую.
13. RocKeR_13 978 28.08.20 11:41 Сейчас в теме
(12) у меня просто в одной публикации есть решение в виде расширения и внешней обработки; так вот по началу переносил когда изменения из расширения в обработку и не везде заменял вызовы общих модулей расширения, то возникал конфуз: у меня все работало (расширение-то активно), а у пользователей - нет))
rpgshnik; +1 Ответить
18. Yashazz 4106 28.08.20 12:00 Сейчас в теме
(11) Внешние обработки на этапе разработки в конфигураторе НЕ видят никаких расширений. Поэтому писать код будете вслепую.
19. krollzlat 28.08.20 12:09 Сейчас в теме
Нечто подобное используем у себя в конфигурации. Для тех кому нравится эта идея, но не хочется вскрывать большинство форм, советую обратить внимание на процедуру МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
okulus; rpgshnik; +2 Ответить
20. rpgshnik 2723 28.08.20 15:35 Сейчас в теме
(19) да всё верно, именно там так же использую модуль в этой переопределеяемой процедуре
24. Yashazz 4106 28.08.20 19:42 Сейчас в теме
А так по самой публикации - ну, есть, есть что покритиковать. Навскидку: во-первых, мне не кажется правильным подход множества аргументов в функциях. Потому что потом менять трудно при доработках. Разумнее передавать структуру параметров, тем более что у некоторых действий их штук 8-10 запросто может быть. Во-вторых, мне не нравится числовая нотация служебных полей (то же выравнивание) - почему бы не передавать сразу системные перечисления?
Если вдумаюсь - могу ещё накидать.
okulus; rpgshnik; +2 Ответить
30. rpgshnik 2723 31.08.20 03:55 Сейчас в теме
(24) ну вот хорошая критика, спасибо.
26. dhurricane 28.08.20 20:45 Сейчас в теме
Спасибо большое за то, что поделились.

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

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

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

Так что 1С немного недоработала, абсолютно непонятно почему нельзя писать ОбщийМодульКлиент.ПриНачалеРедактирования, вроде не сложно им такое было сделать, но не стали.
49. Cyberhawk 130 03.09.20 20:06 Сейчас в теме
(48)
как при этом тогда определить, что за событие?
По значению первого параметра, где будет "сидеть" элемент формы.
С остальным не спорю - платформе есть куда стремиться.
Мой посыл был скорее в том, что если нужно извернуться, то в современных типовых это худо-бедно (иногда) можно сделать уже и без добавления в модуль формы точек входа.
50. SizovE 185 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 2723 04.09.20 04:09 Сейчас в теме
(41) разместил в Git https://github.com/KotovDima1C/Infostart/blob/master/DFI
лицензию чуть позже сделаю
kirillkr; +1 Ответить
52. rpgshnik 2723 04.09.20 05:50 Сейчас в теме
61. Andry.Boris 58 10.09.20 01:07 Сейчас в теме
День добрый!
Как создать поле, со списком выбора значений, привязанным к реквизиту объекта?
Конструкция ДФИ.СздВыпадающийСписок - в данном случае не подходит, так как нет привязки к реквизиту объекта.
Использовал конструкцию ДФИ.СздПоле с передачей СтруктураСвойств - выдает ошибку.

Код
62. rpgshnik 2723 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, а что делать в таком случае - ничего не сказано.
Тут вполне логичнее сразу использовать Булево в качестве параметра, значение по умолчанию которого устанавливается аналогично как и при стандартном создании элемента вручную, в конфигураторе...
66. rpgshnik 2723 14.10.20 07:37 Сейчас в теме
67. genayo 30.10.20 14:26 Сейчас в теме
Начал на практике использовать библиотеку, нахожу ошибки. Как сообщать об ошибках?
68. rpgshnik 2723 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 551 15.08.21 11:51 Сейчас в теме
Странно, что вы всегда создаете реквизиты без "Сохраняемые данные", особенно в контексте примера. Руками модифицированность везде устанавливать не удобно будет.
73. Sure 152 06.11.21 13:18 Сейчас в теме
Спасибо автору за труд. У меня не взлетело только "Тублер" и "Выключатель". "Тублер" - в слове "туМблер" ошибка. И такое просочилось что сюда, что в Git. А "Выключатель" - видимо, у меня ещё не обновлённая версия платформы.
74. kraspila 82 16.11.21 11:11 Сейчас в теме
Решение хорошее, динамические создание элементов актуально в обновляемых конфигурациях. К сожалению, функции-обработчики команд всё равно должны быть в коде формы, их не удаётся вынести в общий модуль. Когда это можно будет сделать типовые формы вообще не придётся менять.
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Практика программирования v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4607    Eugen-S    23    

Обзор полезных методов БСП 3.1.4. Часть 2

БСП (Библиотека стандартных подсистем) v8 Бесплатно (free)

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

27.04.2021    16415    rayastar    7    

Обзор полезных методов БСП 3.1.4

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Бесплатно (free)

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

25.03.2021    41912    rayastar    51    

Звуковое управление в 1С 8.3

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7264    velemir    33    

Использование классов .Net в 1С для новичков Промо

Разработка внешних компонент Универсальные функции Практика программирования v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    85905    Serginio    116    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    8998    comol    31    

Полезные функции БСП (Часть 2)

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

Список полезных функций из состава Библиотеки стандартных подсистем 3.1.

10.03.2020    21025    user5300    20    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    66509    ids79    26    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Инструменты администратора БД Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    67714    user700211_a.straltsou    30    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    44062    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    35769    kuzyara    38    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

10.10.2019    30764    John_d    21    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    41176    unichkin    74    

Полезные процедуры и функции для программиста

Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

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

07.10.2019    39937    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    53510    Yashazz    56    

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

Работа с интерфейсом Практика программирования v8 1cv8.cf Бесплатно (free)

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

06.09.2019    103851    rpgshnik    77    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    36235    tormozit    106    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    78427    ids79    56    

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

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

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

17.08.2019    45435    ids79    22    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    154004    ids79    75    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    82927    tormozit    131    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    61331    avalakh    27    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    106644    ids79    17    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    114069    AlbinaAAA    49    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

11.07.2007    54553    tormozit    51    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    48765    ids79    27    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22611    SeiOkami    53    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    76802    ids79    28    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    51338    tormozit    74    

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

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

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

04.06.2019    56604    YPermitin    55    

Регистры накопления. Структура хранения в базе данных

Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

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

16.05.2019    64412    YPermitin    31    

Выгрузка документа по условию

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    18062    m-rv    3    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    37118    m-rv    23    

Как прикрутить ГУИД к регистру сведений

Перенос данных из 1C8 в 1C8 Инструментарий разработчика Практика программирования v8 Бесплатно (free)

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

16.04.2019    23392    m-rv    18    

О расширениях замолвите слово...

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    42841    ellavs    131    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    32132    ellavs    90    

Трюки с внешними источниками данных

Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    41387    YPermitin    53    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

БСП (Библиотека стандартных подсистем) Роли и права Практика программирования v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    66002    ids79    11    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Кадровый учет v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

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

14.11.2018    148024    GeterX    135    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45100    ids79    46    

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git

Инструментарий разработчика Методология v8 1cv8.cf Бесплатно (free)

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    93697    stas_ganiev    86    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

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

23.08.2018    48823    Rain88    49    

Тестер: частые вопросы

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    31610    grumagargler    31    

Работаем с дополнительными реквизитами на форме

Практика программирования v8 Бесплатно (free)

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

15.07.2018    53417    papche    59    

Повышаем эффективность разработки правил обмена

Практика программирования v8 КД Бесплатно (free)

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    30284    olegtymko    48    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    47631    xrrg    95