Имя: Пароль:
1C
1C 7.7
v7: Что добавить в запрос?
, ,
0 teploset
 
09.03.21
13:58
Есть рабочий вполне запрос, в котором выбираются данные по заданному контрагенту ("ВыбКонтр"). Если же ВыбКонтр это группа, то в результирующей таблице ничего не показывается. Подскажите, пожалуйста, как надо изменить запрос, чтобы выводились в таблицу ВСЕ контрагенты выбранной группы?
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ОбработкаДок)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контр = Документ.РеализацияУслуг.Контрагент, Документ.ПриходныйОрдер.Контрагент;
    |СуммаРеал = Документ.РеализацияУслуг.Сумма;
    |СуммаПрихОрд = Документ.ПриходныйОрдер.Сумма;
    |Функция СуммаРеалСумма = Сумма(СуммаРеал);
    |Функция СуммаПрихОрдСумма = Сумма(СуммаПрихОрд);
    |Группировка Контр;
    |Условие(Контр = ВыбКонтр);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры Группировка Контр без групп все ВошедшиеВЗапрос;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ОбработкаДок");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        Контраг = Запрос.ЗначениеУпорядочивания(1);
        СальдоКон = СальдоНач + Запрос.СуммаРеалСумма - Запрос.СуммаПрихОрдСумма;
        // Заполнение полей Контр
        Таб.ВывестиСекцию("Контр");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("ОбработкаДок", "");
1 Davalebor
 
09.03.21
14:04
Создать список значений, в него поместить ВыбКонтр .
Условие в запросе поменять на  |Условие(Контр в СписокКонтрагентов);
2 Builder
 
09.03.21
14:04
Дожили....
|Условие(Контр В ВыбКонтр);
3 Builder
 
09.03.21
14:06
(1) Список значений тут не нужен.
4 teploset
 
09.03.21
14:08
(2) Дружище, спасибо! Всего один символ заменил (= на В) и все заработало, совсем глаз замылился :)
5 Davalebor
 
09.03.21
14:09
(3) А если выбконтр будет все-таки элементом справочника, а не группой?
Я так понял, что выбрать могут или элемент или группу.
6 vladko
 
09.03.21
14:10
Можно красиво сделать:
//............
|Группировка Контр;
|"//}}ЗАПРОС
;
Если ВыбКонтр.ЭтоГруппа() = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие(Контр В ВыбКонтр)
|"
;
Иначе
ТекстЗапроса = ТекстЗапроса + "
|Условие(Контр = ВыбКонтр)
|"
;
КонецЕсли;
7 Builder
 
09.03.21
14:12
(5) (6)  Йо, ну откройте СП уже....
Условие В будет работать во всех случаях - группа или элемент.
8 Злопчинский
 
09.03.21
17:06
а вот если внезапно списокЗначений ВыбКонтр получится пустым - то запрос свернет всех контрагентов. в ряде случаев - это по логике неправильно.
поэтому

Если СписокКонтрагентов.РазмерСписка()=0 Тогда
   Условие(Контр = СписокКонтрагентов);
Иначе
   Условие(Контр в СписокКонтрагентов);
КонецЕсли;
9 Волшебник
 
09.03.21
18:02
на дворе стоял 2021 год...
10 Злопчинский
 
09.03.21
18:48
(9) ..а снеговик тормозит по прежнему...
11 Ёпрст
 
09.03.21
19:09
(10) у кого как..
12 Arbuz
 
10.03.21
16:26
(11) ... пуще прежнего
Закон Брукера: Даже маленькая практика стоит большой теории.