

Процедура ЗаполнитьПостроительОтчетаПоЦенамНоменклатуры(ВключатьНезаполненные, ЗаполнятьТолькоТекстЗапроса) Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ //РАЗЛИЧНЫЕ
|Тип.Ссылка КАК ТипЦен,
|Ном.Ссылка КАК Номенклатура,
|Ном.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
|Ном.ЦеноваяГруппа КАК ЦеноваяГруппа,
|Ном.ЭтоГруппа КАК ЭтоГруппа,
|ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикаНоменклатуры,
|Ном.Родитель КАК Группа,
|ВЫБОР
| КОГДА Ном.НаименованиеПолное ПОДОБНО &ПустаяСтрока
| ТОГДА Ном.Наименование
| ИНАЧЕ Ном.НаименованиеПолное КОНЕЦ КАК ПолноеНаименование,
|ВЫБОР
| КОГДА &ДопКолонка = &Артикул
| ТОГДА Ном.Артикул
| КОГДА &ДопКолонка = &Код
| ТОГДА Ном.Код
| ИНАЧЕ
| NULL
| КОНЕЦ КАК Артикул,
|Рег.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|Рег.Валюта,
|Рег.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
|Рег.СпособРасчетаЦены КАК СпособРасчетаЦены,
|Тип.ВалютаЦены,
|КурсыВалют.Курс КАК КурсВалюты,
|КурсыВалют.Кратность КАК КратностьВалюты,
|КурсыВалютЦены.Курс КАК КурсВалютыЦены,
|КурсыВалютЦены.Кратность КАК КратностьВалютыЦены,
|ВЫБОР
| КОГДА Тип.Рассчитывается ТОГДА
| Рег.Цена * (100 + Тип.ПроцентСкидкиНаценки)/100
| ИНАЧЕ
| Рег.Цена
| КОНЕЦ КАК Цена
|
|{ВЫБРАТЬ
| Тип.Ссылка.* КАК ТипЦен,
| Ном.Ссылка.* КАК Номенклатура,
| Ном.Родитель.* КАК Группа
| //СВОЙСТВА
|}
|
|ИЗ
| Справочник.Номенклатура КАК Ном
| //СОЕДИНЕНИЯ
|
|СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| Характеристики.Ссылка КАК Ссылка,
| Характеристики.Владелец КАК Владелец
| ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК Характеристики
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Ссылка,
| Номенклатура.Ссылка КАК Владелец
| ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
| ) КАК ХарактеристикиНоменклатуры
|ПО
| ХарактеристикиНоменклатуры.Владелец = Ном.Ссылка
|
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ТипыЦенНоменклатуры КАК Тип
|ПО
| ИСТИНА
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦенСкидок, ) КАК Рег
|ПО
| (Тип.Ссылка = Рег.ТипЦен)
| И
| Ном.Ссылка = Рег.Номенклатура
| И
| Рег.ХарактеристикаНоменклатуры = ХарактеристикиНоменклатуры.Ссылка
|
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаЦенСкидок) КАК КурсыВалют
|ПО
| КурсыВалют.Валюта = Рег.Валюта
|
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаЦенСкидок) КАК КурсыВалютЦены
|ПО
| КурсыВалютЦены.Валюта = Тип.ВалютаЦены
|
|ГДЕ
| НЕ Ном.Набор
|";
Если Не ВключатьНезаполненные Тогда
ТекстЗапроса = ТекстЗапроса + "
| И
| Ном.Ссылка В (Выбрать Номенклатура ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦенСкидок,))
| И
| ХарактеристикиНоменклатуры.Ссылка В (Выбрать ХарактеристикаНоменклатуры ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦенСкидок,))
|";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| Тип.Ссылка.* КАК ТипЦен,
| Ном.Ссылка.* КАК Номенклатура,
| НоменклатурнаяГруппа.Ссылка.* КАК НоменклатурнаяГруппа,
| ЦеноваяГруппа.Ссылка.* КАК ЦеноваяГруппа,
| Ном.Родитель.* КАК Группа
| //СВОЙСТВА
| //КАТЕГОРИИ
|}
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| ХарактеристикаНоменклатуры,
| ТипЦен
| //СВОЙСТВА
|
|ИТОГИ ПО
| Номенклатура ТОЛЬКО ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ
|";
ПостроительОтчета.Текст = ТекстЗапроса;
Если Не ЗаполнятьТолькоТекстЗапроса Тогда
// Соответствие имен полей в запросе и их представлений в отчете
СтруктураПредставлениеПолей = Новый Структура(
" ТипЦен,
| Номенклатура,
| НоменклатурнаяГруппа,
| ЦеноваяГруппа",
"Тип цен",
"Номенклатура",
"Номенклатурная группа",
"Ценовая группа");
УправлениеОтчетами.ЗаполнитьПредставленияПолей(СтруктураПредставлениеПолей, ПостроительОтчета);
// отборы по умолчанию
Пока ПостроительОтчета.Отбор.Количество() > 0 Цикл
ПостроительОтчета.Отбор.Удалить(0);
КонецЦикла;
МассивОтбора = Новый Массив;
Если ТипыЦенСкидок.Количество() = 0 Тогда
МассивОтбора.Добавить("ТипЦен");
Иначе
ЭлементОтбора = ПостроительОтчета.Отбор.Добавить("ТипЦен",, "Тип цен");
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбора.Значение.ЗагрузитьЗначения(ТипыЦенСкидок.ВыгрузитьКолонку("ТипЦенСкидок"));
ЭлементОтбора.Использование = Истина;
КонецЕсли;
Если мСписокНоменклатуры = Неопределено Тогда
МассивОтбора.Добавить("Номенклатура");
Иначе
ЭлементОтбора = ПостроительОтчета.Отбор.Добавить("Номенклатура",, "Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбора.Значение = мСписокНоменклатуры;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
МассивОтбора.Добавить("НоменклатурнаяГруппа");
МассивОтбора.Добавить("ЦеноваяГруппа");
УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);
ЗаполнитьОбщиеПараметрыПостроителяОтчета();
КонецЕсли;
КонецПроцедуры
Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)
Если ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.ТипыЦенНоменклатурыКонтрагентов") Тогда
Контрагент = ПостроительОтчета.Отбор.Контрагент.Значение;
Если ЗначениеЗаполнено(Контрагент) Тогда
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.ТипыЦенНоменклатурыКонтрагентов.ПолучитьФормуВыбора();
Если ТипЗнч(Контрагент) = Тип("СписокЗначений") Тогда
ФормаВыбора.Отбор.Владелец.ВидСравнения = ВидСравнения.ВСписке;
Иначе
ФормаВыбора.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
КонецЕсли;
ФормаВыбора.Отбор.Владелец.Значение = Контрагент;
ФормаВыбора.Отбор.Владелец.Использование = Истина;
Элемент.Значение = ФормаВыбора.ОткрытьМодально();
Если ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.ТипыЦенНоменклатурыКонтрагентов")
И ЗначениеЗаполнено(Элемент.Значение)
И НЕ ЗначениеЗаполнено(Элемент.Значение.ТипЦеныНоменклатуры) Тогда
ОбщегоНазначения.СообщитьОбОшибке("У выбранного типа цен контрагентов """ + Элемент.Значение
+ """ не заполнен реквизит ""Тип цены номенклатуры""! Заполнение невозможно.");
Элемент.Значение = Неопределено;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект,
| ВЫБОР
| КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Сезон""
| ТОГДА ЗначенияСвойствОбъектов.Значение
| ИНАЧЕ """"
| КОНЕЦ КАК Сезон
|ПОМЕСТИТЬ ВТСезон
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство = &СвойствоСезон
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект,
| ВЫБОР
| КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Год""
| ТОГДА ЗначенияСвойствОбъектов.Значение
| ИНАЧЕ """"
| КОНЕЦ КАК Год
|ПОМЕСТИТЬ ВТГод
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство = &СвойствоГод
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект,
| ВЫБОР
| КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Производитель""
| ТОГДА ЗначенияСвойствОбъектов.Значение
| ИНАЧЕ """"
| КОНЕЦ КАК Производитель
|ПОМЕСТИТЬ ВТПроизводитель
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство = &СвойствоПроизводитель
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул,
| ВТСезон.Сезон,
| ВТГод.Год,
| ВТПроизводитель.Производитель
|ПОМЕСТИТЬ ВТНоменклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСезон КАК ВТСезон
| ПО Номенклатура.Ссылка = ВТСезон.Объект
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГод КАК ВТГод
| ПО Номенклатура.Ссылка = ВТГод.Объект
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПроизводитель КАК ВТПроизводитель
| ПО Номенклатура.Ссылка = ВТПроизводитель.Объект
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
| Номенклатура.Ссылка,
| Номенклатура.Наименование,
| Номенклатура.Артикул,
| ВТСезон.Сезон,
| ВТГод.Год,
| ВТПроизводитель.Производитель
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНоменклатура.Ссылка,
| ВТНоменклатура.Сезон,
| ВТНоменклатура.Год,
| ВТНоменклатура.Производитель КАК Производитель
|ИЗ
| ВТНоменклатура КАК ВТНоменклатура
|
|УПОРЯДОЧИТЬ ПО
| Производитель,
| ВТНоменклатура.Наименование";
//Параметры запроса
Запрос.УстановитьПараметр("СвойствоГод",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("2296389c-4045-11e5-828e-f0def1170684")));// Свойства объектов (Год)
Запрос.УстановитьПараметр("СвойствоПроизводитель",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("c3b4cd79-52fb-11e5-8298-f0def1170684")));// Свойства объектов (Производитель)
Запрос.УстановитьПараметр("СвойствоСезон",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("22963899-4045-11e5-828e-f0def1170684")));// Свойства объектов (Сезон)
Результат = Запрос.Выполнить();
МассивОтбора.Добавить("СвойствоСезон",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("22963899-4045-11e5-828e-f0def1170684")));// Свойства объектов (Сезон)