Имя: Пароль:
1C
1С v8
Найти сколько месяцев в интервале дат
, ,
0 Олег
 
13.09.12
16:16
Задался целью узнать колько месяцев между 2-мя датами, чутьё подстазывает что в УПП есть такая функция в общих модулях, но инсайт ударил в голову и родил это, пользуйтесь:

Функция СколькоМесяцев(НачДата, КонДата, ЕдИзмерения)
   
   Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РАЗНОСТЬДАТ(&НачДата, &КонДата, МЕСЯЦ) КАК Период";
   
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "МЕСЯЦ", ЕдИзмерения);
   
    Запрос.УстановитьПараметр("НачДата", НачДата);
    Запрос.УстановитьПараметр("КонДата", КонДата);
   
    Возврат Запрос.Выполнить().Выгрузить()[0].Период;
   
КонецФункции
1 Лефмихалыч
 
13.09.12
16:22
(0) тебя @Гений1С укусил?
2 Олег
 
13.09.12
16:25
(1) Но ведь красиво... :)
3 Мимо Проходил
 
13.09.12
16:25
(0) Во сколько см оцениваешь?
4 Олег
 
13.09.12
16:27
(3) "см" это сантиметров? ;)
5 МихаилМ
 
13.09.12
16:31
те  в случае трехзвенки.

чтобы узнать на клиенте потребуется лезть на сервер субд ?

вместо того чтобы вычесть колво месяцев
и в зависимости от числа месяца отнять еще один.

да это задача для школьной информатики на 4 в 10 классе.


так что постыдное "красиво"
6 1C-band
 
13.09.12
16:33
Человек хочет отбить бобло, потраченное на лицензию SQL Server'а. ))
7 ptiz
 
13.09.12
16:35
(0) Слабенький запрос: вложенных нет, временных таблиц нет.
8 azernot
 
13.09.12
16:36
КоличествохМесяцев = (Год(ДатаОкончания) - Год(ДатаНачала)) * 12 + Месяц(ДатаОкончания) - Месяц(ДатаНачала) + 1;
9 Лефмихалыч
 
13.09.12
16:36
(0) в книгу знаний запостить не забудь. Там много статей упомянутого долбодемона типа:

Элегантный способ сложить 1 и 1:

Функция Сложить1и1(Один, Один)
 Возврат 2;
КонецФункции
10 Олег
 
13.09.12
16:37
(7) Я бы сказал совсем слабый, ни одной таблицы нет.
11 Олег
 
13.09.12
16:37
(9) не работает.
при Один = 3.1416;
12 МихаилМ
 
13.09.12
16:39
(8)

проверьте если
ДатаОкончания = ДатаНачала
13 Бледно Золотистый
 
13.09.12
16:40
(0)Разве между 30.09.2012 и 01.10.2012 1 месяц?
14 Лефмихалыч
 
13.09.12
16:41
(11) так я о том и говорю - (12),(13)
15 azernot
 
13.09.12
16:43
(12) От задачи зависит. Чисто математически, разумеется должен быть 0. В прикладном смысле - обычно один.
Конечно, тамм неплохо бы ещё и на корректность дат проверить, вдруг начало позже чем конец?
16 Олег
 
13.09.12
16:45
(15) с Минусом будет.
17 Лефмихалыч
 
13.09.12
16:45
кстати, ЕМНИП, это (0) в книге Митичкина описано
18 Олег
 
13.09.12
16:46
(17) дома валяется надо глянуть
19 Сергей Д
 
13.09.12
16:48
(9) А параметры зачем?
Меня в SAP убивает конструкция:
ADD число TO переменная.
Т.е. написать переменная = переменная + число считается некошерным?
20 Лефмихалыч
 
13.09.12
17:05
(19) чукча-писатель?
21 ilpar
 
14.09.12
07:25
(0) уверен что такой результат хотел получить?

разность между 21.07 и 02.08 получи и скажи нам
22 ilpar
 
14.09.12
07:28
так то смешной первый пост :) Похоже на первые шаги студента.

Когда с 1С то дружить стал?
23 ilpar
 
14.09.12
07:31
Вообще же результат в (0) аналог

Месяц(02.08)- Месяц(21.07)
Дату приводите сами к правильному
24 Эмбеддер
 
14.09.12
08:06
(23) не аналог. сработает неправильно если год один и тот же. у автора работает и в этом случае
25 ilpar
 
14.09.12
08:48
Ну так
(Год(02.08)*12+Месяц(02.08))-(Год(21.07)*12+Месяц(21.07))
26 ilpar
 
14.09.12
08:48
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение
27 Олег
 
14.09.12
10:25
А вы так и не поняли что я написал. Я написал как использовать функции реализованные только в языке запросов в модулях, показал вам нетривиальный путь решения задачи, авось кому и пригодится. Не думаю что это сильно загрузит скуль, там и таблицы-то не задействованы, а вот ваша реакция с годами не меняется, как всегда вязнете в мелочах и частности не видя главного.
Впрочем это нормальная реакция социума принимать "в штыки" все непривычное, даже если это непонятное и непривычное всего-навсего: находит "длину" периода между датами в годах, месяцах, неделях, днях, минутах, и секундах, при этом не валит систему, и даже не грузит её сверх меры.

ЗЫ:
Прошу прощения что не исправил в коде название функции, вы так уткнулись в период в месяцах, что и не заметили что функция универсальна.

ЗЗЫ: (22) 1С-ю с 2001 года, на мисте с 2003.
28 МихаилМ
 
14.09.12
10:32
(27)

вот еще ондин изобретатель
велика

v8: Новый способ вычислить разницу между датами с учетом произв. календаря

а нетривиальность в Вашем случае лишняя
29 Reset
 
14.09.12
10:48
Затрудняюсь определить, чего больше в посте (27): радости открывшего что-то для себя новичка или глупых понтов
30 fisher
 
14.09.12
11:06
(27) Осипов, перелогинтесь.
31 Бледно Золотистый
 
14.09.12
11:09