Имя: Пароль:
1C
1С v8
СКД полностью программно в обработке
0 Алексей777
 
09.09.13
16:36
v8: СКД: полностью программное создание отчета в продолжение данного топика.
СхемаКомпоновкиДанных = новый СхемаКомпоновкиДанных;
Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    Источник.Имя = "ЛокальнаяБаза";
    Источник.СтрокаСоединения = "";
    Источник.ТипИсточникаДанных = "Local";

НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "Замеры";
    НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;

НаборДанных.Запрос =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Документ1.ДатаЗамера КАК Дата,
    |    Документ1.ВремяЗамераНач КАК ВремяС,
    |    Документ1.ВремяЗамераКон КАК ВремяПо,
    |    Документ1.КонтрагентАдрес КАК Адрес
|ИЗ
    |    Документ.Документ1 КАК Документ1";

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

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

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

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

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

В результате исполнения Табличный документ пустой. Подскажите, где копать?
1 Алексей777
 
10.09.13
08:52
Всем доброго утра!
В результате исследований получилось вот что (все работает как нужно). Стоит обратить внимание на "АвтоПолеГруппировкиКомпоновкиДанных". Также какая-то фигня с расшифровкой при двойном щелчке выходят цифры. Короче рабочий код:
2 Алексей777
 
10.09.13
08:53
В модуле управляемой формы:
&НаКлиенте
Процедура Команда1(Команда)
    Сделать1();
КонецПроцедуры

&НаСервере
Процедура Сделать1()
     //1. создаем схему компоновки данных
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
    
    //1.1 определяем источник данных для схемы
    //для наших целей - текущая ИБ
    Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    Источник.Имя = "ЛокальнаяБаза";
    Источник.СтрокаСоединения = "";
    Источник.ТипИсточникаДанных = "Local";
    
    //1.2 определяем набор данных
    НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "Продажи";
    НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
    НаборДанных.Запрос = (
        "ВЫБРАТЬ
        |    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
        |    РеализацияТоваровУслугТовары.Сумма КАК СтоимостьОборот,
        |    РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
        |    РеализацияТоваровУслугТовары.НомерСтроки,
        |    РеализацияТоваровУслугТовары.Ссылка
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары"
    );
    
    //1.2.1 добавляем поля
    ПолеНоменклатуры = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНоменклатуры.Заголовок = "Номенклатура";
    ПолеНоменклатуры.ПутьКДанным = "Номенклатура";
    ПолеНоменклатуры.Поле = "Номенклатура";
    
    ПолеСтоимости = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеСтоимости.Заголовок = "Стоимость";
    ПолеСтоимости.ПутьКДанным = "СтоимостьОборот";
    ПолеСтоимости.Поле = "СтоимостьОборот";
    
    ПолеДата = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеДата.Заголовок = "Дата";
    ПолеДата.ПутьКДанным = "Дата";
    ПолеДата.Поле = "Дата";
    
    ПолеДата = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеДата.Заголовок = "НомерСтроки";
    ПолеДата.ПутьКДанным = "НомерСтроки";
    ПолеДата.Поле = "НомерСтроки";
    
    ПолеДата = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеДата.Заголовок = "Ссылка";
    ПолеДата.ПутьКДанным = "Ссылка";
    ПолеДата.Поле = "Ссылка";
    
    //1.3 определяем ресурсы
    ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
    ПолеРесурса.Выражение = "Сумма(СтоимостьОборот)";
    ПолеРесурса.ПутьКДанным = "СтоимостьОборот";
    
    
    //2. создаем настройки для схемы
    НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    //2.1 определяем структуру
    //2.1.1 добавляем группировку "Номенклатура"
    ГруппировкаНоменклатуры = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ПолеГруппировки = ГруппировкаНоменклатуры.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));    
    ПолеГруппировки.Использование = Истина;
    ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
    
    ГруппировкаДет = ГруппировкаНоменклатуры.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ПолеГруппировки = ГруппировкаДет.ПоляГруппировки.Элементы.Добавить(Тип("АвтоПолеГруппировкиКомпоновкиДанных"));    
    ПолеГруппировки.Использование = Истина;
        
    АвтоПоле = ГруппировкаНоменклатуры.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоПоле.Использование = Истина;
    
    АвтоПоле = ГруппировкаДет.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоПоле.Использование = Истина;
        
    //2.2 определим выбранные поля
    ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПоле.Заголовок = "Стоимость";
    ВыбранноеПоле.Использование = Истина;
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СтоимостьОборот");
    //
    ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПоле.Заголовок = "Дата";
    ВыбранноеПоле.Использование = Истина;
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Дата");
    
    ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПоле.Заголовок = "НомерСтроки";
    ВыбранноеПоле.Использование = Истина;
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("НомерСтроки");

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

    
    //КомпНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    //КомпНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    //КомпНастроек.ЗагрузитьНастройки(НастройкиКомпоновкиДанных);    
    //НастройкиКомпоновкиДанных = КомпНастроек.ПолучитьНастройки();
    
    //3. готовим макет
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных,ДанныеРасшифровки);
    
    
    //4. исполняем макет
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет,,ДанныеРасшифровки);
    ПроцессорКомпоновки.Сбросить();
    Реквизит1.Очистить();
    
    //5. выводим результат
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Реквизит1);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры
3 Алексей777
 
10.09.13
08:54
Может подскажите, почему такая расшифровка - только цифры одни :).
4 assasu
 
10.09.13
09:14
зачем это все нужно?
макет можно создать, и пользоваться готовым.
5 Алексей777
 
10.09.13
09:43
(4), дружище, нужно! Я не просто для учебы спрашиваю :).
6 assasu
 
10.09.13
11:30
(5)друг, мне сложно представить реальную задачу, где это нужно. поделись.
7 ДемонМаксвелла
 
10.09.13
11:38
(3) тоже как то делал скд-шный отчет обработкой (печ формой)
для нормальных расшифровок сделал ДанныеРасшифровки реквизитом обработки, и обработку расшифровки пришлось написать
AdBlock убивает бесплатный контент. 1Сергей