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