|
Обработка строк: чем лучше сделать - запросом или тз? | ☑ | ||
---|---|---|---|---|
0
Штурман
04.12.19
✎
08:48
|
Есть таблица примерно следующего вида:
Наименование ДатаНачала ДатаОкончания Иванов 17.08.2019 04.09.2019 Петров 15.06.2019 10.07.2019 Сидоров 01.07.2019 15.07.2019 Нужно в ней поделить месяцы, допустим, если месяц даты окончания не равен месяцу даты начала, то делим месяц. Т.е. в примере с Ивановым в итоге должно получиться две строки: Иванов 17.08 31.08 Иванов 01.09 04.09 Вначале с помощью запроса сделал такую табличку: Наименование Дата начала Конец месяца Х Начало месяца Х Дата окончания Иванов 17.08.2019 31.08.2019 01.09.2019 04.09.2019 Петров 15.06.2019 30.06.2019 01.07.2019 10.07.2019 Сидоров 01.07.2019 15.07.2019 01.07.2019 15.07.2019 Далее эту таблицу перекинул в ТЗ и кодом для каждого строчка из тз цикл если строчка.ДатаНачала = строчка.НачалоМесяцаХ тогда НовСтр = тзНов.Добавить(); НовСтр.Наименование = строчка.Наименование; НовСтр.ДатаНачала = строчка.ДатаНачала; НовСтр.ДатаОкончания = строчка.ДатаОкончания; иначе НовСтр = тзНов.Добавить(); НовСтр.Наименование = строчка.Наименование; НовСтр.ДатаНачала = строчка.ДатаНачала; НовСтр.ДатаОкончания = строчка.КонецМесяцаХ; НовСтр = тзНов.Добавить(); НовСтр.Наименование = строчка.Наименование; НовСтр.ДатаНачала = строчка.НачалоМесяцаХ; НовСтр.ДатаОкончания = строчка.ДатаОкончания; конецесли; конеццикла; привел к нормальному виду. Что скажете? Может есть другие способы??? |
|||
1
mistеr
04.12.19
✎
08:51
|
(0) Исходную таблицу получил из запроса же? Вот в тот запрос и добавь соединение с таблицей месяцев.
|
|||
2
Irbis
04.12.19
✎
08:51
|
А если внутри несколько месяцев? например с июля по октябрь
|
|||
3
FIXXXL
04.12.19
✎
08:52
|
если просто циклом: создай копию таблицу, в нее переложи строки с проверкой при добавлении
в твоем случае перехлест всегда только на границе ОДНОГО месяца? |
|||
4
Штурман
04.12.19
✎
08:54
|
(1) из документа запросом вывел, две таблицы в запросе сравнивать?
|
|||
5
Штурман
04.12.19
✎
08:55
|
(2) да, такое может быть, но в запросе стоит ограничение и выбираются месяцы между двумя датами
|
|||
6
Штурман
04.12.19
✎
08:58
|
(3) не совсем понял, создать при помощи ТЗ копию таблицы и перекидывать в нее при помощи условия?
Перехлест может быть и больше, в (5) написал, что условие есть |
|||
7
seevkik
04.12.19
✎
09:05
|
(5) Тогда твой код не работает)
|
|||
8
Штурман
04.12.19
✎
09:06
|
(7) в общем пока лучше исходить из условия, что перехлест только на один месяц, не более :)
|
|||
9
lEvGl
гуру
04.12.19
✎
09:23
|
зопросом
выбор когда месяц(начало) <> месяц(конец) тогда конецмесяца(начало) объединить все выбор когда месяц(начало) <> месяц(конец) тогда началомесяца(конец) ну и присоединить таблицу производственного календаря или чего там есть что бы обработать периоды с перехлестом больше месяца |
|||
10
d4rkmesa
04.12.19
✎
09:28
|
(0) Лучше на том, с чем вам удобнее будет потом читать и править свои изменения. Можно написать сложный запрос, а потом недоумевать, а что там происходит, и что делать, чтобы результат немного отличался от выдаваемого.
|
|||
11
famnam
04.12.19
✎
11:41
|
(0) сделайте подобную функцию как в v8: Как разбить период на подпериоды?
и в цикле вызывайте ее для каждой своей строки. |
|||
12
mistеr
04.12.19
✎
12:00
|
(4) Да.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |