|   |   | 
| 
 | 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)нуж копипасте наше всё! Ещё раз спасибо.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |