Имя: Пароль:
1C
1C 7.7
v7: Группировка в запросе
,
0 IvD
 
29.03.19
21:24
Добрый день, коллеги!
Помогите с запросом
Запрос = СоздатьОбъект("Запрос");
    ТекстПеременных =      
    "//{{ЗАПРОС(Сформировать)      
    |Период с ДатаНачала по ДатаКонца;
    |Фирма = Регистр.ПартииНаличие.Фирма;
    |Производитель = Регистр.ПартииНаличие.Партия.Производитель;
    |Товар = Регистр.ПартииНаличие.Номенклатура;
    |Код = Регистр.ПартииНаличие.Номенклатура.Код;
    |Контрагент = Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент;
    |Количество = Регистр.ПартииНаличие.Количество;
    |Поставщик = Регистр.ПартииНаличие.Партия.Поставщик;
    |";
        
    ТекстГруппировок = "      
    |Группировка Контрагент Без Групп;
    |";  
    ТекстФункций = "                  
    |Функция Сумма =   Расход(Количество);
    |";
    ТекстУсловий = "
    |Условие(Фирма = ВыбФирма);
    |Условие(Производитель = ВыбПроизводитель);
    |Условие(Поставщик = ВыбПоставщик);
    |"//}}ЗАПРОС                      
    ;                      

    ТекстЗапроса = ТекстПеременных+РазделительСтрок+ТекстФункций+РазделительСтрок+ТекстГруппировок+РазделительСтрок+ТекстУсловий;

    Запрос = СоздатьОбъект("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

В результат попадают не все записи регистра. Что я делаю не так?!
1 Злопчинский
 
29.03.19
22:23
Видимо, делаешь неверные умозаключения о том. какие записи должны попадать. а компу на твои умозаключения плювать. он выдает то что написано скорее всего.
2 GreyK
 
30.03.19
10:27
(0) Тебе нужны только партии по документам "Реализация"?
3 IvD
 
30.03.19
10:41
(2) Номенклатура и производитель из партий с отбором по поставщику
4 daviels
 
30.03.19
11:23
|Контрагент = Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент;

Вот это тогда зачем?

у тебя в партии есть все что нужно: Поставщик, Производитель. В регистре есть Номенклатура...
Переменная "Контрагент", а соответственно и группировка по ней лишняя получается... ты группируешь по переменной которая заполняется только из документа "Реализация".

А задачу описал как: Номенклатура и производитель из партий с отбором по поставщику - тут контрагента нет...
5 Злопчинский
 
30.03.19
11:25
потому что расход не только по реализациям.
убери контрагента из запроса и для начала сгруппируй например по партиям
6 daviels
 
30.03.19
11:53
(5) - абсолютно верный совет
7 Franchiser
 
гуру
30.03.19
12:23
Тебе нужен coalesce.
По моему в 7.7 можно через запятую написать значение поля, ну или в конструкторе выборе контрагента из 2х документов.
P.s. в SQL может этот запрос неправильно интерпретироваться из-за 3х точек
8 daviels
 
30.03.19
12:50
(7) - это на прямых запросах только работает (1CPP)... прописать это в тексте запроса 7-шного не получится...
он не понимает таких конструкций.... т.е. написать типа:

ТекстЗапроса = "
Контрагент = coalesce(Документ.РасходнаяНакладная.Контрагент,Документ.РеализацияОтгруженнойПродукции.Контрагент);
"; - НЕ ВЫЙДЕТ
9 daviels
 
30.03.19
12:51
а если нужен контрагент из нескольких документов тогда

ТекстЗапроса = "
Контрагент = Документ.РасходнаяНакладная.Контрагент
            ,Документ.РеализацияОтгруженнойПродукции.Контрагент;
";
10 daviels
 
30.03.19
12:52
coalesce - возвращает первое значение не NULL
11 IvD
 
30.03.19
15:01
Спасибо, уже понятней стало. Только вот так ТекстЗапроса = "
Контрагент = Документ.РасходнаяНакладная.Контрагент
            ,Документ.РеализацияОтгруженнойПродукции.Контрагент; контрагент не заполняется. Через  Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент его видно... Я опять что -то не так делаю?
12 Злопчинский
 
30.03.19
15:02
не надо ничего с контрагентами делать пока.
добейся что без контрагента возвращает правильный итог.
13 Злопчинский
 
30.03.19
15:05
и мне очень сомнительно что у разных партий одного и того же товара разный производитель.
возможно имеет смысл переписать запрос на Регистр.Продажи
14 Злопчинский
 
30.03.19
15:06
и.. это.. ПартииНаличие - основное назначение для исчисления "внутренних" сумм/движений. тянуть оттуда внешнего контрагента мне не кажется хорошей идеей
15 IvD
 
30.03.19
15:14
(13) все верно, у одной партии один производитель.