Функция работа с датами

Новая тема
1С 7.7 фактическое использования основного средства
Помогите составить функцию
Дата2 = ДатаВвода;
           Если ДатаСписания = 0 Тогда
                Дата1 = ДатаСписания;
           Иначе Дата1 = ТекДата;
               КонецЕсли;
            Фактсрокиспользования = Дата1;
            Пока Дата2 < Дата1 Цикл
                  Дата2 = Дата2 + 1



Срочно прошу
Ответили: пост #2
Ответ на пост №1
Константин, вопрос в чем?
Ответили: пост #3
Ответ на пост №2
Prikum,

Есть две даты, ДатаВводавЭксплуатацию и ДатаСписанияОсновногоСредства
Необходимо вычислить количество месяцев между датами. ФактическийСрокИспользования
Попробовал Циклом, не получилось чтоб увеличивался на один месяц
Подскажите пожалуйста
Не получается связать с условием, если основное средство не списано то второй датой берем текущую дату
Ну... если я верно понял...
Функцию мы честно стырим из Зарплаты и кадров:

//******************************************************************************
//      глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней)
//
//      Параметры:
//            Дата1      - первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
//            Дата2      - вторая дата (ранняя дата, с нее начинается "течение" стажа)
//            Лет            - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
//            Месяцев      - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
//            Дней      - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//
//      Описание:
//            Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней
//            между двумя датами (Дата1-Дата2)
//
Процедура глРазобратьРазностьДат(Знач Дата1,Знач Дата2,Лет=0,Месяцев=0,Дней=0) Экспорт

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

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

Ну и пользоваться будем так:
Процедура Тест()
    Лет = 0; Месяцев = 0; Дней = 0;
    глРазобратьРазностьДат(?(ДатаСписанияОсновногоСредства=Дата(0),ТекущаяДата(),ДатаСписанияОсновногоСредства),ДатаВводаВЭксплуатацию,Лет,Месяцев,Дней);
    Сообщить("Количество месяцев эксплуатации: "+Строка(Лет*12+Месяцев));
    //или так
    Сообщить("Срок эксплуатации: "+Строка(Лет)+" лет, "+Строка(Месяцев)+" месяцев, "+Строка(Дней)+" дней");

КонецПроцедуры
Большое спасибо, получилось!!

Читают тему

(гостей: 1)

Быстрый переход