Имя: Пароль:
1C
 
СКД простой вывод ТЗ с формы в Табдок
,
0 trialex3
 
02.11.22
19:07
Всем добрый день. Подскажите есть на УФ ТаблицаЗначений. Хотел через СКД просто вывести ее на ТабДок. Пока хотя бы без группировок - чисто детальные записи, а дальше буду усложнять. Написал процедуру, а всеравно ничего не выводит - где я ошибся?
ТестированиеПодробно - ТЗ на форме
ТабДок - Табличный документ на форме

Процедура СформироватьИВывестиТабДок()
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
    //Источник данных
    ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    
    //Набор данных
    НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
    НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТестированиеПодробно";
    НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
    
    //Поля данных
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ХарактеристикаПривода";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ХарактеристикаПривода";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "ХарактеристикаПривода";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Показатель";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Показатель";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Показатель";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Количество";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Количество";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Количество";
    
    ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "РежимТестирования";
    ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "РежимТестирования";
    ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "РежимТестирования";
    
    //Поля группировки
    ГруппировкаДетальныеПоля = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ГруппировкаДетальныеПоля.Использование = Истина;
    Автополе = ГруппировкаДетальныеПоля.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    Автополе.Использование = Истина;    
    
    //Прочее
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
    
    ВнешниеНаборы = Новый Структура("ТестированиеПодробно", ДанныеФормыВЗначение(ТестированиеПодробно,Тип("ТаблицаЗначений")));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
    
КонецПроцедуры
1 trialex3
 
02.11.22
19:44
При этом тестовый пример в внешней обработке выполняется прекрасно:


Процедура Магия()
ТаблицаИсточник = Новый ТаблицаЗначений;
ТаблицаИсточник.Колонки.Добавить("Код");
ТаблицаИсточник.Колонки.Добавить("Наименование");
    
НоваяСтрока = ТаблицаИсточник.Добавить();
НоваяСтрока.Код = 1;
НоваяСтрока.Наименование = "Электродрели";
    
НоваяСтрока = ТаблицаИсточник.Добавить();
НоваяСтрока.Код = 2;
НоваяСтрока.Наименование = "Генераторы";
    
НоваяСтрока = ТаблицаИсточник.Добавить();
НоваяСтрока.Код = 3;
НоваяСтрока.Наименование = "Шуруповерты";

СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
//Источник данных
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";

//Набор данных
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаИсточник";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";

//Поля данных
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Код";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Код";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Код";

ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Наименование";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Наименование";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Наименование";

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

ГруппировкаКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2.Поле = Новый ПолеКомпоновкиДанных("Наименование");

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

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



//
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
    
ВнешниеНаборы = Новый Структура("ТаблицаИсточник", ТаблицаИсточник);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Табдок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
КонецПроцедуры
2 _Batoo
 
02.11.22
19:50
поля группировки не добавил же
3 trialex3
 
02.11.22
20:09
(2)
ГруппировкаДетальныеПоля = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ГруппировкаДетальныеПоля.Использование = Истина;
    Автополе = ГруппировкаДетальныеПоля.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    Автополе.Использование = Истина;

Вот же добавил только детальные записи, не? Или  их по другому надо как то прописывать?
4 avp449
 
02.11.22
20:55
Не увидел добавление полей в выбранные поля настроек КД.
5 trialex3
 
03.11.22
16:18
(4) Можно поподробнее? у меня в тестовом примере вроде тоже ничего не добавлено - но все работает.
6 avp449
 
03.11.22
16:26
(5) У вас закладка "Выбранные поля" непосредственно настроек компоновки получается пустой. Вряд ли в таком отчете что-то должно выводиться.
7 avp449
 
03.11.22
16:34
(5) Во втором примере используется структура с конкретными полями группировки. Они будут автоматически выводиться, если у группировок добавлено автополе выбора. В первом примере у вас только детальные записи. Поэтому сравнивать их нельзя.
8 trialex3
 
05.11.22
17:01
(7) Спасибо. То есть мне надо в выбранные поля добавить все поля из ТЗ?
9 trialex3
 
06.11.22
18:08
(7) Да вы были прав. В настройки добавляем выбранные поля и все отображается
Код
ВыбранноеПоле = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле=Новый ПолеКомпоновкиДанных("ХарактеристикаПривода");
10 trialex3
 
06.11.22
21:45
(9) Хотя всеравно непонятно.
В выбранных полях есть номенклатура и количество
в группировках только одна - номенклатура, а количество ресурс. По идее должна вывестись номенклатура с средним количеством а номенклатура не группируется... Просто выводится как в ТЗ без группировки
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.