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

v7: Группировка в запросе

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

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

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

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

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

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

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

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

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

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