Имя: Пароль:
1C
1С v8
Таблица значений из таблиц значений против запросов к одной ТЗ.
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) Я тоже сути вопроса не понимаю.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой