Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Вывод результата запроса через условие другого запроса          
jonik_joker Подменю пользователя
сообщение 16.10.13, 9:46
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 46
Из: Санкт-Петербург
Спасибо сказали: 0 раз
Рейтинг: 0

Всем добрый день. Посоветуйте как быть: есть запрос из которого впоследствии делается 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 Тогда


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

sava1 Подменю пользователя
сообщение 16.10.13, 10:56
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2751
Из: Проскуров
Спасибо сказали: 707 раз
Рейтинг: 686.5

Запрос в цикле - дурной тон (или преступление?).
РегистрНакопления.ПрохождениеТаможенногоОформления цеплять в одном запросе.
Условия на ЛевоеСоединение указывать в условии соединения.

ВОпрос - зачем в условиях пустые значения?

jonik_joker Подменю пользователя
сообщение 16.10.13, 13:16
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 46
Из: Санкт-Петербург
Спасибо сказали: 0 раз
Рейтинг: 0

все, спасибо, сам разобрался.

Vofka Подменю пользователя
сообщение 16.10.13, 13:42
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Цитата(jonik_joker @ 16.10.13, 14:16) *
все, спасибо, сам разобрался.

Ну и?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 14.06.25, 23:15
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!