СКД-отборы списков на обычных и управляемых формах

26.04.16

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

Иногда требуется вывести на форму отбор списка элементов с произвольными СКД-подобными отборами. В статье рассматривается, как это сделать в управляемых и обычных формах.

Образец такого отбора:

 

Реализация в управляемых формах

Рассмотрим на примере отбора списка контрагентов в управляемой форме внешней обработки.

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

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

Для красоты дополнительно:

  1. Указываем заголовок "Контрагенты"
  2. Указываем положение заголовка "Верх"
  3. Указываем положение командной панели "Нет"

В конструкторе поле выглядит так:

Добавляем в макеты внешней обработки новый макет с типом схема компоновки данных "СКД_Контрагенты":

Источником данных будет запрос:

 

ВЫБРАТЬ
       Контрагенты.Ссылка,
       Контрагенты.Наименование
ИЗ
       Справочник.Контрагенты КАК Контрагенты

 

Отборов на форме может быть несколько, поэтому для удобства программиста все они называются Ссылка, а вот для удобства пользователя нужно назначить для ссылки представление, для этого ставим галочку и вводим название поля для пользователя "Контрагент":

Больше ничего в схеме компоновки не заполняем.

Теперь нужно привязать компоновщик настроек к схеме компоновки:

 

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

 

После этого настройки отображаются на форме в требуемом виде:

 

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

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

 

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

В итоге в МассивКонтрагентов будет искомый перечень контрагентов.

 

Код используемых функций:

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

Реализация в обычных формах

Рассмотрим на примере отбора магазинов.

Добавляем в реквизиты реквизит "Компоновщик_Магазины" с типом "КомпоновщикНастроекКомпоновкиДанных".

Аналогично УФ заполняем макет "СКД_Магазины" с запросом:

 

ВЫБРАТЬ
       Т.Ссылка
ИЗ
       Справочник.Магазины КАК Т

 

Размещаем на форме табличное поле с данными "Компоновщик_Магазины.Настройки.Отбор".

В модуле объекта добавляем глобальную переменную мСКД_Магазины.

В процедуру "ПередОткрытием" добавляем код:

 

       мСКД_Магазины = ПолучитьМакет("СКД_Магазины");
       Компоновщик_Магазины.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(мСКД_Магазины));
       Компоновщик_Магазины.ЗагрузитьНастройки(мСКД_Магазины.НастройкиПоУмолчанию);

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

 

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

 

В итоге в МассивМагазинов будет искомый перечень магазинов.

См. также

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

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

10000 руб.

02.09.2020    135683    750    391    

779

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    4558    implecs_team    6    

41

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

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

3 стартмани

05.02.2024    5205    39    obmailok    20    

78

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

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

1 стартмани

31.01.2024    2447    2    Yashazz    0    

33

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

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

2 стартмани

11.12.2023    9152    21    John_d    25    

124

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

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

05.12.2023    5844    PROSTO-1C    13    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. fomix 33 28.04.16 14:49 Сейчас в теме
Описания явно не хватает! Рассчитано на подготовленного пользователя, уже умеющего работать с управляемыми формами.
Только сегодня на сайте " " вышли видеоуроки по применению СКД для реализация универсальных отборов . Привожу ссылку на страницу http:// /news/2016-04-28-skd-free-video/. Привожу здесь не в качестве рекламы, а для изучения...
2. fixin 4260 28.04.16 14:58 Сейчас в теме
(1) ну батенька это мастер-класс, для тех, кто уже знает СКД и хочет на ее основе крутить фортеля. Не для новисов, да.
Выстрадано на своей шкуре. В свое время делал на обычных формах, на СКД пришлось повозиться.
3. fomix 33 28.04.16 16:02 Сейчас в теме
(2) Аналогично, дружище!
8. rozer 309 09.06.16 15:23 Сейчас в теме
(2) небольшое замечание:

Судя по описанию "ОтборКонтрагентов" это "реквизит формы"


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


А не объекта. И тогда так не сработает ...

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



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

Показать
Sиlьver; +1 Ответить
4. пользователь 01.05.16 14:19
Сообщение было скрыто модератором.
...
5. Трактор 1249 05.05.16 12:17 Сейчас в теме
Ничего исправлять ненадо. Кратко, только суть. Видео, которое тут рекламируют занимает гораздо больше времени на просмотр, чем чтение этой статьи и обрывается на самом интересном месте.
fixin, если придут тебя бить - зови, помогу :-) Тебе помогу, не им.
6. Prometeus2011 211 15.05.16 14:37 Сейчас в теме
Взял на вооружение. Есть и другие способы, как использовать 1совские классы не очевидными и малоизвестными способами. Вот, например, иногда, использую построитель запросов:

ОтборСтрок = <ТабличнаяЧастьИсточник.ОтборСтрок>; 
ПостроительЗапроса = Новый ПостроительЗапроса; 
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); 
// Добавляются необходимые отборы, такие же как в отборы в табличной части. 
Для Каждого ЭлементОтбора Из ОтборСтрок Цикл 
    Если ЭлементОтбора.Использование Тогда 
        НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(ЭлементОтбора.Имя); 
        НовыйОтбор.Использование = Истина; 
        НовыйОтбор.ВидСравнения = ЭлементОтбора.ВидСравнения; // нужный вид сравнения 
        НовыйОтбор.ЗначениеС = ЭлементОтбора.ЗначениеС; 
        НовыйОтбор.ЗначениеПо = ЭлементОтбора.ЗначениеПо; 
        НовыйОтбор.Значение = ЭлементОтбора.Значение; 
    КонецЕсли; 
КонецЦикла; 

ПостроительЗапроса.Выполнить ();

Результат = ПостроительЗапроса.Результат; // отобранные строки типа РезультатЗапроса
Показать


Источник - не помню.
AnderWonder; json; +2 Ответить
7. Prometeus2011 211 15.05.16 16:54 Сейчас в теме
Да, вот то-же самое с построителем отчета.

1. Добавляем на форму реквизит с типом "ПостроительОтчета" и назовем его так-же "ПостроительОтчета".

2. На форму кладем ЭУ типа "Табличное поле", звать - как хотите. Источником данных у элемента управления назначаем наш реквизит формы "ПостроительОтчета".

В модуль формы:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	ЭтаФорма.ПостроительОтчета.Выполнить();
	тз = ЭтаФорма.ПостроительОтчета.Результат.Выгрузить();
КонецПроцедуры

Процедура ПриОткрытии()
	ЭтаФорма.ПостроительОтчета.Текст = "ВЫБРАТЬ
	                                   |	Номенклатура.Ссылка
	                                   |ИЗ
	                                   |	Справочник.Номенклатура КАК Номенклатура";
	ЭтаФорма.ПостроительОтчета.ЗаполнитьНастройки(); 
	ЭО = ЭтаФорма.ПостроительОтчета.Отбор.Добавить("Ссылка","Номенклатура","Номенклатура");
	ЭО.Использование = Истина;
	ЭтаФорма.ПостроительОтчета.ЗаполнитьНастройки(); 

	
	
КонецПроцедуры
Показать


Такое кунг-фу в групповой обработке на обычных формах юзалось эффективно достаточно.

Понятно, что работать будет только на обычном приложении.

p.s. Процедурку УстановитьСтруктуруНастроекДляВыводаВТаблицуСКолонкойСсылка(Настройки) можно не вызывать, а структуру вывода в ТЗ запаять прямо в схему макета СКД (это я про вариант автора).
Светлый ум; rozer; +2 Ответить
9. dusha0020 1111 07.07.16 09:15 Сейчас в теме
Проделывал такое не раз, но вот заняться и построить универсальные процедуры "на каждый день" для всяких типов форм не сподобился. Спасибо автору! +
10. fixin 4260 07.07.16 11:51 Сейчас в теме
(9) я недавно делал клиенту задачку с отбором по сотрудникам, сам нашел в интернете эту свою статью и заюзал. крутой отбор получился, а то бы пришлось делать убожество со списком сотрудников, например.
15. _Enot_ 10 22.12.18 18:12 Сейчас в теме
(10)подскажи как выгрузить теперь значения из отбора на форму (УП)?
11. catlina 25.04.18 14:52 Сейчас в теме
Подскажите, а если в отборе должно быть два справочника по контрагентам и статьям затрат. Есть ли пример, когда в запросе не один справочник, а несколько?
12. fixin 4260 02.05.18 00:59 Сейчас в теме
(11) два отбора на форму можно. Или один отбор с несколькими полями. Тоже вариант.
13. German_Tagil 43 15.06.18 07:51 Сейчас в теме
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ОО = РеквизитФормыВЗначение("Объект"); //Для внешних обработок реквизиты получаем так
    СКД = ОО.ПолучитьМакет("СКД");
    URLСКД = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор());
    ЭтотОбъект.ОтборКонтрагентов.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД));
    НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;
    ЭтотОбъект.ОтборКонтрагентов.ЗагрузитьНастройки(НастройкиПоУмолчанию);
    //ЗначениеВРеквизитФормы(ОО, "Объект"); //Для внешних обработок реквизиты сохраняем так
КонецПроцедуры

Показать

не работает
{ВнешняяОбработка.РаботаСДеревом82_1.Форма.Форма.Форма(87,5)}: Переменная не определена (ЭтотОбъект)
<<?>>ЭтотОбъект.ОтбиратьПроекту.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД)); (Проверка: Толстый клиент (обычное приложение))
14. German_Tagil 43 15.06.18 14:17 Сейчас в теме
16. _Enot_ 10 22.12.18 18:12 Сейчас в теме
подскажите как выгрузить теперь значения из отбора на форму (УП)?
17. koln 23.12.18 13:31 Сейчас в теме
В своей статье Вы пишите: "Размещаем созданный реквизит на форме перетаскиванием поля "КомпоновщикНастроекКомпоновкиДанных.Отбор" на форму". Объясните, пожалуйста, какое именно поле на скрине нужно перенести на форму?
Прикрепленные файлы:
18. _baa_ 25.12.18 07:01 Сейчас в теме
(17)
Отбор из ветки "Настройки"
19. koln 25.12.18 10:55 Сейчас в теме
(18) При добавлении данного поля на форму в виде таблицы и проведения корректировок, как указано в статье (заголовок и т.п.) получается форма следующего вида (в конфигураторе и пользовательском режиме, как показано на скринах). После добавления кода получения настроек из макета СКД ничего не меняется. В чем может быть проблема?
Прикрепленные файлы:
20. fixin 4260 25.12.18 14:25 Сейчас в теме
А получается по нажатиб insert добавить новый отбор в режиме 1с:предприятия?

Надеюсь, вы для добавленного отбора прописали скд, как в примере?
21. koln 26.12.18 15:28 Сейчас в теме
(20) Макет добавлен, код есть до того момента, чтоб вывести список настроек, как у Вас, но сам список не выводит. По кнопке Insert строку отбора добавляет и значение дает выбирать из справочника "Контрагенты".
22. fixin 4260 26.12.18 23:17 Сейчас в теме
(21) оформите в виде внешней обработки и прикрепите здесь, я посмотрю.
23. koln 27.12.18 10:19 Сейчас в теме
(22) Высылаю обработку
Прикрепленные файлы:
ОтборНаФорме.epf
24. fixin 4260 28.12.18 21:40 Сейчас в теме
(23) Вот, поправил.
В СКД_Контрагенты зайдите на закладку Настройки, затем Отбор и добавьте те условия, которые хотите видеть.
Прикрепленные файлы:
ОтборНаФорме.epf
25. koln 28.12.18 22:25 Сейчас в теме
(24) Да, так получилось. Просто в статье не сказано, что предварительно нужно в макете отборы настроить. Спасибо!
Светлый ум; +1 Ответить
26. fixin 4260 28.12.18 23:41 Сейчас в теме
(25) да, этот момент упущен в статье.
27. acanta 02.06.19 12:47 Сейчас в теме
Спасибо большое. А в тонком или веб клиенте работает?
28. fixin 4260 03.06.19 06:45 Сейчас в теме
(27) разумеется работает, механизмы то штатные.
29. Светлый ум 406 04.06.19 09:14 Сейчас в теме
Похожая реализация "Программная подстановка" СКД подбора (например из общей формы - ПодборСКД)

Алгоритм создания СКД кодом и вывода его в таблицу значений:

//1. создаем схему компоновки данных 
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;

//1.1 определяем источник данных для схемы 
//для наших целей - текущая ИБ 
Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
Источник.Имя = "ЛокальнаяБаза";
Источник.СтрокаСоединения = "";
Источник.ТипИсточникаДанных = "Local";

//1.2 определяем набор данных 
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных";
НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.Запрос = "ВЫБРАТЬ
|    РегистрОстатки.Счет,
|РегистрОстатки.Субконто1 КАК Номенклатура,
|РегистрОстатки.Субконто2 КАК Склады,
|РегистрОстатки.СуммаОстаток КАК Сумма,
|РегистрОстатки.ВалютнаяСуммаОстаток КАК ВалютнаяСумма,
|РегистрОстатки.КоличествоОстаток КАК Количество,
|РегистрОстатки.СуммаНУОстаток КАК СуммаНУ,
|РегистрОстатки.СуммаПРОстаток КАК СуммаПР,
|РегистрОстатки.СуммаВРОстаток КАК СуммаВР,
|РегистрОстатки.Организация,
|РегистрОстатки.Валюта,
|РегистрОстатки.Подразделение,
|РегистрОстатки.НаправлениеДеятельности
|ИЗ
|    РегистрБухгалтерии.Хозрасчетный.Остатки КАК РегистрОстатки";    

//1.2.1 добавляем поля 

НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Номенклатура";
НовоеПоле.ПутьКДанным = "Номенклатура";
НовоеПоле.Поле        = "Номенклатура";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Склады";
НовоеПоле.ПутьКДанным = "Склады";
НовоеПоле.Поле        = "Склады";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Сумма";
НовоеПоле.ПутьКДанным = "Сумма";
НовоеПоле.Поле        = "Сумма";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "ВалютнаяСумма";
НовоеПоле.ПутьКДанным = "ВалютнаяСумма";
НовоеПоле.Поле        = "ВалютнаяСумма";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Количество";
НовоеПоле.ПутьКДанным = "Количество";
НовоеПоле.Поле        = "Количество";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Организация";
НовоеПоле.ПутьКДанным = "Организация";
НовоеПоле.Поле        = "Организация";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Валюта";
НовоеПоле.ПутьКДанным = "Валюта";
НовоеПоле.Поле        = "Валюта";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "Подразделение";
НовоеПоле.ПутьКДанным = "Подразделение";
НовоеПоле.Поле        = "Подразделение";
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Заголовок   = "НаправлениеДеятельности";
НовоеПоле.ПутьКДанным = "НаправлениеДеятельности";
НовоеПоле.Поле        = "НаправлениеДеятельности";
    
////1.3 определяем ресурсы 
//ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
//ПолеРесурса.Выражение = "Сумма(СтоимостьОборот)";
//ПолеРесурса.ПутьКДанным = "СтоимостьОборот";
    
//2. создаем настройки для схемы 
НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//2.1 определяем структуру 
//2.1.1 добавляем группировку "Детальные записи" 
ГруппировкаДетальныеЗаписи = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));

АвтоПоле = ГруппировкаДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоПоле.Использование = Истина;

//2.2 определим выбранные поля 

ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = "";
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Организация");
ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = "";
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Склады");
ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = "";
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");

//2.3 определим отборы 

НовыйОтбор = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
НовыйОтбор.Использование = Истина;
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
НовыйОтбор.ПравоеЗначение = 0;
НовыйОтбор.Представление = "";


//3. готовим макет 
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

//4. исполняем макет 
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет);
ПроцессорКомпоновки.Сбросить();

//5. выводим результат 
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТЗ);
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Показать
30. aaakhm 05.06.20 10:17 Сейчас в теме
Отличная статья, спасибо!

Небольшое исправление:

> В форму добавляем реквизит "ОтборКонтрагентов" типа "КомпоновщикНастроекКомпоновкиДанных".
> Размещаем созданный реквизит на форме перетаскиванием поля КомпоновщикНастроекКомпоновкиДанных.Отбор на форму:

Должно звучать примерно так:

В реквизиты внешней обработки добавляем "ОтборКонтрагентов" типа "КомпоновщикНастроекКомпоновкиДанных".
Размещаем созданный реквизит на форме перетаскиванием поля Объект.ОтборКонтрагентов.Настройки.Отбор на форму:
31. fixin 4260 05.06.20 14:55 Сейчас в теме
32. sqr4 23 29.09.20 16:38 Сейчас в теме
URLСКД = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор());

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