|
Как разбить период на подпериоды? | ☑ | ||
---|---|---|---|---|
0
VAVANSTR
27.12.13
✎
13:19
|
Как разбить период на подпериоды? (например произвольный период разбить на дни, недели, месяцы либо кварталы... и т.д.) НЕ В ЗАПРОСЕ!!!
|
|||
1
Cube
27.12.13
✎
13:20
|
(0) Я обычно разбиваю вдребезги... Но иногда в порошок перетираю.
|
|||
2
Wobland
27.12.13
✎
13:20
|
ну тогда циклом
|
|||
3
supremum
27.12.13
✎
13:23
|
(0) Можно запросом.
|
|||
4
VAVANSTR
27.12.13
✎
13:30
|
Можно примеры кусков кода, если не трудно..?
|
|||
5
VAVANSTR
27.12.13
✎
13:30
|
(1) Интересно. Я примерно так же хочу разбить...
|
|||
6
Fish
27.12.13
✎
13:32
|
(4) ПодПериоды = РазбитьПериодНаПодпериоды(Период)
|
|||
7
х86
27.12.13
✎
13:34
|
(0)а почему запросом не хочешь?
|
|||
8
Wobland
27.12.13
✎
13:35
|
(4) д='20140101';
Пока д<'20150101' Цикл д=д+86400; КонецЦикла; |
|||
9
Cube
27.12.13
✎
13:37
|
(4) Не понятно, чего тебе надо... Ну вот тебе кусок:
Сч = 0; ТекущийМесяц = НачалоМесяца(ДатаНачала); Пока ТекущийМесяц < НачалоМесяца(ДатаКонца) Цикл ТекущийМесяц = ДобавитьМесяц(НачалоМесяца(ДатаНачала), Сч); Сч = Сч + 1; //Тут твой быдлокод... КонецЦикла; |
|||
10
VAVANSTR
27.12.13
✎
13:38
|
(7) в данном случае у меня надо без запроса
|
|||
11
Cube
27.12.13
✎
13:38
|
(9) Хотя, можно было и без счетчика...
|
|||
12
Ненавижу 1С
гуру
27.12.13
✎
13:40
|
циклом
|
|||
13
Wobland
27.12.13
✎
13:40
|
(10) а почему в данном случае у тебя надо без запроса?
|
|||
14
VAVANSTR
27.12.13
✎
13:48
|
Вот нашёл функцию полезную очень
&НаСервере Функция РазбитьПериодНаПодпериоды(Знач ДатаНачала, Знач ДатаОкончания) ТаблицаЗначений = Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("ДатаНачала"); ТаблицаЗначений.Колонки.Добавить("ДатаОкончания"); ПервыйОбход = Истина; Если Отчет.УровеньДетализации = "День" Тогда Пока ДатаНачала <= ДатаОкончания Цикл Если ПервыйОбход Тогда Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала); КонецЕсли; Иначе Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала); НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала); НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала); КонецЕсли; КонецЕсли; ДатаНачала = КонецДня(ДатаНачала)+1; ПервыйОбход = Ложь; КонецЦикла; ИначеЕсли Отчет.УровеньДетализации = "Неделя" Тогда Пока ДатаНачала <= ДатаОкончания Цикл Если ПервыйОбход Тогда Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала); КонецЕсли; Иначе Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала); НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала); НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала); КонецЕсли; КонецЕсли; ДатаНачала = КонецНедели(ДатаНачала)+1; ПервыйОбход = Ложь; КонецЦикла; ИначеЕсли Отчет.УровеньДетализации = "Месяц" Тогда Пока ДатаНачала <= ДатаОкончания Цикл Если ПервыйОбход Тогда Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала); КонецЕсли; Иначе Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала); НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала); НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала); КонецЕсли; КонецЕсли; ДатаНачала = КонецМесяца(ДатаНачала)+1; ПервыйОбход = Ложь; КонецЦикла; ИначеЕсли Отчет.УровеньДетализации = "Квартал" Тогда Пока ДатаНачала <= ДатаОкончания Цикл Если ПервыйОбход Тогда Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = ДатаНачала; НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала); КонецЕсли; Иначе Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала); НоваяСтрока.ДатаОкончания = ДатаОкончания; Прервать; Иначе НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала); НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала); КонецЕсли; КонецЕсли; ДатаНачала = КонецКвартала(ДатаНачала)+1; ПервыйОбход = Ложь; КонецЦикла; КонецЕсли; Возврат ТаблицаЗначений; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |