![]() |
![]() |
|
Как "пролистать" декады ? Ø |
☑ | ||
---|---|---|---|---|
0
Mobilis
15.12.04
✎
15:24
|
Уважаемый ALL, помогите найти алгоритм, который бы формировал даты начала и конца декад. Принимаем за основу, что декад в месяце три : 1-10, 11-20, 21- Дата конца месяца.
Необходимо не кнопки "Листать вперед" и "Листать назад" навесить процедуру смены отчетного периода типа "Декада" |
|||
1
Бит
15.12.04
✎
15:29
|
В таблицу значений загоняй свои данные, пиши функцию получения декады и записуй в графу декада, а потом свернуть по графам +декада.
|
|||
2
Mobilis
15.12.04
✎
15:36
|
Данные мне не нужны. А вот Функция получения декад и нужна.
|
|||
3
Бит
15.12.04
✎
15:44
|
функция ВозвратДекады(дата)
темп=ПериодСтр(НачМесяца(дата)),КонМесяца(дата))); темп2=число(лев(строка(дата),2)); если темп2<11 тогда темп="Декада 1 "+Темп; результат темп; иначеесли темп2<21 тогда томп="Декада 2 "+Темп; результат темп; иначе томп="Декада 3 "+Темп; результат темп; конецесли; конецфункции Примерно так |
|||
4
Бит
15.12.04
✎
15:46
|
Сори опечаток на делал
функция ВозвратДекады(ТвояДата) Темп=ПериодСтр(НачМесяца(ТвояДата)),КонМесяца(ТвояДата))); Темп2=число(лев(строка(ТвояДата),2)); если темп2<11 тогда Темп="Декада 1 "+Темп; результат Темп; иначеесли темп2<21 тогда Темп="Декада 2 "+Темп; результат темп; иначе Темп="Декада 3 "+Темп; результат темп; конецесли; конецфункции |
|||
5
Бит
15.12.04
✎
15:49
|
Туплю
функция ВозвратДекады(ТвояДата) Темп=ПериодСтр(НачМесяца(ТвояДата)),КонМесяца(ТвояДата))); Темп2=число(лев(строка(ТвояДата),2)); если темп2<11 тогда Темп="Декада 1 "+Темп; возврат Темп; иначеесли темп2<21 тогда Темп="Декада 2 "+Темп; возврат Темп; иначе Темп="Декада 3 "+Темп; возврат Темп; конецесли; конецфункции |
|||
6
Mobilis
15.12.04
✎
15:49
|
(3) Ты немного не понял, или, возможно я не корректно объяснил проблему.
Проблемы получения номера декады текущего интервала НЕТ. Надо получать ДАТЫ начала и конца Предыдущих или последующих декад. |
|||
7
Мулька
15.12.04
✎
15:59
|
Значения из списка: 1 - Неделя, 2 - Декада, 3 - Месяц, 4 - квартал, 5 - день, 6 - полмесяца
сам разберешься ? ===Процедура ДобавитьИнтервалы() Инд=1; тц.НоваяСтрока(); тц.ДатаНИ=Константа.ФирмаПоУмолчанию.ДатаРегистрации; тц.ДатаКИ=ДатаОтчета-1; ТекДата=ДатаОтчета; Если спПериоды.ТекущаяСтрока()=1 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=КонНедели(ТекДата)+Смещ; ТекДата=КонНедели(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=3 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=КонМесяца(ТекДата)+Смещ; ТекДата=КонМесяца(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=6 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; Если ТекДата > Дата(НачМесяца(ТекДата)+14) Тогда тц.ДатаКИ=КонМесяца(ТекДата)+Смещ; ТекДата=КонМесяца(ТекДата)+Смещ+1; Иначе тц.ДатаКИ=НачМесяца(ТекДата)+14+Смещ; ТекДата=НачМесяца(ТекДата)+14+Смещ+1; КонецЕсли; ИначеЕсли спПериоды.ТекущаяСтрока()=4 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=КонКвартала(ТекДата)+Смещ; ТекДата=КонКвартала(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=2 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; Если (ДатаЧисло(ТекДата)>5) и (ДатаЧисло(ТекДата)<=14) Тогда ТекДата=Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),10); ИначеЕсли (ДатаЧисло(ТекДата)>14) и (ДатаЧисло(ТекДата)<=24) Тогда ТекДата=Макс(Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),20),ДатаОтчета); ИначеЕсли (ДатаЧисло(ТекДата)>24) и (ДатаЧисло(ТекДата)<=31) или (ДатаЧисло(ТекДата)>0) и (ДатаЧисло(ТекДата)<=5) Тогда ТекДата=Макс(Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),ДатаЧисло(КонМесяца(ТекДата))),ДатаОтчета); КонецЕсли; тц.ДатаКИ=ТекДата+Смещ; ТекДата=ТекДата+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=5 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=ТекДата+Смещ; ТекДата=ТекДата+Смещ+1; КонецЕсли; Пока Инд=1 Цикл Если спПериоды.ТекущаяСтрока()=1 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=КонНедели(ТекДата)+Смещ; ТекДата=КонНедели(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=2 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата+Смещ; ТекДата=ТекДата+Смещ+10; Если ДатаЧисло(ТекДата)<=5 Тогда ТекДата=НачМесяца(ТекДата)-1; ИначеЕсли (ДатаЧисло(ТекДата)>5) и (ДатаЧисло(ТекДата)<=14) Тогда ТекДата=Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),10); ИначеЕсли (ДатаЧисло(ТекДата)>14) и (ДатаЧисло(ТекДата)<=24) Тогда ТекДата=Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),20); ИначеЕсли (ДатаЧисло(ТекДата)>24) или (ДатаЧисло(ТекДата)<=4) Тогда ТекДата=Дата(ДатаГод(ТекДата),ДатаМесяц(ТекДата),ДатаЧисло(КонМесяца(ТекДата))); КонецЕсли; тц.ДатаКИ=ТекДата+Смещ; ТекДата=ТекДата+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=3 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата+Смещ; тц.ДатаКИ=КонМесяца(ТекДата)+Смещ; ТекДата=КонМесяца(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=6 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата+Смещ; Если тц.ДатаНИ < Дата(НачМесяца(ТекДата)+14) Тогда тц.ДатаКИ=НачМесяца(ТекДата)+14+Смещ; ТекДата=НачМесяца(ТекДата)+14+Смещ+1; Иначе тц.ДатаКИ=КонМесяца(ТекДата)+Смещ; ТекДата=КонМесяца(ТекДата)+Смещ+1; КонецЕсли; ИначеЕсли спПериоды.ТекущаяСтрока()=4 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=КонКвартала(ТекДата)+Смещ; ТекДата=КонКвартала(ТекДата)+Смещ+1; ИначеЕсли спПериоды.ТекущаяСтрока()=5 Тогда тц.НоваяСтрока(); тц.ДатаНИ=ТекДата; тц.ДатаКИ=ТекДата+Смещ; ТекДата=ТекДата+Смещ+1; КонецЕсли; Если ТекДата>=ДатаКон Тогда Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры // ------------------------------------------- |
|||
8
Мулька
15.12.04
✎
16:01
|
(7) + Смещ - это еще и смещение в днях от начала выбранного интервала
|
|||
9
zzz
15.12.04
✎
16:07
|
не советую работать с декадами. Ибо они неполные и непонятно как работать при переходе с месяца на месяц. Короче вылезет вам гимор в будущем.
|
|||
10
Mobilis
15.12.04
✎
16:19
|
(8) Это как ?
|
|||
11
Мулька
15.12.04
✎
16:25
|
Начало недели - 01.11.04, юзер хочет разбить понедельно интервал, но со смещением в 2 дня. так вот при Смещ=2 интервалы будут будет не с понедельника по воскресенье, а со вторника по понедельник
|
|||
12
Mobilis
15.12.04
✎
16:46
|
(11) Спасибо за помощь. Прикольная функция, но немного не то.
Уточню вопрос еще раз. Имеем конкретную дату (Она обязательно есть конец какой-то декады: т.е или 11, или 21 или КонецМесяца ). Интересует функция, которая бы к этой дате прибавляла декаду, т.е выдавала дату конца следующей декады, либо, соответственно, отнимала декаду. |
|||
13
SilverDemon
15.12.04
✎
16:53
|
ТекДата='11.12.2004';
НоваяДата=ТекДата+10; Сообщить(НоваяДата); результат: 21.12.04 |
|||
14
Mobilis
15.12.04
✎
17:42
|
Наваял. Может кто подправит :
Шаг = 1 Вперед, -1 Назад ДатаОтчета= обязательно дата конца произвольной декады. НомерТекущейДекады=Окр(ДатаЧисло(ДатаОтчета)/10,0); ЗначениеДекады=НомерТекущейДекады+Шаг; ЧислоИскомойДекады=?(ЗначениеДекады=0,3,?(ЗначениеДекады>3,1,ЗначениеДекады)); Если Шаг>0 тогда НачалоИскомогоМесяца=НачМесяца(ДобавитьМесяц(ДатаОтчета,?(ЧислоИскомойДекады=1,Шаг,0))); Иначе НачалоИскомогоМесяца=НачМесяца(ДобавитьМесяц(ДатаОтчета,?(ЧислоИскомойДекады=3,Шаг,0))); КонецЕсли; ДатаОтчета=Дата(ДатаГод(НачалоИскомогоМесяца),ДатаМесяц(НачалоИскомогоМесяца), ?(ЧислоИскомойДекады=1,10,?(ЧислоИскомойДекады=2,21,ДатаЧисло(КонМесяца(НачалоИскомогоМесяца))))); |
|||
15
Programmer
15.12.04
✎
17:55
|
Функция ЛистатьДекаду(ТекДата,Вперед)
Если Вперед=1 Тогда Если ТекДата=КонМесяца(ТекДата) Тогда рез=ТекДата; Иначе рез=ТекДата+10; КонецЕсли; Иначе//назад Если ТекДата=КонМесяца(ТекДата) Тогда Рез=Дата("21."+Строка(ДатаМесяц(ТекДата))+"."+Строка (ДатаГод(ТекДата))); Иначе Рез=ТекДата-10; КонецЕсли; возврат рез; КонецФункции; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |