Программное добавление колонки в динамический список с помощью объекта "Схема запроса"

20.09.24

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

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

Введение

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

В чем суть

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

Как решить задачу? Казалось бы, использовать "СтрЗаменить(Список.ТекстЗапроса...", но ведь текст запроса может сильно отличаться, имя списка может быть разным и еще куча других нюансов. 

После недолгих поисков я выяснил, что в 1С есть такой объект - СхемаЗапроса. Можно загрузить в него текст запроса методом УстановитьТекстЗапроса(<Текст>) и работать с нашим запросом динамического списка как с отдельным объектом. 

С данной информацией я пошел писать свою процедуру модификации динамического списка.

 

// Модифицировать запрос динамического списка
//
// Параметры:
//  Форма - Форма клиентского приложения
//  ИмяДинамическогоСписка - Строка
//
Процедура МодифицироватьЗапросДинамическогоСписка(Форма, ИмяДинамическогоСписка)
	
	СхемаЗапроса = Новый СхемаЗапроса;
	СхемаЗапроса.УстановитьТекстЗапроса(Форма[ИмяДинамическогоСписка].ТекстЗапроса);
	
    //Данный цикл нужен чтобы найти последний пакет запросов, чтобы не брать ВТ
	Для Каждого ПакетЗапросов ИЗ СхемаЗапроса.ПакетЗапросов Цикл
		Если ПакетЗапросов.ТаблицаДляПомещения = "" Тогда	
			ЗапросВыбора = ПакетЗапросов;
		КонецЕсли;
	КонецЦикла;
	       
	ОператорВыбора = ЗапросВыбора.Операторы[0];
	
    //Тут добавляем регистр сведений, из которого берем значение.
	НашРегистр = ОператорВыбора.Источники.Добавить("РегистрСведений.ИмяРегистра", "ПсевдонимТаблицы");
	
    //Прописываем соединение, по умолчанию тип соединения ЛЕВОЕ
	ОператорВыбора.Источники[0].Соединения.Добавить(НашРегистр , "ПсевдонимТаблицы.Ссылка = " + 
	ОператорВыбора.Источники[0].Источник.Псевдоним + ".Ссылка");
	
    //Добавляем поля выбора, т.е. то что в ВЫБРАТЬ обычно пишем.
	ОператорВыбора.ВыбираемыеПоля.Добавить("ПсевдонимТаблицы.ВашеЗначение"); 
	
	Форма[ИмяДинамическогоСписка].ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
	
КонецПроцедуры

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

// Имя реквизита динамического списка
//
// Параметры:
//  Форма - Форма клиентского приложения
//
// Возвращаемые параметры:
//  Имя динамического списка - Строка
//
Функция ИмяРеквизитаДинамическогоСписка(Форма)
	Результат = "";
	РеквизитыФормы = Форма.ПолучитьРеквизиты();
	ТипДинамическогоСписка = Новый ОписаниеТипов("ДинамическийСписок");
	Для Каждого РеквизитФормы Из РеквизитыФормы Цикл
		Если РеквизитФормы.ТипЗначения = ТипДинамическогоСписка Тогда
			Результат = РеквизитФормы.Имя;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;	
КонецФункции

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

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

Ну и финальный этап - используем все наши методы в одном месте.


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

 

Динамический список Метод добавления колонки

См. также

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

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

6000 руб.

16.01.2015    62998    44    59    

82

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

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

2400 руб.

29.06.2020    18868    26    6    

41

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

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

1500 руб.

06.10.2020    10239    7    7    

10

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

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

20.08.2024    16891    mrXoxot    43    

121

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

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

27.05.2024    7426    smielka    37    

100

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

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

27.12.2023    14825    919    elcoan    47    

117

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

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

2 стартмани

10.04.2023    11924    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1366 20.09.24 13:44 Сейчас в теме
А можно было и тут поискать))
Поручик; Xershi; ASHkins; bossikd; +4 Ответить
2. ASHkins 16 20.09.24 14:22 Сейчас в теме
(1) Классная статья, но к сожалению не нашел её когда искал решение своей задачи. Спасибо за ссылку!

Так же в решении задачи мне помогла публикация - https://infostart.ru/1c/articles/307045/
3. RocKeR_13 1366 20.09.24 14:59 Сейчас в теме
(2)
Так же в решении задачи мне помогла публикация - https://infostart.ru/1c/articles/307045/


Все с неё начинают, когда дело касается схемы запроса)
4. Xershi 1555 23.09.24 10:08 Сейчас в теме
Я думаю в заголовке публикации нужно указать про схему запроса иначе можно не читая сразу написать используй шпаргалку, зачем ещё один баян.
5. fancy 35 01.10.24 08:34 Сейчас в теме
Еще наверное лучше заменить конструкцию
ОператорВыбора.Источники[0]
на
ОператорВыбора.Источники.НайтиПоИмени(..)
иначе могут в исходном запросе поменять порядок источников и добавленное соединение сломается
Оставьте свое сообщение