Имя: Пароль:
1C
1С v8
Туплю с запросом
,
0 Jokero
 
20.10.14
15:33
Пн видимо, никак не соображу чет как сделать несложный запрос.
Имеется РегистрОстатки на складах вида
----------------
| Номенклатура |
----------------
| Количество   |
----------------

и Справочник с Ответственными за номенклатуру вида
---------------
|Ответственный|
------------------------------------------------------
|ТабЧасть - Группа\элемент номенклатуры включающие |
------------------------------------------------------
|ТабЧасть - Группа\элемент номенклатуры Исключающие  |
------------------------------------------------------
Включающие - это список с главными группами, по которым человек ответственен. Исключающие - это подгруппы или отдельная нмклатура, из папок включающие, но по ним человек не ответственен.

Нужно получить все остатки по складу и присоединить к ним ответственного.
Чет как ни пробую, никак не взлетает. Помогите разобраться.
1 Fragster
 
гуру
20.10.14
15:35
а нефиг было такую структуру данных придумывать
2 User_Agronom
 
20.10.14
15:35
пиши как мутишь запрос.
3 User_Agronom
 
20.10.14
15:35
(1) Не факт, что он придумывал. Возможно наследство.
4 Нахожусь в оппозиции
 
20.10.14
15:35
тебя ждет соединение по условию типа Номенклатура = НоменклатураОтветственный ИЛИ Номенклатура.Родитель = НоменклатураОтветственный.Родитель ИЛИ Номенклатура.Родитель = НоменклатураОтветственный.Родитель.Родитель ИЛИ Номенклатура.Родитель = НоменклатураОтветственный.Родитель.Родитель.Родитель...
5 Ёпрст
 
20.10.14
15:35
Не стесняйся, показывай свой код
6 Нахожусь в оппозиции
 
20.10.14
15:36
(3) судя по его веткам - это его
7 Fragster
 
гуру
20.10.14
15:36
(4) только еще немного секса с Исключающие, внутри которых есть Включающие внутри которых есть исключающие группы...
8 Jokero
 
20.10.14
15:38
(1) Не я виноват в такой структуре), но разгребать мне)
(2) (4) Я так пробовал, только вы не забывайте, что в справочнике табличные части, и если делать по соединению родителя, то исчезнут отдельные строки, не подходящие по условию, а остальные строки с Ссылкой на элемент справочника останутся.
9 User_Agronom
 
20.10.14
15:47
(8) см (7). Секасу слишком много.
Попробуй поменять структуру данных. Чтобы только включающие были.
10 Jokero
 
20.10.14
15:55
Ну вот так я получаю список включающих ответственных, теперь надо из него выкинуть тех, у кого исключающие группы

ВЫБРАТЬ
    ОтветственныйЗаНмнкл.Ссылка КАК Док,
    ОтветственныйЗаНмнклВкл.Номенклатура КАК НоменклатураВкл,
    ОтветственныйЗаНмнклИскл.Номенклатура КАК НоменклатураИскл,
    ОтветственныйЗаНмнкл.Ответственный
ПОМЕСТИТЬ Нмкл
ИЗ
    Справочник.ОтветственныйЗаНмнкл КАК ОтветственныйЗаНмнкл
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОтветственныйЗаНмнкл.НоменклатураВкл КАК ОтветственныйЗаНмнклВкл
        ПО ОтветственныйЗаНмнкл.Ссылка = ОтветственныйЗаНмнклВкл.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОтветственныйЗаНмнкл.НоменклатураИскл КАК ОтветственныйЗаНмнклИскл
        ПО ОтветственныйЗаНмнкл.Ссылка = ОтветственныйЗаНмнклИскл.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток,
    Нмкл.Ответственный,
    Нмкл.Док,
    Нмкл.НоменклатураВкл,
    Нмкл.НоменклатураИскл
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад.Код = "100500") КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Нмкл КАК Нмкл
        ПО (ТоварыНаСкладахОстатки.Номенклатура.Родитель = Нмкл.НоменклатураВкл
                ИЛИ ТоварыНаСкладахОстатки.Номенклатура.Родитель = Нмкл.НоменклатураВкл
                ИЛИ ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель = Нмкл.НоменклатураВкл
                ИЛИ ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель = Нмкл.НоменклатураВкл
                ИЛИ ТоварыНаСкладахОстатки.Номенклатура.Родитель.Родитель.Родитель.Родитель = Нмкл.НоменклатураВкл)
11 Jokero
 
20.10.14
15:57
(9) Печаалль. Нет, структуру данных менять нельзя, этот справочник прекрасно справляется с другими своими делами, ради которых его и задумывали.
А создавать еще один, который почти повторяет существующий не есть хорошо.
12 dk
 
20.10.14
15:57
имхо составить погруппно соответствие
ответственный1 - группа1
ответственный1 - группа2
...
и потом к основному запросу соединить через группу
хотя можно и поэлементно
13 palpetrovich
 
20.10.14
16:11
мдя, креативный конструктор был :)
может, в порядке бреда, сделать так:
1. Запрос к таблицам справочника Ответсвенные
условие Когда (Номенклатура ПринадлежитГруппеВключающие) и
((Номенклатура Не ПринадлежитГруппеИсключающие) или (НЕ Номенклатура = ЭлементуИсключающие))
// получаем ВТ типа Ответсвенный=Номенклатура
2. Запрос по Остаткам с левым соединением к ВТ по Номенклатура
14 User_Agronom
 
20.10.14
17:15
(13) Как проверять?
В ИЕРАРХИИ не годится, так как (7) точно заметил.

Я думаю с такой структурой перекрытий полно должно быть уже. Когда с одного забыли снять, а на другого повесили. Или ответственный уволился. Или ещё какое событие произошло.
15 palpetrovich
 
20.10.14
17:31
(14) исходя из "Включающие - это список с главными группами" и "Исключающие - это подгруппы или отдельная нмклатура" - можно сделать вывод, что внутри "Исключающих" не может быть "Включающих"
16 Fragster
 
гуру
20.10.14
19:01
а потом (0) еще и в RLS запихать
17 marvak
 
20.10.14
19:31
(0)
а может быть несколько ответственных за одну номенклатуру?
18 RomanYS
 
20.10.14
19:42
(10) первая часть запроса - фигня полная, зачем соединять включенные и исключенные в одну ВТ, логичнее объединить, а лучше вкл - отдельно, искл - отдельно
19 RomanYS
 
20.10.14
19:49
вариант: готовить таблицу родителей

выбор
Спр.Ссылка,
Спр.Родитель,
0 как Приоритет
поместить Родители
объединить все
выбор
Спр.Ссылка,
Спр.Родитель.Родитель,
1 как Приоритет
объединить все
...

потом соединяем с вкл и искл,
группируем по номенклатуре минимум(приоритет),
потом еще раз соединяем уже по номенклатуре и приоритету
20 ilya_i
 
20.10.14
21:12
Сколько ответственных? может забить на дао и сделать запрос в цикле с отбором по каждому. тогда "в иерархии" то что надо.
Закон Брукера: Даже маленькая практика стоит большой теории.