Имя: Пароль:
1C
1С v8
Сдвиг периодов
0 ixijixi
 
02.10.23
16:25
Коллеги, приветствую.

Зашел в тупик, нужна помощь.

Есть период, к примеру 12.08-25.08. Необходимо сдвинуть этот период на один или несколько периодов, к примеру есть пара разрывов 14.08-14.08 и 22.08-28.08 (частично пересекается). В результате должны появиться периоды
12.08-13.08
15.08-21.08
29.08-29.08 (вместо 14.08-14.08) первый сдвиг переносим сразу окончания основного периода + сдвиг после)
30.08-02.09 (вместо 22.08-25.08)

Если есть рабочий алгоритм, буду весьма признателен
1 Philix
 
02.10.23
16:49
(0) Мэтр, если изначальный период заменить на начальную дату + количество рабочих дней до конечной даты, то решение можно списать из ЗУП, из документа Отпуск. там этот алгоритм реализован в полях "Отпуск с..по... ХХ дней." При изменении количества дней он неплохо перепрыгивает через государственные праздники.
2 ixijixi
 
02.10.23
16:54
(1) Через праздники перепрыгивает, но период остается цельным. Мне надо чтобы разделилось на 2 периода.
3 ixijixi
 
03.10.23
10:26
Решено

МассивДат = ОбщегоНазначенияБЗК.МассивДатИзПериода(ДатаНачала, ДатаОкончания);
Для Каждого Строка Из ПериодыПриостановки Цикл
	ОбщегоНазначенияБЗК.УдалитьПериодИзМассиваДат(МассивДат, Строка.ДатаНачалаПериода, Строка.ДатаОкончанияПериода);
КонецЦикла;
НовыеПериоды = ОбщегоНазначенияБЗК.ПериодыИзМассиваДат(МассивДат);

Для Каждого Строка Из НовыеПериоды Цикл
	Сообщить("" + Строка.ДатаНачала + "-" + Строка.ДатаОкончания);
КонецЦикла;