Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как получить количество календарных месяцев между двумя датами          
Vofka Подменю пользователя
сообщение 01.06.12, 13:18
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Создаю эту тему, как результат исследований исходя из этой темы.

Способ первый. Не мой, а из типовой конфигурации, считает по идее не только месяцы, но я проверял только на месяцах:

Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0) Экспорт
    
    Лет        = 0;
    Месяцев    = 0;
    Дней    = 0;
    Если Дата1 > Дата2 Тогда
        
        ВременнаяДата = Дата1;
        Если День(ВременнаяДата) < День(Дата2) Тогда
            Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400;
            ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
        КонецЕсли;
        Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда
            ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
            Месяцев = 12;
        КонецЕсли;
        Лет        = Макс(             Год(ВременнаяДата)        - Год(Дата2),    0);
        Месяцев    = Макс(Месяцев    + Месяц(ВременнаяДата)    - Месяц(Дата2),    0);
        Дней    = Макс(Дней        + День(ВременнаяДата)    - День(Дата2),    0);
        
        // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах

        Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда
            Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры    // РазобратьРазностьДат


А вот мой способ:

Функция РазностьДатВМесяцах(Знач НачальнаяДата, Знач КонечнаяДата)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    РАЗНОСТЬДАТ(&КонечнаяДата, &НачальнаяДата, МЕСЯЦ) КАК РазностьВМесяцах
    |";
    
    Запрос.УстановитьПараметр("НачальнаяДата", НачальнаяДата);
    Запрос.УстановитьПараметр("КонечнаяДата", КонечнаяДата);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    
    РазностьВМесяцах = Выборка.РазностьВМесяцах;
    
    Если День(КонечнаяДата) > День(НачальнаяДата) Тогда
        РазностьВМесяцах = РазностьВМесяцах - 1;
    КонецЕсли;
    
    Возврат РазностьВМесяцах;
    
КонецФункции


Вроде оба отрабатывают корректно smile.gif

Сообщение отредактировал Vofka - 01.06.12, 13:19

Спасибо сказали: Small sa, svlad-90,

Acid Подменю пользователя
сообщение 30.06.16, 10:18
Сообщение #2

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

Цитата(Vofka @ 01.06.12, 14:18) *
РАЗНОСТЬДАТ(&КонечнаяДата, &НачальнаяДата, МЕСЯЦ)

пардон. даты попутал...

Сообщение отредактировал Acid - 30.06.16, 10:25

Vofka Подменю пользователя
сообщение 30.06.16, 11:06
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Acid, а?

Plsergey Подменю пользователя
сообщение 19.02.24, 14:28
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 2 раз
Рейтинг: 3.2

Нехай буде для довідки
КоличествоМесяцев =  (Месяц(ДатаОкончания) + 12*Год(ДатаОкончания))-(Месяц(ДатаНачала)    + 12*Год(ДатаНачала))


Сообщение отредактировал Vofka - 19.02.24, 15:06

Спасибо сказали: kihor, Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 3:59
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!