Добавление доп. реквизита в динамический список программно
Добавление доп. реквизита в динамический список программно
Некоторые пользователи хотят видеть дополнительную аналитику по определенным объектам конфигурации 1С, для реализации этой потребности существует функционал дополнительных реквизитов и сведений, который зачастую выводится в группу «Дополнительно» или «Дополнительные реквизиты».
Мы же разберем как отобразить дополнительные реквизиты в форме списка элементов. Практически всегда в этой форме используется «Динамический список», но данный способ не позволяет использовать это на обычной «Таблице значений».
Как добавить дополнительный реквизит в динамический список:
Получившейся код модуля:
&НаКлиенте Процедура dev_ПриОткрытииПосле(Отказ) ОтображениеДополнительныхРеквизитов(); КонецПроцедуры &НаСервере Процедура ОтображениеДополнительныхРеквизитов() // Получаем набор свойств объекта по пустой ссылке объекта метаданных. НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Справочники.Номенклатура.ПустаяСсылка()); // Инициализируем имя набора свойств. ИмяНабора = НаборСвойств[0].Набор.Наименование; Свойства = НаборСвойств[0].Набор.ДополнительныеРеквизиты.Выгрузить().ВыгрузитьКолонку("Свойство"); // Наполняем массив именами доп.реквизитов, которые мы хотим отобразить в списке формы. // Можно создать отдельную настроку, например регистр где будем хранить выводимые поля, // для конкретных объектов метаданных или даже в зависимости от роли. МассивОтображаемыхСвойств = Новый Массив; МассивОтображаемыхСвойств.Добавить("Краткое описание"); // и т.д. // Если например у нас полные права то выведем все доп.реквизиты. Если РольДоступна("ПолныеПрава") Тогда МассивОтображаемыхСвойств = ПолучитьМассивНаименованийСвойств(Свойства); КонецЕсли; // Квадратные скобки обязательны. // Именно так платформа понимает что мы обращаемся к реквизиту ТЧ "ДополнительныеРеквизиты" ШаблонПутьКДанным = "Список.Ссылка.[%1 (%2)]"; // Обход циклом свойств для вывода в список. Для каждого ТекущееСвойство Из Свойства Цикл НаименованиеСвойства = ТекущееСвойство.Наименование; ИмяЭлемента = ТекущееСвойство.ИдентификаторДляФормул; Если МассивОтображаемыхСвойств.Найти(НаименованиеСвойства) <> Неопределено Тогда СтрокаДанные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПутьКДанным, НаименованиеСвойства, ИмяНабора); НовыйЭлемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Элементы.Список); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = СтрокаДанные; НовыйЭлемент.Заголовок = НаименованиеСвойства; КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьМассивНаименованийСвойств(МассивСвойств) МассивНаименований = Новый Массив; Для каждого Свойство Из МассивСвойств Цикл МассивНаименований.Добавить(Свойство.Наименование); КонецЦикла; Возврат МассивНаименований; КонецФункции;
Данный код проверялся на конфигурации «Бухгалтерия предприятия 3.0», но он подойдет для любой конфигурации.
Как результат работы нашего кода прикладываем скриншот и тестовое расширение конфигурации:
Как видим все доп. реквизиты появились в нашем списке.
Для подключения расширения использовались такие надстройки:
Скачать расширение
Оставить заявку на бесплатную консультацию прямо сейчас!
Добавление доп. реквизита в динамический список |
Я |
13.08.21 — 15:46
Приветствую всех.
подымалась мне такая задача.
Как добавить в динамический список доп реквизит программно? и условное оформление по нему.
все мы знаем что в клиенте можно через еще — изменить форму добавить доп реквезит(например в справочнике подразделения организаций у нас есть доп рек. цех) на форму списка.
а как сделать то же самое программно? я так и не смог найти.
а потом сделать по нем условное оформление.( но думаю при решении 1 вопроса решиться и 2).
если у нас динамический список произвольныйЗАПРОС = ИСТИНА. то все понятно — меняем запрос добавляя туда данные
но в нашем случае ЛОЖЬ и просто задана основная таблица и все.
как в нашем случае вывести доп рек программно на управляемую форму?
1 — 16.08.21 — 15:18
ап
пока в голову пришло только разворотить все через расширение и поставить произвольныйЗАПРОС = ИСТИНА и дальше от этого плясать
2 — 16.08.21 — 15:24
создай поле и пропиши ПутьКДанным типа «ПодразделениеОрганизации.Цех»
делов то
3 — 16.08.21 — 15:38
(2) Неверно!
Доп рек -ты лежат в таблице привязанной к объекту. это не просто реквизит объекта.
4 — 16.08.21 — 15:41
(3) а зачем программно? добавляйте непрограммно. поставьте галку Произвольный запрос и вперед.
5 — 16.08.21 — 15:42
(3) ты про Характеристики что-то слышал?
6 — 16.08.21 — 15:47
(4) ну вот разве что так, но хотелось бы программно. нельзя?
(5) что то слышал — но при чем тут они? как они связаны с доп рек-ми?
7 — 16.08.21 — 15:49
(6) самым тесным образом
8 — 16.08.21 — 15:57
(7) простите, но вы не помогаете решить проблему.
дайте ссылку что ли хотя бы — где характеристики делают как доп рек-ты и программно выводят на динамический список где роизвольныйЗАПРОС = лЛожь.
9 — 16.08.21 — 15:59
(8) как по-твоему, откуда дин.список узнает откуда ему брать доп.реквизиты, если они лежат в другой таблице?
10 — 16.08.21 — 16:04
(9) Через запрос . а уж как он там платформе его формирует — то мне не ведомо.
11 — 16.08.21 — 16:09
(6) если программно это в 10 раз дольше. А результат, если что-то поменяется в динамическом списке, то программное еще быстрее рухнет. Так что то же самое, что и не программно. В случае динамического списка без разницы.
12 — 16.08.21 — 16:10
13 — 16.08.21 — 16:10
(10) через характеристики )))
14 — 16.08.21 — 16:11
(11) не поныл вас.
ну может не в 10 а в 3 раза дольше. ну что жеш.
насчет «рухнет» не согласен.
15 — 19.08.21 — 10:20
Короче может кому пригодиться
1. Сделать все красиво не получилось(т.е. добавить програмно доп рек на форму и отбор по нему)
2. Начало процедуры в расширении при создании на сервере
2.1 Выбираем своим запросом ссылки с этим доп рек-ом
2.2 делаем условное оформление где выделяем цветом строку с нужным значением доп рек-та(не отбор, но видимо выделяем для пользователя)
2.3 при изменении(а значит кто то записал элемент справочника) — обновляем список из 2.1 и обновляем его в отборе условного оформления из 2.2.
Итого получаем — рек-та нет на форме, но форма реагирует цветным выделением строки для нужного значения доп рек-та.
Да, это только условное выполнение конкретной задачи для доп рек-ты у которого ограниченное(заранее заданное) кол-во значений.
Как можно сделать лучше?
16 — 19.08.21 — 12:09
Поле.ПутьКДанным = «Список.Ссылка.[наименование доп реквизита]»;
при условии, что в метаданных заданы характеристики для этого объекта..
17 — 19.08.21 — 12:11
(16) метаданные из (12).. квадратные скобки обязательны..
18 — 19.08.21 — 12:12
(0) никак кроме как добавлением поля в запрос демонического списка, условное оформление не имеет отношения к данным списка, оно всего лишь его разукрашивает
AceVi
19 — 19.08.21 — 12:51
(18) еще как имеет.
1. Отбор по данным списка( что именно разукрашиваем)
2. Оформляемые поля- сиречь колонки списка для рзукрашивания.
как видим оформление — напрямую зависит от данных.
(16) это не спортивно — стандартную конфу менять нельзя а в расширении характеристики добавлять нельзя.
отклонено.
Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti
Продолжаем рассматривать варианты размещения элементов на форме на примере вывода реквизитов документа на форму списка документов, состав документа представлен на рис. 1:
Рис. 1. Реквизиты документа
Добавим на форму списка документов колонку со значением статуса приходной, статус приходной находится в регистре сведений. Открываем форму списка документа пр_Приходная. Если формы списка еще нет, то нажимаем значок лупы на вкладке Формы окна свойств документа (рис. 2):
Рис. 2. Создание формы списка документа
В открывшемся окне Конструктор формы документа нажимаем Далее > и выбираем поля, которые хотим вывести на форму (поля — это реквизиты и табличные части документа), нажимаем Готово. Открывается окно формы списка документа.
В форме списка документа открываем свойства реквизита Список (правой кнопкой мышки — Свойства), в окне Свойства ставим галочку у свойства Произвольный запрос (рис. 3):
Рис. 3. Свойства реквизита формы Список
После установки свойства Произвольный запрос состав свойств раздела Объект изменится (рис. 4):
Рис. 4. Состав раздела Объект окна Свойства
Нажимаем на гиперссылку Открыть свойства Настройка списка (рис. 4). Открывается окно Динамический список (рис. 5):
Рис. 5. Окно Динамический список
Добавляем в запрос текст для получения статуса приходной из регистра сведений. В примере используется регистр сведений пр_СтатусПриходной со значением свойства Периодичность — В пределах дня, состав регистра представлен на рис. 6:
Рис. 6. Состав регистра с данными о статусе приходной
Изменить запрос в окне Динамический список можно нажав на кнопку Конструктор запроса… или можно сразу написать нужный текст в поле Запрос (рис. 7):
Рис. 7. Измененный запрос
Текст запроса:
ВЫБРАТЬ Документпр_Приходная.Ссылка, Документпр_Приходная.ПометкаУдаления, Документпр_Приходная.Номер, Документпр_Приходная.Дата, Документпр_Приходная.Проведен, Документпр_Приходная.Организация, Документпр_Приходная.ТипПриходной, Документпр_Приходная.Склад, Документпр_Приходная.Подразделение, Документпр_Приходная.Ответственный, Документпр_Приходная.Комментарий, пр_СтатусПриходнойСрезПоследних.Статус ИЗ Документ.пр_Приходная КАК Документпр_Приходная ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пр_СтатусПриходной.СрезПоследних КАК пр_СтатусПриходнойСрезПоследних ПО пр_СтатусПриходнойСрезПоследних.Приходная = Документпр_Приходная.Ссылка
Важно проверить, что в поле Основная таблица окна Динамический список указан нужный документ (рис. 7), иначе, если поле будет не заполнено, то в форме списка документов не будет возможности добавлять новые документы и открывать существующие (и не будет привычных кнопок Создать, Создать копированием и т.п.). Нажимаем ОК. Теперь в составе реквизита Список те поля, которые были выбраны в запросе (рис. 8):
Рис. 8. Состав реквизита Список
Перетаскиваем новое поле Статус из вкладки Реквизиты на вкладку Элементы в состав элемента Список (рис. 8). И размещаем поле Статус на вкладке Элементы после полей Дата, Номер (рис. 9):
Рис. 9. Размещение поля Статус
У реквизитов (на вкладке Реквизиты) в составе динамического списка можно отметить свойство Использовать всегда (рис. 8). Это нужно, когда поля должны быть в составе динамического списка в любом случае, даже если они не будут добавлены на форму как элементы, например, будут использоваться в дальнейшем в коде модуля формы списка документа.
Проверяем работу формы списка документа в пользовательском режиме: появилась колонка Статус, содержащая значение статуса приходной из регистра сведений (рис. 10):
Рис. 10. Новая колонка формы списка
Динамический список 1С предназначен для вывода на форму любых данных в произвольном виде. Эти данные могут быть представлены в виде списка, таблицы или дерева. Динамический список позволяет делать сортировку выводимых данных, отбор, группировку, условное оформление и т.д. Причём, отбор, группировку и прочее может делать как разработчик, так и пользователь.
Динамический список 1С можно создать в качестве реквизита управляемой формы. Для этого достаточно, типу реквизита присвоить значение ДинамическийСписок.
В моем примере динамический список создан на основной форме обработки.
Для того, чтобы динамический список выводил какие-то данные, нам следует или указать основную таблицу в свойствах динамического списка, или написать произвольный запрос на языке запросов 1С.
Динамический список 1С — основная таблица
Динамическому списку можно назначить основную таблицу. Основная таблица – это произвольный объект метаданных (документ, справочник, регистр значения и т.д.), данные которого должны отобразиться в динамическом списке.
Например, в качестве основной таблицы выберем справочник Номенклатура.
И поместим динамический список на форму в виде таблицы, не забыв добавить колонки при размещении.
Если мы сейчас откроем обработку в пользовательском режиме 1С: Предприятия, то на основной форме обработки будет номенклатура в виде иерархического списка.
Можно сделать отображение списка в виде дерева. Для этого можно изменить режим просмотра таблицы на форме в пользовательском режиме.
Либо, поменять значение свойства Отображение таблицы формы, в которой был размещен динамический список.
После этого, динамический список на форме будет в виде дерева.
Произвольный запрос динамического списка 1С
Помимо использования основной таблицы, можно также динамический список сделать на основании запроса. Причем, можно взять за основу основную таблицу. Для примера, выведем вместе с номенклатурой цены, которые хранятся в периодическом регистре сведений Цены номенклатуры. Если мы в свойстве Произвольный запрос динамического списка установим флаг, при уже выбранной основной таблице, то у нас основная таблица будет взята за основу при формировании запроса.
Чтобы посмотреть на запрос, следует нажать на гиперссылку Открыть свойства НастройкаСписка.
В случае произвольного запроса мы можем изменить набор данных, который должен отображаться в динамическом списке. Но в этом случае все равно рекомендуется указывать основную таблицу, необходимо это делать для того, чтобы платформа могла определить, какая информация в этом динамическом списке главная, а какая второстепенная, и исходя из этого настроить стандартные команды. В том случае, если у Вас несколько таблиц и они связаны каким-то соединением, то все равно рекомендуется всегда указывать основную таблицу, потому что в противном случае производительность основного списка будет желать лучшего.
Свяжем справочник Номенклатура с виртуальной таблицей срез последних регистра сведений Цены номенклатуры.
Для этого, вызовем конструктор запроса из окна динамического списка, и добавим в список таблиц запроса виртуальную таблицу СрезПоследних. У виртуальной таблицы выберем ресурс Цена, который поместим в список полей, применив к этому полю функцию ЕстьNULL.
Свяжем левым соединением таблицу номенклатуры с виртуальной таблицей СрезПоследних регистра сведений.
И исправим имя поля Цена.
Наш запрос готов.
Обратите внимание на свойства «Динамическое считывание данных», которое есть и в свойствах динамического списка, когда указана основная таблица, и в том случае, когда указан произвольный запрос . Если это свойство установлено, то считывание данных происходит порциями, т.е. выбираются только те данные, которые необходимы для отображения на экране. В целях улучшения производительности, лучше всегда это свойство устанавливать.
Поскольку, мы переделывали существующий динамический список, то поле цена в таблице формы не отобразилось. Добавим это поле.
После такой доработки динамического списка, на в таблице на форме будут отображаться цены у номенклатуры.
Очень подробно работа с динамическими списками дается в моей книге «Основы разработки в 1С: Такси».
В этой книге вы научитесь:
- Настраивать динамические списки;
- Работать с поиском в динамическом списке;
- Программировать динамические списки (программная установка параметров, отборов, группировок, сортировок и условного оформления).
У вас, как у читателя блога, есть скидка 15 % по промо-коду: 48PVXHeYu
Более подробно о работе с другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.
В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком
Для моих читателей, купон на скидку 25%: hrW0rl9Nnx
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
При доработке типовых решений для упрощения дальнейшей поддержки и обновления использую программное создание динамического списка и вывод его на форму.
Содержание
- Задача
- Решение
- Создание страниц
- Перемещение элементов формы
- Программное создание динамического списка
- Небольшая хитрость
- Результат
Задача
Считаем, что есть типовая форма списка номенклатуры с динамическим списком. На форму необходимо добавить страницы: на первой выводить типовой список, а на второй список номенклатуры и данные РС «Данные для обработки». На текущий момент форма выглядит так:
Решение
План работ следующий:
- Создать страницы на форме;
- Переместить типовой динамический список на нужную страницу;
- Создать динамический список и вывести его на нужную страницу.
Далее будет показан код по логическим блокам, в конце статьи будет представлен итоговый код
Создание страниц
Собственно создадим группу с видом «Страницы», и в нее добавим две группы с видом «Страница»
Страницы = Элементы.Добавить("Страницы", Тип("ГруппаФормы"), ЭтаФорма); Страницы.Вид = ВидГруппыФормы.Страницы; Страницы.Заголовок = "Страницы"; Страница_1 = Элементы.Добавить("Страница_1", Тип("ГруппаФормы"), Страницы); Страница_1.Вид = ВидГруппыФормы.Страница; Страница_1.Заголовок = "Страница 1"; Страница_2 = Элементы.Добавить("Страница_2", Тип("ГруппаФормы"), Страницы); Страница_2.Вид = ВидГруппыФормы.Страница; Страница_2.Заголовок = "Страница 2";
Программное формирование реквизитов и элементов формы можно в статье 1С. Программное добавление и удаление реквизитов формы
Перемещение элементов формы
Для перемещения типового динамического списка воспользуемся методом коллекции элементов формы Переместить()
Элементы.Переместить(Элементы.Список, Страница_1);
Программное создание динамического списка
Добавляем реквизит формы с типом Динамический список и определяем основные свойства.
// Создадим реквизит формы динамическог списка ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список_Альтернативный", Новый ОписаниеТипов("ДинамическийСписок"))); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Опишем параметры динамического списка ЭтаФорма.Список_Альтернативный.ПроизвольныйЗапрос = Истина; ЭтаФорма.Список_Альтернативный.ТекстЗапроса = "ВЫБРАТЬ | Спр_Номенклатура.Ссылка КАК Ссылка, | Спр_Номенклатура.Код КАК Код, | Спр_Номенклатура.Наименование КАК Наименование, | Спр_Номенклатура.ПометкаУдаления КАК ПометкаУдаления, | Спр_Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ЕСТЬNULL(ДанныеДляОбработки.Обработан, ЛОЖЬ) КАК Обработан, | ЕСТЬNULL(ДанныеДляОбработки.ОшибкаПриОбработке, ЛОЖЬ) КАК ОшибкаПриОбработке |ИЗ | Справочник.Номенклатура КАК Спр_Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки | ПО (ДанныеДляОбработки.Номенклатура = Спр_Номенклатура.Ссылка)"; ЭтаФорма.Список_Альтернативный.ОсновнаяТаблица = "Справочник.Номенклатура";
Теперь создадим элементы формы относящиеся к динамическому списку
//Создание элементов формы эл_Список = Элементы.Добавить("Список_Альтернативный", Тип("ТаблицаФормы"), Страница_2); эл_Список.ПутьКДанным = "Список_Альтернативный"; эл_Список.Отображение = ОтображениеТаблицы.Список; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеСостоянияПросмотра = ПоложениеСостоянияПросмотра.Нет; эл_Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет; эл_Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; НоваяКолонка = Элементы.Добавить("Список_Альт_Ссылка", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Ссылка"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_ПометкаУдаления", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ПометкаУдаления"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Код", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Код"; НоваяКолонка = Элементы.Добавить("Список_Альт_Наименование", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Наименование"; НоваяКолонка.Ширина = 20; НоваяКолонка.РастягиватьПоГоризонтали = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Обработан", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Обработан"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_ОшибкаПриОбработке", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ОшибкаПриОбработке"; НоваяКолонка.Заголовок = "Ошибка"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_НоменклатурнаяГруппа", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.НоменклатурнаяГруппа";
Небольшая хитрость
Как видно из кода, на форме не отображается поле «Ссылка», если на клиенте программно обратиться к текущим данным нашего списка, то свойства ссылка в полученной коллекции не будет. Для предотвращения такой ситуации необходимо указать обязательность использования поля, тогда свойство будет передаваться на клиент всегда
ЭтаФорма.Список_Альтернативный.УстановитьОбязательноеИспользование("Ссылка", Истина);
Результат
Теперь проверяем, что у нас получилось. Первая страница, на которую мы перенесли типовой список
Вторая страница с нашим сформированным списком
И результирующий код:
#Область ОбработчикиСобытийформы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) #Область СозданиеСтраниц Страницы = Элементы.Добавить("Страницы", Тип("ГруппаФормы"), ЭтаФорма); Страницы.Вид = ВидГруппыФормы.Страницы; Страницы.Заголовок = "Страницы"; Страница_1 = Элементы.Добавить("Страница_1", Тип("ГруппаФормы"), Страницы); Страница_1.Вид = ВидГруппыФормы.Страница; Страница_1.Заголовок = "Страница 1"; Страница_2 = Элементы.Добавить("Страница_2", Тип("ГруппаФормы"), Страницы); Страница_2.Вид = ВидГруппыФормы.Страница; Страница_2.Заголовок = "Страница 2"; #КонецОбласти #Область ПеремещениеТиповогоДинамическогоСписка Элементы.Переместить(Элементы.Список, Страница_1); #КонецОбласти #Область СозданиеДинамическогоСписка // Создадим реквизит формы динамическог списка ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список_Альтернативный", Новый ОписаниеТипов("ДинамическийСписок"))); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Опишем параметры динамического списка ЭтаФорма.Список_Альтернативный.ПроизвольныйЗапрос = Истина; ЭтаФорма.Список_Альтернативный.ТекстЗапроса = "ВЫБРАТЬ | Спр_Номенклатура.Ссылка КАК Ссылка, | Спр_Номенклатура.Код КАК Код, | Спр_Номенклатура.Наименование КАК Наименование, | Спр_Номенклатура.ПометкаУдаления КАК ПометкаУдаления, | Спр_Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ЕСТЬNULL(ДанныеДляОбработки.Обработан, ЛОЖЬ) КАК Обработан, | ЕСТЬNULL(ДанныеДляОбработки.ОшибкаПриОбработке, ЛОЖЬ) КАК ОшибкаПриОбработке |ИЗ | Справочник.Номенклатура КАК Спр_Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки | ПО (ДанныеДляОбработки.Номенклатура = Спр_Номенклатура.Ссылка)"; ЭтаФорма.Список_Альтернативный.ОсновнаяТаблица = "Справочник.Номенклатура"; // Установка обязательного использования ЭтаФорма.Список_Альтернативный.УстановитьОбязательноеИспользование("Ссылка", Истина); //Создание элементов формы эл_Список = Элементы.Добавить("Список_Альтернативный", Тип("ТаблицаФормы"), Страница_2); эл_Список.ПутьКДанным = "Список_Альтернативный"; эл_Список.Отображение = ОтображениеТаблицы.Список; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеСостоянияПросмотра = ПоложениеСостоянияПросмотра.Нет; эл_Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет; эл_Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; НоваяКолонка = Элементы.Добавить("Список_Альт_Ссылка", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Ссылка"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_ПометкаУдаления", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ПометкаУдаления"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Код", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Код"; НоваяКолонка = Элементы.Добавить("Список_Альт_Наименование", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Наименование"; НоваяКолонка.Ширина = 20; НоваяКолонка.РастягиватьПоГоризонтали = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Обработан", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Обработан"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_ОшибкаПриОбработке", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ОшибкаПриОбработке"; НоваяКолонка.Заголовок = "Ошибка"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_НоменклатурнаяГруппа", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.НоменклатурнаяГруппа"; #КонецОбласти КонецПроцедуры #КонецОбласти
Для того, чтобы добавить новые реквизиты в динамический список на управляемой форме можно восльзоваться следующим программным кодом:
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(ДинамическийСписок.ТекстЗапроса);ЗапросВыбора = СхемаЗапроса.ПакетЗапросов[0];ОператорВыбора = ЗапросВыбора.Операторы[0];
ОператорВыбора.ВыбираемыеПоля.Добавить(«ИмяСправочника.ИмяРеквизита1»);
ОператорВыбора.ВыбираемыеПоля.Добавить(«ИмяСправочника.ИмяРеквизита2»);ДинамическийСписок.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();