|   |   | 
| 
 | Не могу придумать запрос... | ☑ | ||
|---|---|---|---|---|
| 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) увеличение стоимости обслуживания данных в человеко-часах (если угодно - в человеко-минутах). Смысл..? Тут уже само решение (подход) будет похоже на костыль. А если таких доработок будет много - пользователям много чего придется держать в голове, что не есть гут.. нет, саму подписку я еще не внедрил, но собираюсь. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |