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

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

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

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

INFOSTART TOOLKIT

Самый продвинутый набор инструментов для управляемых форм 1С:8.3


Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    257353    1425    421    

1163

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6630    342    shapa_pro    27    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    19240    ovetgana    112    

112

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

01.07.2025    11151    krasnoshchekovpavel    7    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    10695    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16637    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    14302    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    11176    AlexeyPROSTO_1C    1    

32
Отзывы
6. quazare 4006 08.04.22 07:32 Сейчас в теме
Всем желающим скачать разные примеры работы с БСП - можете на моем телеграмм канале
maikl007; dutlovva; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. frkbvfnjh 819 29.12.21 07:28 Сейчас в теме
Спасибо, хорошо написано - сохранен баланс между тем, что бы не описывать совсем базовые понятия и между тем, что бы описать довольно подробно и наглядно процесс создания заявленного функционала, т.е. баланс между краткостью и понятностью.
WarAn; crosby; bulpi; quazare; +4 Ответить
12. crosby 280 18.07.24 12:28 Сейчас в теме
(1) 100%. Что называется, с языка сняли :) Могу только добавить, что и оформленно всё со вкусом.
4. triviumfan 101 31.12.21 11:30 Сейчас в теме
(2) об этом кто только не писал :)
9. DELOVOYDOM 19.02.24 23:33 Сейчас в теме
(4) никто не писал про программное создание схемы в форме справочника, без макетов без отчетов. Чтобы красиво работали настройки отбора и условного оформления в пользовательском режиме.
11. vozhd 212 21.06.24 10:29 Сейчас в теме
(9)
оздание схемы в форме справочника, без макетов без отчетов. Чтобы красиво работали настройки отбора и услов


&НаСервере
Процедура ЗаполнитьСхемуКомпоновки()

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

НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиУсловия.НаборыДанных.Запрос;
НаборДанныхОбъектСхемыКомпоновкиДанных.Запрос = "ВЫБРАТЬ * ИЗ " + "Справочник.Пользователи (например)" + " ГДЕ ЛОЖЬ";
НастройкиКомпоновки = КомпоновщикУсловия.Настройки;

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

Это для отборов, применяю для настройки назначения дополнительных реквизитов - чтобы выводились только при некоторых комбинациях реквизитов.
8. DELOVOYDOM 19.02.24 23:32 Сейчас в теме
(2) Почти никто не пишет как создать отборы в форме справочника с программным формированием схемы. Через макет вообще не интересно, смысла нет в этом. Смысл есть когда в пользовательском интерфейсе можно задавать источники. А тут только программное создание схемы. Везде где пишут про программное создание везде используют формы отчетов и табличные документы
3. vld1973 98 29.12.21 10:45 Сейчас в теме
Спасибо за материал
5. eufes 03.01.22 11:10 Сейчас в теме
Да тема два раза встречалась уже такая. На мой взгляд, стоило уделить внимание красоте отборов на форме при таких подходах - может быть какое-то программное выведение их после добавления их пользователем в отдельном окне как раз в этой табличной части отборов. Просто табличная часть генерируемая платформой не очень, да и если использовать группировки в отборах, тоже не всегда корректно отображаются. Интерфейс тоже немаловажная часть.
10. DELOVOYDOM 19.02.24 23:36 Сейчас в теме
(5) потому что ума не надо написать про НЕ программное создание схемы, да еще и в форме отчета да еще и в табличный документ. Авторы сами не разобрались в скд, потому просто скопипастили и все. Уверен, программная часть по скд у них хромает, где то даже встречал такую нелепую фразу "программное изменение схемы почти не используется". Ну конечно! Не используется. Везде используется пользователями, когда надо добавлять разные типы документов в отборы
6. quazare 4006 08.04.22 07:32 Сейчас в теме
Всем желающим скачать разные примеры работы с БСП - можете на моем телеграмм канале
maikl007; dutlovva; +2 Ответить
7. alex85sh 11.10.23 10:22 Сейчас в теме
Спасибо! Здесь еще не хватает реализации сохранения пользовательских настроек. При повторном открытии должны открываться последние настройки пользователя.
IVKuzmin; KoC_one; Wrols; +3 Ответить
13. IVKuzmin 17.10.24 14:55 Сейчас в теме
(7) Здравствуйте! Решили это как-нибудь?
15. Divedition 17.03.25 14:47 Сейчас в теме
(13) У формы есть свойство, отвечающее за сохранение данных. После установки этого свойства в значение "Использовать", в окне с реквизитами формы появится колонка "Сохранение". Можно выбрать, у каких реквизитов будут сохраняться и заполняться значения при открытии формы. Для отборов компоновщика настроек это тоже работает.
IVKuzmin; +1 Ответить
14. Mahinya 23 29.01.25 17:31 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация