По теме из базы знаний
- SMC, SIC, MRP, MRPII, DRP, ERP, APS - Часть 2
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Redmine для управления ИТ: практический опыт обширного внедрения opensource-системы
- Подсистема регулярных заданий
- Адекватность работодателя. Как её определить? Часть 2. Процесс работы, от испытательного срока до увольнения
Найденные решения
Попробуй вот это
&НаСервере
Функция РазбитьПериодНаПодпериоды(Знач ДатаНачала, Знач ДатаОкончания)
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("ДатаНачала");
ТаблицаЗначений.Колонки.Добавить("ДатаОкончания");
ПервыйОбход = Истина;
Если Отчет.УровеньДетализации = "День" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
Иначе
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецДня(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Неделя" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
Иначе
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецНедели(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Месяц" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
Иначе
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецМесяца(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Квартал" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
Иначе
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецКвартала(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Получили:
21.06.2021 0:00:00 - 28.06.2021 0:00:00
17.06.2021 0:00:00 - 20.06.2021 0:00:00
29.06.2021 0:00:00 - 30.06.2021 0:00:00
01.07.2021 0:00:00 - 30.06.2021 0:00:00
&НаКлиенте
Процедура РазложитьПериода(Команда)
НачалоНедели = Объект.НачалоПериода;
КонецНедели = Объект.НачалоПериода+24*60*60*(7-ДеньНедели(Объект.НачалоПериода));
Сообщить(Строка(НачалоНедели) + " - " + Строка(КонецНедели));
Пока НачалоНедели <= Объект.КонецПериода Цикл
НачалоНедели = КонецНедели+24*60*60;
КонецНедели = Мин(НачалоНедели+24*60*60*7,Объект.КонецПериода);
Сообщить(Строка(НачалоНедели) + " - " + Строка(КонецНедели));
КонецЦикла;
КонецПроцедуры
ПоказатьПолучили:
21.06.2021 0:00:00 - 28.06.2021 0:00:00
17.06.2021 0:00:00 - 20.06.2021 0:00:00
29.06.2021 0:00:00 - 30.06.2021 0:00:00
01.07.2021 0:00:00 - 30.06.2021 0:00:00
(6)
Я лишь показал направление, куда копать, осталось добавить еще одну проверку:
Получили:
21.06.2021 0:00:00 - 28.06.2021 0:00:00
17.06.2021 0:00:00 - 20.06.2021 0:00:00
29.06.2021 0:00:00 - 30.06.2021 0:00:00
01.07.2021 0:00:00 - 30.06.2021 0:00:00
21.06.2021 0:00:00 - 28.06.2021 0:00:00
17.06.2021 0:00:00 - 20.06.2021 0:00:00
29.06.2021 0:00:00 - 30.06.2021 0:00:00
01.07.2021 0:00:00 - 30.06.2021 0:00:00
Я лишь показал направление, куда копать, осталось добавить еще одну проверку:
Пока НачалоНедели <= Объект.КонецПериода Цикл
Если НачалоНедели + 24*60*60 > Объект.КонецПериода Тогда
Прервать;
КонецЕсли;
НачалоНедели = КонецНедели+24*60*60;
КонецНедели = Мин(НачалоНедели+24*60*60*7,Объект.КонецПериода);
Сообщить(Строка(НачалоНедели) + " - " + Строка(КонецНедели));
КонецЦикла;
+(7) Или так:
Пока КонецНедели < Объект.КонецПериода Цикл
НачалоНедели = КонецНедели+24*60*60;
КонецНедели = Мин(НачалоНедели+24*60*60*7,Объект.КонецПериода);
Сообщить(Строка(НачалоНедели) + " - " + Строка(КонецНедели));
КонецЦикла;
Попробуй вот это
&НаСервере
Функция РазбитьПериодНаПодпериоды(Знач ДатаНачала, Знач ДатаОкончания)
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("ДатаНачала");
ТаблицаЗначений.Колонки.Добавить("ДатаОкончания");
ПервыйОбход = Истина;
Если Отчет.УровеньДетализации = "День" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
Иначе
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецДня(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Неделя" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
Иначе
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецНедели(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Месяц" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
Иначе
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецМесяца(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Квартал" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
Иначе
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецКвартала(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот