Имя: Пароль:
1C
1С v8
1С Запрос с поздзапросом
0 alexandr1
 
16.12.15
21:37
Не могу решить задачу.
В программе есть дополнительный регистр сведений с контрагентом и его товаром и товар чаще всего указан как группа.
Не могу соединить его с продажами. Нужно чтобы при выборе нескольких контрагентов были показаны продажи только тех товаров которые есть в регистре сведений.

Запрос как пример, конечно он не работает.

ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ВЫБОР
    КОГДА ПродажиОбороты.Номенклатура КАК Номенклатура В Иерархии(ВложенныйЗапрос.Номенклатура) ТОГДА ПродажиОбороты.Номенклатура
    ИНАЧЕ 0 КАК Номенклатура,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , ) КАК ПродажиОбороты,
    
    (ВЫБРАТЬ
        СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СкидкиКонтры) КАК ВложенныйЗапрос
1 sda553
 
16.12.15
21:41
А в 1С разрешается указывать условие "в иерархии" в условии соединения?
2 alexandr1
 
16.12.15
21:41
(1)
Нет, где то находил что можно как то из вложеного брать.
3 sda553
 
16.12.15
21:42
Если нет, то сколько уровней у справочника контра?
4 sda553
 
16.12.15
21:43
(3) уровне в справочнике номенклатуры, поправлюсь
5 alexandr1
 
16.12.15
21:51
(4) стандартно 2
6 RomanYS
 
16.12.15
21:54
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ,
Номенклатура В ИЕРАРХИИ
(ВЫБРАТЬ
        СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СпецТовар где СпецТовар.Контрагент В  (&СписокКонтрагентов))
) КАК ПродажиОбороты
7 alexandr1
 
16.12.15
22:18
(6) Выдает просто все продажи
8 Tateossian
 
16.12.15
22:23
(7) Значит, где-то есть корневой каталог в регистре спец товар
9 alexandr1
 
16.12.15
22:29
(8) Да вроде некоторых клиенты стали фильтроваться по товарам
10 User_Agronom
 
16.12.15
22:30
(0) ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    ВложенныйЗапрос.Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , ) КАК ПродажиОбороты
левое соединение
    
    (ВЫБРАТЬ
        СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СкидкиКонтры) КАК ВложенныйЗапрос
по ПродажиОбороты.Номенклатура = ВложенныйЗапрос.Номенклатура

где пиши свое условие
11 alexandr1
 
16.12.15
22:37
(10) Не выдет, номенклатура идет как группа товаров
12 alexandr1
 
16.12.15
22:38
(8) У большинства все равно проскакивает, даже если стоит один товар, выбирается 10 хотя в продажах больше
13 User_Agronom
 
16.12.15
22:40
ГДЕ Номенклатура В Иерархии(ВложенныйЗапрос.Номенклатура)

Так пробовал?
14 User_Agronom
 
16.12.15
22:41
левое соединение
    
    (ВЫБРАТЬ
        СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СкидкиКонтры) КАК ВложенныйЗапрос
по Номенклатура В Иерархии(ВложенныйЗапрос.Номенклатура)
15 User_Agronom
 
16.12.15
22:41
(13) Это уже поздно, чушь пишу.
16 RomanYS
 
16.12.15
22:45
(14) "В Иерархии" вроде нельзя в условии соединений.
17 Tateossian
 
16.12.15
22:45
ВЫБРАТЬ Ссылка
ПОМЕСТИТЬ ВТ
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В ИЕРАРХИИ (ВЫБРАТЬ
        СпецТовар.Номенклатура Ссылка
    ИЗ
        РегистрСведений.СпецТовар
    
    ГДЕ
        СпецТовар.Контрагент В  (&СписокКонтрагентов) );

ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ,Номенклатура В (ВЫБРАТЬ Ссылка ИЗ ВТ)) КАК ПродажиОбороты
18 RomanYS
 
16.12.15
22:47
(0) контрагенты в РС это поставщики или те же покупатели?
Смысл регистра сведений какой?
19 alexandr1
 
16.12.15
22:58
(18) Содержатся товары для клиента, по которым идет бонус ;)
20 RomanYS
 
16.12.15
23:01
(19) т.е. тебе нужен фильтр одновременно по комбинации 2 полей, в (0) ты об этом НЕпредусмотрительно умолчал
21 alexandr1
 
16.12.15
23:09
(17) Если в вт помещать, то туда попадают весь спец товар всех выбранных клиентов, нужно отдельно по каждому его собственный товар.
22 alexandr1
 
16.12.15
23:10
(20) Вообщем то фильтр по товару для каждого клиента должен быть свой
23 RomanYS
 
16.12.15
23:14
(22) об этом надо было писать в (0), лично я прочитал "контрагентом и его товаром" как "фильтр по товарам поставщиков". А оказалось речь о другом :(.
24 RomanYS
 
16.12.15
23:17
с учетом (5)

ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ,
(Контрагент,Номенклатура) В
(ВЫБРАТЬ
        СпецТовар.Контрагент, СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СпецТовар где СпецТовар.Контрагент В  (&СписокКонтрагентов)

или
(Контрагент,Номенклатура.Родитель) В
(ВЫБРАТЬ
        СпецТовар.Контрагент, СпецТовар.Номенклатура КАК Номенклатура
    ИЗ
        РегистрСведений.СпецТовар КАК СпецТовар где СпецТовар.Контрагент В  (&СписокКонтрагентов)

) КАК ПродажиОбороты
25 alexandr1
 
16.12.15
23:59
(24) Почти если 1 вариант то выбирает только элементы если с родителем то группы. В иерархии не работает ругается на
"В  запросах операции "в" должно выбираться столько полей, сколько операндов имеет левая часть" а без не норм
26 RomanYS
 
17.12.15
00:04
(25) в (24) нет "в иерархии"
27 alexandr1
 
17.12.15
00:08
(26) я вижу что нет, товар то в группах и элементах
28 RomanYS
 
17.12.15
00:14
(27) для этого там "или", ты сказал, что у тебя всего 2 уровня
29 alexandr1
 
17.12.15
00:16
(28) Блин он серый был, бесконечный уровень
30 RomanYS
 
17.12.15
00:21
(29) сделай столько "ИЛИ" сколько реально уровней ЕСТЬ в справочнике, можешь с небольшим запасом.
Или развлекайся с "в иерархии", только тогда забудь про "В" на несколько полей и соединения.

Я спать.
31 alexandr1
 
17.12.15
00:54
Спасибо, всем за помощь, может что придумаю