1с добавить реквизит на форму списка динамический список


Добавление доп. реквизита в динамический список программно

Добавление доп. реквизита в динамический список программно

Некоторые пользователи хотят видеть дополнительную аналитику по определенным объектам конфигурации 1С, для реализации этой потребности существует функционал дополнительных реквизитов и сведений, который зачастую выводится в группу «Дополнительно» или «Дополнительные реквизиты».

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

Как добавить дополнительный реквизит в динамический список:

Получившейся код модуля:

&НаКлиенте
Процедура dev_ПриОткрытииПосле(Отказ)
	
	ОтображениеДополнительныхРеквизитов();
	
КонецПроцедуры

&НаСервере
Процедура ОтображениеДополнительныхРеквизитов()
		
	// Получаем набор свойств объекта по пустой ссылке объекта метаданных.
	НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Справочники.Номенклатура.ПустаяСсылка());
		
	// Инициализируем имя набора свойств. 
	ИмяНабора = НаборСвойств[0].Набор.Наименование;     
	Свойства  = НаборСвойств[0].Набор.ДополнительныеРеквизиты.Выгрузить().ВыгрузитьКолонку("Свойство");
	
	// Наполняем массив именами доп.реквизитов, которые мы хотим отобразить в списке формы. 
	// Можно создать отдельную настроку, например регистр где будем хранить выводимые поля,
	// для конкретных объектов метаданных или даже в зависимости от роли.
	МассивОтображаемыхСвойств = Новый Массив;
	МассивОтображаемыхСвойств.Добавить("Краткое описание");
	// и т.д.
	
	// Если например у нас полные права то выведем все доп.реквизиты.
	Если РольДоступна("ПолныеПрава") Тогда   
		МассивОтображаемыхСвойств = ПолучитьМассивНаименованийСвойств(Свойства);
	КонецЕсли;
	
	// Квадратные скобки обязательны.
	// Именно так платформа понимает что мы обращаемся к реквизиту ТЧ "ДополнительныеРеквизиты" 
	ШаблонПутьКДанным = "Список.Ссылка.[%1 (%2)]";	 
	
	// Обход циклом свойств для вывода в список.
	Для каждого ТекущееСвойство Из Свойства Цикл
		
		НаименованиеСвойства = ТекущееСвойство.Наименование; 
		ИмяЭлемента = ТекущееСвойство.ИдентификаторДляФормул; 
		
		Если  МассивОтображаемыхСвойств.Найти(НаименованиеСвойства) <> Неопределено Тогда
			СтрокаДанные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПутьКДанным, НаименованиеСвойства, ИмяНабора); 					
			НовыйЭлемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Элементы.Список);
			НовыйЭлемент.Вид 			= ВидПоляФормы.ПолеВвода;
			НовыйЭлемент.ПутьКДанным 	= СтрокаДанные;
			НовыйЭлемент.Заголовок 		= НаименованиеСвойства;	  
		КонецЕсли;  
		
	КонецЦикла; 
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьМассивНаименованийСвойств(МассивСвойств) 

	МассивНаименований = Новый Массив;
	Для каждого Свойство Из МассивСвойств Цикл	
		МассивНаименований.Добавить(Свойство.Наименование);
	КонецЦикла;
	
	Возврат МассивНаименований;
	
КонецФункции;

Данный код проверялся на конфигурации «Бухгалтерия предприятия 3.0», но он подойдет для любой конфигурации.

Как результат работы нашего кода прикладываем скриншот и тестовое расширение конфигурации:

6.png - ITsale

Как видим все доп. реквизиты появились в нашем списке.

Для подключения расширения использовались такие надстройки:

7.png - ITsale

Скачать расширение

Оставить заявку на бесплатную консультацию прямо сейчас!


Добавление доп. реквизита в динамический список

Я
   AceVi

13.08.21 — 15:46

Приветствую всех.

подымалась мне такая задача.

Как добавить в динамический список доп реквизит программно? и условное оформление по нему.

все мы знаем что в клиенте можно через еще — изменить форму добавить доп реквезит(например в справочнике подразделения организаций у нас есть доп рек. цех) на форму списка.

а как сделать то же самое программно? я так и не смог найти.

а потом сделать по нем условное оформление.( но думаю при решении 1 вопроса решиться и 2).

если у нас динамический список произвольныйЗАПРОС = ИСТИНА. то все понятно — меняем запрос добавляя туда данные

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

как в нашем случае вывести доп рек программно на управляемую форму?

  

Партнерская программа EFSOL Oblako

   AceVi

1 — 16.08.21 — 15:18

ап

пока в голову пришло только разворотить все через расширение и поставить произвольныйЗАПРОС = ИСТИНА и дальше от этого плясать

   DrShad

2 — 16.08.21 — 15:24

создай поле и пропиши ПутьКДанным типа «ПодразделениеОрганизации.Цех»

делов то

   AceVi

3 — 16.08.21 — 15:38

(2) Неверно!

Доп рек -ты лежат в таблице привязанной к объекту. это не просто реквизит объекта.

   hhhh

4 — 16.08.21 — 15:41

(3) а зачем программно? добавляйте непрограммно. поставьте галку Произвольный запрос и вперед.

   DrShad

5 — 16.08.21 — 15:42

(3) ты про Характеристики что-то слышал?

   AceVi

6 — 16.08.21 — 15:47

(4) ну вот разве что так, но хотелось бы программно. нельзя?

(5) что то слышал — но при чем тут они? как они связаны с доп рек-ми?

   DrShad

7 — 16.08.21 — 15:49

(6) самым тесным образом

   AceVi

8 — 16.08.21 — 15:57

(7) простите, но вы не помогаете решить проблему.

дайте ссылку что ли хотя бы — где характеристики делают как доп рек-ты и программно выводят на динамический список где роизвольныйЗАПРОС = лЛожь.

   Жан Пердежон

9 — 16.08.21 — 15:59

(8) как по-твоему, откуда дин.список узнает откуда ему брать доп.реквизиты, если они лежат в другой таблице?

   AceVi

10 — 16.08.21 — 16:04

(9) Через запрос . а уж как он там платформе его формирует — то мне не ведомо.

   hhhh

11 — 16.08.21 — 16:09

(6) если программно это в 10 раз дольше. А результат, если что-то поменяется в динамическом списке, то программное еще быстрее рухнет. Так что то же самое, что и не программно. В случае динамического списка без разницы.

   DrShad

12 — 16.08.21 — 16:10

   DrShad

13 — 16.08.21 — 16:10

(10) через характеристики )))

   AceVi

14 — 16.08.21 — 16:11

(11) не поныл вас.

ну может не в 10 а в 3 раза дольше. ну что жеш.

насчет «рухнет» не согласен.

   AceVi

15 — 19.08.21 — 10:20

Короче может кому пригодиться

1. Сделать все красиво не получилось(т.е. добавить програмно доп рек на форму и отбор по нему)

2. Начало процедуры в расширении при создании на сервере

2.1 Выбираем своим запросом ссылки с этим доп рек-ом

2.2 делаем условное оформление где выделяем цветом строку с нужным значением доп рек-та(не отбор, но видимо выделяем для пользователя)

2.3 при изменении(а значит кто то записал элемент справочника) — обновляем список из 2.1 и обновляем его в отборе условного оформления из 2.2.

Итого получаем — рек-та нет на форме, но форма реагирует цветным выделением строки для нужного значения доп рек-та.

Да, это только условное выполнение конкретной задачи для доп рек-ты у которого ограниченное(заранее заданное) кол-во значений.

Как можно сделать лучше?

   runoff_runoff

16 — 19.08.21 — 12:09

Поле.ПутьКДанным = «Список.Ссылка.[наименование доп реквизита]»;

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

   runoff_runoff

17 — 19.08.21 — 12:11

(16) метаданные из (12).. квадратные скобки обязательны..

   Pro-tone

18 — 19.08.21 — 12:12

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

  

AceVi

19 — 19.08.21 — 12:51

(18) еще как имеет.

1. Отбор по данным списка( что именно разукрашиваем)

2. Оформляемые поля- сиречь колонки списка для рзукрашивания.

как видим оформление — напрямую зависит от данных.

(16) это не спортивно — стандартную конфу менять нельзя а в  расширении характеристики добавлять нельзя.

отклонено.

Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti

Продолжаем рассматривать варианты размещения элементов на форме на примере вывода реквизитов документа на форму списка документов, состав документа представлен на рис. 1:

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 1. Реквизиты документа

Добавим на форму списка документов колонку со значением статуса приходной, статус приходной находится в регистре сведений. Открываем форму списка документа пр_Приходная. Если формы списка еще нет, то нажимаем значок лупы на вкладке Формы окна свойств документа (рис. 2):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 2. Создание формы списка документа

В открывшемся окне Конструктор формы документа нажимаем Далее > и выбираем поля, которые хотим вывести на форму (поля — это реквизиты и табличные части документа), нажимаем Готово. Открывается окно формы списка документа.

В форме списка документа открываем свойства реквизита Список (правой кнопкой мышки — Свойства), в окне Свойства ставим галочку у свойства Произвольный запрос (рис. 3):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 3. Свойства реквизита формы Список

После установки свойства Произвольный запрос состав свойств раздела Объект изменится (рис. 4):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 4. Состав раздела Объект окна Свойства

Нажимаем на гиперссылку Открыть свойства Настройка списка (рис. 4). Открывается окно Динамический список (рис. 5):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 5. Окно Динамический список

Добавляем в запрос текст для получения статуса приходной из регистра сведений. В примере используется регистр сведений пр_СтатусПриходной со значением свойства Периодичность — В пределах дня, состав регистра представлен на рис. 6:

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 6. Состав регистра с данными о статусе приходной

Изменить запрос в окне Динамический список можно нажав на кнопку Конструктор запроса… или можно сразу написать нужный текст в поле Запрос (рис. 7):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 7. Измененный запрос

Текст запроса:

ВЫБРАТЬ
                Документпр_Приходная.Ссылка,
                Документпр_Приходная.ПометкаУдаления,
                Документпр_Приходная.Номер,
                Документпр_Приходная.Дата,
                Документпр_Приходная.Проведен,
                Документпр_Приходная.Организация,
                Документпр_Приходная.ТипПриходной,
                Документпр_Приходная.Склад,
                Документпр_Приходная.Подразделение,
                Документпр_Приходная.Ответственный,
                Документпр_Приходная.Комментарий,
                пр_СтатусПриходнойСрезПоследних.Статус
ИЗ
                Документ.пр_Приходная КАК Документпр_Приходная
                                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пр_СтатусПриходной.СрезПоследних КАК пр_СтатусПриходнойСрезПоследних
                                ПО пр_СтатусПриходнойСрезПоследних.Приходная = Документпр_Приходная.Ссылка

Важно проверить, что в поле Основная таблица окна Динамический список указан нужный документ (рис. 7), иначе, если поле будет не заполнено, то в форме списка документов не будет возможности добавлять новые документы и открывать существующие (и не будет привычных кнопок Создать, Создать копированием и т.п.). Нажимаем ОК. Теперь в составе реквизита Список те поля, которые были выбраны в запросе (рис. 8):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 8. Состав реквизита Список

Перетаскиваем новое поле Статус из вкладки Реквизиты на вкладку Элементы в состав элемента Список (рис. 8). И размещаем поле Статус на вкладке Элементы после полей Дата, Номер (рис. 9):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 9. Размещение поля Статус

У реквизитов (на вкладке Реквизиты) в составе динамического списка можно отметить свойство Использовать всегда (рис. 8). Это нужно, когда поля должны быть в составе динамического списка в любом случае, даже если они не будут добавлены на форму как элементы, например, будут использоваться в дальнейшем в коде модуля формы списка документа.

Проверяем работу формы списка документа в пользовательском режиме: появилась колонка Статус, содержащая значение статуса приходной из регистра сведений (рис. 10):

УФ: Размещение элементов на форме в 1С — добавление колонки на форму списка (произвольный запрос динамического списка)

Рис. 10. Новая колонка формы списка

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

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

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

В моем примере динамический список создан на основной форме обработки.

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

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

Динамический список 1С — основная таблица

Динамическому списку можно назначить основную таблицу. Основная таблица – это произвольный объект метаданных (документ, справочник, регистр значения и т.д.), данные которого должны отобразиться в динамическом списке.

 Основная таблица динамического списка 1C

Например, в качестве основной таблицы выберем справочник Номенклатура.

 Основная таблица динамического списка 1C

И поместим динамический список на форму в виде таблицы, не забыв добавить колонки при размещении.

Основная таблица динамического списка 1C

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

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

Можно сделать отображение списка в виде дерева. Для этого можно изменить режим просмотра таблицы на форме в пользовательском режиме.

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

Либо, поменять значение свойства Отображение таблицы формы, в которой был размещен динамический список.

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

После этого, динамический список на форме будет в виде дерева.

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

Произвольный запрос динамического списка 1С

Помимо использования основной таблицы, можно также динамический список сделать на основании запроса.  Причем, можно взять за основу основную таблицу. Для примера, выведем вместе с номенклатурой цены, которые хранятся в периодическом регистре сведений Цены номенклатуры.  Если мы в свойстве Произвольный запрос динамического списка установим флаг, при уже выбранной основной таблице, то у нас основная таблица будет взята за основу при формировании запроса.

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

Произвольный запрос динамического списка 1С

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

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

Для этого, вызовем конструктор запроса из окна динамического списка, и добавим в список таблиц запроса виртуальную таблицу СрезПоследних. У виртуальной таблицы выберем ресурс Цена, который поместим в список полей, применив к этому полю функцию ЕстьNULL.

Произвольный запрос динамического списка 1С

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

Произвольный запрос динамического списка 1С

И исправим имя поля Цена.

Произвольный запрос динамического списка 1С

Наш запрос готов.

Произвольный запрос динамического списка 1С

Обратите внимание на свойства «Динамическое считывание данных», которое есть и в свойствах динамического списка, когда указана основная таблица, и в том случае, когда указан произвольный запрос . Если это свойство установлено, то считывание данных происходит порциями, т.е. выбираются только те данные, которые необходимы для отображения на экране. В целях улучшения производительности, лучше всегда это свойство устанавливать.

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

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

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

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

Управляемое приложение 1С 8.3

Очень подробно работа с динамическими списками дается в моей книге «Основы разработки в 1С: Такси».

В этой книге вы научитесь:

  • Настраивать динамические списки;
  • Работать с поиском в динамическом списке;
  • Программировать динамические списки (программная установка параметров, отборов, группировок, сортировок и условного оформления).

У вас, как у читателя блога, есть скидка 15 % по промо-коду:  48PVXHeYu

Более подробно о работе с другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 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. Задача
  2. Решение
  3. Создание страниц
  4. Перемещение элементов формы
  5. Программное создание динамического списка
  6. Небольшая хитрость
  7. Результат

Задача

Считаем, что есть типовая форма списка номенклатуры с динамическим списком. На форму необходимо добавить страницы: на первой выводить типовой список, а на второй список номенклатуры и данные РС «Данные для обработки». На текущий момент форма выглядит так:Программное создание динамического списка

Решение

План работ следующий:

  1. Создать страницы на форме;
  2. Переместить типовой динамический список на нужную страницу;
  3. Создать динамический список и вывести его на нужную страницу.

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

Создание страниц

Собственно создадим группу с видом «Страницы», и в нее добавим две группы с видом «Страница»

    Страницы = Элементы.Добавить("Страницы",	Тип("ГруппаФормы"),  ЭтаФорма);
    Страницы.Вид                = ВидГруппыФормы.Страницы;
    Страницы.Заголовок          = "Страницы";
	
    Страница_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»);ДинамическийСписок.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии