Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод результата запроса через условие другого запроса  (Прочитано 2510 раз)
0 Пользователей и 1 Гость смотрят эту тему.
jonik_joker
Участник

ru
Offline Offline

« : 16-10-2013 07:49 » 

Всем добрый день. Посоветуйте как быть: есть запрос из которого впоследствии делается 2 выборки, по результатам каждой выборки заполняется табличный документ. В 1-й выборке соединение документа и регистра накоплений, во 2-м - ТЧ этого документа и другого регистра накоплений. Смысл отчета: если в результате выполнения 1-го запроса во 2-й выборке не окажется необходимых мне параметров( нет записей в регистре накоплений ), то выполнить 2-й запрос,где эти параметры есть и соответственно соединить с данными из 1-й выборки.

Привожу код (немного длинноват):

Код:
Запрос=Новый Запрос;
    Запрос.УстановитьПараметр("Клиент",Клиент);
    Запрос.УстановитьПараметр("Грузополучатель",Грузополучатель);
    Запрос.Параметры.Вставить("Инвойс",Инвойс);
    Запрос.Параметры.Вставить("Заявка",Заявка);
    Запрос.Параметры.Вставить("ДатаНачала",НачалоДня(ДатаНачала));
    Запрос.Параметры.Вставить("ДатаКонца",КонецДня(ДатаКонца));
   
   
    Запрос.Текст="ВЫБРАТЬ
                 |    ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход КАК СуммаИнвойс,
                 |    ОборотыДенежныхСредствОстаткиИОбороты.Инвойс,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка,
                 |    ОборотыДенежныхСредствОстаткиИОбороты.Инвойс.Номер КАК НомерИнвойс,
                 |    ОборотыДенежныхСредствОстаткиИОбороты.Инвойс.Дата КАК ДатаИнвойс,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомерЗаказаНаПроизводство КАК НомерЗаявка,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата КАК ДатаЗаявка,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.СоставИтогСтоимость КАК СуммаЗаявка,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Валюта,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты КАК ВариантОплаты,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.Процент,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.СДаты КАК СДаты,
                 |    ЗаявкаНаПоставкуУсловиеОплаты.ВТечение,
                 |    ОборотыДенежныхСредствОстаткиИОбороты.Период
                 |ИЗ
                 |    Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты
                 |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты
                 |        ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка
                 |ГДЕ
                 |    (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка)
                 |            ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент)
                 |    И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка)
                 |            ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель)
                 |    И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
                 |    И (&Заявка = ЗНАЧЕНИЕ(Документ.ЗаявкаНаПоставку.ПустаяСсылка)
                 |            ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = &Заявка)
                 |    И (&Инвойс = ЗНАЧЕНИЕ(Документ.ПрохождениеТаможни.ПустаяСсылка)
                 |            ИЛИ ОборотыДенежныхСредствОстаткиИОбороты.Инвойс = &Инвойс)
                 |ИТОГИ ПО
                 |    Заявка";   
   
    РезультатЗапроса=Запрос.Выполнить();
    ДокументДанных=Новый ТабличныйДокумент;
   
    ДатаНачалаФормат=Формат(ДатаНачала,"ДФ=dd.MM.yyyy");
    ДатаКонцаФормат=Формат(ДатаКонца,"ДФ=dd.MM.yyyy");
       
    Макет=Отчеты.Отчет1.ПолучитьМакет("Макет1");
    ОбластьШапкаЗаявки=Макет.ПолучитьОбласть("ШапкаЗаявки");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
    ОбластьИтог=Макет.ПолучитьОбласть("Итог");
    ОбластьСтрЗаявки=Макет.ПолучитьОбласть("ШапкаЗаявки");
    ОбластьШапкаОплаты=Макет.ПолучитьОбласть("ШапкаОплаты");
    ОбластьШапкаОтчета=Макет.ПолучитьОбласть("ШапкаОтчета");
    ОбластьШапкаКонтрагент=Макет.ПолучитьОбласть("ШапкаКонтрагент");
       
    ОбластьШапкаОтчета.Параметры.ДатаНачала=ДатаНачалаФормат;
    ОбластьШапкаОтчета.Параметры.ДатаКонца=ДатаКонцаФормат;
    ДокументДанных.Вывести(ОбластьШапкаОтчета);
   
    ВыборкаПоЗаявке=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                                 
    Пока ВыборкаПоЗаявке.Следующий() Цикл
       
        ОбластьЗаголовок.Параметры.Валюта=ВыборкаПоЗаявке.Валюта;   
        ОбластьШапкаЗаявки.Параметры.Заявка=ВыборкаПоЗаявке.Заявка;
        ОбластьШапкаКонтрагент.Параметры.Клиент=ВыборкаПоЗаявке.Клиент;
        ОбластьШапкаКонтрагент.Параметры.Грузополучатель=ВыборкаПоЗаявке.Грузополучатель;
        ОбластьШапкаОтчета.Параметры.ДатаНачала=ДатаНачалаФормат;
        ОбластьШапкаОтчета.Параметры.ДатаКонца=ДатаКонцаФормат;
        ДокументДанных.Вывести(ОбластьШапкаКонтрагент);
        ДокументДанных.Вывести(ОбластьШапкаЗаявки);
        ДокументДанных.Вывести(ОбластьЗаголовок);   
                   
         ВыборкаПоИнвойсу=ВыборкаПоЗаявке.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                 
         Пока ВыборкаПоИнвойсу.Следующий() Цикл
             
             ДатаИнвойс=ВыборкаПоИнвойсу.ДатаИнвойс;
             ТекЗаявка=ВыборкаПоИнвойсу.Заявка;
                     
                  Если ДатаИнвойс=Null Тогда
                                                 
                        Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомерЗаказаНаПроизводство КАК НомерЗаявка,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата КАК ДатаЗаявка,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.СоставИтогСтоимость КАК СуммаЗаявка,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Валюта,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты КАК ВариантОплаты,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Процент,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.СДаты КАК СДаты,
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.ВТечение,
                                             |    ПрохождениеТаможенногоОформления.Период,
                                             |    ПрохождениеТаможенногоОформления.Регистратор КАК Инвойс,
                                             |    ПрохождениеТаможенногоОформления.Регистратор.Номер КАК НомерИнвойс,
                                             |    ПрохождениеТаможенногоОформления.Регистратор.Дата КАК ДатаИнвойс,
                                             |    ПрохождениеТаможенногоОформления.Регистратор.СтоимостьИтог КАК СуммаИнвойс
                                             |ИЗ
                                             |    Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты
                                             |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПрохождениеТаможенногоОформления КАК ПрохождениеТаможенногоОформления
                                             |        ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ПрохождениеТаможенногоОформления.Заявка
                                             |ГДЕ
                                             |    ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = &ТекЗаявка
                                             |ИТОГИ ПО
                                             |    Заявка";
                                             
                    ЗапросТаможня=Новый Запрос;
                    ЗапросТаможня.УстановитьПараметр("ТекЗаявка",ТекЗаявка);
                    ЗапросТаможня.Текст=Текст;
                    ТекРезультат=ЗапросТаможня.Выполнить().Выгрузить();
                 
                         
                     КонецЕсли;
                     
              ДатаЗаявкаФормат=Формат(ВыборкаПоИнвойсу.ДатаЗаявка,"ДФ=dd.MM.yyyy");
              ДатаИнвойсФормат=Формат(ВыборкаПоИнвойсу.ДатаИнвойс,"ДФ=dd.MM.yyyy");
              ОбластьИтог.Параметры.СуммаЗаявка=ВыборкаПоИнвойсу.СуммаЗаявка;
             
              ДниОплаты=ВыборкаПоИнвойсу.ВТечение;
              СрокОплаты=ДатаИнвойс+ДниОплаты*24*60*60;
              СрокОплатыФормат=Формат(СрокОплаты,"ДФ=dd.MM.yyyy");
              ОбластьСтрока.Параметры.СрокОплаты=СрокОплатыФормат;
                     
              Период=ВыборкаПоИнвойсу.Период;
              ПериодФормат=Формат(Период,"ДФ=dd.MM.yyyy");
                     
              Если Период=Неопределено И ТекущаяДата()>СрокОплаты Тогда
                  Долг="Да";
              Иначе
                  Долг="Нет";
              КонецЕсли;
                     
              ОбластьСтрока.Параметры.Долг=Долг;
              ОбластьСтрока.Параметры.ДатаОплаты=ПериодФормат;
              ОбластьСтрока.Параметры.НомерЗаявка=ВыборкаПоИнвойсу.НомерЗаявка;
              ОбластьСтрока.Параметры.ДатаЗаявка=ДатаЗаявкаФормат;                     
              ОбластьСтрока.Параметры.НомерИнвойс=ВыборкаПоИнвойсу.НомерИнвойс;
              ОбластьСтрока.Параметры.ДатаИнвойс=ДатаИнвойсФормат;
              ОбластьСтрока.Параметры.СуммаИнвойс=ВыборкаПоИнвойсу.СуммаИнвойс;
              ОбластьСтрока.Параметры.НомерЗаказ=ВыборкаПоИнвойсу.НомерЗаказ;
              ОбластьСтрока.Параметры.ВариантОплаты=ВыборкаПоИнвойсу.ВариантОплаты;
              ОбластьСтрока.Параметры.Процент=ВыборкаПоИнвойсу.Процент;
              ОбластьСтрока.Параметры.СДаты=ВыборкаПоИнвойсу.СДаты;
              ОбластьСтрока.Параметры.ВТечение=ВыборкаПоИнвойсу.ВТечение;
              ДокументДанных.Вывести(ОбластьСтрока);
                             
     КонецЦикла;
        ДокументДанных.Вывести(ОбластьИтог); 
   КонецЦикла;             
   Возврат ДокументДанных;

Соответственно, условие

Код:
ДатаИнвойс=ВыборкаПоИнвойсу.ДатаИнвойс;
             ТекЗаявка=ВыборкаПоИнвойсу.Заявка;
                     
                  Если ДатаИнвойс=Null Тогда

мои потуги реализовать данную задачу. Буду признателен за любые советы.
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-10-2013 09:16 » 

Ну и где ты потом используешь полученный "ТекРезультат"?

Если глянуть типовые - то подобные задачи там решаются использование пакета запросов, чтобы в цикле повторно запросы не выполнять.
У тебя структура результата (поля) одинаковы для 1го и 2го случаев?
Записан
jonik_joker
Участник

ru
Offline Offline

« Ответ #2 : 16-10-2013 11:15 » 

все, спасибо, сам разобрался.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines