|
Не могу придумать запрос... | ☑ | ||
---|---|---|---|---|
0
live in sky dreams
26.12.16
✎
08:47
|
Уверен, задача давно избита, но не могу найти хоть примерно реализацию, чтобы подсмотреть. Может тут подскажут..
Есть иерархический справочник, номенклатура. Группа_1__________________|__2__ __Подгруппа_1_____________|__6__ _____Подподгруппа_1_______|_____ ____________Элемент_1_____|__12_ ____________Элемент_2_____|_____ _____Подподгруппа_2_______|__14_ ____________Элемент_3_____|__8__ ____________Элемент_4_____|_____ Группа_2__________________|_____ __Подгруппа_2_____________|_____ _____Подподгруппа_3_______|_____ ____________Элемент_5_____|_____ Первый столбец - собственно номенклатура, второй столбец - порядок номенклатуры в конечном итоге. Все подчиненные элементы группы (Например "Подподгруппа_1","Элемент_2", "Элемент_4") с заданным порядком ("Подгруппа_1", "Подгруппа_2") должны иметь порядок равный порядку родительской группы (6, 14), если таковой задан, за исключением номенклатуры, для которой задан свой порядок ("Элемент_1", "Элемент_3"). На выходе из исходной хочу такую таблицу: Группа_1__________________|__2__ __Подгруппа_1_____________|__6__ _____Подподгруппа_1_______|__6__ ____________Элемент_1_____|__12_ ____________Элемент_2_____|__6__ _____Подподгруппа_2_______|__14_ ____________Элемент_3_____|__8__ ____________Элемент_4_____|__14_ Группа_2__________________|_999_ __Подгруппа_2_____________|_999_ _____Подподгруппа_3_______|_999_ ____________Элемент_5_____|_999_ Как построить запрос? |
|||
1
Мимохожий Однако
26.12.16
✎
08:52
|
А надо именно запросом? Другие средства не приемлимы?
|
|||
2
butterbean
26.12.16
✎
08:57
|
если я правильно понял задачу, то нужно выводить сначала иерархию без элементов, а потом ниже уровнем - только элементы, и соответственно два поля упорядочивания
|
|||
3
live in sky dreams
26.12.16
✎
09:07
|
Именно запросом, потому как итоговые данные необходимо потом сунуть в ВТ_для джойна в другом запросе.
Это вывод прайса, клиент попросил задавать порядок номенклатуры в прайсе. Можно конечно данные обработать сперва не в запросе, а затем сунуть ТЗ в ВТ, но я даже не подумываю об этом, так как позиций номенклатуры - тысячи и для каждой делать множественные запросы в бд - убийство времени..4Оптимальнее всего запрос |
|||
4
live in sky dreams
26.12.16
✎
09:08
|
(2)эммм... не совсем понял, но скорее всего нет..
|
|||
5
FIXXXL
26.12.16
✎
09:09
|
(3) сделай иерархию запросом с твоими порядками, обойди циклом, потом в ВТ и запрос окончательный
|
|||
6
wertyu
26.12.16
✎
09:15
|
(0) а почему элемент 1 идёт раньше элемент 2 ?
|
|||
7
Мимохожий Однако
26.12.16
✎
09:19
|
Может быть, сделать обработку справочника, чтобы не было пустых значений в колонке Порядок. А потом по нему запрос и сделать.
|
|||
8
live in sky dreams
26.12.16
✎
09:19
|
(5) держу как запасной вариант..
(6) Потому как я представил в данной визуализации структуру справочника и соответствие значения порядка элементам. Это не результат запроса или что-либо в этом роде. |
|||
9
live in sky dreams
26.12.16
✎
09:21
|
(7) тогда "порядок" придется обслуживать обработкой (для новых элементов справочника номенклатура).
Так же писать код обработчиков при смене родителя (ПриЗаписи), и т.д.и т.п. Не совсем верно... |
|||
10
live in sky dreams
26.12.16
✎
09:22
|
Сейчас порядок номенклатуры хранится в очень простеньком РС.
Ключи: Номенклатура Значение: Порядок |
|||
11
Мимохожий Однако
26.12.16
✎
09:23
|
(9) В таком случае режим "обслуживания" придётся реализовывать при каждом запросе.
|
|||
12
live in sky dreams
26.12.16
✎
09:24
|
Можно было бы сделать аналогию срезу последних, только не по датам, а по значению поля "Уровень", но..... Нет в запросах Уровня :( А даже если бы и был - один фиг это сильно бы тормозило, потому как узнать уровень кроме как родитель.родитель.родитель не представляется возможным :(
|
|||
13
live in sky dreams
26.12.16
✎
09:25
|
(11)Ваша правда, от части...
|
|||
14
FIXXXL
26.12.16
✎
09:26
|
вообще то задача несколько бредово выглядит, т.к. пользователь может превратить отчет в кашу
ну а по сути: быстрый отчет = хранение данных в базе динамические расчеты - тормоза |
|||
15
Мимохожий Однако
26.12.16
✎
09:28
|
Помнится в 77у справочника было свойство ПолныйКод(). Нечто аналогичное можно реализовать в регистре сведений, имя вторым ресурсом аналогичную последовательность.
А обработку обслуживания можно запускать периодически регламентным заданием, чтобы не писать в события. |
|||
16
wertyu
26.12.16
✎
09:29
|
(8) у него порядковый номер больше, должен быть после
|
|||
17
live in sky dreams
26.12.16
✎
09:33
|
(14)им и нужна своя, настроенная "каша"..
Дин расчеты - тормоза, согласен. Но реализация записи поля порядок при каждой записи элемента справочника с одной стороны выглядит логично и верно - с другой - как костыль какой то... Хотя.. этот костыль наиболее гладко решает задачу.. Прицеплюсь ка я к подписке ПриЗаписи... И обработкой единожды задам порядок. А далее при записи система будет этот порядок, или кашу, кому как больше нравится, поддерживать сама.. (16) в примере иерархия представлена в порядке справочника. Там еще ничего не сортировалось по полю "порядок" |
|||
18
live in sky dreams
26.12.16
✎
09:34
|
Главное обработать правильно все варианты (Пустой родитель, у родителей всех уровней нет порядка, записывается новый элемент в корень и т.д.)
|
|||
19
wertyu
26.12.16
✎
09:36
|
(17) а если есть две или больше группы нулевого уровня, которых нет в регистре, у них у всех 999?
|
|||
20
Мимохожий Однако
26.12.16
✎
09:37
|
А каким образом заполняется регистр сведений для упорядочивания? Руками или обработкой?
|
|||
21
live in sky dreams
26.12.16
✎
09:38
|
(19)Да.. У них да, у подчиненных элементов тоже да, если не задан порядок индивидуально
|
|||
22
live in sky dreams
26.12.16
✎
09:38
|
(20) обработкой. Пользователь набивает в него группы, подгруппы, сортирует стрелочками, жмакает "записать"
|
|||
23
live in sky dreams
26.12.16
✎
09:39
|
Оппаа
|
|||
24
wertyu
26.12.16
✎
09:39
|
(21) а вложенность справочника какая?
|
|||
25
live in sky dreams
26.12.16
✎
09:39
|
Вот точно одна голова хорошо, а много - змей горыныч..
|
|||
26
live in sky dreams
26.12.16
✎
09:40
|
Не имеет смысла задавать порядок у подгрупп и элементов. И задачи такой не озвучивалось.. Уточню у заказчика.. Похоже это я уже выдумал "на все случаи жизни"
|
|||
27
Мимохожий Однако
26.12.16
✎
09:40
|
(22) В эту обработку и запихни пересчет порядка.
|
|||
28
live in sky dreams
26.12.16
✎
09:42
|
(27) Лучше "при записи", потому как если только обработкой - то гонять ее нужно будет после каждой записи номенклатуры (новой старой - пофиг). Только это будет происодить не автоматом как через подписки а в ручном режиме или регламентном задании, что больше путаницы создаст пользователям
|
|||
29
wertyu
26.12.16
✎
09:43
|
(27) да ладно, если в лоб, то это запрос с УровеньИерархииСправочика - 1 временными таблицами
|
|||
30
Мимохожий Однако
26.12.16
✎
09:46
|
(28) Хозяин - барин. Но я сторонник минимализма. Пока пользователь вводит изменения в регистр сведений, он вряд ли будет формировать прайс. Поэтому сразу использовать подписку при записи - это с большим запасом. Но если ты уже эту подписку внедрил раньше, то конечно.
|
|||
31
live in sky dreams
26.12.16
✎
10:00
|
(30) Да, он не будет в 2 копиях программы одновременно вводить порядок и тут же во втором формировать прайс. По этому последовательность действий вполне допустима, но... Дело не только в последовательности, но и в перемещении номенклатуры из группы в группу. И в создании новой номенклатуры.
Если пользователь создал номенклатуру, внес ее в группу, ему придется не забывать попросить ответственного перезаписать значения порядка обработкой. Как результат 1) человеческий фактор забывчивости\"забивчивости" 2) увеличение стоимости обслуживания данных в человеко-часах (если угодно - в человеко-минутах). Смысл..? Тут уже само решение (подход) будет похоже на костыль. А если таких доработок будет много - пользователям много чего придется держать в голове, что не есть гут.. нет, саму подписку я еще не внедрил, но собираюсь. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |