Имя: Пароль:
1C
1С v8
v8: 1С как передать условие виртуальной таблицы через параметр
0 mnail1979
 
07.05.12
08:54
СКД. Отчет берет данные только с продажи.обороты.
На форме стоит radiobutton. 2 положения - бесплатно, по цене.

Мне нужно в случае "бесплатно" в условии продажи.обороты написать стоимостьоборот=0, в противном случае стоимостьоборот<>0.

Вижу 2 выхода:
1. Менять программно запрос в СКД.
2. Передавать условие в виртуальную таблицу через параметр.

Хотел бы вторым способом. Но никак не могу передать.
Подскажите.
1 Лефмихалыч
 
07.05.12
09:06
(0) на ресурсы отборы в парметрах виртуальной таблицы накладывать нельзя. Ну, то есть технически-то льзя, только получишь ты в данном случае не то, чего хочешь. Отбирай по значениям ресурсов в отборах, а не в параметрах
2 mnail1979
 
07.05.12
09:11
не понял.
Вот пример
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.Контрагент
ИЗ
   РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , &Условие) КАК ПродажиОбороты.

Как сюда передать параметр "условие" к примеру в консоли, или в СКД
3 mnail1979
 
07.05.12
09:15
мне нужно в условии написать "Номенклатура.Название="ЛимонадДюшес и стоимостьоборот>0"
4 mnail1979
 
07.05.12
09:16
или что, тогда не использовать ВТ, а прямое обращение к регистрнакопления.продажи?
5 Defender aka LINN
 
07.05.12
09:26
(2) Это называется "Отбор"
(1) Только в РС, в РН такое не прокатит
6 mnail1979
 
07.05.12
09:47
(5) и что, как мне получить эти данные все же
7 mnail1979
 
07.05.12
09:58
вижу в этом случае только такой выход


ВЫБРАТЬ
   Продажи.Номенклатура,
   Продажи.Контрагент,
   СУММА(Продажи.Стоимость)
ИЗ
   РегистрНакопления.Продажи КАК Продажи
ГДЕ
продажи.стоимость<>0
   сгруппировать по
       Продажи.Номенклатура,
   Продажи.Контрагент
8 mnail1979
 
07.05.12
10:08
теперь каким образом можно через параметр передать условие?
9 dangerouscoder
 
07.05.12
10:25
10 Alex_MA
 
07.05.12
10:26
в условии ГДЕ использовать конструкцию ВЫБОР
11 mnail1979
 
07.05.12
10:27
я по этой документации и иду. Только пока там подходящего не могу найти. Можете ткнуть носом?
12 Alex_MA
 
07.05.12
10:27
ГДЕ
ВЫБОР КОГДА &Бесплатно ТОГДА СуммаОборот = 0
ИНАЧЕ &НеБесплатно ТОГДА СуммаОборот <> 0
КОНЕЦ
13 mnail1979
 
07.05.12
10:30
но правильно ли я понял, что через обороты я это не сделаю. Только напрямую чере регистр накопления
14 Alex_MA
 
07.05.12
10:33
(13)надо через виртуальную таблицу делать
15 mnail1979
 
07.05.12
10:36
через виртуальную таблицу не получается обратиться к стоимостьоборот
16 dangerouscoder
 
07.05.12
10:37
(15) обверни ее во вложенный запрос
17 mnail1979
 
07.05.12
10:40
(16) вот что у меня пока что получилось
ВЫБРАТЬ
   Продажи.Номенклатура,
   Продажи.Контрагент,
   СУММА(Продажи.Количество) КАК Количество
ИЗ
   РегистрНакопления.Продажи КАК Продажи
ГДЕ
   Продажи.Номенклатура = &Номенклатура
   И ВЫБОР
           КОГДА &цена = 0
               ТОГДА Продажи.Стоимость = 0
           КОГДА &цена = 1
               ТОГДА Продажи.Стоимость <> 0
       КОНЕЦ
   И Продажи.Период МЕЖДУ &НачПериода И &КонПериода

СГРУППИРОВАТЬ ПО
   Продажи.Номенклатура,
   Продажи.Контрагент
18 mnail1979
 
07.05.12
10:41
теперь в параметр "цена" если передам 0 - будет считать нулевые цены, если 1 - ненулевые цены, а как сделать последнее иначе, т.е. если не 0 и не 1 - тогда чтоб все считал
19 mnail1979
 
07.05.12
10:42
изначально задание такое - получить количество проданного товара по нулевой цене, по ненулевой цене, или же общее
20 mnail1979
 
07.05.12
10:47
(15) так пойдет, как в (19), или все же оборачивать. И что значит "оборачивать". Можете переделать запрос так как нужно?
21 mnail1979
 
07.05.12
10:56
есть тут кто?
22 mnail1979
 
07.05.12
10:59
нашел прикольный выход из (18)
ВЫБРАТЬ
   Продажи.Номенклатура,
   Продажи.Контрагент,
   СУММА(Продажи.Количество) КАК Количество
ИЗ
   РегистрНакопления.Продажи КАК Продажи
ГДЕ
   Продажи.Номенклатура = &Номенклатура
   И ВЫБОР
           КОГДА &цена = 0
               ТОГДА Продажи.Стоимость = 0
                       И (Продажи.Период МЕЖДУ &НачПериода И &КонПериода)
           КОГДА &цена = 1
               ТОГДА Продажи.Стоимость <> 0
                       И (Продажи.Период МЕЖДУ &НачПериода И &КонПериода)
           ИНАЧЕ Продажи.Период МЕЖДУ &НачПериода И &КонПериода
       КОНЕЦ

СГРУППИРОВАТЬ ПО
   Продажи.Номенклатура,
   Продажи.Контрагент
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший