Имя: Пароль:
1C
 
Как в проверить в запросе возможность группировки?
0 Shur1cIT
 
26.12.16
14:03
Полазил по методам ничего прямо подходящего не нашел.
Списание по партиям, соответственно есть товар который в разрезе  номенклатуры храниться, номенклатуры и серии, номенклатуры и характеристики, номенклатуры характеристики и серии ну и прочие возможные варианты.

Списание по партиям делаю класическим способом ставлю группировку по номенклатуре, серии и характеристики, но если учет по характеристики не ведеться то естественно выходим из цикла не добравшись до момента проведения, пытался найти проверки на возможность группировки не удалось, в табличной части могут быть товары которые и по сериям ведуться и без, тоже самое с характеристиками тоесть текст запроса динамически менять не могу (ну если только запрос в цикле не делать), ниже кусок кода сам запрос не привожу он нормальный...




    Запрос.УстановитьПараметр("Выборганизация",Организация);
    Если РежимПроведения = РежимПроведенияДокумента.Оперативный  Тогда
        ДатаОстатков = Неопределено;
    Иначе
        ДатаОстатков = Новый  Граница(МоментВремени(),ВидГраницы.Включая);
    КонецЕсли;
    Запрос.УстановитьПараметр("Выбпериод",ДатаОстатков);
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Результат = Запрос.Выполнить();
    ВыборкаПоНоменклатуре = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,);
    Пока    ВыборкаПоНоменклатуре.Следующий()      Цикл
        ВыборкаПоСериям = ВыборкаПоНоменклатуре.Выбрать();
        Пока ВыборкаПоСериям.Следующий() Цикл
            ВыборкаПоХарактеристикам = ВыборкаПоСериям.Выбрать();
            Пока ВыборкаПоХарактеристикам.Следующий() Цикл
                ВыборкаПопартиям = ВыборкаПоХарактеристикам.Выбрать();
                Пока ВыборкаПопартиям.Следующий() Цикл
                //Тут проводим по регистру
                КонецЦикла;
            КонецЦикла;
        конецЦикла;
    КонецЦикла;
1 Fragster
 
гуру
26.12.16
14:07
2 Fragster
 
гуру
26.12.16
14:07
>естественно выходим из цикла не добравшись до момента проведения
ЛОЖЬ
3 Fragster
 
гуру
26.12.16
14:07
это неестественно. если нет учета по характеристикам, то там будет одна строка
4 Shur1cIT
 
26.12.16
14:20
(3) Нету там одной стоки
http://s017.radikal.ru/i434/1612/d5/207d9fe8d4df.jpg
http://s020.radikal.ru/i718/1612/a7/0e0c8d662ecc.jpg

на шаге Пока ВыборкаПоХарактеристикам.Следующий() Цикл

выход из цикла

У меня только извращеный вариант есть, в запросе в условии поля поставить условие если характеристики нет использовать пустую ссылку на характеристику дабы обход по группировкам не порушился
5 Shur1cIT
 
26.12.16
14:34
фокус с пустой ссылкой не получился, не хочет он  выборку по пустой ссылке делать

ЕСТЬNULL(ТабЧасть.ХарактеристикаНоменклатуры, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ХарактеристикаНоменклатуры,
6 Fragster
 
гуру
26.12.16
14:39
если есть итоги, то есть и детальные записи.
7 Fragster
 
гуру
26.12.16
14:40
соответственно, если нет детальных записей, то нет и итогов.
8 Fragster
 
гуру
26.12.16
14:40
а значит обход выборки тут не причем
9 Shur1cIT
 
26.12.16
14:45
(7) Хорошо как мне проверить наличие итогов по характеристике?
10 Shur1cIT
 
26.12.16
14:54
(7) значение итога смогу узнать только после

Пока ВыборкаПоХарактеристикам.Следующий() Цикл

которое валиться если характеристика NULL или пустая ссылка
11 Shur1cIT
 
26.12.16
14:59
Кидаю целиком процедуру для наглядности

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