Имя: Пароль:
1C
1С v8
Объединение запросов или запрос с условием
,
0 ya1snik
 
12.12.15
18:45
На форме есть два флажка с выбором типа документа. В случае если выбран какой-то тип документа или оба типа, происходит их выборка и действия над ними. Но возникла необходимость добавить еще несколько типов документов. Приходится делать отдельно запрос для каждого варианта выбора -  для док 1, для док 2, для док 3, для док 1 и 2, для док 2 и 3 и т.д. Подскажите пожалуйста, каким образом можно это реализовать проще? Можно ли создать текст запроса отдельно для каждого документа и в случае множественного выбора документов объединять запросы?
1 Nuobu
 
12.12.15
19:35
(0) А что в запросах указываешь, выбираешь?
2 Лефмихалыч
 
12.12.15
21:23
(0) версия платформы какая?
3 ya1snik
 
12.12.15
21:59
8.1 УТ 10.3

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

        
        Пока Выборка.Следующий() Цикл
            Док = Выборка.Ссылка.ПолучитьОбъект();
                Док.УстановитьПометкуУдаления(Истина);
        КонецЦикла;
        
    Иначе
        Сообщить("ВЫБЕРИТЕ ТИП ДОКУМЕНТА!!!");
    КонецЕсли;
4 Мэс33
 
12.12.15
22:07
Запрос - по сути текст.
Поэтому формируй текст запроса на лету, не зашивая в него типы документов.

Запрос.Текст = "ВЫБРАТЬ
            |"+ВидДокументаТекст+" КАК ВидДокумента,
            |"+ВидДокумента+".Ссылка КАК Ссылка
            |ИЗ

и так далее.
5 Necessitudo
 
12.12.15
23:02
(4) Гори в аду и гугли "СхемаЗапроса"
6 ya1snik
 
13.12.15
01:57
(4) Спасибо за помощь, все ок.
7 b_ru
 
13.12.15
02:38
(5) Сам гори. Объектную модель для работы с реляционными запросами придумали лузера. Единственно зачем она нужна - это как раз для работы с нереляционными данными. Не тот случай.
8 Мэс33
 
13.12.15
09:15
(5) я не крутой 1сник, можно узнать подробнее, что ты имел ввиду?
9 Мэс33
 
13.12.15
09:25
(5) погуглил, да уж.
В данном случае применение схемы запроса не оправдано.
Так что сами горите в аду.
10 MishaD
 
13.12.15
09:43
(5) у человека 8.1, а схема запроса появилась в 8.3.5.
11 Мэс33
 
13.12.15
09:43
(10) тем более.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший