|   |   | 
| 
 | Отчет с использованием универсального отчета | ☑ | ||
|---|---|---|---|---|
| 0
    
        hawk1 26.03.18✎ 12:54 | 
        Делаю самописный отчет с использованием универсального отчета. В модуле отчета в процедуре УстановитьНачальныеНастройки прописываю
 УниверсальныйОтчет.ДобавитьОтбор("Период"); УниверсальныйОтчет.ДобавитьОтбор("ТипЦен"); УниверсальныйОтчет.ДобавитьОтбор("Склад"); УниверсальныйОтчет.ДобавитьОтбор("Номенклатура"); В модуле формы в обработчике кнопки Настройка прописываю УниверсальныйОтчет.ФормаНастройка(УниверсальныйОтчет, ЭтотОбъект, ЭтаФорма, ЭлементыФормы.ТабДок); Но форма настроек выводится пустая. Никак не могу понять в чем дело. | |||
| 1
    
        Kondarat 26.03.18✎ 12:58 | 
        (0) Что там с текстом запроса построителя?     | |||
| 2
    
        hawk1 26.03.18✎ 13:41 | 
        (1)     ТекстЗапроса =        "ВЫБРАТЬ
 | ТоварыНаСкладахОстатки.Номенклатура.Бренд КАК Бренд, | ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул, | ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК ТМЦ, | ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВЫБОР | КОГДА &МаксимальныйОстаток > 0 | ТОГДА ВЫБОР | КОГДА &УчитыватьРезерв = ИСТИНА | ТОГДА ВЫБОР | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) > &МаксимальныйОстаток | ТОГДА ЕСТЬNULL(&МаксимальныйОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток > &МаксимальныйОстаток | ТОГДА ЕСТЬNULL(&МаксимальныйОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток | КОНЕЦ | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА &УчитыватьРезерв = ИСТИНА | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток | КОНЕЦ | КОНЕЦ КАК Количество, | ТоварыНаСкладахОстатки.Номенклатура.МинОстаток КАК МинОстаток, | СерииНоменклатуры.Ссылка КАК ОсновноеСвойство, | ТоварыНаСкладахОстатки.Номенклатура.Страна КАК Страна, | ТоварыНаСкладахОстатки.Номенклатура.Производитель КАК Производитель, | ТоварыНаСкладахОстатки.Номенклатура.МинПартия КАК МинПартия, | ТоварыНаСкладахОстатки.Номенклатура.Модель КАК Модель, | ТоварыНаСкладахОстатки.Номенклатура.Кросс КАК Кросс, | ТоварыНаСкладахОстатки.Номенклатура.Упаковка КАК Упаковка, | ЦеныНоменклатурыСрезПоследних.Цена |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО ТоварыНаСкладахОстатки.СерияНоменклатуры = СерииНоменклатуры.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ) КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура |ГДЕ | ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен"; Если мНоменклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда ТекстЗапроса = ТекстЗапроса + " И ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)"; КонецЕсли; Если мСклад <> Справочники.Склады.ПустаяСсылка() Тогда ТекстЗапроса = ТекстЗапроса + " И ТоварыНаСкладахОстатки.Склад = &Склад"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " УПОРЯДОЧИТЬ ПО ТМЦ"; УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса; | |||
| 3
    
        Kondarat 26.03.18✎ 13:49 | 
        (2) А где поля, условия, итоги построителя?     | |||
| 4
    
        novichok79 26.03.18✎ 13:52 | 
        где описание полей условий в квадратных скобках?
 зачем вот это? Если мНоменклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда ТекстЗапроса = ТекстЗапроса + " И ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)"; КонецЕсли; Если мСклад <> Справочники.Склады.ПустаяСсылка() Тогда ТекстЗапроса = ТекстЗапроса + " И ТоварыНаСкладахОстатки.Склад = &Склад"; КонецЕсли; без вас построитель не поймет как скомпоновать условия? если склад и номенклатура являются измерениями, то почему не вставить условия по ним вот сюда? РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ) и сюда? РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних | |||
| 5
    
        novichok79 26.03.18✎ 13:57 | 
        (3) закладка построитель в конструкторе запросов.
 а вообще типа такого должно быть | РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, {(Номенклатура).*, (Склад).*}) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО ТоварыНаСкладахОстатки.СерияНоменклатуры = СерииНоменклатуры.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ) КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | |||
| 6
    
        novichok79 26.03.18✎ 13:58 | 
        в остальных таблицах тоже соответственно условия по измерениям занести.     | |||
| 7
    
        Михаил Козлов 26.03.18✎ 13:58 | 
        Посмотрите типовые отчеты на базе универсального. Например, ВаловаяПрибыль и АнализДоступностиТоваров.
 И сделайте по аналогии. Написанное в (2) не годится. | |||
| 8
    
        novichok79 26.03.18✎ 13:59 | 
        и еще я бы перенес запросы виртуальных таблиц регистров во временные, а то если база на постгри крутится, то могут быть тормоза.     | |||
| 9
    
        hawk1 26.03.18✎ 22:41 | 
        Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
 // Настройка общих параметров универсального отчета УправлениеОтчетами.ВосстановитьРеквизитыОтчета(ЭтотОбъект, ДополнительныеПараметры); // Содержит название отчета, которое будет выводиться в шапке. // Тип: Строка. // Пример: // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета"; УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним); // Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки. // Тип: Булево. // Значение по умолчанию: Истина. // Пример: // УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь; УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь; // Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета. // Тип: Строка. // Пример: // УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах"; // Содержит значение используемого режима ввода периода. // Тип: Число. // Возможные значения: 0 - произвольный период, 1 - на дату, 2 - неделя, 3 - декада, 4 - месяц, 5 - квартал, 6 - полугодие, 7 - год // Значение по умолчанию: 0 // Пример: УниверсальныйОтчет.мРежимВводаПериода = 1; // Содержит признак необходимости вывода отрицательных значений показателей красным цветом. // Тип: Булево. // Значение по умолчанию: Ложь. // Пример: // УниверсальныйОтчет.ОтрицательноеКрасным = Истина; УниверсальныйОтчет.ОтрицательноеКрасным = Истина; // Содержит признак необходимости вывода в отчет общих итогов. // Тип: Булево. // Значение по умолчанию: Ложь. // Пример: // УниверсальныйОтчет.ВыводитьОбщиеИтоги = Ложь; // Содержит признак необходимости вывода детальных записей в отчет. // Тип: Булево. // Значение по умолчанию: Ложь. // Пример: // УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина; // Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки. // Тип: Булево. // Значение по умолчанию: Истина. // Пример: // УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь; // Содержит признак использования свойств и категорий при заполнении настроек отчета. // Тип: Булево. // Значение по умолчанию: Ложь. // Пример: // УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина; //УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина; // Содержит признак использования простой формы настроек отчета без группировок колонок. // Тип: Булево. // Значение по умолчанию: Ложь. // Пример: // УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина; УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина; ТекстЗапроса = "ВЫБРАТЬ | ВложенныйЗапрос.Бренд, | ВложенныйЗапрос.Артикул, | ВложенныйЗапрос.ТМЦ КАК ТМЦ, | ВложенныйЗапрос.ЕдиницаИзмерения, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.МинОстаток, | ВложенныйЗапрос.ОсновноеСвойство, | ВложенныйЗапрос.СтранаПроисхождения, | ВложенныйЗапрос.Производитель, | ВложенныйЗапрос.МинПартия, | ВложенныйЗапрос.Модель, | ВложенныйЗапрос.Кросс, | ВложенныйЗапрос.Упаковка, | ВложенныйЗапрос.Цена |{ВЫБРАТЬ | Бренд.*, | Артикул, | ТМЦ.*, | ЕдиницаИзмерения.*, | Количество, | МинОстаток, | ОсновноеСвойство.*, | СтранаПроисхождения.*, | Производитель.*, | МинПартия, | Модель.*, | Кросс, | Упаковка, | Цена} |ИЗ | (ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура.Бренд КАК Бренд, | ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул, | ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК ТМЦ, | ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВЫБОР | КОГДА &МаксимальныйОстаток > 0 | ТОГДА ВЫБОР | КОГДА &УчитыватьРезерв = ИСТИНА | ТОГДА ВЫБОР | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) > &МаксимальныйОстаток | ТОГДА ЕСТЬNULL(&МаксимальныйОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток > &МаксимальныйОстаток | ТОГДА ЕСТЬNULL(&МаксимальныйОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток | КОНЕЦ | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА &УчитыватьРезерв = ИСТИНА | ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток | КОНЕЦ | КОНЕЦ КАК Количество, | ТоварыНаСкладахОстатки.Номенклатура.МинОстаток КАК МинОстаток, | СерииНоменклатуры.Ссылка КАК ОсновноеСвойство, | ТоварыНаСкладахОстатки.Номенклатура.Страна КАК СтранаПроисхождения, | ТоварыНаСкладахОстатки.Номенклатура.Производитель КАК Производитель, | ТоварыНаСкладахОстатки.Номенклатура.МинПартия КАК МинПартия, | ТоварыНаСкладахОстатки.Номенклатура.Модель КАК Модель, | ТоварыНаСкладахОстатки.Номенклатура.Кросс КАК Кросс, | ТоварыНаСкладахОстатки.Номенклатура.Упаковка КАК Упаковка, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО ТоварыНаСкладахОстатки.СерияНоменклатуры = СерииНоменклатуры.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ) КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО | ТМЦ |{УПОРЯДОЧИТЬ ПО | Бренд.*, | Артикул, | ТМЦ.*, | ЕдиницаИзмерения.*, | Количество, | МинОстаток, | ОсновноеСвойство.*, | СтранаПроисхождения.*, | Производитель.*, | МинПартия, | Модель.*, | Кросс, | Упаковка, | Цена} |{ИТОГИ ПО | Количество}"; Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ВложенныйЗапрос.ТМЦ", "ТМЦ", "ТМЦ", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура); УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ВложенныйЗапрос.ЕдиницаИзмерения", "ЕдиницаИзмерения", "Единица измерения", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура); КонецЕсли; УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса; УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Бренд", "Бренд"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Артикул", "Артикул"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ТМЦ", "ТМЦ"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЕдиницаИзмерения", "Единица измерения"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Количество", "Количество"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ОсновноеСвойство", "Основное свойство"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Страна", "Страна"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Производитель", "Производитель"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("МинПартия", "Мин партия"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Модель", "Модель"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Кросс", "Кросс"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Упаковка", "Упаковка"); УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Цена", "Цена"); УниверсальныйОтчет.ДобавитьОтбор("ТипЦен"); УниверсальныйОтчет.ДобавитьОтбор("Склад"); УниверсальныйОтчет.ДобавитьОтбор("Номенклатура"); // Установка представлений полей УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета); // Установка типов значений свойств в отборах отчета УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора(); // Заполнение начальных настроек универсального отчета УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь); КонецПроцедуры // УстановитьНачальныеНастройки() но все остается по прежнему. | |||
| 10
    
        chelentano 27.03.18✎ 07:12 | 
        (9) смотри (5)     | |||
| 11
    
        hawk1 27.03.18✎ 15:23 | 
        (10) Переписал эту часть запроса вот так
 | РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, {(Номенклатура).*, (Склад).*}) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ПО ТоварыНаСкладахОстатки.СерияНоменклатуры = СерииНоменклатуры.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, {(Номенклатура).*, (Склад).*}) КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК ВложенныйЗапрос и ничего | |||
| 12
    
        Kondarat 27.03.18✎ 15:29 | 
        (11) Обрати внимание на квадратные скобки, их размещение и наполнение
 "ВЫБРАТЬ | ТоварыВРозницеОстатки.Склад, | ТоварыВРозницеОстатки.Номенклатура, | ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток |{ВЫБРАТЬ | Склад.*, | Номенклатура.*, | КоличествоОстаток} |ИЗ | РегистрНакопления.ТоварыВРознице.Остатки(&ДатаКон, {(Номенклатура).*, (Склад).*}) КАК ТоварыВРозницеОстатки |{ГДЕ | ТоварыВРозницеОстатки.Склад.*, | ТоварыВРозницеОстатки.Номенклатура.*} |{УПОРЯДОЧИТЬ ПО | Склад.*, | Номенклатура.*} |ИТОГИ | СУММА(КоличествоОстаток) |ПО | ОБЩИЕ |{ИТОГИ ПО | Склад.*, | Номенклатура.*}" | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |