|
v7: Дополнительное упорядочение в прямом запросе | ☑ | ||
---|---|---|---|---|
0
Pit0n_08
29.05.15
✎
11:15
|
Конфигурация - переписанная ТиС.
Товары лежат на складах по секциям (Регистр "Остатки" имеет измерения "Склад" и "Секция", справочник "СекцииХранения" подчинен справочнику "Склады"). Склады имеют приоритет отгрузки (реквизит "ПриоритетОтгрузки" тип число) и признак рабочего (реквизит "ИспользоватьДляОстатков" тип число 0/1 - флажок на форме). В глобальном модуле прямой запрос возвращает ТЗ с остатками на рабочих складах по заданной Номенклатуре с колонками "Склад, Секция, Количество", отсортированную по приоритету склада. Текст запроса: SELECT СпрСкл.ID as [Склад $Справочник.Склады], Секция as [Секция $Справочник.СекцииХранения], $СпрСкл.ПриоритетОтгрузки as [Количество $Число], SUM(КоличествоОстаток) as [Количество $Число] From $Справочник.Склады as СпрСкл Inner join $РегистрОстатки.ОстаткиТМЦ(:Пер~,, Номенклатура = :ВыбНоменклатура, (Склад,Секция), (Количество) as Рег on Рег.Склад = СпрСкл.ID Where $СпрСкл.ИспользоватьДляОстатков = '1' Group by $СпрСкл.ПриоритетОтгрузки, СпрСкл.ID, Секция Order by $СпрСкл.ПриоритетОтгрузки, СпрСкл.ID, Секция Необходимо дополнительно упорядочить ТЗ по секциям. В строках по одному складу сначала должна идти основная секция, если там есть остатки, потом все остальные. При этом справочник "СекцииХраненияНоменклатуры" подчинен Номенклатуре и имеет реквизиты "Секция" (тип справочник "СекцииХранения") и "Основная" (тип число 0/1 - флажок на форме). Запрос используется постоянно, дополнительных тормозов не хотелось бы. Подскажите, как сделать оптимально, желательно с фрагментами кода. |
|||
1
Pit0n_08
29.05.15
✎
11:29
|
Up. В обычном запросе включил бы функцию, возвращающую признак Основной секции, а как с прямым?
|
|||
2
Pit0n_08
29.05.15
✎
11:51
|
Понимаю, что пятница, но всё же апну...
|
|||
3
Pit0n_08
29.05.15
✎
12:13
|
И даже мыслей по теме нет?
|
|||
4
Ёпрст
29.05.15
✎
12:17
|
и в прямом также, добавляешь реквизит, сортируешь по нему.
|
|||
5
Pit0n_08
29.05.15
✎
12:35
|
(4) но признак "Основная" есть только у спр. "СекцииХраненияНоменклатуры", а не у секции хранения в складе.
|
|||
6
Ёпрст
29.05.15
✎
12:37
|
(5) И ?
|
|||
7
Ёпрст
29.05.15
✎
12:38
|
присоединяй нужный справочник, получай нужный реквизит, втыкай сортировку по нему. Усё.
|
|||
8
ДенисЧ
29.05.15
✎
12:40
|
(7) Ты, блин, слишком сложно для пятницы говоришь ))
|
|||
9
Pit0n_08
29.05.15
✎
12:45
|
(7) с прямыми запросами работаю мало...
Как связать секции с остатками с секциями в номенклатуре? |
|||
10
Pit0n_08
29.05.15
✎
12:46
|
Хоть рыбу какую-нить подкинь...
|
|||
11
Ёпрст
29.05.15
✎
12:50
|
(9) запрос у тебя получает данные по складу. При чем тут номенклатура - не ясно. Как и упорядочивание по "основной" секции, которая к складу не имеет никакого отношения, ибо это признак номенклатуры.
|
|||
12
Ёпрст
29.05.15
✎
12:52
|
разве что, этот запрос висит в формуле колонке в форме списка, поди , да ?
Видно, что для конкретной номенклатуры останки смотришь. Тогда тупо лефт джоин СекцииХраненияНоменклатуры он паренттекст = выбНоменклатура энд Секция = Рег.Секция. усё. |
|||
13
Ёпрст
29.05.15
✎
12:52
|
ну и в ордер бай твой реквизит основной . всё
|
|||
14
Pit0n_08
29.05.15
✎
12:54
|
(11) запрос получает данные по складам и по Номенклатура = :ВыбНоменклатура
и у ВыбНоменклатура есть Основная секция, на которой остатков может не быть вообще, но если они (остатки) есть, то они должны быть первыми. |
|||
15
Pit0n_08
29.05.15
✎
12:55
|
(12) не, запрос при подборе в документ
|
|||
16
Ёпрст
29.05.15
✎
13:02
|
см. (12)
|
|||
17
Pit0n_08
29.05.15
✎
13:05
|
(12)может
Left join СекцииХраненияНоменклатуры on PARENTEXT = выбНоменклатура and СекцииХраненияНоменклатуры.Секция = Рег.Секция |
|||
18
Pit0n_08
29.05.15
✎
13:11
|
+(17) "СекцииХраненияНоменклатуры" подчинен Номенклатуре и имеет реквизит "Секция"
|
|||
19
Ёпрст
29.05.15
✎
13:18
|
типа того
| SELECT | Рег.Склад as [Склад $Справочник.Склады], | Рег.Секция as [Секция $Справочник.СекцииХранения], | $СпрСкл.ПриоритетОтгрузки as [Количество $Число], | Sum(КоличествоОстаток) as [Количество $Число], | max(isnull($СекцииХраненияНоменклатуры.Секция,0)) as Основная | From | $Справочник.Склады as СпрСкл (nolock) | Inner join $РегистрОстатки.ОстаткиТМЦ(:Пер~,,Номенклатура = :ВыбНоменклатура,(Склад,Секция), (Количество) as Рег | on Рег.Склад = СпрСкл.ID | left join $Справочник.СекцииХраненияНоменклатуры as СекцииХраненияНоменклатуры (nolock) on | СекцииХраненияНоменклатуры.parentext = :ВыбНоменклатура and $СекцииХраненияНоменклатуры.Секция = Рег.Секция | Where | $СпрСкл.ИспользоватьДляОстатков = '1' | goup by Рег.Склад,Рег.Секция,$СпрСкл.ПриоритетОтгрузки | Order by $СпрСкл.ПриоритетОтгрузки, Рег.Склад,Основная desk,Рег.Секция |
|||
20
Ёпрст
29.05.15
✎
13:20
|
на desc только поправь там.
|
|||
21
Pit0n_08
29.05.15
✎
13:21
|
(19) Огромное спасибо!
|
|||
22
Pit0n_08
29.05.15
✎
13:23
|
(19) может?
max(isnull($СекцииХраненияНоменклатуры.Основная,0)) as Основная |
|||
23
Pit0n_08
29.05.15
✎
13:31
|
В итоге:
| SELECT | Рег.Склад as [Склад $Справочник.Склады], | Рег.Секция as [Секция $Справочник.СекцииХранения], | $СпрСкл.ПриоритетОтгрузки as [Количество $Число], | Sum(КоличествоОстаток) as [Количество $Число], | max(isnull($СекцииХраненияНоменклатуры.Основная,0)) as Основная | From | $Справочник.Склады as СпрСкл (nolock) | Inner join $РегистрОстатки.ОстаткиТМЦ(:Пер~,,Номенклатура = :ВыбНоменклатура,(Склад,Секция), (Количество) as Рег | on Рег.Склад = СпрСкл.ID | left join $Справочник.СекцииХраненияНоменклатуры as СекцииХраненияНоменклатуры (nolock) on | СекцииХраненияНоменклатуры.parentext = :ВыбНоменклатура and $СекцииХраненияНоменклатуры.Секция = Рег.Секция | Where | $СпрСкл.ИспользоватьДляОстатков = '1' | group by Рег.Склад,Рег.Секция,$СпрСкл.ПриоритетОтгрузки | Order by $СпрСкл.ПриоритетОтгрузки, Рег.Склад,Основная desc,Рег.Секция |
|||
24
Ёпрст
29.05.15
✎
13:34
|
(22) ага
|
|||
25
Ёпрст
29.05.15
✎
13:34
|
копипасте жжж
|
|||
26
Pit0n_08
29.05.15
✎
13:35
|
(25)нуж копипасте наше всё! Ещё раз спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |