|
Таблица значений из таблиц значений против запросов к одной ТЗ. | ☑ | ||
---|---|---|---|---|
0
Креатив
08.06.21
✎
09:49
|
Есть необходимость обработки рабочих интервалов сотрудников за определённый период.
Пока что для работы с этим набором данных видятся две возможности. 1. Создать ТЗ с сотрудниками и колонкой, содержащей ТЗ с интервалами по каждому сотруднику. 2. Создать одну общую ТЗ по всем сотрудникам с интервалами, а оттуда доставать по необходимости данные по каждому сотруднику. Мне необходимо, чтобы набор по каждому сотруднику при получении сохранял ту же сортировку, что и изначальные данные. |
|||
1
fisher
08.06.21
✎
10:35
|
Ты просишь выбрать структуру данных, но делаешь это без описания необходимых алгоритмов.
|
|||
2
fisher
08.06.21
✎
10:37
|
В общем, нужно знать какая именно "обработка" будет выполняться. В общем случае второй вариант более универсальный.
|
|||
3
Креатив
08.06.21
✎
10:45
|
(1)Так алгоритмы будут выстроены под структуру. Мне на каждом шаге основного алгоритма нужно получать по данному сотруднику ближайший рабочий интервал. В сущности, есть и третий вариант. Каждый раз снова собирать данные по сотруднику. Минус этого подхода в том, что при необходимости второй(третий и последующие) раз обрабатывает того же сотрудника внутри документа придётся снова собирать интервалы.
Пожалуй, начну именно с этого. Если будут наблюдаться замедления, перейду на второй вариант. (2)Благодарю за совет. |
|||
4
fisher
08.06.21
✎
10:54
|
(3) > Так алгоритмы будут выстроены под структуру
Обычно структура выбирается под решаемые задачи. Но просто поиск - это простейшая задача. По общей ТЗ двоичным поиском тоже быстро будет. Если уже есть какой-то обход, то можно комбинированные структуры данных сделать. Какие угодно. Например, общая ТЗ интервалов по сотрудникам и соответствия сотрудников строкам их первых и последних интервалов. |
|||
5
fisher
08.06.21
✎
10:56
|
Да и вообще, если данных много, а искать надо быстро, то в 1С лучше соответствия использовать. Через соответствия доступ фактически мгновенный при любом объеме данных.
|
|||
6
Serg_1960
08.06.21
✎
10:59
|
(3) Однократное обращение к базе для заполнения общей структуры по всем сотрудниками - этот вариант быстрее. Т.е. быстрее тот вариант, когда отсутствуют цикличные обращения к базе данных.
|
|||
7
H A D G E H O G s
08.06.21
✎
11:09
|
(5) Что соответствия, что индексированные ТЗ, одинаково
|
|||
8
fisher
08.06.21
✎
11:12
|
(7) Возможно. Я не сравнивал. В 1С вопросы производительности всегда наперекосяк классике, ибо слишком высокий уровень абстракций. Но у меня и код с использованием соответствий обычно "чище" получается. Поэтому я их полюбляю.
|
|||
9
Salimbek
08.06.21
✎
12:38
|
(0) Создаешь ТЗ с колонками, Сотрудник, ДатаНачала, ДатаОкончания, ИД_Интервала
Укладываешь во временную таблицу Для очередного сотрудника выполняешь запрос с условием: "Выбрать вт.ИД_Интервала из вт ГДЕ вт.Сотрудник = &ЗаданныйСотрудник И вт.ДатаНачала<=&ЗаданнаяДата И вт.ДатаОкончания>ЗаданнаяДата&" |
|||
10
Said_We
08.06.21
✎
14:04
|
(0) Формулировка не понятна:
"Мне необходимо, чтобы набор по каждому сотруднику при получении сохранял ту же сортировку, что и изначальные данные." Если надо, то либо она уже есть и по полям составляющим интервал можно всегда узнать кто раньше и кто позже. Либо добавь поле, в котором будет храниться непосредственный порядковый номер записи - аналог номер строки ТЗ. В общем что такое в вашем понимании ИНТЕРВАЛ не понятно, поэтому и .... Какие поля входят в интервал и можно ли определить по данным интервала какая строка раньше и какая позже? |
|||
11
SleepyHead
гуру
08.06.21
✎
14:12
|
(9) На укладывание в ВТ тоже время уходит.
Быстрее искать прямо в ТЗ с использованием индексов, если такая таблица большая. |
|||
12
mistеr
08.06.21
✎
14:44
|
(0) Я бы сначала попробовал сделать все и сразу в одном запросе, потом уже возиться с ТЗ.
|
|||
13
DrZombi
гуру
08.06.21
✎
15:09
|
(0) Тогда это уже какой-то регистр, возможно сведений.
|
|||
14
DrZombi
гуру
08.06.21
✎
15:13
|
(10) Где-то в ЗУП 3.1, есть подобное, там реализовано на регистре сведенье, при этом есть небольшая проверка, говорящая о том, что данный регистр надо перезаполнить.
В итоге отчет получает данные по регистру, разными сотрудниками кадровой службы :) |
|||
15
Said_We
08.06.21
✎
15:17
|
(14) Ну так (0) молчит и не договаривает где и что. Может велосипед изобретает и мы с ним. Расскажет (0) от начала до конца где и что ему нужно, может быть вообще никакие интервалы искать не нужно будет. :-)
|
|||
16
Вафель
08.06.21
✎
15:22
|
Вместо из лучше ссответствие
|
|||
17
Креатив
08.06.21
✎
18:02
|
(12)Я бы так и сделал, но поскольку у сотрудника может смениться график, то сначала выдёргиваю графики в ТЗ, там создаю интервалы их действия. А потом уже по этим интервалам выбираю рабочие интервалы.
(15)Это УНФ. Делаю автоматическое заполнение загрузки ресуросв(план естественно). |
|||
18
Said_We
08.06.21
✎
18:35
|
(17) Тогда зачем нужно "... сохранял ту же сортировку ..."? У тебя есть дата, с которой действует график. В порядке действия даты вполне читабельно.
|
|||
19
Креатив
08.06.21
✎
18:46
|
(18)Это чтобы избежать варианта с найтистроки в ТЗ.
|
|||
20
Said_We
08.06.21
✎
18:54
|
(19) Какой ещё настройкой?
На входе у вас таблица: Сотрудник, ДатаС, ДатаПо, График. Периоды в строчках не пересекаются. Что ещё нужно? Какая разница, в каком порядке строки идут физически. Хоть строка по Иванову, потом строка по Петрову, а потом опять по Иванову. |
|||
21
mistеr
08.06.21
✎
22:52
|
(17) А что мешает сделать все это в запросе?
|
|||
22
Said_We
09.06.21
✎
11:33
|
(21) Я тоже сути вопроса не понимаю.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |