| 
    
            
         
         | 
    
    
  | 
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) все верно, у одной партии один производитель.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |