Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

СКД отбор по полю вирт.таблицы (а потом группировка в запросе)

СКД отбор по полю вирт.таблицы (а потом группировка в запросе)
Я
   EuVod
 
09.10.18 - 11:54
Всем привет!
Попробую сформулировать ))
есть простая СКД (цель-  по простым условиям, задаваемым пользователем в виде отборов) определить подпадающие под всякие хитрые условия условия акций накладные).

у СКД есть запрос
ВТ по табличной части документа реализации - чтобы можно было отбирать по составу товаров или например чтобы в строке с товаром было ровно 2шт - это ключевой момент. В компоновке указываю поля отбора. (например КолвоШТПоСтроке).

Далее идет сворачивание - группировка этой ВТ, чтобы можно было накладывать отборы на аггрегированные показатели (нап. общий литраж или общее колво, или коло разных товарных позиций).

И вот тут засада - если накладываю отбор вида
Товар в списке Т1, Т2, Т3
И КолвоВсего =6   (т.е. что всего по товарам из этого списка в накладной набралось ровно 6 штук)
то все ок

Товар в списке Т1, Т2, Т3
И КолвоШтПоСтроке =2
тоже все ок (т.е. отобрались только строки в которых товар в этом списке и в строке ТЧ количество=2)

А вот одновременно наложить отбор
Товар в списке Т1, Т2, Т3
И КолвоВсего =6
И КолвоШтПоСтроке =2

ругается, чо поле КолвоШтПоСтроке не обнаружено - не могу даже запрос посмотреть, т.к. ругается на
КомпоновщикМакета.Выполнить(СхемаСКДУсловияПредоставления, НастройкиСКДУсловияПредоставления, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

Видимо я недопонимаю что-о в механизме СКД..
т.е. я то надеялся что тупо в запрос в первой ВТ в секцию ГДЕ поставить Количество=2, а далее уж пойдет группировка (на уровне запроса ЕЩЕ!) и уже в следующую ВТ попадут только отобранные эти записи и на них в свою очередь наложится отбор. По номенклатуре то он фильтрует не жалуется.
Если кто дочитал спасибо ) - а за подсказку тем более!

текст запроса СКД
(тут много букв)

ВЫБРАТЬ
    РеализацияТовары.Ссылка КАК Реализация,
    РеализацияТовары.Номенклатура КАК Номенклатура,
    РеализацияТовары.Сумма КАК Сумма,
    РеализацияТовары.Сумма - РеализацияТовары.СуммаНДС КАК СуммаБезНДС,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент КАК КоличествоБЕ,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент / ВЫБОР
        КОГДА ЕСТЬNULL(ЕдиницыАЕ.Коэффициент, 0) = 0
            ТОГДА 1
        ИНАЧЕ ЕдиницыАЕ.Коэффициент
    КОНЕЦ КАК КоличествоАЕ,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент * ЕдиницыБЕ.Литраж КАК КоличествоЛ,
    ЕдиницыБЕ.Литраж КАК Литраж,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент * ЕдиницыБЕ.ВесНетто КАК КоличествоКГ,
    ЕдиницыБЕ.ВесНетто КАК Граммаж,
    РеализацияТовары.Количество * РеализацияТовары.Коэффициент / ВЫБОР
        КОГДА ЕСТЬNULL(ЕдиницыБлоки.Коэффициент, 0) = 0
            ТОГДА 1
        ИНАЧЕ ЕдиницыБлоки.Коэффициент
    КОНЕЦ КАК КоличествоБлоков
ПОМЕСТИТЬ ВТ_Товары
{ВЫБРАТЬ
    Реализация.*,
    Номенклатура.*,
    Сумма,
    Литраж,
    КоличествоБЕ КАК КолвоШТПоСтроке}
ИЗ
    Документ.Реализация.Товары КАК РеализацияТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиНоменклатуры КАК ЕдиницыБЕ
        ПО РеализацияТовары.Номенклатура = ЕдиницыБЕ.Владелец
            И (ЕдиницыБЕ.Коэффициент = 1)
            И РеализацияТовары.Номенклатура.ЕдиницаИзмерения = ЕдиницыБЕ.ЕдиницаИзмерения
            И (НЕ ЕдиницыБЕ.ПометкаУдаления)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиНоменклатуры КАК ЕдиницыАЕ
        ПО РеализацияТовары.Номенклатура = ЕдиницыАЕ.Владелец
            И РеализацияТовары.Номенклатура.АльтернативнаяЕдиницаИзмерения = ЕдиницыАЕ.ЕдиницаИзмерения
            И (НЕ ЕдиницыАЕ.ПометкаУдаления)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиНоменклатуры КАК ЕдиницыБлоки
        ПО РеализацияТовары.Номенклатура = ЕдиницыБлоки.Владелец
            И (ЕдиницыБлоки.ЕдиницаИзмерения.Код = "бл")
            И (НЕ ЕдиницыБлоки.ПометкаУдаления)
{ГДЕ
    РеализацияТовары.Номенклатура.*,
    РеализацияТовары.Ссылка.* КАК Реализация,
    ЕдиницыБЕ.Литраж,
    (РеализацияТовары.Количество * РеализацияТовары.Коэффициент) КАК КолвоШТПоСтроке,
    ЕдиницыБЕ.ВесНетто КАК Граммаж,
    (РеализацияТовары.Количество * РеализацияТовары.Коэффициент * ЕдиницыБЕ.Литраж) КАК КолвоЛПоСтроке,
    (РеализацияТовары.Количество * РеализацияТовары.Коэффициент / ВЫБОР
            КОГДА ЕСТЬNULL(ЕдиницыАЕ.Коэффициент, 0) = 0
                ТОГДА 1
            ИНАЧЕ ЕдиницыАЕ.Коэффициент
        КОНЕЦ) КАК КолвоАЕпоСТроке}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Товары.Номенклатура) КАК КоличествоСКЮ,
    СУММА(ВТ_Товары.КоличествоБЕ) КАК КоличествоБЕ_сумма,
    СУММА(ВТ_Товары.КоличествоАЕ) КАК КоличествоАЕ_сумма,
    СУММА(ВТ_Товары.КоличествоЛ) КАК КоличествоЛ_сумма,
    МИНИМУМ(ВТ_Товары.КоличествоБЕ) КАК КоличествоБЕ_мин,
    МИНИМУМ(ВТ_Товары.КоличествоАЕ) КАК КоличествоАЕ_мин,
    МИНИМУМ(ВТ_Товары.КоличествоЛ) КАК КоличествоЛ_мин,
    СУММА(ВТ_Товары.Сумма) КАК Сумма,
    СУММА(ВТ_Товары.СуммаБезНДС) КАК СуммаБезНДС,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Товары.Литраж) КАК КолвоРазныхЛитражей,
    ВТ_Товары.Реализация КАК Реализация,
    СУММА(ВТ_Товары.КоличествоКГ) КАК КоличествоКГ_сумма,
    МИНИМУМ(ВТ_Товары.КоличествоБлоков) КАК КоличествоБлоков_мин,
    СУММА(ВТ_Товары.КоличествоБлоков) КАК КоличествоБлоков_всего
ПОМЕСТИТЬ ПредвГруппировка
{ВЫБРАТЬ
    КоличествоСКЮ.*,
    КоличествоБЕ_сумма,
    КоличествоАЕ_сумма,
    КоличествоЛ_сумма,
    КоличествоБЕ_мин,
    КоличествоАЕ_мин,
    КоличествоЛ_мин,
    Сумма,
    СуммаБезНДС}
ИЗ
    ВТ_Товары КАК ВТ_Товары

СГРУППИРОВАТЬ ПО
    ВТ_Товары.Реализация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПредвГруппировка.Реализация КАК Реализация,
    ПредвГруппировка.КоличествоСКЮ КАК КоличествоСКЮ,
    ПредвГруппировка.КоличествоБЕ_сумма КАК КоличествоБЕ_сумма,
    ПредвГруппировка.КоличествоАЕ_сумма КАК КоличествоАЕ_сумма,
    ПредвГруппировка.КоличествоЛ_сумма КАК КоличествоЛ_сумма,
    ПредвГруппировка.КоличествоБЕ_мин КАК КоличествоБЕ_мин,
    ПредвГруппировка.КоличествоАЕ_мин КАК КоличествоАЕ_мин,
    ПредвГруппировка.КоличествоЛ_мин КАК КоличествоЛ_мин,
    ПредвГруппировка.Сумма КАК Сумма,
    ПредвГруппировка.СуммаБезНДС КАК СуммаБезНДС,
    ПредвГруппировка.КолвоРазныхЛитражей КАК КолвоРазныхЛитражей,
    ПредвГруппировка.КоличествоКГ_сумма КАК КоличествоКГ_сумма,
    ПредвГруппировка.КоличествоБлоков_мин КАК КоличествоБлоков_мин,
    ПредвГруппировка.КоличествоБлоков_всего КАК КоличествоБлоков_всего
{ВЫБРАТЬ
    Реализация.*,
    КоличествоСКЮ,
    КоличествоБЕ_сумма,
    КоличествоАЕ_сумма,
    КоличествоЛ_сумма,
    КоличествоБЕ_мин,
    КоличествоАЕ_мин,
    КоличествоЛ_мин,
    Сумма,
    СуммаБезНДС,
    КоличествоКГ_сумма}
ИЗ
    ПредвГруппировка КАК ПредвГруппировка
{ГДЕ
    ПредвГруппировка.КоличествоСКЮ,
    ПредвГруппировка.КоличествоБЕ_сумма,
    ПредвГруппировка.КоличествоАЕ_сумма,
    ПредвГруппировка.КоличествоЛ_сумма,
    ПредвГруппировка.КоличествоБЕ_мин,
    ПредвГруппировка.КоличествоАЕ_мин,
    ПредвГруппировка.КоличествоЛ_мин,
    ПредвГруппировка.Сумма,
    ПредвГруппировка.СуммаБезНДС,
    ПредвГруппировка.КоличествоКГ_сумма,
    ПредвГруппировка.КоличествоБлоков_мин,
    ПредвГруппировка.КоличествоБлоков_всего}
 
 
   EuVod
 
1 - 09.10.18 - 12:14
хотя должен уточнить.. почти разорался ))
если просто наложить так условия то сработает.. а если сделать группы условий типа:

группа ИЛИ
   Группа И
      Всего = 6
      ПоСтроке = 2
   Группы И
      Всего = 12
      ПоСтроке = 4

вот тогда не срабоатет.. и пожалуй тут ничего не сделаешь, т.к. один запрос так просто под этот отбор не сделаешь
   Cyberhawk
 
2 - 09.10.18 - 12:17
Уж очень много букв
   Sasha_H
 
3 - 09.10.18 - 12:22
(2) ты опять здесь флудер?
   Sasha_H
 
4 - 09.10.18 - 12:24
А почему группируете запросом? можно ведь ресурсами получать СКД само все сгруппирует и просуммирует.
   Sasha_H
 
5 - 09.10.18 - 12:31
Попробуйте ВТ_Товары соединить с ПредвГруппировка поидее тогда долно заработать. Насколько я правильно понимаю надо получать итог всего и штук в строке.

У вас должна остаться основная таблица ВТ_товары и все к ней присоединять (только по уму чтобы не двоило)
   EuVod
 
6 - 09.10.18 - 12:34
ресурсы не так гибко - мне надо чтобы пользователь настроил только отборы.. в настройках нет группировок - только детальные записи содним полем - собственно накладная, т.к. результат этой СКД потом передается дальше в общую функцию рассчета акций. т.е. все должно унифицировано.. вобщем в (2)  я понял причину - видимо это невозможно.. (для отборов с группами сложными )
   Sasha_H
 
7 - 09.10.18 - 12:37
(6) если отчет линейный это ж еще не значит, что скд не сгруппирует. Просто в таком случае надо все поля бахать в группировку вручную и все. Но согласен все зависит от задачи конечному программисту видней как лучше чем со стороны.

попробуйте (5)
   EuVod
 
8 - 09.10.18 - 12:59
(5) т.е. оставаить все товары, и для каждого товара повторить все аггрегатные значения. И в компоновке оставиь отборы толькопо последней результирующей таблице.
кстати да, наверное должно сработать. (заодно тогда наверное получаться отборы сложные типа Товар в с писке 1 и тото или Товар в списке 2 и этото)

Спасибо )  буду думать
   Cyberhawk
 
9 - 09.10.18 - 13:25
(3) ?
   Sasha_H
 
10 - 09.10.18 - 14:06
(9) ты хоть в какой-то из веток дал дельный ответ или так воняешь как обычно?
 
 Рекламное место пустует
   Sasha_H
 
11 - 09.10.18 - 14:10
(8) Вы использовали условия ресурса в первой таблице ВТ_товары потому как компоновщик так сделали {}

Тоесть, что получается. Первый запрос уже отбивает строго по этому количеству, а запрос с группировками уже не будет иметь ИТОГ в целом
   Sasha_H
 
12 - 09.10.18 - 14:11
Откажитесь от условий {} на этом этапе и наложите уже условия на конечную таблицу.
   EuVod
 
13 - 09.10.18 - 14:25
(12) да, это конечно я понял )
поубирал все условия из компоновки по 1й таблице, + придется изменить настройки - структура, т.е. не детальные записи, а  сделать группировку по накладной (иначе она помножится на количество строк ТЧ) - но в целом все, кажется, в схему вписывается вроде.

В принципе получилось сделать очень гибкую схему автоматических акций (полагаю погибче хоть и попроще чем в типовой УТ) + с учетом затрат и компнсаций от производителей. Но условия бывают такие замороченные, что прямо теряешься как их формализовать.
   Cyberhawk
 
14 - 09.10.18 - 14:33
(10) Конечно, Я все свои посты (положим, за исключением некоторой части постов вопросительного характера) считаю весьма полезными. Далеко ходить не надо - вот посмотри хотя бы в этой ветке. И попрошу без инсинуаций.
   Sasha_H
 
15 - 09.10.18 - 14:43
(13) может и не помножится в ресурсах надо группировки расчетные делать
   EuVod
 
16 - 09.10.18 - 15:02
(13) а мне ресурсы не нужны. мне на выходе нужна таблица из 2х колонок ( Накладная, Акция ) потому что способ предоставления акций в других СКД сидит их  потом рассчитывать отдельно надо. (по тем накладным, которые удовлетворили условиям).
   EuVod
 
17 - 09.10.18 - 15:02
(16) было к (15)   ))
   EuVod
 
18 - 09.10.18 - 15:21
только отбор по номенклатуре на группировочную таблицу тоже надо наложить иначе неверно..
   EuVod
 
19 - 09.10.18 - 15:28
но тогда нельзя будет группировать условия.. для одного списка номенклатуры одни показатели или для другого - другой ))

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует