Имя: Пароль:
1C
 
Сколько месяцев (кварталов, лет) в периоде. Нет стандартной функции?
0 zalexey
 
22.02.08
23:40
Понадобилось вот узнать сколько месяцев в заданном периоде. Не нашел ничего стандартного. В типовой УТ вообще считают, что в месяце 28 дней :))

Искал-искал не нашел. Написал свою, вот думаю может зря велосипед изобретал.
1 MTM777
 
22.02.08
23:54
(0) мне тоже пришлось изобретать на похожую тему, типа:
передается период, и я должен понять еденицу измерения переданного периода - в секундах, минутах, часах, днях, месяцах, годах или ваще в веках)))
так шо правильно сделал!!
2 MaxS
 
23.02.08
08:11
А это не подойдёт?

Особенности функции языка запросов РАЗНОСТЬДАТ
Функция языка запросов РАЗНОСТЬДАТ предназначена для получения разницы между двумя датами в указанных единицах измерения. Синтаксис функции выглядит следующим образом:

РАЗНОСТЬДАТ(<Выражение>, <Выражение>, Секунда | Минута | Час | День | Месяц | Квартал | Год)

В качестве первого параметра передается выражение, значение которого необходимо вычесть из значения второго параметра.

В качестве второго параметра функции передается выражение, из которого необходимо вычесть значение первого параметра.

Третий параметр содержит единицу измерения, в которой необходимо получить результат функции. В качестве третьего параметра можно использовать следующие значения: Секунда, Минута, Час, День, Месяц, Квартал, Год. При расчете результата функция игнорирует единицы измерения, которые меньше, чем указанная в данном параметре единица.

Например, если в качестве третьего параметра указать Час, то при расчете результата будут игнорироваться минуты и секунды, присутствующие в первых двух параметрах. Если же в третьем параметре указать Месяц, то игнорироваться будут дни, часы, минуты и секунды.
3 DimG
 
23.02.08
10:26
В 7.7 в зике была такая в глобальнике, мож в 8 тоже есть. На крайняк переделать по образцу можно.
4 zalexey
 
23.02.08
21:56
(2) Функция языка запросов РАЗНОСТЬДАТ
это для ЗАПРОСА!!! Что запрос фигачить для этих целей? Хотя вариант :)

Выкладываю свою может кому пригодится. Если можно оптимизировать пишите. Особо не напрягался этим. Да, и возвращает она не целое количество месяцев, т.к. мне именно так надо было получить, но можно немного откорректировать и получите количество полных месяцев или окргуленное число месяцев.

Функция ПолучитьКоличествоМесяцевВПериоде(НачалоПериода, КонецПериода) Экспорт
   
   // Определяем количество месяце в периоде
   КоличествоМесяцев = 0;
   ВременнаяДата = НачалоПериода;
   Пока ВременнаяДата < КонецДня(КонецПериода) Цикл
       
       Если КонецДня(ДобавитьМесяц(ВременнаяДата,1)) <= КонецДня(КонецПериода) Тогда
           
           КоличествоМесяцев = КоличествоМесяцев + 1;
           ВременнаяДата = ДобавитьМесяц(ВременнаяДата,1);
           
       Иначе
           
           // Проверим, что даты в одном месяце
           Если Месяц(ВременнаяДата) = Месяц(КонецПериода) Тогда
               КоличествоДнейВМесяце = (КонецМесяца(КонецПериода) - НачалоМесяца(КонецПериода)+1)/86400;
               КоличествоДнейВПериоде = (КонецДня(КонецПериода)-НачалоДня(ВременнаяДата)+1)/86400;
               КоличествоМесяцев = КоличествоМесяцев + Окр(КоличествоДнейВПериоде/КоличествоДнейВМесяце,2);
               
           Иначе
               КоличествоДнейВМесяце_1 = (КонецМесяца(ВременнаяДата) - НачалоМесяца(ВременнаяДата)+1)/86400;
               КоличествоДнейВПериоде_1 = (КонецМесяца(ВременнаяДата)-НачалоДня(ВременнаяДата)+1)/86400;
               
               КоличествоДнейВМесяце_2 = (КонецМесяца(КонецПериода) - НачалоМесяца(КонецПериода)+1)/86400;
               КоличествоДнейВПериоде_2 = (КонецДня(КонецПериода)-НачалоМесяца(КонецПериода)+1)/86400;
               
               КоличествоМесяцев = КоличествоМесяцев + Окр(КоличествоДнейВПериоде_1/КоличествоДнейВМесяце_1 + КоличествоДнейВПериоде_2/КоличествоДнейВМесяце_2,2);
           КонецЕсли;
           Прервать;
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат КоличествоМесяцев;
   
КонецФункции
Программист всегда исправляет последнюю ошибку.