Запрос = Новый Запрос("ВЫБРАТЬ
| ВЫРАЗИТЬ(&ВидЦены КАК Справочник.ВидыЦен) КАК ВидЦены,
| ВЫРАЗИТЬ(&Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ВЫРАЗИТЬ(&Характеристика КАК Справочник.ХарактеристикиНоменклатуры) КАК Характеристика,
| ВЫРАЗИТЬ(&Серия КАК Справочник.СерииНоменклатуры) КАК Серия,
| ВЫРАЗИТЬ(&Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения) КАК Упаковка
|ПОМЕСТИТЬ ТаблицаТовары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаТовары.ВидЦены КАК ВидЦены,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ВЫБОР
| КОГДА
| ВидыНоменклатуры.НастройкиКлючаЦенПоХарактеристике = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования
| КОНЕЦ КАК ХарактеристикаЦО,
| ЕСТЬNULL(ВЫБОР
| КОГДА ВидыНоменклатуры.НастройкиКлючаЦенПоСерии = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия.СерияНоменклатурыДляЦенообразования
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка)) КАК СерияЦО,
| ВЫБОР
| КОГДА ВидыНоменклатуры.НастройкиКлючаЦенПоУпаковке = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
| ТОГДА ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ КАК УпаковкаЦО
|ПОМЕСТИТЬ ТаблицаТоварыДоп
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
| ПО ВидыНоменклатуры.Ссылка = ТаблицаТовары.Номенклатура.ВидНоменклатуры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаОтбора.Номенклатура КАК Номенклатура,
| ТаблицаОтбора.ХарактеристикаЦО КАК ХарактеристикаЦО,
| ТаблицаОтбора.СерияЦО КАК СерияЦО,
| ТаблицаОтбора.УпаковкаЦО КАК УпаковкаЦО,
| &ЗначениеВидаЦенПоИсточнику КАК ВидЦены,
| МИНИМУМ(ВременнаяТаблицаВидыЦен.Приоритет) КАК Приоритет
|ПОМЕСТИТЬ ТаблицаОтбора
|ИЗ
| ТаблицаТоварыДоп КАК ТаблицаОтбора
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВложенныйЗапрос.ВидЦены КАК ВидЦены,
| МИНИМУМ(ВложенныйЗапрос.Приоритет) КАК Приоритет
| ИЗ
| &ТекстЗапросаИсточникаУсловияПродаж КАК ВложенныйЗапрос
| СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ВидЦены) КАК ВременнаяТаблицаВидыЦен
| ПО ИСТИНА
|СГРУППИРОВАТЬ ПО
| ТаблицаОтбора.Номенклатура,
| ТаблицаОтбора.ХарактеристикаЦО,
| ТаблицаОтбора.СерияЦО,
| ТаблицаОтбора.УпаковкаЦО,
| &ЗначениеВидаЦенПоИсточнику
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| ХарактеристикаЦО,
| СерияЦО,
| УпаковкаЦО,
| ВидЦены
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) * ВЫБОР
| КОГДА &Валюта <> ЦеныНоменклатурыСрезПоследних.Валюта
| ТОГДА ВЫБОР
| КОГДА ЕСТЬNULL(КурсыВалютыЦены.КурсЗнаменатель, 0) > 0
| И ЕСТЬNULL(КурсыВалютыЦены.КурсЧислитель, 0) > 0
| И ЕСТЬNULL(КурсыВалюты.КурсЗнаменатель, 0) > 0
| И ЕСТЬNULL(КурсыВалюты.КурсЧислитель, 0) > 0
| ТОГДА КурсыВалютыЦены.КурсЧислитель * КурсыВалюты.КурсЗнаменатель / (КурсыВалюты.КурсЧислитель *
| КурсыВалютыЦены.КурсЗнаменатель)
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ 1
| КОНЕЦ КАК Цена,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.ХарактеристикаЦО КАК ХарактеристикаЦО,
| ЦеныНоменклатурыСрезПоследних.СерияЦО КАК СерияЦО,
| ЦеныНоменклатурыСрезПоследних.УпаковкаЦО КАК УпаковкаЦО,
| ТаблицаОтбора.Приоритет КАК Приоритет
|ПОМЕСТИТЬ ТаблицаРезультата
|ИЗ
| РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), (Номенклатура, ХарактеристикаЦО, СерияЦО,
| УпаковкаЦО, ВидЦены) В
| (ВЫБРАТЬ
| Т.Номенклатура,
| Т.ХарактеристикаЦО,
| Т.СерияЦО,
| Т.УпаковкаЦО,
| Т.ВидЦены
| ИЗ
| ТаблицаОтбора КАК Т)) КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(&Дата, БазоваяВалюта = &БазоваяВалюта) КАК
| КурсыВалютыЦены
| ПО ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютыЦены.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта
| И БазоваяВалюта = &БазоваяВалюта) КАК КурсыВалюты
| ПО ИСТИНА
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОтбора КАК ТаблицаОтбора
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ТаблицаОтбора.Номенклатура
| И ЦеныНоменклатурыСрезПоследних.ХарактеристикаЦО = ТаблицаОтбора.ХарактеристикаЦО
| И ЦеныНоменклатурыСрезПоследних.СерияЦО = ТаблицаОтбора.СерияЦО
| И ЦеныНоменклатурыСрезПоследних.УпаковкаЦО = ТаблицаОтбора.УпаковкаЦО
| И ЦеныНоменклатурыСрезПоследних.ВидЦены = ТаблицаОтбора.ВидЦены
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| ХарактеристикаЦО,
| СерияЦО,
| УпаковкаЦО,
| ВидЦены
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаРезультата.ВидЦены КАК ВидЦены,
| ТаблицаРезультата.Цена КАК Цена
|ИЗ
| (ВЫБРАТЬ
| ТаблицаРезультата.Номенклатура КАК Номенклатура,
| ТаблицаРезультата.ХарактеристикаЦО КАК ХарактеристикаЦО,
| ТаблицаРезультата.СерияЦО КАК СерияЦО,
| ТаблицаРезультата.УпаковкаЦО КАК УпаковкаЦО,
| МИНИМУМ(ТаблицаРезультата.Приоритет) КАК Приоритет
| ИЗ
| ТаблицаРезультата КАК ТаблицаРезультата
| СГРУППИРОВАТЬ ПО
| ТаблицаРезультата.Номенклатура,
| ТаблицаРезультата.ХарактеристикаЦО,
| ТаблицаРезультата.СерияЦО,
| ТаблицаРезультата.УпаковкаЦО) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРезультата КАК ТаблицаРезультата
| ПО ВложенныйЗапрос.Номенклатура = ТаблицаРезультата.Номенклатура
| И ВложенныйЗапрос.ХарактеристикаЦО = ТаблицаРезультата.ХарактеристикаЦО
| И ВложенныйЗапрос.СерияЦО = ТаблицаРезультата.СерияЦО
| И ВложенныйЗапрос.УпаковкаЦО = ТаблицаРезультата.УпаковкаЦО
| И ВложенныйЗапрос.Приоритет = ТаблицаРезультата.Приоритет");
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВЫРАЗИТЬ(&Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)",
"ВЫРАЗИТЬ(&Номенклатура КАК Справочник.Номенклатура)"));
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследних.Упаковка",
"ЦеныНоменклатурыСрезПоследних.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаИсточникаУсловияПродаж",
ТекстЗапросаИсточникаУсловияПродаж(ЗаполнятьПоСоглашению));
Если ЗаполнятьПоСоглашению Тогда
Запрос.УстановитьПараметр("Соглашение" , СтруктураПараметровДействия.Соглашение);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ЗначениеВидаЦенПоИсточнику",
"ВременнаяТаблицаВидыЦен.ВидЦены");
Иначе
Запрос.УстановитьПараметр("Партнер" , СтруктураПараметровДействия.Партнер);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ЗначениеВидаЦенПоИсточнику",
"ВЫБОР
| КОГДА ВременнаяТаблицаВидыЦен.ВидЦены = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| ТОГДА ТаблицаОтбора.ВидЦены
| ИНАЧЕ ВременнаяТаблицаВидыЦен.ВидЦены
| КОНЕЦ");
КонецЕсли;
Запрос.УстановитьПараметр("Дата" , СтруктураПараметровДействия.Дата);
Запрос.УстановитьПараметр("Номенклатура" , ТекущаяСтрока.Номенклатура);
Запрос.УстановитьПараметр("Характеристика" , ТекущаяСтрока.Характеристика);
Если СтруктураДействий.Свойство("ЗаполнитьУсловияПродаж") Тогда
Если Не ТекущаяСтрока.Свойство("Серия")
Или ТипЗнч(ТекущаяСтрока.Серия) <> Тип("Справочникссылка.СерииНоменклатуры") Тогда
Запрос.УстановитьПараметр("Серия" , Справочники.СерииНоменклатуры.ПустаяСсылка());
Иначе
Запрос.УстановитьПараметр("Серия" , ТекущаяСтрока.Серия);
КонецЕсли;
Запрос.УстановитьПараметр("Упаковка" , ТекущаяСтрока.Упаковка);
Иначе
Запрос.УстановитьПараметр("Серия" , Справочники.СерииНоменклатуры.ПустаяСсылка());
Запрос.УстановитьПараметр("Упаковка" , Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
КонецЕсли;
Запрос.УстановитьПараметр("Валюта" , СтруктураПараметровДействия.Валюта);
Запрос.УстановитьПараметр("БазоваяВалюта", ЗначениеНастроекПовтИсп.БазоваяВалютаПоУмолчанию());
ВидЦеныДляЗаполнения = Неопределено;
Если ТекущаяСтрока.Свойство("ВидЦены", ВидЦеныДляЗаполнения) И ВидЦеныДляЗаполнения <> Неопределено Тогда
Запрос.УстановитьПараметр("ВидЦены" , ВидЦеныДляЗаполнения);
Иначе
Запрос.УстановитьПараметр("ВидЦены" , Справочники.ВидыЦен.ПустаяСсылка());
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ТекущаяСтрока.Цена = Окр(Выборка.Цена, 2);
Если ТекущаяСтрока.Свойство("ВидЦены") Тогда
Если ЗначениеЗаполнено(Выборка.ВидЦены) Тогда
ТекущаяСтрока.ВидЦены = Выборка.ВидЦены;
Иначе
ТекущаяСтрока.ВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
Иначе
ТекущаяСтрока.Цена = 0;
Если ЗаполнятьПоСоглашению И ТекущаяСтрока.Свойство("ВидЦены") Тогда
ТекущаяСтрока.ВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
Я белый, не надменный. Я приятный в общении... Да? Несомненно. Поэтому я не стану спрашивать, кто здесь индексирует таблицу (две!), состоящую из одной строки. Не потому, что хороший. Потому, что я умный и знаю - кто.