Имя: Пароль:
1C
 
Обработка строк: чем лучше сделать - запросом или тз?
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) Да.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.