Имя: Пароль:
1C
1С v8
Добавление свойств и категорий в универсальный отчет с источников данных Таблица значений
,
0 GodCratOs
 
23.03.20
18:14
Здравствуйте. Делаю отчет на основе универсального, где источник данных это таблица значений, которую я формирую с помощью запроса в отдельной функции. Все работает, но нужно добавить свойства и категории. Может знает кто, как это сделать?

Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт


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

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

УниверсальныйОтчет.ДобавитьПоказатель("ОтсрочкаОплаты",                              "Отсрочка оплаты",                                 Истина);    
    УниверсальныйОтчет.ДобавитьПоказатель("ОстатокДолгаНаНачалоПериода",                 "Остаток долга на начало периода",                 Истина, "ЧЦ=15; ЧДЦ=2", "СуммаВзаиморасчетов", "Сумма взаиморасчетов");
    УниверсальныйОтчет.ДобавитьПоказатель("Отгружено",                                      "Отгружено",                                        Истина, "ЧЦ=15; ЧДЦ=2", "СуммаВзаиморасчетов", "Сумма взаиморасчетов");
    УниверсальныйОтчет.ДобавитьПоказатель("Оплачено",                                     "Оплачено",                                        Истина, "ЧЦ=15; ЧДЦ=2", "СуммаВзаиморасчетов", "Сумма взаиморасчетов");
    УниверсальныйОтчет.ДобавитьПоказатель("ОстатокДолгаНаКонецПериода",                  "Остаток долга на конец периода",                     Истина, "ЧЦ=15; ЧДЦ=2", "СуммаВзаиморасчетов", "Сумма взаиморасчетов");
    УниверсальныйОтчет.ДобавитьПоказатель("ОстатокПросроченогоДолгаКонтрагентаВВалюте",  "Остаток просроченого долга контрагента в валюте", Истина, "ЧЦ=15; ЧДЦ=2");
    УниверсальныйОтчет.ДобавитьПоказатель("ОстатокПросроченногоДолгаКонтрагентаВДнях",   "Остаток просроченного долга контрагента в днях",  Истина);
    УниверсальныйОтчет.ДобавитьПоказатель("НеБолее10Дней",                                 "Не более 10 дней",                                 Истина, "ЧЦ=15; ЧДЦ=2", "ВтчПоСрокамВозникновенияДолга", "В т.ч. по срокам возникновения долга:");
    УниверсальныйОтчет.ДобавитьПоказатель("От10До30Дней",                                 "От 10 до 30 дней",                                Истина, "ЧЦ=15; ЧДЦ=2", "ВтчПоСрокамВозникновенияДолга", "В т.ч. по срокам возникновения долга:");
    УниверсальныйОтчет.ДобавитьПоказатель("От30До60Дней",                                 "От 30 до 60 дней",                                 Истина, "ЧЦ=15; ЧДЦ=2", "ВтчПоСрокамВозникновенияДолга", "В т.ч. по срокам возникновения долга:");
    УниверсальныйОтчет.ДобавитьПоказатель("Более60Дней",                                  "Более 60 дней",                                    Истина, "ЧЦ=15; ЧДЦ=2", "ВтчПоСрокамВозникновенияДолга", "В т.ч. по срокам возникновения долга:");

УниверсальныйОтчет.ДобавитьОтбор("ОсновнойМенеджерПокупателя");
    УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
    УниверсальныйОтчет.ДобавитьОтбор("ДоговорКонтрагента");
    УниверсальныйОтчет.ДобавитьОтбор("Регистратор");

УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

КонецПроцедуры // УстановитьНачальныеНастройки()


Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    
    // Перед формирование отчета можно установить необходимые параметры универсального отчета.
    
    Если Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаНач)
        ИЛИ Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаКон) Тогда
        Предупреждение("Не задан период отчета!");
        Возврат;
    КонецЕсли;
    
    ТаблицаДанных.Очистить();
    
    ЗаполнитьТаблицуДанных(); // а в этой процедуре заполняем таблицу ТаблицаДанных чем нам надо. .
    
    УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("КонДата", КонецДня(Дата(УниверсальныйОтчет.ДатаКон)));
    УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("НачДата", Дата(УниверсальныйОтчет.ДатаНач));
    
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент);

КонецПроцедуры // СформироватьОтчет()



Функция СформироватьТаблицуДанных() // для формирования структуры таблицы

ТаблицаДанных = Новый ТаблицаЗначений;
КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2);
ТаблицаДанных.Колонки.Добавить("Регистратор"                               ,Новый ОписаниеТипов("Строка"));
ТаблицаДанных.Колонки.Добавить("Период"                                       ,Новый ОписаниеТипов("Дата"));
ТаблицаДанных.Колонки.Добавить("ДоговорКонтрагента"                           ,Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));
ТаблицаДанных.Колонки.Добавить("Контрагент"                                   ,Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
ТаблицаДанных.Колонки.Добавить("Организация"                               ,Новый ОписаниеТипов("СправочникСсылка.Организации"));
ТаблицаДанных.Колонки.Добавить("ОсновнойМенеджерПокупателя"                ,Новый ОписаниеТипов("СправочникСсылка.Пользователи"));
ТаблицаДанных.Колонки.Добавить("ОстатокДолгаНаНачалоПериода"               ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("ОстатокДолгаНаКонецПериода"                   ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("Отгружено"                                   ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("Оплачено"                                      ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("НеБолее10Дней"                               ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("От10До30Дней"                              ,Новый ОписаниеТипов("Число", КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("От30До60Дней"                               ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("Более60Дней"                               ,Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("ОстатокПросроченогоДолгаКонтрагентаВВалюте",Новый ОписаниеТипов("Число",КвалификаторыЧисла));
ТаблицаДанных.Колонки.Добавить("ОстатокПросроченногоДолгаКонтрагентаВДнях" ,Новый ОписаниеТипов("Число"));
ТаблицаДанных.Колонки.Добавить("ОтсрочкаОплаты"                               ,Новый ОписаниеТипов("Число"));

Возврат ТаблицаДанных;
КонецФункции
1 Бизон
 
23.03.20
19:30
Я вообще не понял
2 GodCratOs
 
24.03.20
10:56
Нужно добавить свойства и категории, но у меня источник данных это таблица значений
3 VS-1976
 
24.03.20
12:05
Попробуй добавить свойства к примеру из отчёта ТоварыВРезервеНаСкладах УТ 10.3:

// В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.
        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля( "РегЗаказы.Номенклатура" ,               "Номенклатура",               "Номенклатура",                ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля( "РегЗаказы.ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры", "Характеристика номенклатуры", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ХарактеристикиНоменклатуры);
        
        // Добавление свойств и категорий в исходный текст запроса.
        УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
        
    КонецЕсли;
4 VS-1976
 
24.03.20
12:09
(3) Вот текст запроса ( там в тексте указано куда генерить своства и категории

ТекстЗапроса = "
        |ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    РегЗаказы.Склад КАК Склад,
        |    ПРЕДСТАВЛЕНИЕ(РегЗаказы.Склад),
        |    РегЗаказы.ДокументРезерва КАК ДокументРезерва,
        |    ПРЕДСТАВЛЕНИЕ(РегЗаказы.ДокументРезерва),
        |    РегЗаказы.Номенклатура КАК Номенклатура,
        |    ПРЕДСТАВЛЕНИЕ(РегЗаказы.Номенклатура),
        |    РегЗаказы.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    ПРЕДСТАВЛЕНИЕ(РегЗаказы.ХарактеристикаНоменклатуры),
        |    РегЗаказы.СерияНоменклатуры КАК СерияНоменклатуры,
        |    ПРЕДСТАВЛЕНИЕ(РегЗаказы.СерияНоменклатуры),
        |    РегЗаказы.КоличествоОстаток КАК КоличествоОстаток
        |    //ПОЛЯ_СВОЙСТВА
        |    //ПОЛЯ_КАТЕГОРИИ
        |{ВЫБРАТЬ
        |    Склад.*,
        |    ДокументРезерва.*,
        |    Номенклатура.*,
        |    ХарактеристикаНоменклатуры.*,
        |    СерияНоменклатуры.*,
        |    КоличествоОстаток
        |    //ПСЕВДОНИМЫ_СВОЙСТВА
        |    //ПСЕВДОНИМЫ_КАТЕГОРИИ
        |}

        |ИЗ
        |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, ) КАК РегЗаказы
        |    //СОЕДИНЕНИЯ
        |{ГДЕ
        |    РегЗаказы.Склад.*,
        |    РегЗаказы.ДокументРезерва.*,
        |    РегЗаказы.Номенклатура.*,
        |    РегЗаказы.ХарактеристикаНоменклатуры.*,
        |    РегЗаказы.СерияНоменклатуры.*,
        |    РегЗаказы.КоличествоОстаток
        |    //УСЛОВИЯ_СВОЙСТВА
        |    //УСЛОВИЯ_КАТЕГОРИИ
        |}

        |{УПОРЯДОЧИТЬ ПО
        |    Склад.*,
        |    ДокументРезерва.*,
        |    Номенклатура.*,
        |    ХарактеристикаНоменклатуры.*,
        |    СерияНоменклатуры.*,
        |    КоличествоОстаток
        |    //ПСЕВДОНИМЫ_СВОЙСТВА
        |    //ПСЕВДОНИМЫ_КАТЕГОРИИ
        |}

        |ИТОГИ
        |    СУММА(КоличествоОстаток)
        |    //ИТОГИ_СВОЙСТВА
        |    //ИТОГИ_КАТЕГОРИИ
        |ПО
        |    ОБЩИЕ
        |{ИТОГИ ПО
        |    Склад.*,
        |    ДокументРезерва.*,
        |    Номенклатура.*,
        |    ХарактеристикаНоменклатуры.*,
        |    СерияНоменклатуры.*
        |    //ПСЕВДОНИМЫ_СВОЙСТВА
        |    //ПСЕВДОНИМЫ_КАТЕГОРИИ
        |}

        |АВТОУПОРЯДОЧИВАНИЕ";
5 VS-1976
 
24.03.20
12:12
(4)     // Установка типов значений свойств в отборах отчета
    УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();

Так же, по желанию, можно установить возможность отбора по свойствам