Имя: Пароль:
1C
1С v8
запрос - как организовать соединение
0 Dirk Diggler
 
07.02.12
18:15
Надо выбрать все товары из реализации товаров и услуг и подобрать к ним к каждой строчке по 1 месту хранения товаров, по приоритету. Делаю левое соединение с РС местахранения, но не знаю, как отбросить лишние строки

       |ИЗ
       |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
       |        ПО (МестаХраненияНоменклатуры.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура)
       |            И (МестаХраненияНоменклатуры.Склад = РеализацияТоваровУслугТовары.Ссылка.Склад)
1 Wobland
 
07.02.12
18:15
а что такое приоритет?
2 acsent
 
07.02.12
18:15
как приоритет задается?
3 Dirk Diggler
 
07.02.12
18:16
приоритет - поле такое в РС местахранения. числом целым задается.
4 Wobland
 
07.02.12
18:18
ну.. сделай таблицу с максимальным приоритетом по складу и номенклатуре и с ней соединяй
5 Wobland
 
07.02.12
18:19
или
ИМЕЮЩИЕ МАКСИМУМ(Приоритет) - как-то так. это в итогах
6 Dirk Diggler
 
07.02.12
18:20
(4) как сделать-то?
(5) Выкинет часть строчек исходной таблицы Товаров, у мест хранения которых приоритет другой.
7 Rovan
 
гуру
07.02.12
18:22
(6)      ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ
МАКСИМУМ(МестаХраненияНоменклатуры.Приоритет),
МестаХраненияНоменклатуры.Номенклатура
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
...
8 Wobland
 
07.02.12
18:23
(7) ну выбереть тебе один максимум на весь регистр...
что-то я потерялся
9 Dirk Diggler
 
07.02.12
18:27
(7) Вот так если сделать, что попадет в поле МестоХранения:


ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
       |            МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
       |            МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения,
       |            МестаХраненияНоменклатуры.Склад КАК Склад,
       |            МИНИМУМ(МестаХраненияНоменклатуры.Приоритет) КАК Приоритет
       |        ИЗ
       |            РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
       |        
       |        СГРУППИРОВАТЬ ПО
       |            МестаХраненияНоменклатуры.Склад,
       |            МестаХраненияНоменклатуры.МестоХранения,
       |            МестаХраненияНоменклатуры.Номенклатура)
10 Dirk Diggler
 
07.02.12
18:27
&
11 Rovan
 
гуру
07.02.12
18:34
(7) вот как нужно

     ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ
МАКСИМУМ(МестаХраненияНоменклатуры.Склад.Приоритет) как МаксПриритет,
МестаХраненияНоменклатуры.Номенклатура
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
) КАК Приоритеты
ПО Приоритеты.Номеклатура = РеализацияТоваровУслугТовары.Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
       |        ПО (МестаХраненияНоменклатуры.Номенклатура = Приоритеты.Номеклатура)
       |            И (МестаХраненияНоменклатуры.Склад.Приоритет = Приоритеты.МаксПриритет)
12 Rovan
 
гуру
07.02.12
18:35
(11) там в 1м подзапросе еще надо
СГРУППИРОВАТЬ ПО МестаХраненияНоменклатуры.Номенклатура
13 Жан Пердежон
 
07.02.12
18:38
как-то так
...
ЛЕВОЕ СОЕДИНЕНИЕ (Выбрать Номенклатура, МАКСИМУМ(Склад) из РС.МестаХранения КАК РС1
ГДЕ Приоритет<=(Выбрать Максимум(Приоритет) ИЗ РС.МестаХранения КАК РС2 ГДЕ РС2.Номенклатура = РС1.Номенклатура)
СГРУППИРОВАТЬ ПО Номенклатура)
...
14 Жан Пердежон
 
07.02.12
18:39
только = вместо <=