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

24.08.22

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

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

 2020

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

//+++ Обновление публикации от 31.08.2020 г.

//     Посмотрите новую статью "Динамическое формирование интерфейса"

//--- Обновление публикации от 31.08.2020 г.

 

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

Применение

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

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

Шпаргалка

 

Оглавление

Введение. 1

Общее. 2

Группа – Тип("ГруппаФормы"). 2

Поле – Тип("ПолеФормы"). 2

Создаем реквизит. 3

Создаем Поле. 3

Декорация – Тип("ДекорацияФормы"). 3

Декорация «Надпись». 3

Декорация «Картинка». 3

Кнопка – Тип("КнопкаФормы"). 3

Создание команды.. 3

Создание кнопок

Таблица формы и колонки

Создание таблицы формы

Создание колонок

Динамический список

. 4

Бонус – общий модуль с готовыми функциями. 4

 

Введение

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

Общее

Создание элементов, реквизитов и команд лучше производить в процедуре «ПриСозданииНаСервере».

Есть два варианта размещения элементов на форме – «добавить» и «вставить».

ЭтаФорма.Элементы.Добавить([Название нового элемента], [Тип элемента], [Элемент-родитель]) – Элемент будет добавлен на размещаемый элемент-родитель в конец списка.

ЭтаФорма.Элементы.Вставить([Название нового элемента], [Тип элемента], [Элемент-родитель], [Последующий элемент]) – Элемент будет добавлен на размещаемый элемент-родитель и вставлен перед желаемым элементом.

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

 

Группа – Тип("ГруппаФормы")

Элементы формы, которые можно создать с типом «ГруппаФормы»:

  • ГруппаКнопок
  • ГруппаКолонок
  • КоманднаяПанель
  • КонтекстноеМеню
  • ОбычнаяГруппа
  • Подменю
  • Страницы
  • Страница
 
 Пример создания элементов типа "ГруппаФормы"

Поле – Тип("ПолеФормы")

Для работы элемента формы «Поле» необходимо наличие источника данных – реквизита. Если необходимого реквизита нет, его нужно предварительно создать.

Элементы формы, которые можно создать с типом «ПолеФормы»:

  • ПолеHTMLДокумента
  • ПолеВвода
  • ПолеГеографическойСхемы
  • ПолеГрафическойСхемы
  • ПолеДендрограммы
  • ПолеДиаграммы
  • ПолеДиаграммыГанта
  • ПолеИндикатор
  • ПолеКалендарь
  • ПолеКартинки
  • ПолеНадписи
  • ПолеПереключателя
  • ПолеПланировщика
  • ПолеПолосыРегулирования
  • ПолеТабличногоДокумента
  • ПолеТекстовогоДокумента
  • ПолеФлажок
  • ПолеФорматированногоДокумента

Создаем реквизит

При создании важно понимать, что указывается не "тип", а "описание типов" и для часто используемых типов: "строка", "число" и "дата", необходимо указывать квалификатор. Рассмотрим на примере ниже.

 
 Пример создания реквизитов

Создаем Поле

При создании поля указываем  тип «ПолеФормы», принцип мало чем отличается от создания группы:

 
 Пример создания полей

Декорация – Тип("ДекорацияФормы")

Обе существующие декорации имеют один тип, но разный вид.

Декорация «Надпись»

 
 Пример создания декорации надпись

Декорация «Картинка»

 
 Пример создания декорации картинка

Кнопка – Тип("КнопкаФормы")

Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно.

Создание команды

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

 
 Пример заранее описанного общего действия для всех команд
 
 Пример создания команды

Создание кнопок

 
 Пример создания кнопок

 

//+++ Обновление публикации от 10.02.2020 г.

Таблица формы и колонки 

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

Создание таблицы

 
 Пример создания таблицы

Создание колонок

 
 Пример создания колонок

//--- Обновление публикации от 10.02.2020 г.

Бонус – общий модуль с готовыми функциями

«Лень - двигатель прогресса» и костылей J

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

// +++ Обновление публикации от 30.03.2021 г.

//     НОВЫЙ МОДУЛЬ СМОТРИТЕ ТУТ

// --- Обновление публикации от 30.03.2021 г.

И скопируйте в него код:

 
 Код общего модуля (лучше использовать новый, по ссылке выше)

Удобно или нет - решать вам. Приведу лишь пример кода, созданного выше с помощью и без помощи общего модуля.

 
 Пример реализации интерфейса без использования функций общего модуля
 
 Пример реализации интерфейса с использованием функций общего модуля

 

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

 

Другие полезные шпаргалки:

 Несколько 1С-Серверов на одном сервере  Свой заголовок отчету на СКД (с параметрами)

 

Публикации по работе с интерфейсом:

 Интерактивный выбор даты  Интерактивный выбор периода

 Свой флажок  Цифровые и аналоговые часы

UI UX Интерфейс Элементы Управляемая форма ЭтаФорма Кнопка Поле Группа Динамический список программно программное

См. также

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

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

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

6000 руб.

16.01.2015    61793    43    59    

80

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

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

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

5000 руб.

14.01.2016    54401    16    21    

42

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

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

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

2400 руб.

29.06.2020    16695    21    4    

35

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

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

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

27.12.2023    10735    750    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9610    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12079    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lmnlmn 69 06.09.19 13:38 Сейчас в теме
Каждый раз при необходимости создать программно элементы формы посещает мысль что надо бы сделать модуль, но все некогда и некогда. А у автора руки, таки, дошли. Полезно!
1Cynep4eJIoBek; Strannik777; maksa2005; kaliuzhnyi; pavelpribytkin96; Perfolenta; Pavel Rodinchenko; v.l.; markers; JohnyDeath; ids79; magdeevik; Senator_I; user774630; mnemchinov; rpgshnik; +16 Ответить
42. huxuxuya 366 23.12.19 09:42 Сейчас в теме
(1) Пожалуйста:
Модуль - https://infostart.ru/public/1170285/

Если прокомментируете, буду благодарен.
Там модуль, но поставляемый с обработкой тестирования для проверки обратной совместимости.
Demetry2000; Lacoste4life; SeiOkami; ZLENKO; +4 1 Ответить
2. VmvLer 06.09.19 13:47 Сейчас в теме
как шпаргалка неплохо для новичков

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


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

пожалуй все остальное чики-пуки, больше замечаний нет.
virus2; user1675974; Новичок1с; unichkin; Interrupted; Yashazz; +6 1 Ответить
5. user774630 06.09.19 14:45 Сейчас в теме
(2)
можно найти в общих модулях типовых конфигураций

Ну вы бы сказали куда смотреть хотя бы для старта.
a-m-gv; starponyx; +2 Ответить
6. VmvLer 06.09.19 15:01 Сейчас в теме
(5) раздел "общие модули"

искать аналоги глобальным поиском от пары секунд до минуты если вы конечно видели конфигуратор.
virus2; Kilka_v_Kepke; safm; +3 6 Ответить
7. user774630 06.09.19 15:09 Сейчас в теме
(6) Ну т.е. как и большинство ваших комментов - вякнуть и всё.
ybatiaev; KoC_one; Serg243; sapervodichka; yegorovnv; mpeg1989; +6 Ответить
8. VmvLer 06.09.19 15:25 Сейчас в теме
(7) Большинство моих комментариев по существу, но прямолинейно - это неприятно многим.

А от вас пока лишь хамство.

В чем я не прав конкретно в комментарии в (2) или в (6) - разве это не по существу вопроса?
virus2; Kilka_v_Kepke; +2 3 Ответить
13. Yashazz 4709 06.09.19 19:53 Сейчас в теме
(7) А вы, товарисч, не ленитесь, время - оно денег стоит, а опыт по отыскиванию чего-либо в коде БСП и вовсе бесценен. А то вам мало что разжуй, так ещё и пищеварить, а как отказывают, так вы сразу хамите? Ну-ну.
virus2; Kilka_v_Kepke; +2 4 Ответить
10. rpgshnik 3631 06.09.19 15:48 Сейчас в теме
(2) этот код вызывается из общего модуля, по другому не получилось. Я знаю, что в модуле формы не обязательно писать ЭтаФорма. Я предлагаю не функции копипастить в модуль формы, а целиком модуль создать для этих целей. И при необходимости вызывать с модуля формы, функцию общего модуля.
annak2980; +1 Ответить
12. Labotamy 06.09.19 19:08 Сейчас в теме
Свойство ЭтаФорма объекта УправляемаяФорма удалено и поддерживается для совместимости. https://dl04.1c.ru/content/Platform/8_3_3_641/1cv8upd.htm

Как бы 6ть лет прошло. Пора уже вообще забыть "ЭтаФорма"
Дмитрий74Чел; SagittariusA; Danil.Potapov; v.l.; azhilichev; MVK80; +6 Ответить
16. rpgshnik 3631 07.09.19 09:18 Сейчас в теме
(12) хорошее замечание, проверю. Удаленно "условно" выходит 🙃
22. MVK80 09.09.19 14:50 Сейчас в теме
(12), это будет до тех пор, пока разработчики типовых сами не избавятся от этого. Так-то, да я сам всегда использую ЭтотОбъект вместо ЭтаФорма и другим рекомендую.
rpgshnik; +1 Ответить
26. unichkin 1559 13.09.19 02:48 Сейчас в теме
(2) еще для передачи параметра в 8.3 не "ЭтаФорма", а "ЭтотОбъект".
https://its.1c.ru/db/metod8dev/content/5293/hdoc/_top/%D1%8D%D1%82%D0%B0%D1­%84%D0%BE%D1%80%D0%BC%D0%B0
gigapevt; SagittariusA; BigB; v.l.; +4 Ответить
3. TanisIntec 5 06.09.19 14:18 Сейчас в теме
Как раз занимался динамическим созданием, полезная инфа
rpgshnik; +1 Ответить
4. Timic 50 06.09.19 14:26 Сейчас в теме
В примере создания полей я бы поменял местами присваивание вида и пути к данным. Сначала устанавливаем путь к данным, потом вид поля формы. По крайней мере раньше при установке пути к данным вид автоматически устанавливался в поле надписи
9. Senator_I 166 06.09.19 15:45 Сейчас в теме
Спасибо, полезная вещь, добавил себе в "Избранное".
pavelpribytkin96; rpgshnik; +2 Ответить
11. ids79 8291 06.09.19 15:56 Сейчас в теме
Спасибо, полезный материал!
Сам хотел написать подобную статью, Вы меня опередили ))
Для расширений динамическое создание элементов форм - это уже почти стандарт.
alex99232014; rpgshnik; +2 Ответить
14. Yashazz 4709 06.09.19 19:54 Сейчас в теме
(11) Вот и убивать надо за такой стандарт. Есть же нормальная возможность перегрузить форму своей собственной, нафига такие танцы с бубном? Чтоб ваши последователи тратили втрое больше времени, пытаясь а) спрогнозировать внешний вид, б) поменять, чтоб ничего не сдохло?
DmitrySinichnikov; kiruha; +2 2 Ответить
17. ids79 8291 07.09.19 09:19 Сейчас в теме
(14)Позволю себе с Вами не согласиться. Я сам сперва добавлял и изменял реквизиты в загруженной в расширение форме. Но потом перешел на программное создание именно для большей прозрачности и управляемости. Хотя, в целом, я сторонник использования расширений.
annak2980; Anchoret; rpgshnik; +3 Ответить
59. vik070777 293 10.03.20 09:49 Сейчас в теме
(17) При программном создании в больших доработках очень сильно увеличивает код конфигурации что становится весьма неудобно. А так статья конечно полезна.
20. azhilichev 213 09.09.19 10:32 Сейчас в теме
(14) Программное создание отлично подходит для подключаемых механизмов, в виде API. Пример. Вы реализовали визуальный инструмент, который нужно подключить к нескольким формам. Вносить интерфейсные изменения во все формы - так себе решение. При каждом изменении внешнего вида и поведения необходимо будет вносить изменения во все экземпляры. Работа же через API - более логичное решение. Условно, при создании формы вызывается конструктор, который дополняет форму. И вся работа инструмента идет через 1-3 обработчика, которые используют единую логику, вынесенную в общий модуль.
rpgshnik; +1 Ответить
15. Yashazz 4709 06.09.19 19:57 Сейчас в теме
Как и любая мода, этот подход сейчас на слуху и популярен, а потому шпаргалка, безусловно, невредная для начинающих. Но, уверен, программное создание под тяжестью собственной непрозрачности, негибкости, времязатратности и громоздкости рано или поздно займёт подобающее ему небольшое место в ряду иных инструментов. Это костыль, однажды он на 90% отомрёт.
cloudspb; DmitrySinichnikov; FreeArcher; +3 7 Ответить
18. Yashazz 4709 08.09.19 10:21 Сейчас в теме
(15) Знаете, примерно так же со мной не соглашались, когда я говорил, что концепция "переопределяемых" модулей - это костыль. Мне говорили, ты что, это удобно, прогрессивно и прозрачно, дописал своё в типовой и обновлять легче! А потом появились расширения)
Так что, господа, попрыгаете на грабли программной доработки формы (особенно чужой и криво сделанной), поймёте. Лет через 5 вернёмся к этой теме)
27. lvictor58 135 18.09.19 12:31 Сейчас в теме
(18) Ну, во-первых 5 лет еще как-то надо прожить, работать и зарабатывать, а не ждать непонятно чего.
А во вторых, кто на этих расширениях уже что называется "собаку съел" советуют новые элементы форм создавать в расширениях программно, что бы потом не было проблем с обновлениями.
LosevI; mpeg1989; rpgshnik; +3 Ответить
78. AtamanovYS 148 25.11.21 13:23 Сейчас в теме
(18) Не проблема использовать переопределяемые интерфейсы внутри расширения. При интерактивной доработке это всё не контролируется, форму нужно (вручную) обновлять в расширении нажатием соответствующей кнопки, чтобы она заново объединилась. При сложном изменении бывают (как минимум, бывали) разные артефакты. Расширения вообще не панацея от программной работы с формой. Правильно и в расширении их программно дорабатывать.

Так что, господа, попрыгаете на грабли программной доработки формы (особенно чужой и криво сделанной), поймёте. Лет через 5 вернёмся к этой теме)

Наоборот, за пределами 1С моветон рисовать формы. Даже в декларативном стиле, как это на управляемых сделано. Весь веб-интерфейс описывается кодом. Все эти конструктора для Веб'а канули в лету.

Наоборот, функционал для программной работы с формами давно напрашивается в БСП. Но он почему-то есть только в выборочных конфигурациях (как мне говорили, в Документообороте 3 есть такой модуль).
annak2980; rpgshnik; +2 Ответить
19. azhilichev 213 09.09.19 10:24 Сейчас в теме
(15)
программное создание под тяжестью собственной непрозрачности, негибкости, времязатратности и громоздкости

Если сделана грамотная декомпозиция методов по созданию элементов, команд, реквизитов и обработчиков, то трудозатраты на доработку программно-генерируемого интерфейса формы лишь незначительно больше, чем на изучение и разработку в конструкторе.
28. Yashazz 4709 18.09.19 22:26 Сейчас в теме
(19) Только это уникально редко встречается.
azhilichev; +1 Ответить
32. azhilichev 213 19.09.19 09:57 Сейчас в теме
(28) Пожалуй, плюсану. Среди 1С-ников качественный и осмысленный код встречается не столь часто. Увы.
35. XSlava 157 11.11.19 12:06 Сейчас в теме
(32)Везде тупой не осмысленный код встречается, а не у только "1С-ников". Вы наверное ошиблись форумом.
annak2980; ubnkfl; rpgshnik; +3 1 Ответить
36. azhilichev 213 12.11.19 04:33 Сейчас в теме
(35) "неосмысленный" пишется слитно. Перед и после "наверное" нужны запятые.
user958101; gufadmin; +2 Ответить
37. XSlava 157 12.11.19 07:48 Сейчас в теме
(36)Вы точно ошиблись форумом.
Gendelf; user1583894; olya1990; ubnkfl; rpgshnik; +5 1 Ответить
38. azhilichev 213 13.11.19 08:16 Сейчас в теме
(37) Если вам за 1С-ников обидно, то не понимаю сути ваших претензий.

Везде тупой не осмысленный код встречается, а не у только "1С-ников".


Давайте процитирую мой исходный комментарий:
Среди 1С-ников качественный и осмысленный код встречается не столь часто.


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

При чем тут другой форум, я так и не понял.
40. XSlava 157 13.11.19 10:51 Сейчас в теме
(38)Наверное вы очень образованный человек, т. к. считаете возможным указывать на грамматические и синтаксические ошибки. По моему мнению, это форум где разбираются алгоритмы, а не грамматические и синтаксические ошибки, написания текста сообщений. На основании этого делаю вывод, что вам нужен форум, где разбираются ошибки правописания русского языка.

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

Заранее извиняюсь за ошибки, которые вам "режут глаз".
annak2980; olya1990; +2 2 Ответить
21. Andrefan 09.09.19 10:41 Сейчас в теме
Отличная работа, спасибо. Для полноты картины хотелось бы ещё увидеть сложные ЭУ: таблица формы, динамический список, командная панель, контекстное меню таблиц.
olya1990; rpgshnik; +2 Ответить
23. rpgshnik 3631 09.09.19 14:57 Сейчас в теме
(21) Динамический список включен в код модуля в конце публикации, а писал я про него уже давненько https://infostart.ru/public/728597/
24. smirnov.es 21 11.09.19 10:36 Сейчас в теме
Дима, спасибо за такой качественный контент.
rpgshnik; +1 Ответить
25. rpgshnik 3631 11.09.19 15:02 Сейчас в теме
29. sulitckaja 19.09.19 08:48 Сейчас в теме
Есть реквизит формы "Таблица значений". При выборе у колонки на форме "ПутьКДанным"
открывается форма "Выбор реквизита" в которой помимо реквизитов (колонки) есть еще реквизит Строка[0]
в которой тоже присутствуют колонки. Может кто то подсказать, как и для чего используется реквизит Сnрока[0]? или ссылку где можно почитать? Изображение прикреплено.
Спасибо заранее.
Прикрепленные файлы:
30. dhurricane 19.09.19 09:15 Сейчас в теме
(29) Т.о. можно, например, реализовать два варианта интерфейса: полный (с таблицей) и упрощенный (реквизиты первой строки отображаются как обычные поля ввода). Такое встречается в типовых конфигурация, например УТ11, документ "Заявка на расходование денежных средств". Он содержит переключатель для расшифровки платежа "Без разбиения / Списком" (см. рис.)

P.S. Я немного слукавил. В УТ используется не первая строка таблицы, а текущая. Подход немного другой, но сути это не меняет.
Прикрепленные файлы:
sulitckaja; +1 Ответить
31. sulitckaja 19.09.19 09:30 Сейчас в теме
(30)Спасибо большое за помощь.
44. PeRom 51 17.01.20 13:48 Сейчас в теме
(29)Коллекция строк таблицы, т.е. как я понял можно заполнить таблицу программно или конкретными значениями в конфигураторе - например внести таблицу умножения...
sulitckaja; +1 Ответить
33. karpik666 3760 23.09.19 16:23 Сейчас в теме
Добавлю, что для логичной работы с общим моделем можно добавить ряд инициализированных структур, где перечислены, доступные параметры, например
Функция ВозможныеПараметрыДекорации()
      ПараметрыДекорации = Новый Структура("Ширина, Высота, Вид");
Возврат ПараметрыДекорации;
КонецФункции;

поможет напомнить, что конкретно можно передать.
annak2980; rpgshnik; +2 Ответить
34. ksi_2166 26.09.19 11:23 Сейчас в теме
Спасибо от новичка в 8-ке
rpgshnik; +1 Ответить
39. yurikmellon 6 13.11.19 09:39 Сейчас в теме
Спасибо, думаю пригодится
41. Alexey_Yurov 13.11.19 11:03 Сейчас в теме
Очень удобно использовать в общем модуле МодификацияКонфигурацииПереопределяемый - так можно вносить изменения в типовые формы практически не изменяя их модуль (только добавляя процедуры обработчиков событий)
rpgshnik; +1 Ответить
43. AgentNiCho 31.12.19 13:56 Сейчас в теме
Можно добавить вопрос изменения реквизитов. На днях искал как добавить столбец в реквизит формы Таблица значений. Не сразу нашел. А в шпаргалке было бы полезно.
rpgshnik; gradus; +2 Ответить
47. rpgshnik 3631 10.02.20 08:30 Сейчас в теме
(43) обновил публикацию, теперь есть информация и по "Таблице формы".
AgentNiCho; +1 Ответить
50. AgentNiCho 10.02.20 13:52 Сейчас в теме
45. gradus 09.02.20 22:47 Сейчас в теме
А как бы, например, добавить реквизит в табличную часть?
На примере документа ПТУ в конфигурации БП 3.0. В реквизиты табличной части добавлено поле Склад. Как его программно выводить на форму?
46. rpgshnik 3631 10.02.20 05:16 Сейчас в теме
(45) вот мои функции по добавлению колонок типа Поле или Флажок

ТаблицаФормы например Форма.Элементы.Товары

&НаСервере
Функция СозЭлементТаблицаКолонкаПолеВвода(Форма,
	ТаблицаФормы,
	ИмяКолонки,
	ПутьКДанным,
	Заголовок = "", 
	ВставитьПеред = Неопределено) Экспорт
	
	Если ВставитьПеред = Неопределено Тогда
		НовыйЭлемент  = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
	Иначе
		НовыйЭлемент  = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);			
	КонецЕсли;
	
	Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;      
	НовыйЭлемент.ПутьКДанным = ПутьКДанным;
	
	Возврат НовыйЭлемент;
	
КонецФункции

&НаСервере
Функция СозЭлементТаблицаКолонкаФлажок(Форма,
	ТаблицаФормы,
	ИмяКолонки,
	ПутьКДанным,
	Заголовок = "", 
	ВставитьПеред = Неопределено) Экспорт
	
	Если ВставитьПеред = Неопределено Тогда
		НовыйЭлемент  = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
	Иначе
		НовыйЭлемент  = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);			
	КонецЕсли;
	
	Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;      
	НовыйЭлемент.ПутьКДанным = ПутьКДанным;
	
	Возврат НовыйЭлемент;
	
КонецФункции
Показать
49. gradus 10.02.20 12:04 Сейчас в теме
77. AtamanovYS 148 24.11.21 17:49 Сейчас в теме
(46)
Если ВставитьПеред = Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы,ВставитьПеред);
КонецЕсли;

А тут зачем так ? Можно всегда метод "Вставить" использовать, последний параметр не обязателен. В справке написано "Элемент, перед которым должен быть вставлен новый элемент. Если не указан, то элемент будет вставлен в конец."
rpgshnik; +1 Ответить
48. rpgshnik 3631 10.02.20 08:31 Сейчас в теме
(45) обновил публикацию, добавил информацию по созданию "Таблицы формы" и колонок у неё
51. lmnlmn 69 10.02.20 23:01 Сейчас в теме
(48) Где таблица - там и дерево))
52. rpgshnik 3631 11.02.20 04:26 Сейчас в теме
53. vkozak 28.02.20 12:09 Сейчас в теме
Качественная и полезная шпаргалка.
Спасибо!!
54. rus16rom 04.03.20 16:31 Сейчас в теме
Добрый день.
Случайно наткнулся на вашу статью и не смог пройти мимо. Программное создание элементов на форме использовал ранее в конфигурации и было ровно также реализовано, через общий модуль и далее вызов всего этого "чуда" при создании формы.
Да, соглашусь, проблему на типовое обновление это решает вопрос, но вот когда база стала расти, пользователей в базе стало больше 300 активных, вот тут мы стали получать проблему производительности, так как, каждый раз при открытии формы создаются программно элементы. Когда пользователей стало более 1000 было принято решение перехода на расширения, так как, показатели производительности стремились к нулю.
А после, я где-то на ИТС встетил информацию, что сами разработчики 1С не рекомендуют использовать программное создание элементов на форме, ровно по той причине, которую я выше описал. Так сказать, получил практический опыт, как делать не нужно.

А так, статья хорошая, но наверное не стоит злоупотреблять программным созданием элементов + помнить, что чем больше активных пользователей. тем медленнее будет работать система.
annak2980; chng; acanta; rpgshnik; BigB; +5 Ответить
56. rpgshnik 3631 05.03.20 03:19 Сейчас в теме
(54) Добрый день. Очень интересно, честно ни разу не слышал о такой точки зрения.
57. rus16rom 05.03.20 10:27 Сейчас в теме
(56) Это практический опыт:) Попробуйте написать нагрузочный тест и поставить замеры Apdex в формы, где создаются программно элементы, сразу увидите все изменения.
annak2980; chng; +2 Ответить
58. rpgshnik 3631 05.03.20 10:38 Сейчас в теме
(57) да уже проверил, вы правы.

Опять же я создавал 120 элементов. Разница в миллисекундах вышла почти в два раза. Грубо говоря расширением 82 мс, программно 179 мс :) ну и конечно речь идёт про повторное открытие, при первом открытие формы разница не так велика, где-то 195 (расширение) против 207 (программно).
73. imm0rtal 14 23.08.21 21:05 Сейчас в теме
Да так себе сервис, чего скрывать то.
Мне как то роуминг настраивали несколько месяцев


(57)это просто руки из жопы.
а не опыт=)
55. Dmitryflagman 24 04.03.20 16:52 Сейчас в теме
Спасибо , то что давно искал !
rpgshnik; +1 Ответить
60. Mechanik21 24 04.06.20 17:01 Сейчас в теме
А как удалить программно добавленные реквизиты?
61. rpgshnik 3631 05.06.20 06:20 Сейчас в теме
(60) ИзменитьРеквизиты(,МассивУдаляемых);

ИзменитьРеквизиты (ChangeAttributes)
Синтаксис:
ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
Параметры:
<ДобавляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий объекты типа РеквизитФормы.
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект.<Имя реквизита>.
<УдаляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
Удалять можно только ранее программно добавленные реквизиты.
62. rpgshnik 3631 05.06.20 06:22 Сейчас в теме
(60) Если элементы тоже тогда можно удалять разом все - удалив родителя.
Допустим удаляя динамический список - не нужно удалять каждую колонку, достаточно удалить элемент динамического списка.
ИмяЭлемента = "ИмяВашегоЭлемента";
Элементы.Удалить(Элементы[ИмяЭлемента]);
63. ITSun 22.07.20 18:11 Сейчас в теме
Полезная статья, однозначно в закладки! :)
64. WrongLane 3 02.12.20 08:33 Сейчас в теме
А на такие поля как-то можно события запрограммировать, например, при изменении?
65. rpgshnik 3631 02.12.20 10:11 Сейчас в теме
(64) на такие какие? Элемент формы "Поле"?
67. lefthander 25.12.20 16:45 Сейчас в теме
(64)Да можно
НовоеПоле.УстановитьДействие("ПриИзменении", "ПолеПриИзменении");

и собственно Процедура ПолеПриИзменении(Элемент)
maksa2005; kyzma-kyzmi4; WrongLane; +3 Ответить
66. пользователь 06.12.20 19:43
Сообщение было скрыто модератором.
...
68. user1021719 12.01.21 23:19 Сейчас в теме
Спасибо за описание механизмов. Многое использовал. Столкнулся только с одной проблемой - реквизит и его сохранение. Не Сохраняемые данные, а именно Сохранение. В списке всех реквизитов столбец который. Не могу программно найти, как установить Истина. Возможно это кодом описать ?
Прикрепленные файлы:
70. rule_2 47 30.03.21 08:26 Сейчас в теме
(68)
Не могу программно найти, как установить Истина. Возможно это кодом описать ?


Сам как-то столкнулся с подобным вопросом. К сожалению, не все возможно сделать программно. Эту галку поставить при программном создании невозможно.
69. JOJ73 22.01.21 10:28 Сейчас в теме
Немного изменил для себя ваш проЭлементы.

Заменил :
Если СтруктураСвойств = Неопределено Тогда
СтруктураСвойств = Новый Структура;
КонецЕсли;
......
Для Каждого Элемента Из СтруктураСвойств Цикл
НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;
КонецЦикла;

На:
Если СтруктураСвойств <> Неопределено Тогда
Для Каждого Свойства Из СтруктураСвойств Цикл
НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;
КонецЦикла;
КонецЕсли;

Но в целом большое спасибо за работу, у самого был подобный модуль,
но у Вас все удобнее и красивее )).
rpgshnik; +1 Ответить
71. rpgshnik 3631 30.03.21 10:09 Сейчас в теме
75. angabanga5 23.09.21 12:50 Сейчас в теме
(71) Пардон. пишу код для добавления кнопки в процедуре "ПриСозданииНаСервере", но никакой кнопки не добавляется. код просто проходит мимо. не могу понять, что еще нужно дописать, чтобы было отображение.
76. rpgshnik 3631 23.09.21 14:06 Сейчас в теме
(75) команда должна быть определена заранее как минимум, текст чуть выше в статье
72. angabanga5 26.06.21 12:31 Сейчас в теме
чет я попробовал - не работает. тупо код пропускается и никаких новых элементов не добавляется
74. 1Cynep4eJIoBek 22.09.21 12:19 Сейчас в теме
Спасибо добрый человек, ты сэкономил мне много времени. Жаль что не попалась раньше статья
maksa2005; rpgshnik; +2 Ответить
79. Sirruf 192 08.02.22 23:54 Сейчас в теме
Подскажите, пожалуйста, как программно добавить на форму строку поиска, источником которой является таблица формы? По какой-то причине у добавляемого элемента формы нет свойства источник... Удалось нагуглить только саму проблему, решение не могу найти.
https://dev.mista.ru/topic.php?id=867412

Интерактивно это делается примерно так
https://1c-bezproblem.ru/blog/v-pomoshch-1s-programmistu/1c-stroka-poiska-ne-otobrazhaetsya-v-komandnoj-paneli-1s-vyvesti-stroku-poiska-v-komandnuyu-panel-pomestit-stroku-poiska-na-komandnuyu-panel-2

код по добавлению элемента управления
НовыйЭлемент = Элементы.Добавить("СтрокаПоиска", Тип("ДополнениеЭлементаФормы"), Элементы.ГруппаОтбора);
НовыйЭлемент.Вид = ВидДополненияЭлементаФормы.ОтображениеСтрокиПоиска;
//НовыйЭлемент.Источник = ??? //нет свойства источник
81. rpgshnik 3631 10.02.22 04:20 Сейчас в теме
(79) "Автозаполнение" я с ним сталкивался когда пытался полноценно влиять на командную панель динамического списка, но увы управлять этим свойством программно никак нельзя было, думаю и сейчас не возможно.
80. Sirruf 192 09.02.22 00:38 Сейчас в теме
Еще один вопрос - как программно ограничить состав команд командной панели таблицы формы? Интерактивно опять же это можно сделать в пару кликов...
82. rpgshnik 3631 10.02.22 04:21 Сейчас в теме
(80) опять же дополняя прошлый ответ - делал костыльно в процедуре создания динамического списка - скрывал стандартную панель списка и наполнял её уже необходимыми кнопками.
83. silverr 15 21.07.22 12:55 Сейчас в теме
Всем доброго времени суток!
В расширение добавлен регистр сведений. Желаю в регистр сведений сделать запись, источником данных для которой, являются динамически(программно) созданные реквизиты на форме элемента справочника.
Никак не могу получить значение "своего" реквизита.
Подскажите пожалуйста выход из тупика, или как его обойти.
84. rpgshnik 3631 21.07.22 12:58 Сейчас в теме
(83)ЭтотОбъект["ИмяВашегоРеквизита"]
91. Killerban4 20.07.23 11:42 Сейчас в теме
(84)Добрый день! Комментарии совсем мертвые к теме, по этому упомянул, вдруг будет уведомления, буду рад если поможете. Мой коммент (90).
85. silverr 15 22.07.22 10:29 Сейчас в теме
Спасибо, растерялся из-за отсутствия локальных переменных в отладчике.
rpgshnik; +1 Ответить
86. silverr 15 22.07.22 12:13 Сейчас в теме
Еще подскажите пожалуйста, как повлиять на размеры Элемента формы если Тип "ПолеФормы" Вид "ПолеКартинки". В поле выводится сама картинка. Вызов методов: НовыйЭлемент.Высота = 2; НовыйЭлемент.Ширина = 5;, свойства изменяют, но на форме все без изменения.
87. silverr 15 22.07.22 13:49 Сейчас в теме
(86)Вроде разобрался, может "костыляво":
НовыйЭлемент.Высота = 20;	НовыйЭлемент.АвтоМаксимальнаяВысота = Ложь;	НовыйЭлемент.МаксимальнаяВысота = 20;
		НовыйЭлемент.Ширина = 50;	НовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;	НовыйЭлемент.МаксимальнаяШирина = 50;

Теперь масштабирование не работает)))
88. ignor 235 22.04.23 11:32 Сейчас в теме
Могу наверное ошибиться, но по попыткам эксплуатации упёрся в то что тут нельзя создать командную панель
89. Killerban4 19.07.23 10:50 Сейчас в теме
Добрый день! А как к созданному полю ввода добавить возможность выбора из выпадающего списка? Буду очень благодарен. Если кто-то возьмется объяснить, учитывайте пожалуйста тот факт, что я прям новичек, еще и не сильно умный XD
90. Killerban4 19.07.23 11:02 Сейчас в теме
Добрый день! А как к созданному полю ввода добавить возможность выбора из выпадающего списка? Буду очень благодарен. Если кто-то возьмется объяснить, учитывайте пожалуйста тот факт, что я прям новичек, еще и не сильно умный XD

вот код, в котором я создал реквизит, создал группу, поле ввода и поместил его в созданную группу.

//Создание Группы
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ; 
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
	
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов

НовыйРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0))); 
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Команда на добавление реквезитов из массива
	
	
//Создание полей для реквизитов
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Номер2", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Номер";
Показать
92. Killerban4 26.07.23 12:11 Сейчас в теме
(90)
Если вдруг у кого-то будет такая же проблема, то вот решение:
Идея заключается в том, что мы:
1) Создаем объект(в нашем случае Массив), в котором будут храниться значения, из которых надо будет выбирать.
2) Создаем "Реквизит", в котором сохраним наше значение и к которому будем обращаться в дальнейшем, если например, это значение нам понадобится.
3) Создаем поле ввода, которое отображается на форме, и с которым взаимодействует пользователь. Добавляем возможность выбора значения в данном поле, значения берутся из Массива, созданного нами же в первом пункте.

Ниже привел код, описал каждую строчку, для максимального понимания процесса:

//Задаем массив значений, в котором будут элементы, из которых будем выбирать
МассивЗначенийВыбора = Новый Массив; //новый массив куда будем добавлять элементы
МассивЗначенийВыбора.Добавить("Строка"); //добавляем в массив элемент, значение которого "Строка"
МассивЗначенийВыбора.Добавить("Число"); //добавляем в массив элемент, значение которого "Число"

//описываем свойства нового реквизита и имя   
НовыйРеквизит = Новый РеквизитФормы("ИмяНовогоРеквизита", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(500))); 
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); //добавляем описанный выше реквизит на форму

//добавляем на форму элемент(само "окошко", с которым будет взаимодействовать пользователь)
Элемент = ЭтаФорма.Элементы.Добавить("ЭлементПолеВыбораТипа", Тип("ПолеФормы"), Элементы.ТипЗначения); //добавляем элемент на форму "ЭлементПолеВыбораТипа" - имя элемента, может быть любым
Элемент.Вид = ВидПоляФормы.ПолеВвода; //указываем вид элемента
Элемент.ПутьКДанным = ИмяНовогоРеквизита; //имя реквизита, созданного выше
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; //настройка "отображать заголовок или нет"(не обязательная строка)
Элементы["ЭлементПолеВыбораТипа"].РежимВыбораИзСписка = Истина; //включаем режи выбора из списка, если не включить, то мы получим просто поле для ввода(примечание: Элементы[ИмяЭлемента] - способ обращения к добавленному программно элементу на форму, например для получения значения или установки значения)
Элементы["ЭлементПолеВыбораТипа"].СписокВыбора.ЗагрузитьЗначения(МассивЗначенийВыбора); //подключаем ранее созданный массив с данными из которых будем выбирать, к созданному полю выбора

ЭтотОбъект["ИмяНовогоРеквизита"] = "Строка"; //обращаемся к созданному в начале реквизиту и устанавливаем ему значение "по умолчанию",  в целом это не обязательно
Показать
93. aleksey2 86 28.07.23 14:45 Сейчас в теме
и ни слова про переместить
Элементы.Переместить(Элемент, ГруппаДатаНомер);
Это просто бомба"
94. len_antonova 29.07.23 16:01 Сейчас в теме
Добрый день! Не понимаю, что происходит. Добавила реквизиты, создала элементы. Все красиво, но при записи или проведении все новые элементы очищаются. Как сделать, чтобы все сохранялось?
95. pentanom 25 30.07.23 02:24 Сейчас в теме
Подскажите как при изменении начального номера места вывести конечный номер в виде декорации, который получается прибавлением некого числа. Нужно получить примерно то, что на рисунке. Я написал
	ИмяЭлемента = "НМ";
	ЭлементФормы = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ГруппаФормы);        
	ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
	ЭлементФормы.ПутьКДанным = "Объект.НачальныйНомерМеста";
	ЭлементФормы.МногострочныйРежим = Ложь;
	ЭлементФормы.Заголовок = "Номер места с";

        КонечныйНомерМеста = Объект.НачальныйНомерМеста + КоличествоМест()-1;
	Если КонечныйНомерМеста < Объект.НачальныйНомерМеста Тогда
		КонечныйНомерМеста = Объект.НачальныйНомерМеста;
	КонецЕсли;
	
	ЭлементФормы.УстановитьДействие(
		"ПриИзменении", 		    //Имя события
		"МКТ__НачальныйНомерМестаПриИзменении"); //Имя процедуры обработчика

	//Декорация надпись
	ЭлементФормы = Элементы.Добавить("ДекорацияКонечныйНомер", Тип("ДекорацияФормы"),ГруппаФормы);
	ЭлементФормы.Вид = ВидДекорацииФормы.Надпись;
	ЭлементФормы.Заголовок = " по: "+КонечныйНомерМеста;
Показать
а что писать в
&НаСервере
Процедура МКТ__НачальныйНомерМестаПриИзменении()
...
КонецПроцедуры

И еще хотелось бы установить кнопку выбора на "начальное место" ...
Прикрепленные файлы:
96. v8denis 27.09.23 17:06 Сейчас в теме
(94) 6 параметр при создании "Объект.НазваниеПоля"
Оставьте свое сообщение