Имя: Пароль:
1C
1С v8
Универсальный отчет, Предопределенный отбор
0 MiniMuk
 
20.11.13
06:58
В универсальном отчете есть список предопределенных отборов

// Добавление предопределенных отборов отчета.
// Необходимо вызывать для каждого добавляемого отбора.
// УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
УниверсальныйОтчет.ДобавитьОтбор("Склад");
УниверсальныйОтчет.ДобавитьОтбор("Матрица");
УниверсальныйОтчет.ДобавитьОтбор("КатегорияТоваров");

Как мне перед выполнением проверить если есть отбор, до добавить это условие в запрос. Сам запрос отрабатывает нормально, отбор на этапе вывода тоже отрабатывает, но вопрос в длительности. Без отбора в запросе он отрабатывает около двух - трех минут, с отбором меньше 30 сек. Причина запрос состоит из 7 запросов. Отбор в первом запросе сильно сужает выборку. Причем отбор всегда заполнен, вопрос как в коде понят чем
нужно чтото вроде понять где взять СкладНаФорме

Если Не СкладНаФорме = Справочники.Склады.ПустаяСсылка Тогда
  СтрЗаменить(ТекстЗапроса, "///ОтборПоСкладу", " и склад = &Склад");
  УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
  УниверсальныйОтчет.ПостроительОтчета.Кактоустановитьпараметр(складнаформе);

КонецЕсли
1 Повелитель
 
20.11.13
07:06
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    
    // Перед формирование отчета можно установить необходимые параметры универсального отчета.
    
    УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить("Склад", Склад);
    
    
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент);

КонецПроцедуры // СформироватьОтчет()
2 catena
 
20.11.13
07:12
(0)Можно прям в запросе в условии
"Где склад = &Склад или &Склад = Значение(Справочник.Склады.ПустаяСсылка)"

И потом просто параметр.
3 MiniMuk
 
20.11.13
07:44
(1), (2) Все клево, вот только как параметр склад получить с элемента формы я допереть не могу
4 MiniMuk
 
20.11.13
07:47
что только не перебирал
ЭтотОбъект.КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы
ЭтотОбъект.КомпоновщикНастроек.Настройки.ДоступныеОбъекты.Элементы
ЭтотОбъект.КомпоновщикНастроек.ФиксированныеНастройки.Выбор.ДоступныеПоляВыбора.Элементы
ЭтотОбъект.КомпоновщикНастроек.ФиксированныеНастройки.ДоступныеПоляВыбора.Элементы
ЭтотОбъект.КомпоновщикНастроек.ФиксированныеНастройки.ДоступныеПоляОтбора.Элементы
ЭтотОбъект.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.ДоступныеПоляОтбора.Элементы

нигде не вижу
5 Defender aka LINN
 
20.11.13
07:54
(3) А для нахрена это делать, если построитель сам, без помощи корявых программерских рук, отбор преобразует в условия в тесте запроса и, опять же, сам, устанавливает параметры?
6 catena
 
20.11.13
07:54
(4)Так все-таки универсальный отчет или СКД? Лучше всего добавить свой склад в реквизиты обработки.
7 MiniMuk
 
20.11.13
08:01
(5) Я же писал, отбор производится на стадии вывода, вам это ни очем не говорит? Сам он запрос не редактирует потому что там этого отбора нет.
(6)  Это универсальный отчет, пользователям он нравиться и пользоваться они им более менее научились по сравнению с СКД. Я никакие реквизиты в обработку не добавляю, только сам запрос и предопредленные параметры
8 catena
 
20.11.13
08:05
(7)Так это дополнительное поле на форме или хотите использовать отбор? Почему не добавить на этот запрос условие построителя, чтобы он в запросе БЫЛ?
9 MiniMuk
 
20.11.13
08:07
(8) Это дополнительный обор
УниверсальныйОтчет.ДобавитьОтбор("Склад");
Так же для пользователя это является быстрым обором. Теоретически( но только теоретически) они его всегда заполняют, если я отбор добавлю в запрос параметро и не заполню будет ошибка
10 Defender aka LINN
 
20.11.13
08:07
(7) "отбор производится на стадии вывода" - это как вообще?
И какая религия мешает сделать это нормальным, человеческим отбором?
11 catena
 
20.11.13
08:09
(9)Ну добавляй не параметром, а построителем, в чем проблема?
12 MiniMuk
 
20.11.13
08:11
(11) Как постоителем добавить?
13 MiniMuk
 
20.11.13
08:13
как я работаю с универсальным отчетом
Пишу запрос, устанавливаю предопределеные отборы, выводимые поля, форматирование. Все. Если в запросе ставлю условие типа
|ГДЕ
|    битМатрицаВSKUМатрица.Ссылка = &Ссылка
то без установки параметра будет ошибка запроса.
Поэтому условие надо добавить если параметр выбран

Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
    
    // Настройка общих параметров универсального отчета
    
    // Содержит название отчета, которое будет выводиться в шапке.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
    УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);
    
    // Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.мВыбиратьИмяРегистра = Истина;
    УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
    
    // Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";
    УниверсальныйОтчет.ИмяРегистра = "";
    
    // Содержит признак необходимости вывода отрицательных значений показателей красным цветом.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
    УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
    
    // Содержит признак необходимости вывода в отчет общих итогов.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    УниверсальныйОтчет.ВыводитьОбщиеИтоги = Истина;
    
    // Содержит признак необходимости вывода детальных записей в отчет.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина;
    
    // Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;
    УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Истина;
    
    // Содержит признак использования свойств и категорий при заполнении настроек отчета.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;
    //УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;
    
    // Содержит признак использования простой формы настроек отчета без группировок колонок.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина;
    
    // Дополнительные параметры, переданные из отчета, вызвавшего расшифровку.
    // Информация, передаваемая в переменной ДополнительныеПараметры, может быть использована
    // для реализации специфичных для данного отчета параметрических настроек.
    
    // Описание исходного текста запроса.
    // При написании текста запроса рекомендуется следовать правилам, описанным в следующем шаблоне текста запроса:
    //
    //ВЫБРАТЬ
    //    <ПсевдонимТаблицы.Поле> КАК <ПсевдонимПоля>,
    //    ПРЕДСТАВЛЕНИЕ(<ПсевдонимТаблицы>.<Поле>),
    //    <ПсевдонимТаблицы.Показатель> КАК <ПсевдонимПоказателя>
    //    //ПОЛЯ_СВОЙСТВА
    //    //ПОЛЯ_КАТЕГОРИИ
    //{ВЫБРАТЬ
    //    <ПсевдонимПоля>.*,
    //    <ПсевдонимПоказателя>,
    //    Регистратор,
    //    Период,
    //    ПериодДень,
    //    ПериодНеделя,
    //    ПериодДекада,
    //    ПериодМесяц,
    //    ПериодКвартал,
    //    ПериодПолугодие,
    //    ПериодГод
    //    //ПОЛЯ_СВОЙСТВА
    //    //ПОЛЯ_КАТЕГОРИИ
    //}
    //ИЗ
    //    <Таблица> КАК <ПсевдонимТаблицы>
    //    //СОЕДИНЕНИЯ
    //{ГДЕ
    //    <ПсевдонимТаблицы.Поле>.* КАК <ПсевдонимПоля>,
    //    <ПсевдонимТаблицы.Показатель> КАК <ПсевдонимПоказателя>,
    //    <ПсевдонимТаблицы>.Регистратор КАК Регистратор,
    //    <ПсевдонимТаблицы>.Период КАК Период,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕНЬ) КАК ПериодДень,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, НЕДЕЛЯ) КАК ПериодНеделя,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ДЕКАДА) КАК ПериодДекада,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, МЕСЯЦ) КАК ПериодМесяц,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, КВАРТАЛ) КАК ПериодКвартал,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
    //    НАЧАЛОПЕРИОДА(<ПсевдонимТаблицы>.Период, ГОД) КАК ПериодГод
    //    //ПОЛЯ_СВОЙСТВА
    //    //ПОЛЯ_КАТЕГОРИИ
    //}
    //{УПОРЯДОЧИТЬ ПО
    //    <ПсевдонимПоля>.*,
    //    <ПсевдонимПоказателя>,
    //    Регистратор,
    //    Период,
    //    ПериодДень,
    //    ПериодНеделя,
    //    ПериодДекада,
    //    ПериодМесяц,
    //    ПериодКвартал,
    //    ПериодПолугодие,
    //    ПериодГод
    //    //УПОРЯДОЧИТЬ_СВОЙСТВА
    //    //УПОРЯДОЧИТЬ_КАТЕГОРИИ
    //}
    //ИТОГИ
    //    АГРЕГАТНАЯ_ФУНКЦИЯ(<ПсевдонимПоказателя>)
    //    //ИТОГИ_СВОЙСТВА
    //    //ИТОГИ_КАТЕГОРИИ
    //ПО
    //    ОБЩИЕ
    //{ИТОГИ ПО
    //    <ПсевдонимПоля>.*,
    //    Регистратор,
    //    Период,
    //    ПериодДень,
    //    ПериодНеделя,
    //    ПериодДекада,
    //    ПериодМесяц,
    //    ПериодКвартал,
    //    ПериодПолугодие,
    //    ПериодГод
    //    //ПОЛЯ_СВОЙСТВА
    //    //ПОЛЯ_КАТЕГОРИИ
    //}
    //АВТОУПОРЯДОЧИВАНИЕ
    
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    битМатрицаВSKUМатрица.КатегорияСкладов КАК КатегорияСкладов,
    |    битКатегорииСкладовДляМатрицыВSKUСклады.Склад КАК СкладКатегорииСкладов,
    |    битМатрицаВSKUМатрица.КатегорияТоваров,
    |    битКатегорииТоваровДляМатрицыВSKUТовары.Номенклатура КАК НоменклатураКатегорииТоваров,
    |    СУММА(битМатрицаВSKUМатрица.SKU) КАК SKU_План,
    |    битМатрицаВSKUМатрица.Ссылка
    |ПОМЕСТИТЬ Матрица
    |ИЗ
    |    Справочник.битМатрицаВSKU.Матрица КАК битМатрицаВSKUМатрица
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.битКатегорииСкладовДляМатрицыВSKU.Склады КАК битКатегорииСкладовДляМатрицыВSKUСклады
    |        ПО битМатрицаВSKUМатрица.КатегорияСкладов = битКатегорииСкладовДляМатрицыВSKUСклады.Ссылка
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.битКатегорииТоваровДляМатрицыВSKU.Товары КАК битКатегорииТоваровДляМатрицыВSKUТовары
    |        ПО битМатрицаВSKUМатрица.КатегорияТоваров = битКатегорииТоваровДляМатрицыВSKUТовары.Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    битКатегорииСкладовДляМатрицыВSKUСклады.Склад,
    |    битКатегорииТоваровДляМатрицыВSKUТовары.Номенклатура,
    |    битМатрицаВSKUМатрица.КатегорияСкладов,
    |    битМатрицаВSKUМатрица.КатегорияТоваров,
    |    битМатрицаВSKUМатрица.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура
    |ПОМЕСТИТЬ НомеклатураПоМатрице
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка В ИЕРАРХИИ
    |            (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                Матрица.НоменклатураКатегорииТоваров
    |            ИЗ
    |                Матрица)
    |    И Номенклатура.ЭтоГруппа = ЛОЖЬ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Матрица.КатегорияТоваров,
    |    НомеклатураПоМатрице.Номенклатура КАК Номенклатура
    |ПОМЕСТИТЬ Соответсвие
    |ИЗ
    |    Матрица КАК Матрица,
    |    НомеклатураПоМатрице КАК НомеклатураПоМатрице
    |ГДЕ
    |    (НомеклатураПоМатрице.Номенклатура.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура.Родитель.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура.Родитель.Родитель.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура.Родитель.Родитель.Родитель.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель В (Матрица.НоменклатураКатегорииТоваров)
    |            ИЛИ НомеклатураПоМатрице.Номенклатура = Матрица.НоменклатураКатегорииТоваров)
    |    И НомеклатураПоМатрице.Номенклатура.ЭтоГруппа = ЛОЖЬ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ НомеклатураПоМатрице
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Склад КАК Склад,
    |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток,
    |    Соответсвие.КатегорияТоваров
    |ПОМЕСТИТЬ Остатки
    |ИЗ
    |    Соответсвие КАК Соответсвие
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
    |                КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ),
    |                Склад В
    |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                        Матрица.СкладКатегорииСкладов
    |                    ИЗ
    |                        Матрица)) КАК ТоварыНаСкладахОстатки
    |        ПО Соответсвие.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    |    ТоварыНаСкладахОстатки.Склад,
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    Соответсвие.КатегорияТоваров
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ Соответсвие
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Остатки.Склад,
    |    Остатки.Номенклатура,
    |    Остатки.КоличествоОстаток КАК КоличествоОстаток,
    |    Остатки.КатегорияТоваров
    |ПОМЕСТИТЬ ОстаткиСКатегориями
    |ИЗ
    |    Остатки КАК Остатки
    |ГДЕ
    |    Остатки.КоличествоОстаток >= 0
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ Остатки
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Матрица.КатегорияСкладов КАК КатегорияСкладов,
    |    ЕСТЬNULL(ОстаткиСКатегориями.Склад, Матрица.СкладКатегорииСкладов) КАК Склад,
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОстаткиСКатегориями.Номенклатура) КАК SKU_Факт,
    |    СУММА(ЕСТЬNULL(ОстаткиСКатегориями.КоличествоОстаток, 0)) КАК КоличествоОстаток,
    |    МАКСИМУМ(Матрица.SKU_План) КАК SKU_План,
    |    ЕСТЬNULL(ОстаткиСКатегориями.КатегорияТоваров, Матрица.КатегорияТоваров) КАК КатегорияТоваров,
    |    Матрица.Ссылка КАК Матрица
    |ПОМЕСТИТЬ Результат
    |{ВЫБРАТЬ
    |    КатегорияСкладов.*,
    |    Склад.*,
    |    SKU_Факт.*,
    |    КоличествоОстаток,
    |    SKU_План}
    |ИЗ
    |    Матрица КАК Матрица
    |        ПОЛНОЕ СОЕДИНЕНИЕ ОстаткиСКатегориями КАК ОстаткиСКатегориями
    |        ПО Матрица.СкладКатегорииСкладов = ОстаткиСКатегориями.Склад
    |            И Матрица.КатегорияТоваров = ОстаткиСКатегориями.КатегорияТоваров
    |ГДЕ
    |    Матрица.SKU_План > 0
    |
    |СГРУППИРОВАТЬ ПО
    |    Матрица.КатегорияСкладов,
    |    Матрица.Ссылка,
    |    ЕСТЬNULL(ОстаткиСКатегориями.Склад, Матрица.СкладКатегорииСкладов),
    |    ЕСТЬNULL(ОстаткиСКатегориями.КатегорияТоваров, Матрица.КатегорияТоваров)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ Матрица
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ОстаткиСКатегориями
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Результат.КатегорияСкладов КАК КатегорияСкладов,
    |    Результат.Склад КАК Склад,
    |    Результат.SKU_Факт КАК SKU_Факт,
    |    Результат.КоличествоОстаток КАК КоличествоОстаток,
    |    Результат.SKU_План КАК SKU_План,
    |    Результат.SKU_Факт / Результат.SKU_План * 100 КАК Процент,
    |    Результат.Матрица,
    |    Результат.КатегорияТоваров
    |{ВЫБРАТЬ
    |    SKU_План,
    |    SKU_Факт,
    |    Процент,
    |    КатегорияСкладов.*,
    |    Склад.*,
    |    КоличествоОстаток,
    |    Матрица.*,
    |    КатегорияТоваров.*}
    |ИЗ
    |    Результат КАК Результат
    |{ГДЕ
    |    Результат.КатегорияСкладов.*,
    |    Результат.Склад.*,
    |    Результат.SKU_Факт,
    |    Результат.КоличествоОстаток,
    |    Результат.SKU_План,
    |    Результат.Матрица.*,
    |    (Результат.SKU_Факт / Результат.SKU_План * 100) КАК Процент,
    |    Результат.КатегорияТоваров.*}
    |
    |УПОРЯДОЧИТЬ ПО
    |    КатегорияСкладов,
    |    Склад
    |{УПОРЯДОЧИТЬ ПО
    |    КатегорияСкладов.*,
    |    Склад.*}
    |ИТОГИ
    |    СУММА(SKU_Факт),
    |    СУММА(SKU_План),
    |    СРЕДНЕЕ(Процент)
    |ПО
    |    КатегорияСкладов,
    |    Склад
    |{ИТОГИ ПО
    |    КатегорияСкладов.*,
    |    Склад.*,
    |    SKU_Факт,
    |    КоличествоОстаток,
    |    SKU_План,
    |    Процент,
    |    Матрица.*,
    |    КатегорияТоваров.*}
    |АВТОУПОРЯДОЧИВАНИЕ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ Результат";


    
    //              |    ДОБАВИТЬКДАТЕ(СУБ_ИнициализацияНомеров.Период, МЕСЯЦ, СУБ_ИнициализацияНомеров.МесяцевРасчета - 1) = НАЧАЛОПЕРИОДА(&ДатаКонца, МЕСЯЦ)
    
    // В универсальном отчете включен флаг использования свойств и категорий.
    //Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
    //    
    //    // Добавление свойств и категорий поля запроса в таблицу полей.
    //    // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
    //    
    //    // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
    //    УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("РегЗаказы.Номенклатура",               "Номенклатура",               "Номенклатура",                ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура);
    //    УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("РегЗаказы.ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры", "Характеристика номенклатуры", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ХарактеристикиНоменклатуры);
    //    УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("РегЗаказы.ДокументРезерва",            "ДокументРезерва",            "Документ резерва",            ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документы);
    //    УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("РегЗаказы.ДокументРезерва",            "ДокументРезерва",            "Документ резерва",            ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документ_ЗаказПокупателя);
    //    УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("РегЗаказы.Склад",                      "Склад",                      "Склад",                       ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Склады);
    //    
    //    // Добавление свойств и категорий в исходный текст запроса.
    //    УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
    //    
    //КонецЕсли;
    
    // Инициализация текста запроса построителя отчета
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
    // Представления полей отчета.
    // Необходимо вызывать для каждого поля запроса.
    // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура","Номенклатура");
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Подразделение","Подразделение");
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Регистратор","Регистратор");
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Новая","Новая");
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ДокументПоступления","Документ Поступления");
    //////УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Контрагент","Контрагент");
    
    
    // Добавление показателей
    // Необходимо вызывать для каждого добавляемого показателя.
    // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя(впостроителеполе)>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);
    УниверсальныйОтчет.ДобавитьПоказатель("SKU_План", "SKU_План", Истина, "ЧЦ=15; ЧДЦ=2; ЧН=0","SKU","SKU");
    УниверсальныйОтчет.ДобавитьПоказатель("SKU_Факт", "SKU_Факт", Истина, "ЧЦ=15; ЧДЦ=2; ЧН=0","SKU","SKU");
    УниверсальныйОтчет.ДобавитьПоказатель("Процент", "Процент", Истина, "ЧЦ=15; ЧДЦ=2; ЧН=0","SKU","SKU");
    
    ЭлементОформления = УниверсальныйОтчет.ПостроительОтчета.УсловноеОформление.Добавить("ТребуетсяЗаказать", "Требуется заказать");
    ЭлементОформления.Область.Добавить("Процент", "Процент", ТипОбластиОформления.Поле);
    ЭлементОтбора = ЭлементОформления.Отбор.Добавить("Процент");
    ЭлементОтбора.ВидСравнения = ВидСравнения.Меньше;
    ЭлементОтбора.Значение = 100;
    ЭлементОтбора.Использование = Истина;
    ЭлементОформления.Оформление.ЦветТекста.Значение = ЦветаСтиля.ТекстСообщенияОПроблемах;
    ЭлементОформления.Оформление.ЦветТекста.Использование = Истина;
    //ЭлементОформления.Оформление.Текст.Значение = "Требуется заказать";
    //ЭлементОформления.Оформление.Текст.Использование = Истина;
    //
    ЭлементОформления.Использование = Истина;
    
// Добавление предопределенных группировок строк отчета.
    // Необходимо вызывать для каждой добавляемой группировки строки.
    // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
    //УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент");
    
    
    // Добавление предопределенных группировок колонок отчета.
    // Необходимо вызывать для каждой добавляемой группировки колонки.
    // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьИзмерениеКолонки("КатегорияТоваров");
    //
    
    // Добавление предопределенных отборов отчета.
    // Необходимо вызывать для каждого добавляемого отбора.
    // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
    //УниверсальныйОтчет.ДобавитьОтбор("Разница");
    УниверсальныйОтчет.ДобавитьОтбор("Склад");
    УниверсальныйОтчет.ДобавитьОтбор("Матрица");
    УниверсальныйОтчет.ДобавитьОтбор("КатегорияТоваров");
    УниверсальныйОтчет.ДобавитьОтбор("КатегорияСкладов");
    
    //УниверсальныйОтчет.ПостроительОтчета.Отбор.Разница.Значение = 0;
    //УниверсальныйОтчет.ПостроительОтчета.Отбор.Разница.Использование = Истина;
    //УниверсальныйОтчет.ПостроительОтчета.Отбор.Разница.ВидСравнения = ВидСравнения.НеРавно;
    //// Установка связи подчиненных и родительских полей
    // УниверсальныйОтчет.УстановитьСвязьПолей(<ПутьКДанным>, <ПутьКДанным>);
    
    // Установка представлений полей
    // УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
    ////////УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
    
    
    ////////// Установка типов значений свойств в отборах отчета
    ////////УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();
    
    
    // Заполнение начальных настроек универсального отчета
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);
    
    // Добавление дополнительных полей
    // Необходимо вызывать для каждого добавляемого дополнительного поля.
    // УниверсальныйОтчет.ДобавитьДополнительноеПоле(<ПутьКДанным>);
    //////////УниверсальныйОтчет.ДобавитьДополнительноеПоле("Номенклатура.Артикул");
    //////////
КонецПроцедуры // УстановитьНачальныеНастройки()
14 Defender aka LINN
 
20.11.13
08:16
(13) А ты про {} когда-нибудь слышал?
15 MiniMuk
 
20.11.13
08:17
(14) скажем нет, можешь быть первым кто ткнет в справку
16 Defender aka LINN
 
20.11.13
08:18
Ну и мне до сих пор интересно, как построитель понимает тип отбора, если он "производится на стадии вывода" и, собственно, КАК он производится
17 catena
 
20.11.13
08:18
(15)Смотри в итоговом запросе:

    |{ГДЕ
    |    Результат.КатегорияСкладов.*,
    |    Результат.Склад.*,
    |    Результат.SKU_Факт,
    |    Результат.КоличествоОстаток,
    |    Результат.SKU_План,
    |    Результат.Матрица.*,
    |    (Результат.SKU_Факт / Результат.SKU_План * 100) КАК Процент,
    |    Результат.КатегорияТоваров.*}


Это значит все эти поля могут быть выбраны в отборе построителя и этот отбор будет работать только при наличии выбора. Теперь там, где тебе надо, сделай так же.
18 Defender aka LINN
 
20.11.13
08:21
(15) Открываешь конструктор запросов, вкладка "Построитель". Документацию сам ищи, в мануале все есть
19 MiniMuk
 
20.11.13
08:23
Ага, склад там есть. Но если я строю запрос и в запросе указываю конкретный склад до выполнения запроса он выполняется на порядок быстее чем если указываю в отборе.
Как я понимаю работает постоитель, он выполняет весь запрос. И на этапе вывода собирает данные по отборам. Но дело в том что запрос уже выполнен. И в него попало куча ненжных данных, постоитель их отборосит. Но если склад указать с самом первом запросе

    ТекстЗапроса =
    "ВЫБРАТЬ
    |    битМатрицаВSKUМатрица.КатегорияСкладов КАК КатегорияСкладов,
    |    битКатегорииСкладовДляМатрицыВSKUСклады.Склад КАК СкладКатегорииСкладов,
    |    битМатрицаВSKUМатрица.КатегорияТоваров,
    |    битКатегорииТоваровДляМатрицыВSKUТовары.Номенклатура КАК НоменклатураКатегорииТоваров,
    |    СУММА(битМатрицаВSKUМатрица.SKU) КАК SKU_План,
    |    битМатрицаВSKUМатрица.Ссылка
    |ПОМЕСТИТЬ Матрица
    |ИЗ
где склад = &мойпараметр
[\1c]
то запрос выполняется быстрее потому что сбор данных идет по более узкому кругу данны.
20 MiniMuk
 
20.11.13
08:24
(18) Универсальный отчет работает на базе построителя, без него не взлетает, тоесть как минимум про постоитель я в курсе
21 MiniMuk
 
20.11.13
08:28
(17) Если я тебя правильно понял мне в первый запрос добавить постоитель, примерно так

|ПОМЕСТИТЬ Матрица
|{ВЫБРАТЬ
|    КатегорияСкладов.*,
|    СкладКатегорииСкладов.*,
|    КатегорияТоваров.*}
[\1c]
22 Defender aka LINN
 
20.11.13
08:28
(19) "Как я понимаю работает постоитель, он выполняет весь запрос. И на этапе вывода собирает данные по отборам" - вот мне до сих пор интересно - откуда взялся этот бред? И поячему в него так охотно верят, а начинаешь доказывать, что это не так - ни в какую.
(20) "тоесть как минимум про постоитель я в курсе" - друх, ты же не умеешь писать запросы для построителя, как же это ты в курсе?
23 Defender aka LINN
 
20.11.13
08:28
(21) Не ВЫБРАТЬ (хотя тоже можно, если осторожно), а ГДЕ
24 catena
 
20.11.13
08:29
(21)Ну почему же ВЫБРАТЬ то???
25 Defender aka LINN
 
20.11.13
08:32
(24) Потому что он ответа ждет, который можно не включая моск использовать. Вот и не включает
26 MiniMuk
 
20.11.13
08:34
|ПОМЕСТИТЬ Матрица
        |{ВЫБРАТЬ
        |    КатегорияСкладов.*,
        |    СкладКатегорииСкладов.*,
        |    КатегорияТоваров.*}
        |ИЗ
        |    Справочник.битМатрицаВSKU.Матрица КАК битМатрицаВSKUМатрица
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.битКатегорииСкладовДляМатрицыВSKU.Склады КАК битКатегорииСкладовДляМатрицыВSKUСклады
        |        ПО битМатрицаВSKUМатрица.КатегорияСкладов = битКатегорииСкладовДляМатрицыВSKUСклады.Ссылка
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.битКатегорииТоваровДляМатрицыВSKU.Товары КАК битКатегорииТоваровДляМатрицыВSKUТовары
        |        ПО битМатрицаВSKUМатрица.КатегорияТоваров = битКатегорииТоваровДляМатрицыВSKUТовары.Ссылка
        |{ГДЕ
        |    битМатрицаВSKUМатрица.SKU}
27 MiniMuk
 
20.11.13
08:35
Прмерно понятно, пошел тестить.
Еще вопрос
И поячему в него так охотно верят, а начинаешь доказывать, что это не так - ни в какую. Какие доказательства есть по этму утверждению, это описано в документации? потверждается тестами?
28 Defender aka LINN
 
20.11.13
08:40
(27) Вот и я о том же ж. А ты много доказательств требовал перед тем, как уверовать в бред? А с меня теперь требуешь.
Да, подтверждается, да, описано (ВНЕЗАПНО, да?)
29 MiniMuk
 
20.11.13
08:45
(28) Не требую, просто если писал - то может быть под рукой. Уверовал когда сравнил работу с фшитым отбором и без него. Про построитель на первом этапе запроса не подумал. Почитаю про постоитель
30 MiniMuk
 
20.11.13
08:57
Ах, ну да, всем учавствующим, спасибо
Закон Брукера: Даже маленькая практика стоит большой теории.