Реализация отборов на форме с помощью СКД

22.03.22

Разработка - СКД

В статье описана практическая методика использования системы компоновки данных (СКД) для реализации отборов на любых формах конфигурации.

Введение

Всем доброго времени суток!

В данной статье предлагаю рассмотреть (в качестве шпаргалки) хорошо известный способ (некоторым) использования системы компоновки данных (СКД) на формах обработок, справочников или документов с целью создания отбора по таблице, сформированной произвольным запросом. Разработку я буду вести на конфигурации Управление торговлей 11.4. - полная версия 11.4.13.282. Тестирование практических примеров осуществляется для Платформе 1с 8.3.19.1264. Вероятно, что данный подход можно использовать в любой конфигурации (в том числе и самописной).

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

Материал статьи представляет разбор пошагового практического примера с комментариями и объяснениями. Примеры публикации актуальны для серверных и файловых баз. Библиотека стандартных подсистем не используется.

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

 

Создание основного макета, описание компоновщика отбора

Самым первым шагом в новой обработке создадим макет схемы компоновки данных, содержащий вот такой простейший тестовый запрос:

 
 Тестовый запрос в макете "Схема компоновки данных"

 

ВЫБРАТЬ
	МАКСИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод,
	ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ШтрихКоды
ИЗ
	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры

СГРУППИРОВАТЬ ПО
	ШтрихкодыНоменклатуры.Номенклатура
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены
ПОМЕСТИТЬ ВТ_ВидыЦен
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_Номенклатура.Ссылка КАК Ссылка,
	ВТ_Номенклатура.Код КАК Код,
	ВТ_Номенклатура.Артикул КАК Артикул,
	ВТ_Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	ВТ_Номенклатура.СтавкаНДС КАК СтавкаНДС,
	ВТ_Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	ЕСТЬNULL(ВТ_ВидыЦен.Цена, 0) КАК Цена,
	ЕСТЬNULL(ВТ_ШтрихКоды.Штрихкод, "") КАК Штрихкод,
	ВТ_ВидыЦен.ВидЦены КАК ВидЦены
ИЗ
	ВТ_Номенклатура КАК ВТ_Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ШтрихКоды КАК ВТ_ШтрихКоды
		ПО ВТ_Номенклатура.Ссылка = ВТ_ШтрихКоды.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВидыЦен КАК ВТ_ВидыЦен
		ПО ВТ_Номенклатура.Ссылка = ВТ_ВидыЦен.Номенклатура

 

 

В данном запросе мы выбираем номенклатуру, ее штрихкод и последнюю цену по виду цены. Запрос можно оптимизировать, сократить временные таблицы, но для "по-шаговости" я сделал его предельно понятным. Далее, так же в макете пропишем следующие параметры (по факту - единственный параметр Период, который будет определять текущий срез цен) и настройки (см. рис):

 

Рис.1. Параметр "Период" - использую функцию ТекущаяДата().

 

Рис.2. Выбранные поля в макете.  В выбранных полях определим "колонки будущей таблицы".

 

Рис.3. Установка отбора по-умолчанию - будем выбирать "Только товары" в группе и с выбранным типом цены (этот отбор увидит пользователь при открытии обработки).

 

Так, с макетом мы закончили, теперь перейдем к созданию КомпоновщикНастроекКомпоновкиДанных на форме.

Для этого на форме создаем элемент Отбор КомпоновщикНастроек с типом КомпоновщикНастроекКомпоновкиДанных.

Рис.4. Установка КомпоновщикаНастроекКомпоновкиДанных. Выбираем его из окна "Редактирование типов данных".

 

Из компоновщика берем Отбор и размещаем его на форме в виде таблицы. Выглядит это вот так.

Рис.5. Размещение отбора компоновки данных на форме.

 

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

 

Привязка схемы компоновки к форме через компоновщик

Здесь первым делом создаем процедуру основной формы ПриСозданииНаСервере(Отказ, СтандартнаяОбработка).

Выглядит она вот так (работаем только через временное хранилище, по-скольку используем тонкий клиент) - возьмите за правило работать через временное хранилище:

 
 ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    СхемаКомпоновки = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СхемаКомпоновки , УникальныйИдентификатор);
	
	ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
	
	КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
	
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);	
	
КонецПроцедуры

 

 

Далее, создаем и размещаем кнопку на форме "Получение номенклатуры" и привязываем к ней вот такой код:

 
 Привязка кода к кнопке "Получение номенклатуры"

 

&НаКлиенте
Процедура ПолучитьНоменклатуру(Команда)
	
    // разместим на форме объекта табличную часть "Наглядный отбор"

	Объект.НаглядныйОтбор.Очистить();
	ОбработатьНоменклатуруНаСервере();

КонецПроцедуры

&НаСервере
Процедура ОбработатьНоменклатуруНаСервере()
	
	СхемаКомпоновки     = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
	
	КомпоновщикМакета 	= Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки1 	= КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки1);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ТабЗнач = Новый ТаблицаЗначений;
	
	ПроцессорВывода.УстановитьОбъект(ТабЗнач);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

	// разместим на форме объекта табличную часть "Наглядный отбор". Это уже готовая ТЗ с 
    // отбором

	Для Каждого СтрокаТЗ ИЗ ТабЗнач Цикл
		
		ЗаполнитьЗначенияСвойств(Объект.НаглядныйОтбор.Добавить(), СтрокаТЗ);		
		
	КонецЦикла;		
	
КонецПроцедуры	

 

 

Получение отбором необходимой выборки

Полный код формы данной обработки выглядит вот так:

Код

 

На видео показана возможность работы - отбора по таблице с произвольным запросом:

 

Рис.6. Демонстрация работы отбора по таблице, сформированной произвольным запросом.

 

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

 

Мои материалы по возможностям Библиотеки стандартных подсистем (БСП)

Спасибо всем, кто прочитал до данного момента.

 

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

 

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

 

Возможности администрирования баз и кластера с помощью библиотеки стандартных подсистем:

Профили управления доступом к объектам в любой конфигурации на БСП

Журнал регистрации - основные методы работы через БСП

Базовые приемы работы с кластером 1С при помощи БСП

 

Запуск длительных операций с помощью библиотеки стандартных подсистем:

Гарантированно рабочий пример использования длительных операций на БСП с отображением прогресса. [Часть 1]

Запуск почти любых процедур и функции конфигураций в асинхронном режиме - БСП - Длительные операции [Часть 2]

БСП - рабочие примеры асинхронного запуска функций и процедур

 

Работа со штрихкодами и печатными макетами с помощью библиотеки стандартных подсистем:

Генерация штрихкодов с помощью БСП для программистов

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Печать макета MS Word в любом документе с помощью БСП

Префиксация объектов - полезный типовой функционал БСП

Работаем с контактной информацией в конфигурациях на БСП

 

Разные прикладные разработки:

Генератор маршрута по "документам отгрузки" в Google.Maps

Честный знак - запрос содержания упаковки по ее коду [табачная продукция]

Универсальный журнал документов для типовых конфигураций

скд отборы компоновка формы

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121557    670    389    

709

Генератор схемы компоновки данных (СКД), написание кода схемы программно

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

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

3 стартмани

05.02.2024    4023    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1999    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8150    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4644    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5800    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6678    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4513    KVIKS    15    

80
Отзывы
6. quazare 3586 08.04.22 07:32 Сейчас в теме
Всем желающим скачать разные примеры работы с БСП - можете на моем телеграмм канале
dutlovva; +1 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. frkbvfnjh 785 29.12.21 07:28 Сейчас в теме
Спасибо, хорошо написано - сохранен баланс между тем, что бы не описывать совсем базовые понятия и между тем, что бы описать довольно подробно и наглядно процесс создания заявленного функционала, т.е. баланс между краткостью и понятностью.
bulpi; quazare; +2 Ответить
4. triviumfan 92 31.12.21 11:30 Сейчас в теме
(2) об этом кто только не писал :)
9. DELOVOYDOM 19.02.24 23:33 Сейчас в теме
(4) никто не писал про программное создание схемы в форме справочника, без макетов без отчетов. Чтобы красиво работали настройки отбора и условного оформления в пользовательском режиме.
8. DELOVOYDOM 19.02.24 23:32 Сейчас в теме
(2) Почти никто не пишет как создать отборы в форме справочника с программным формированием схемы. Через макет вообще не интересно, смысла нет в этом. Смысл есть когда в пользовательском интерфейсе можно задавать источники. А тут только программное создание схемы. Везде где пишут про программное создание везде используют формы отчетов и табличные документы
3. vld1973 85 29.12.21 10:45 Сейчас в теме
Спасибо за материал
5. eufes 03.01.22 11:10 Сейчас в теме
Да тема два раза встречалась уже такая. На мой взгляд, стоило уделить внимание красоте отборов на форме при таких подходах - может быть какое-то программное выведение их после добавления их пользователем в отдельном окне как раз в этой табличной части отборов. Просто табличная часть генерируемая платформой не очень, да и если использовать группировки в отборах, тоже не всегда корректно отображаются. Интерфейс тоже немаловажная часть.
10. DELOVOYDOM 19.02.24 23:36 Сейчас в теме
(5) потому что ума не надо написать про НЕ программное создание схемы, да еще и в форме отчета да еще и в табличный документ. Авторы сами не разобрались в скд, потому просто скопипастили и все. Уверен, программная часть по скд у них хромает, где то даже встречал такую нелепую фразу "программное изменение схемы почти не используется". Ну конечно! Не используется. Везде используется пользователями, когда надо добавлять разные типы документов в отборы
6. quazare 3586 08.04.22 07:32 Сейчас в теме
Всем желающим скачать разные примеры работы с БСП - можете на моем телеграмм канале
dutlovva; +1 Ответить
7. alex85sh 11.10.23 10:22 Сейчас в теме
Спасибо! Здесь еще не хватает реализации сохранения пользовательских настроек. При повторном открытии должны открываться последние настройки пользователя.
Оставьте свое сообщение