Имя: Пароль:
1C
1С v8
Построитель запроса (условие ИЛИ в отборе)
0 psy_sln
 
07.10.15
23:57
Всем доброй ночи)
Делаю запрос к регистру бухгалтерии, и нужно наложить условие на субконто, типа СубконтоДт1 = МойПараметр ИЛИ СубконтоДт2 = МойПараметр

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

        мОтбор = Построитель.Отбор.Добавить("СубконтоДт1");
        мОтбор.Использование = Истина;
        мОтбор.ВидСравнения = ВидСравнения.Равно;
        мОтбор.Значение = СтатьяЗатрат;
        
        
        мОтбор = Построитель.Отбор.Добавить("СубконтоДт2");
        мОтбор.Использование = Истина;
        мОтбор.ВидСравнения = ВидСравнения.Равно;
        мОтбор.Значение = СтатьяЗатрат;

В итоге текст запроса получается СубконтоДт1 = Парам И СубконтоДт2 = Парам
Как сделать чтобы было ИЛИ ???
1 Фокусник
 
08.10.15
00:04
(0)
1. Сделать условие в тексте запроса

Или

2. Сделать поле в запросе вида:

Выбор
Когда СубконтоДт1 ссылка Справочник.СтатьиЗатрат Тогда СубконтоДт1
Когда СубконтоДт2 ссылка Справочник.СтатьиЗатрат Тогда СубконтоДт2
Конец КАК СубконтоСтатьяЗатрат
И накладывать условие на СубконтоСтатьяЗатрат
2 GenV
 
08.10.15
00:05
(0) Используй СКД - там есть группы условий
3 psy_sln
 
08.10.15
00:13
(2) С скд программно не работал, а этот запрос для печатной формы делаю

(1) А можно по подробней про условие в тексте запроса, у меня там не только статьи затрат, еще будет пару типов
4 Фокусник
 
08.10.15
00:16
(3) если условия не меняемые программно, то проще их в параметрах виртуальной таблицы "РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт" сделать в тексте запроса. И не зачем здесь ппстроитель запроса и/или СКД...
5 Chameleon1980
 
08.10.15
00:28
скд чудо еще то
можешь функции даже вызывать, как в клюшках
6 GANR
 
08.10.15
00:49
У виртуальной таблицы есть параметр в который можно передать последовательность субконто.

   Построитель = Новый ПостроительЗапроса;
   Построитель.Текст =
   "ВЫБРАТЬ
   |    ХозрасчетныйОборотыДтКт.СчетДт,
   |    ХозрасчетныйОборотыДтКт.СчетКт,
   |    ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаОборот
   |ИЗ
   |    РегистрБухгалтерии._ДемоОсновной.ОборотыДтКт({(&НачалоПериода)}, {(&КонецПериода)}, , {(СчетДт)}, {(&НаборСубконтоДт)}, {(СчетКт)}, , {(СубконтоДт1), (СубконтоДт2)}) КАК ХозрасчетныйОборотыДтКт
   |ИТОГИ
   |    СУММА(СуммаОборот)
   |ПО
   |    ОБЩИЕ";
  
   Построитель.Параметры.Вставить("НаборСубконтоДт", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПланыВидовХарактеристик._ДемоВидыСубконто.Договоры));
7 GANR
 
08.10.15
00:50
(6) и тогда ИЛИ не понадобится))
Программист всегда исправляет последнюю ошибку.