Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
04 апр 2025, 05:46

Создание СКД кодом и вывод в таблицу значений

Автор MuI_I_Ika, 11 мая 2018, 12:22

0 Пользователей и 1 гость просматривают эту тему.

MuI_I_Ika

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

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

Теги: скд 

Похожие темы (2)

Рейтинг@Mail.ru

Поиск