Имя: Пароль:
1C
1С v8
Запрос СКД с параметрами
0 lite777
 
24.05.22
14:27
Здравствуйте, как реализовать отчет в СКД где сначало надо выполнить запрос1 , и затем при переборе результатов запроса1  подставить результат в запрос2
Задача вывести все заказы покупателя , где нет связанных чеков.    Реализовал через обычный отчет-можно ли через СКД ?

        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПокупателя1.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ЗаказПокупателя КАК ЗаказПокупателя1
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеДоставкиЗаказаПокупателя.СрезПоследних КАК СостояниеДоставкиЗаказаПокупателяСрезПоследних
        |        ПО ЗаказПокупателя1.Ссылка = СостояниеДоставкиЗаказаПокупателяСрезПоследних.ЗаказПокупателя
        |ГДЕ
        |    ЗаказПокупателя1.Дата МЕЖДУ &Дата1 И &Дата2
        |    И ЗаказПокупателя1.Проведен
        |    И ЗаказПокупателя1.Магазин = &Магазин
        |    И СостояниеДоставкиЗаказаПокупателяСрезПоследних.Состояние = &Состояние";
    
    Запрос.УстановитьПараметр("Дата1",Отчет.Период.ДатаНачала);
    Запрос.УстановитьПараметр("Дата2",отчет.Период.ДатаОкончания );
    Запрос.УстановитьПараметр("Магазин",отчет.Магазин) ;
    Запрос.УстановитьПараметр("Состояние",Перечисления.СостоянияДоставкиЗаказаПокупателя.ГотовКОтгрузке) ;

    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
                ОбластьДетальныхЗаписей.Параметры.РасшифровкаСсылка= ВыборкаДетальныеЗаписи.Ссылка ;
                
                Запрос2 = Новый Запрос;
                Запрос2.Текст =
                    "ВЫБРАТЬ
                    |    СвязанныеДокументы.Ссылка КАК Ссылка
                    |ИЗ
                    |    КритерийОтбора.СвязанныеДокументы(&Док) КАК СвязанныеДокументы
                    |ГДЕ
                    |    СвязанныеДокументы.Ссылка.Проведен";
                
                Запрос2.УстановитьПараметр("Док", ВыборкаДетальныеЗаписи.Ссылка);
                
                Выб = Запрос2.Выполнить().Выбрать();

                    Признак=0 ;
                Пока Выб.Следующий() Цикл
    
                    Если ТИПЗНЧ(Выб.Ссылка)=ТИП("ДокументСсылка.ЧекККМ") Тогда
                         Признак=1 ;
                    КонецЕсли     
                КонецЦикла;
                Если Признак=0 Тогда
                     ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
                КонецЕсли ;    
                    
    КонецЦикла;
1 lite777
 
24.05.22
14:30
Запрос2.УстановитьПараметр("Док", ВыборкаДетальныеЗаписи.Ссылка) -Результат первого запроса
2 Kassern
 
24.05.22
14:31
(0) "Реализовал через обычный отчет-можно ли через СКД" - если коротко, то можно. Просто соединяете две таблички, информацию по чекам прикручиваете к основной таблице, а дальше можно сравнением ЕстьNull(ДанныеПравойТаблички,"")=""
3 Kassern
 
24.05.22
14:32
Если вам нужны именно документ чекККМ, то нет смыслка к критериям отбора обращаться. Скорее всего в документе будет ссылка на заказ покупателя. Можно попробовать напрямую с этой таблицей соединиться
4 lite777
 
24.05.22
14:36
(2) Два набора данных и связи НАБОРОВ ДАННЫХ  ?
5 Kassern
 
24.05.22
14:42
(4) зачем такие сложности, можно в одном пакете сделать типа:
ВЫБРАТЬ
    Заказы.Ссылка КАК Ссылка
ИЗ
    Документ.ЗаказКлиента КАК Заказы
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО РеализацияТоваровУслуг.ЗаказКлиента = Заказы.Ссылка
ГДЕ
    ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка, "") = ""

Выведет все заказы, у которых нет реализаций
6 lite777
 
24.05.22
14:51
(5)  Это вычитание таб1 из таб2 ,но если в документа чек допустим нет поля заказПокупателя. и нужно использовать -

,                     |ИЗ
                    |    КритерийОтбора.СвязанныеДокументы(&Док) КАК СвязанныеДокументы
7 Kassern
 
24.05.22
14:52
(6) ну тогда можно предварительно отобрать критерии по типу документа и во временную таблицу запихать. Далее уже ваш заказ соединить с этой временной таблицей и в ГДЕ подобное условие
8 Kassern
 
24.05.22
14:57
(6) я если честно давно не ковырял эту виртуальную таблицу. Нужно проверить, можно ли параметром указать данные другой таблицы
9 Kassern
 
24.05.22
15:02
(6) а если у документа чека нет заказа покупателя, то скорее всего и нет связи с ним. Документы же не чудом попадают в критерии отбора, а все же по какому-то реквизиту связываются. Вот по нему и сделать напрямую запрос. Смысл вам от все виртуальной таблицы, если вам нужен всего 1 документ?
10 lite777
 
24.05.22
15:10
(9) У чека возможно есть поле заказпокупателя , но надо понять как работать в подобных ситуациях когда есть запрос1 и при переборе запроса 1 подставлять его в параметр запроса 2
11 Kassern
 
24.05.22
15:21
(10) а в большинстве случаев это и не нужно. Обычно все соединения таблиц происходят на вкладке Связи. В параметрах конечно можно попробовать указать вложенное "Выбрать..." но это не общий случай
12 Kassern
 
24.05.22
15:22
(10) в вашем случае нужно найти реквизит для связи таблиц и по нему сделать простенький запрос как в (5) и будет вам счастье