Имя: Пароль:
1C
1С v8
Вопрос по запросу
0 Rounder
 
07.02.13
11:59
Нужно в отчете показать движения денежных средств, причем отобразить и те статьи, по которым движения не было.

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ДвиженияДенежныхСредствОбороты.ПриходРасход,
   ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаУпрОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаУпрОборот * -1
   КОНЕЦ КАК СуммаУпрОборот,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения.Подразделение,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения.ВалютаДокумента,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаОборот * -1
   КОНЕЦ КАК СуммаОборот,
   ДвиженияДенежныхСредствОбороты.Контрагент,
   СтатьиДвиженияДенежныхСредств.Ссылка КАК СтатьяИзСпр,
   ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения
ИЗ
   Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДвиженияДенежныхСредствОбороты
       ПО (ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств = СтатьиДвиженияДенежныхСредств.Ссылка)

Все работает как нужно, но ровно до тех пор пока пользователь не накладывает отбор - например по подразделения в документе движения. После этого отображаются уже лишь те статьи, по которым были движения с учетом отбора.
Пользовательский отбор накладывается уже на результат исходного запроса?
Как правильно обойти эту ситуацию и в результате получить список всех статей и движения по отобранным подразделениям?
1 Нуф-Нуф
 
07.02.13
12:00
1. выполнить запрос к виртуально таблице оборотов
2. поместить во временную таблицу
3. выполнить соединение статей и временной таблицы
2 Rounder
 
07.02.13
12:02
(1) Забыл упомянуть что отчет на СКД. Это что-нибудь меняет в (1).
3 Rounder
 
07.02.13
12:03
в конце (2) знак вопроса.
4 Kashemir
 
07.02.13
12:05
(2) Опиши явно места накладывания отборов через {}, в частности в твоем случае можно через параметры виртульной таблицы
5 Kashemir
 
07.02.13
12:07
Примерно так

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ДвиженияДенежныхСредствОбороты.ПриходРасход КАК ПриходРасход,
   ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаУпрОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаУпрОборот * -1
   КОНЕЦ КАК СуммаУпрОборот,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения.Подразделение КАК ДокументДвиженияПодразделение,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения.ВалютаДокумента КАК ДокументДвиженияВалютаДокумента,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаОборот * -1
   КОНЕЦ КАК СуммаОборот,
   ДвиженияДенежныхСредствОбороты.Контрагент КАК Контрагент,
   СтатьиДвиженияДенежныхСредств.Ссылка КАК СтатьяИзСпр,
   ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения КАК ДокументДвижения
{ВЫБРАТЬ
   ПриходРасход.*,
   СтатьяДвиженияДенежныхСредств.*,
   СуммаУпрОборот,
   ДокументДвиженияПодразделение.*,
   ДокументДвиженияВалютаДокумента.*,
   СуммаОборот,
   Контрагент.*,
   СтатьяИзСпр.*,
   ДокументПланированияПлатежа.*,
   ДокументДвижения.*}
ИЗ
   Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияДенежныхСредств.Обороты(, , , {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (ВидДенежныхСредств).* КАК ВидДенежныхСредств, (БанковскийСчетКасса).* КАК БанковскийСчетКасса, (ДокументПланированияПлатежа).* КАК ДокументПланированияПлатежа, (ДокументРасчетовСКонтрагентом).* КАК ДокументРасчетовСКонтрагентом, (ПриходРасход).* КАК ПриходРасход, (Проект).* КАК Проект, (Сделка).* КАК Сделка, (СтатьяДвиженияДенежныхСредств).* КАК СтатьяДвиженияДенежныхСредствРегистра}) КАК ДвиженияДенежныхСредствОбороты
       ПО (ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств = СтатьиДвиженияДенежныхСредств.Ссылка)
{ГДЕ
   СтатьиДвиженияДенежныхСредств.Ссылка.* КАК СтатьиДвиженияДенежныхСредствСправочника}


и сними галочку "Автозаполнение" у набора
6 Fragster
 
гуру
07.02.13
12:08
два набора данных, один со статьями, другой - с оборотами.
7 Rounder
 
07.02.13
12:09
Спасибо. Все попробую.
8 Нуф-Нуф
 
07.02.13
12:11
(2) не меняет
9 Rounder
 
07.02.13
12:30
ни (5) ни (6) не помогло - ну или руки кривые у меня
10 Fragster
 
гуру
07.02.13
12:30
(9) про руки верно, вестимо
11 Fragster
 
гуру
07.02.13
12:31
а вообще - дело в том, что левое соединение у тебя превращается во внутреннее. Условие в СКД давай "в группе ИЛИ статья такая-то или не заполнена"
12 Kashemir
 
07.02.13
12:33
(9) Руки ясно дело. Специально тебе 2 поля условий вывел "СтатьяДвиженияДенежныхСредствРегистра" отбрасывает только записи регистра, второе по факту порежет считай всю таблицу "СтатьиДвиженияДенежныхСредствСправочника"
13 Rounder
 
07.02.13
12:34
Буды копать дальше значит.
14 Rounder
 
07.02.13
12:34
Буду
15 Kashemir
 
07.02.13
12:36
(13) Возьми стандартную консоль отчетов и посмотри как в зависимости от настроек меняется результирующий запрос, может че-нить поймешь  о {}
16 Rounder
 
07.02.13
16:46
(15) Я понял что-нить о {}. Но я не могу в {} описать все возможные варианты отбора. Пользователь может отобрать по чему хочет (например у ДокументаДвижения кучища реквизитов), и как только он выбирает для отбора поле не описанное в {} сразу получаю "обрезанный" список статей, т.е. отбор накладывается снова на весь запрос.

Также попробовал и (1) в таком варианте как там написано плюс еще две временные таблицы и левое соединение с ними - все одно результат не понимаю. Вот результирующий запрос при установке отбора:

<query>ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &amp;Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаУпрОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаУпрОборот * -1
   КОНЕЦ КАК СуммаУпрОборот,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения.ВалютаДокумента КАК ДокументДвиженияВалютаДокумента,
   ВЫБОР
       КОГДА ДвиженияДенежныхСредствОбороты.ПриходРасход = &amp;Пр
           ТОГДА ДвиженияДенежныхСредствОбороты.СуммаОборот
       ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаОборот * -1
   КОНЕЦ КАК СуммаОборот,
   ДвиженияДенежныхСредствОбороты.ДокументДвижения КАК ДокументДвижения
ПОМЕСТИТЬ Движения
ИЗ
   РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&amp;П, &amp;П2, , ДокументДвижения.Подразделение = &amp;П3) КАК ДвиженияДенежныхСредствОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   СтатьиДвиженияДенежныхСредств.Ссылка КАК СтатьяИзСпр
ПОМЕСТИТЬ Статьи
ИЗ
   Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Движения.СуммаУпрОборот КАК СуммаУпрОборот,
   Движения.ДокументДвиженияВалютаДокумента КАК ДокументДвиженияВалютаДокумента,
   Движения.СуммаОборот КАК СуммаОборот,
   Статьи.СтатьяИзСпр КАК СтатьяИзСпр,
   ПРЕДСТАВЛЕНИЕССЫЛКИ(Движения.ДокументДвиженияВалютаДокумента) КАК ДокументДвиженияВалютаДокументаПредставление,
   Движения.ДокументДвиженияВалютаДокумента.Наименование КАК ДокументДвиженияВалютаДокументаНаименование,
   ПРЕДСТАВЛЕНИЕССЫЛКИ(Статьи.СтатьяИзСпр) КАК СтатьяИзСпрПредставление,
   Статьи.СтатьяИзСпр.Код КАК СтатьяИзСпрКод,
   Статьи.СтатьяИзСпр.ЭтоГруппа КАК СтатьяИзСпрЭтоГруппа
ИЗ
   Статьи КАК Статьи
       ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
       ПО Статьи.СтатьяИзСпр = Движения.СтатьяДвиженияДенежныхСредств
ГДЕ
   Движения.ДокументДвижения.Подразделение = &amp;П3</query>

Как сделать чтобы отбор установленный на поле конкретной временной таблицы затем не устанавливался и на результирующий запрос. В нашем случае дважды установлено условие Движения.ДокументДвижения.Подразделение = &amp;П3
17 Rounder
 
07.02.13
17:30
Актуально
Независимо от того, куда вы едете — это в гору и против ветра!