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

26.04.16

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

 

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

 

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

 

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

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

 

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

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

 

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

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

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

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

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

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

 

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

 

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

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

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

 

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

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

 

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

 

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

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

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

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

См. также

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

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

16500 руб.

02.09.2020    257351    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    16635    ovetgana    50    

93

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

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

24.12.2024    14301    Akcium    17    

46

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

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

20.08.2024    11175    AlexeyPROSTO_1C    1    

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

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


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


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

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



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

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

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

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

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


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

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

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

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

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

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

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


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

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

p.s. Процедурку УстановитьСтруктуруНастроекДляВыводаВТаблицуСКолонкойСсылка(Настройки) можно не вызывать, а структуру вывода в ТЗ запаять прямо в схему макета СКД (это я про вариант автора).
Светлый ум; rozer; +2 Ответить
9. dusha0020 1125 07.07.16 09:15 Сейчас в теме
Проделывал такое не раз, но вот заняться и построить универсальные процедуры "на каждый день" для всяких типов форм не сподобился. Спасибо автору! +
10. fixin 4335 07.07.16 11:51 Сейчас в теме
(9) я недавно делал клиенту задачку с отбором по сотрудникам, сам нашел в интернете эту свою статью и заюзал. крутой отбор получился, а то бы пришлось делать убожество со списком сотрудников, например.
15. _Enot_ 10 22.12.18 18:12 Сейчас в теме
(10)подскажи как выгрузить теперь значения из отбора на форму (УП)?
11. catlina 25.04.18 14:52 Сейчас в теме
Подскажите, а если в отборе должно быть два справочника по контрагентам и статьям затрат. Есть ли пример, когда в запросе не один справочник, а несколько?
12. fixin 4335 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 4335 25.12.18 14:25 Сейчас в теме
А получается по нажатиб insert добавить новый отбор в режиме 1с:предприятия?

Надеюсь, вы для добавленного отбора прописали скд, как в примере?
21. koln 26.12.18 15:28 Сейчас в теме
(20) Макет добавлен, код есть до того момента, чтоб вывести список настроек, как у Вас, но сам список не выводит. По кнопке Insert строку отбора добавляет и значение дает выбирать из справочника "Контрагенты".
22. fixin 4335 26.12.18 23:17 Сейчас в теме
(21) оформите в виде внешней обработки и прикрепите здесь, я посмотрю.
23. koln 27.12.18 10:19 Сейчас в теме
(22) Высылаю обработку
Прикрепленные файлы:
ОтборНаФорме.epf
24. fixin 4335 28.12.18 21:40 Сейчас в теме
(23) Вот, поправил.
В СКД_Контрагенты зайдите на закладку Настройки, затем Отбор и добавьте те условия, которые хотите видеть.
Прикрепленные файлы:
ОтборНаФорме.epf
25. koln 28.12.18 22:25 Сейчас в теме
(24) Да, так получилось. Просто в статье не сказано, что предварительно нужно в макете отборы настроить. Спасибо!
Светлый ум; +1 Ответить
26. fixin 4335 28.12.18 23:41 Сейчас в теме
(25) да, этот момент упущен в статье.
27. acanta 02.06.19 12:47 Сейчас в теме
Спасибо большое. А в тонком или веб клиенте работает?
28. fixin 4335 03.06.19 06:45 Сейчас в теме
(27) разумеется работает, механизмы то штатные.
29. Светлый ум 508 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 4335 05.06.20 14:55 Сейчас в теме
32. sqr4 64 29.09.20 16:38 Сейчас в теме
URLСКД = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор());

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