8.х Установить отбор в СКД программно

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Bkmz, 25 дек 2016.

  1. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    248
    Симпатии:
    7
    Баллы:
    29
    Изходя из этого кода я получаю отчет.

    Но не получается установить отбор по полям Склад, ВидЦености, ...
    Что можно сделать?

    Код:
    // Создаем новую СхемуКомпоновкиДанных
        СКД = Новый СхемаКомпоновкиДанных;
       
        // Добавляем источник данных для СхемыКомпоновкиДанных
        Источник                     = СКД.ИсточникиДанных.Добавить();
        Источник.Имя                 = "ЛокальнаяБаза";
        Источник.СтрокаСоединения     = "";
        Источник.ТипИсточникаДанных = "Local";
       
        // Добавляем НаборДанных типа Запрос
        НаборДанных                 = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
        НаборДанных.Имя             = "Продажи";
        НаборДанных.ИсточникДанных     = "ЛокальнаяБаза";
        НаборДанных.Запрос             = "ВЫБРАТЬ
                                         |    СоставПартийНДС.Партия КАК Партия,
                                         |    СоставПартийНДС.Номенклатура КАК Номенклатура,
                                         |    СоставПартийНДС.КоличествоПриход КАК Приход,
                                         |    СоставПартийНДС.СтоимостьПриход КАК Стоимость,
                                         |    СоставПартийНДС.НДСПриход КАК НДС
                                         |ИЗ
                                         |    РегистрНакопления.НДСПоПриобретеннымЦенностям.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК СоставПартийНДС
                                      |{ГДЕ
                                      |    СоставПартийНДС.Склад,
                                      |    СоставПартийНДС.СчетУчетаНДС,
                                      |    СоставПартийНДС.СчетУчета,
                                      |    СоставПартийНДС.ВидЦенности}";
        НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
       
        // Определим пареметры 
        ПараметрДанных           = СКД.Параметры.Добавить();
        ПараметрДанных.Имя       = "НачалоПериода";
        ПараметрДанных.Заголовок = "Начало периода";
        ПараметрДанных.Значение     = Период.ДатаНачала;
        ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
       
        ПараметрДанных           = СКД.Параметры.Добавить();
        ПараметрДанных.Имя       = "КонецПериода";
        ПараметрДанных.Заголовок = "Конец периода";
        ПараметрДанных.Значение  = Период.ДатаОкончания;
        ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
       
        Если ЗначениеЗаполнено(ОтборСклад) Тогда
            ПараметрДанных           = СКД.Параметры.Добавить();
            ПараметрДанных.Имя       = "Склад";
            ПараметрДанных.Заголовок = "Склад";
            ПараметрДанных.Значение  = ОтборСклад;
            ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;   
        КонецЕсли;
       
        Если ЗначениеЗаполнено(ОтборСчет) Тогда
            ПараметрДанных           = СКД.Параметры.Добавить();
            ПараметрДанных.Имя       = "СчетУчета";
            ПараметрДанных.Заголовок = "Счет учета";
            ПараметрДанных.Значение  = ОтборСчет;
            ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
        КонецЕсли;
       
        Если ЗначениеЗаполнено(ОтборСчетНДС) Тогда
            ПараметрДанных           = СКД.Параметры.Добавить();
            ПараметрДанных.Имя       = "СчетУчетаНДС";
            ПараметрДанных.Заголовок = "Счет учета НДС";
            ПараметрДанных.Значение  = ОтборСчетНДС;
            ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
        КонецЕсли;
       
        Если ЗначениеЗаполнено(ОтборВидЦенностей) Тогда
            ПараметрДанных           = СКД.Параметры.Добавить();
            ПараметрДанных.Имя       = "ВидЦенности";
            ПараметрДанных.Заголовок = "Вид ценности";
            ПараметрДанных.Значение  = ОтборВидЦенностей;
            ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
        КонецЕсли;
       
        // Определим ресурсы
        ПолеРесурса             = СКД.ПоляИтога.Добавить();
        ПолеРесурса.Выражение   = "СУММА(Приход)";
        ПолеРесурса.ПутьКДанным = "Приход";
       
        ПолеРесурса             = СКД.ПоляИтога.Добавить();
        ПолеРесурса.Выражение   = "СУММА(Стоимость)";
        ПолеРесурса.ПутьКДанным = "Стоимость";
       
        ПолеРесурса             = СКД.ПоляИтога.Добавить();
        ПолеРесурса.Выражение   = "СУММА(НДС)";
        ПолеРесурса.ПутьКДанным = "НДС";
    
        // Получим настройки для схемы
        НастройкиСКД = СКД.НастройкиПоУмолчанию;
       
        ЗаголовокОтчета                 = НастройкиСКД.ПараметрыВывода.Элементы.Найти("Заголовок");
        ЗаголовокОтчета.Значение         = "Состав партий НДС";
        ЗаголовокОтчета.Использование     = Истина;
           
        //Добавим выбранные поля к нашему отчету
        ВыбранноеПолеНоменклатура           = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПолеНоменклатура.Поле      = Новый ПолеКомпоновкиДанных("Партия");
        ВыбранноеПолеНоменклатура.Заголовок = "Партия";
       
        ВыбранноеПолеКоличество              = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПолеКоличество.Поле          = Новый ПолеКомпоновкиДанных("Номенклатура");
        ВыбранноеПолеКоличество.Заголовок     = "Номенклатура";
    
        ВыбранноеПолеНоменклатура           = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПолеНоменклатура.Поле      = Новый ПолеКомпоновкиДанных("НДС");
        ВыбранноеПолеНоменклатура.Заголовок = "НДС";
       
        ВыбранноеПолеКоличество              = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПолеКоличество.Поле          = Новый ПолеКомпоновкиДанных("Приход");
        ВыбранноеПолеКоличество.Заголовок     = "Приход";
       
        ВыбранноеПолеКоличество               = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ВыбранноеПолеКоличество.Поле          = Новый ПолеКомпоновкиДанных("Стоимость");
        ВыбранноеПолеКоличество.Заголовок     = "Стоимость";
    
        //Добавим группировку варианта отчета
        ГруппировкаПоПартии                     = НастройкиСКД.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        ГруппировкаПоПартии.Использование         = Истина;
        ГруппировкаПоПартии.Имя                 = "Партия";
       
        ПолеГруппировкиПоПартии                   = ГруппировкаПоПартии.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));      
        ПолеГруппировкиПоПартии.Использование    = Истина;
        ПолеГруппировкиПоПартии.Поле            = Новый ПолеКомпоновкиДанных("Партия");
        ПолеГруппировкиПоПартии.ТипГруппировки  = ТипГруппировкиКомпоновкиДанных.Элементы;
        ПолеГруппировкиПоПартии.ТипДополнения   = ТипДополненияПериодаКомпоновкиДанных.БезДополнения;
       
        АвтоПоле                                 = ГруппировкаПоПартии.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
        АвтоПоле.Использование                    = Истина;
       
        ГруппировкаПоНоменклатуре                = ГруппировкаПоПартии.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        ГруппировкаПоНоменклатуре.Использование = Истина;
        ГруппировкаПоНоменклатуре.Имя            = "Номенклатура";
       
        АвтоПоле                                 = ГруппировкаПоНоменклатуре.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
        АвтоПоле.Использование                    = Истина;
       
        //КомпоновщикМакета
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиСКД);
       
        //ПроцессорКомпоновки
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
       
        Результат.Очистить();
       
        //ПроцессорВывода
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
  2. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    248
    Симпатии:
    7
    Баллы:
    29
    Я так понимаю что есть вариант сначала выбрать те поля по которым установлен отбор в запросе. А потому уже в СКД отбирать? А можно как-то установить параметр который отправлять в запрос и в запросе выбирать только то что нужно? При этом параметры могут быть и не заполнены.
  3. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    248
    Симпатии:
    7
    Баллы:
    29
    Разобрался. Все тоже самое только запрос преобразовать таким образом:

    Код:
    "ВЫБРАТЬ
        |    СоставПартийНДС.Партия КАК Партия,
        |    СоставПартийНДС.Номенклатура КАК Номенклатура,
        |    СоставПартийНДС.КоличествоПриход КАК Приход,
        |    СоставПартийНДС.СтоимостьПриход КАК Стоимость,
        |    СоставПартийНДС.НДСПриход КАК НДС
        |ИЗ
        |   РегистрНакопления.НДСПоПриобретеннымЦенностям.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , ,
        |   {(Склад = &Склад)}
        |   {(СчетУчета = &СчетУчета)}
        |   {(СчетУчетаНДС = &СчетУчетаНДС)}
        |   {(ВидЦенности = &ВидЦенности)}) КАК СоставПартийНДС"
  4. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    881
    Симпатии:
    151
    Баллы:
    104
    Так в запросе нет параметров, а вы их добавляете. Для этого отбор существует.
    --- Объединение сообщений, 25 дек 2016 ---
    Тоже подойдёт)

Поделиться этой страницей