СОЕДИНИТЬ ПО "В ИЕРАРХИИ" - решено #683521


#0 by Вуглускр1991
Были темы Ещё нарыть можно, при желании. Думаю многие поймут, почему нельзя соединять две таблицы по условию реквизит Таблицы1 В ИЕРАРХИИ реквизит Таблицы2. Думаю многие, кто знает SQL этого не поймут. А кто знает ещё и CTE задумаются о кроссплатформенности CTE для DB2 oracle и postgre. Мне миста много помогла в оперативной работе, спасибо мистяне. Если сочтете годным такой способ решения проблемы - берите. Добавляем регистр сведений "ИерархияНоменклатуры" с измерениями: "НоменклатураРодитель" - номенклатура и можно ресурс "УровеньВИерархии" - число Добавляем подписку на событие Событие:  "ПриЗаписи" Обработчик: в отдельном серверном привилегированном модуле КонецПроцедуры Затем, добавляем в модуль менеджера регистра три процедуры:     ТабаРодов.Сортировать("НоменклатураГруппа Возр,УровеньВИерархии Возр,НоменклатураРодитель Возр",);      КонецПроцедуры После чего можно заменять конструкциею "В ИЕРАРХИИ" внутри запроса вот так: "ВЫБРАТЬ
#1 by ProProg
Ставлю два - за регистр. Это не вариант.
#2 by Fragster
на самом деле если бы 1с незажмотились на нормальное физическое хранение иерархии (правое и левое значение дерева), то условие соединения выглядело бы как МЕЖДУ
#3 by Вуглускр1991
Я не насилую. Мне подошло. Улучшить можешь?
#4 by МихаилМ
#5 by Fragster
для варианта с регистром - это выглядело бы как Ссылка, левое значение, правое значение.
#6 by extrim-style
имена переменных внушают
#7 by Вуглускр1991
Копировал из боевой конфы, не причесал :)
#8 by Fragster
ну и да - есть еще волшебная СКД
#9 by Fragster
#10 by ProProg
Кто мне пояснит глубокий смысл сего кода "ВЫБРАТЬ |        Номенклатура.Ссылка,
#11 by Вуглускр1991
Это пример использования в чистом виде, без смысловой нагрузки. Во многих конфигурациях через группы созданы политики, максимальный приоритет имеет политика записанная для непосредственного родителя. Вся номенклатура из группы товары учитывается на 41.01 Однако из папки "цветочные магазины НТТ" на 41.11 Мы знаем как в БП такое сотворить. Тогда можно построить таблицу "горшок ВАЛЕНОК" - "цветочные магазины НТТ" - 2 - 41.11 "горшок ВАЛЕНОК" - "товары" - 1 - 41.01 Где 2 и 1 соответственно уровни родителей "горшка ВАЛЕНКА" Поэтому взяв максимум мы получим результирующую политику учет на 41.11 и все в одном запросе.
#12 by Defender aka LINN
Тебе - бесполезно. Еще можно для каждой группы определить диапазон идентификаторов. Т.е., группы верхнего уровня - от 1 до 10000, от 10001 до 20000 и т.д., к примеру. Вложенная в первую группу - от 1 до 1000, вложенная в нее - от 1 до 100. Ну и тогда тупо по вхождению в интервал.
#13 by Classic
Угу. Фиксированная кодировка групп номенклатуры спасает
#14 by ProProg
для этого регистр сведений специальный не нужен. Это разовая задача в каких то допилках и решается элементарнейшим способом!
#15 by MiniMuk
Если уровень родства вести в самом справочнике?
#16 by Лодырь
Расскажи мне про элементарный способ получения такого рода информации в запросе.
#17 by Вуглускр1991
Ещё одна разовая задача: получить сопоставление элемента номенклатуры и его самого верхнего родителя.
#18 by Fragster
->
#19 by ProProg
а такое вообще как два пальца. в СКД при работе с запросами в доступных полях есть группа Системный полей, к которым моджно обращаться с названием Уровень и Уровень в группе. В типовых есть масса отчетов где отчеты построены по кнокретному уровню иерархии и даже с номенклатурой.
#20 by Вуглускр1991
Спасибо, я как ещё одну задачу плюсом.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С