Имя: Пароль:
1C
1С v8
СКД отбор по полю вирт.таблицы (а потом группировка в запросе)
0 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
            ИНАЧЕ ЕдиницыАЕ.Коэффициент
        КОНЕЦ) КАК КолвоАЕпоСТроке}
;

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

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

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

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

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

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

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

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

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

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