![]() |
![]() |
|
Число периодов между двумя датами? | ☑ | ||
---|---|---|---|---|
0
Zlodey1С
11.05.09
✎
13:17
|
Можно как то узнать сколько периодов(день, недель, декад, месяцев и т.д) между двумя датами?
|
|||
1
Immortal
11.05.09
✎
13:23
|
мм..календарных или каких?
|
|||
2
Zlodey1С
11.05.09
✎
13:25
|
календарных, есть две даты надо найти сколько между ними периодов
|
|||
3
AlinKabaev
11.05.09
✎
13:26
|
(Дата2 - Дата1) / ЧислоСекундВПериоде )))))))))
|
|||
4
IronDemon
11.05.09
✎
13:27
|
Функция РАЗНОСТЬДАТ
Функция предназначена для получения разницы между двумя датами. Первый параметр — выражение типа Дата; Второй параметр — выражение типа Дата; Третий параметр – тип разности, одно из: Секунда, Минута, Час, День, Месяц, Квартал, Год. |
|||
5
Ненавижу 1С
гуру
11.05.09
✎
13:27
|
сначала формальное понятие функции на входе которой 2 даты, на выходе число периодов дайте
|
|||
6
AlinKabaev
11.05.09
✎
13:32
|
zlodey - злой гений? ))
|
|||
7
Zlodey1С
11.05.09
✎
13:35
|
_ДатаНач=УниверсальныйОтчет.ДатаНач;
_ДатаКон=УниверсальныйОтчет.ДатаКон; числоПодпериодов=0; Если Периодичность=Перечисления.Периодичность.День Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/86400))<1,1,Цел(((_ДатаКон-_ДатаНач)/86400))); // День ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/604800))<1,1,Цел(((_ДатаКон-_ДатаНач)/604800))); // Неделя ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/864000))<1,1,Цел(((_ДатаКон-_ДатаНач)/864000))); // Декада ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/2592000))<1,1,Цел(((_ДатаКон-_ДатаНач)/2592000))); // Месяц ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/7776000))<1,1,Цел(((_ДатаКон-_ДатаНач)/7776000))); // Квартал ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/15724800))<1,1,Цел(((_ДатаКон-_ДатаНач)/15724800))); // Полугодие ИначеЕсли Периодичность=Перечисления.Периодичность.Неделя Тогда числоПодпериодов = ?(Цел(((_ДатаКон-_ДатаНач)/31536000))<1,1,Цел(((_ДатаКон-_ДатаНач)/31536000))); // Год КонецЕсли; сч=0; Пока Не числоПодпериодов < сч Цикл сч=сч+1; НоваяСтрока = пТаблицаИнтервалов.Добавить(); НоваяСтрока.ИмяИнтервала = СтрокаТабЧасти.Подпись; НоваяСтрока.НомерИнтервала = СтрокаТабЧасти.НомерСтроки; НоваяСтрока.НачалоИнтервала = НачалоДня(УниверсальныйОтчет.ДатаКон) - ?????? сч * 60 * 60 * 24; НоваяСтрока.КонецИнтервала = КонецДня(УниверсальныйОтчет.ДатаКон) - ?????? СтрокаТабЧасти.КонецИнтервала * 60 * 60 * 24; КонецЦикла туплю ппц, че дальше делать не могу сообразить |
|||
8
Zlodey1С
11.05.09
✎
13:38
|
короче надо получить таблицу с интервалами. Пользователь выберает периодичность и даты нач и кон. Число интервалов должно расчитаться на основании этих дат в соответствии с периодичностью. Отдыхать не как нельзя 3 дня, мозг расслабляется и не хочет запускаться.
|
|||
9
Kyrales
11.05.09
✎
19:18
|
че это за хрень? зачем это надо?
|
|||
10
nbIx
11.05.09
✎
19:40
|
Посмотри как стаж считается в ЗиКе или ЗУПе, Ведь число дней можно посчитать просто, а вот число месяцев или лет хрен посчитаешь.
Надо знать точку "Ч" |
|||
11
Oleg_Kag
11.05.09
✎
19:43
|
(7)чувак у тебя в Периодичность лежит значение Перечисление.Периодичность.Бла-Бла-Бла...
Вот и вытаскиваай этот "бла-бла-бла". P.S. "Хинт ушами" в Перечисление.Периодичность, ЕСЛИ не столь важен комментарий значений, и в дальнейшем его не нужно "красиво" использовать, то ложи кол-во секунд прямо в "Комментарий", потом вытянешь... |
|||
12
Гений 1С
гуру
11.05.09
✎
20:56
|
Все уже написано до вас. Надо тщательнее изучать библиотеку функций. ыггыгы.
Функция ПериодыЗаИнтервал(Начало, Конец, Периодичность="День", ВыравниваниеПоПериоду=истина)Экспорт //Назначение: Вычисляет даты начала/конца периодов за интервал в виде таблицы значений //ДатаСоздания: 20070823 //Автор: Fixin //Тестирована: Частично (Для дня, месяца и недели) //$Начало: Начало периода //$Конец: Конец периода //$Возврат: Возвращает таблицу значений //$Возврат.Колонки.Начало: Начало интервала //$Возврат.Колонки.Конец: Конец интервала //$Возврат.Колонки.Номер: Номер интервала (начиная с единицы) //$Периодичность - строка "День", "Месяц", "Неделя", "Год", "Квартал" Перем Р, Номер, ТекПериод, СледПериод; Р=Новый ТаблицаЗначений(); Р.Колонки.Добавить("Начало", Новый ОписаниеТипов("Дата")); Р.Колонки.Добавить("Конец", Новый ОписаниеТипов("Дата")); Р.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(12,0))); ТекПериод=Начало; Номер=1; Пока истина Цикл Если Периодичность="День" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоДня(ТекПериод); СледПериод=КонецДня(ТекПериод); Иначе СледПериод=ДобавитьДни(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Месяц" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоМесяца(ТекПериод); СледПериод=КонецМесяца(ТекПериод); Иначе СледПериод=ДобавитьМесяцы(ТекПериод, 1); КонецЕсли; ИначеЕсли Периодичность="Год" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоГода(ТекПериод); СледПериод=КонецГода(ТекПериод); Иначе СледПериод=ДобавитьМесяцы(ТекПериод, 12); КонецЕсли; ИначеЕсли Периодичность="Квартал" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоКвартала(ТекПериод); СледПериод=КонецКвартала(ТекПериод); Иначе СледПериод=ДобавитьМесяцы(ТекПериод, 3); КонецЕсли; ИначеЕсли Периодичность="Неделя" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоНедели(ТекПериод); СледПериод=КонецНедели(ТекПериод); Иначе СледПериод=ДобавитьДни(ТекПериод, 7); КонецЕсли; ИначеЕсли Периодичность="Весь" Тогда Если ВыравниваниеПоПериоду Тогда ТекПериод=НачалоДня(ТекПериод); КонецЕсли; СледПериод=КонецДня(Конец); Иначе ВызватьИсключение "Неизвестная периодичность времени:"+Периодичность; КонецЕсли; Если ТекПериод>Конец И НЕ Номер=1 Тогда Прервать; КонецЕсли; Стр=Р.Добавить(); Стр.Начало=ТекПериод; Стр.Конец=СледПериод; Стр.Номер=Номер; ТекПериод=СледПериод+1; //Переходим на следующий период (добавляем одну секунду) Номер=Номер+1; КонецЦикла; Возврат Р; КонецФункции |
|||
13
Гений 1С
гуру
11.05.09
✎
20:56
|
http://infostart.ru/projects/2024/
(Это ссылка на библиотеку, если кто еще в танке) |
|||
14
Serg_1960
11.05.09
✎
22:46
|
(12) Исчезни в... оптимизацию :) Нафиг в цикле каждый раз "Если Периодичность..." :(
|
|||
15
Zlodey1С
26.05.09
✎
07:01
|
Забыл всем сказать большое спасибо.
(12) Отдельное спасибо. |
|||
16
ASU_Diamond
26.05.09
✎
07:50
|
Интересно зачем обрабатывать
ИначеЕсли Периодичность="Весь" Тогда в цикле? |
|||
17
Zlodey1С
26.05.09
✎
07:59
|
(16) Незнаю, все что мне надо я взял, все лишнее убрал. Гению наверное для своих целей понадобилось.
|
|||
18
ASU_Diamond
26.05.09
✎
08:11
|
(17) мне кажется что определять количество дней и недель через цикл будет долго, это лучше делать делением
|
|||
19
Zlodey1С
26.05.09
✎
08:29
|
(18) Не заметил. Год ставил все нормально считает, только если вы поставите период год, а периодичность день, у вас запросик будет веселинький
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |