7.7 Работа с датой

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Time dont wait, 16 ноя 2009.

  1. TopicStarter Overlay
    Time dont wait
    Offline

    Time dont wait Опытный в 1С

    Регистрация:
    20 окт 2009
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    26
    В иные сотрудника есть дата приема, мне нужно чтобы в форме элемента выводило его стаж , автоматически считало, тоесть отнимало текдату от датаприема,
    я написал вот
    Код:
    Цел((ТекущаяДата()-ДатаПриема)/365.25)
    
    
    Так мне показывает число лет , для месяцов
    Код:
    Цел(Датамесяц(ТекущаяДата())-ДатаМесяц(ДатаПриема))
    
    
    И того же типа для числа дней
    Но оно выбивает неправильный стаж, если не тяжело объясните ошибку
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Дата месяц возвращает номер месяца - причем здесь количество дней?
  3. TopicStarter Overlay
    Time dont wait
    Offline

    Time dont wait Опытный в 1С

    Регистрация:
    20 окт 2009
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    26
    Ну допустим, а как мне прописать, чтобы стаж автоматически считало?
    В годах месяцах и днях..
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот процедуры расчета/отображения стажа из ЗиК

    Код:
    //******************************************************************************
    //	глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней)
    //
    //	Параметры:
    //		Дата1	- первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
    //		Дата2	- вторая дата (ранняя дата, с нее начинается "течение" стажа)
    //		Лет		- в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
    //		Месяцев	- в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
    //		Дней	- в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
    //
    //	Описание:
    //		Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней
    //		между двумя датами (Дата1-Дата2)
    //
    // алгоритм Пенсионного фонда
    //Мк = ДатаМесяц(Дата1);
    //Гк = ДатаГод(Дата1);
    //Если ДатаЧисло(Дата1) - ДатаЧисло(Дата2) < 0 Тогда
    //	Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2) + 30;
    //	Мк = Мк - 1;
    //Иначе
    //	Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2);
    //КонецЕсли;
    //Если Мк - ДатаМесяц(Дата2) < 0 Тогда
    //	Месяцев = Мк - ДатаМесяц(Дата2) + 12;
    //	Гк = Гк - 1;
    //Иначе
    //	Месяцев = Мк - ДатаМесяц(Дата2);
    //КонецЕсли;
    //Лет	= Гк-ДатаГод(Дата2);
    //Дней = Дней + 1;
    //Если Дней >= 30 Тогда
    //	Дней = 0;
    //	Месяцев = Месяцев + 1;
    //КонецЕсли;
    //Если Месяцев = 12 Тогда
    //	Месяцев = 0;
    //    Лет	= Лет + 1
    //КонецЕсли;
    Процедура глРазобратьРазностьДат(Знач Дата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; Месяцев = 0; Дней = 0;
    // если в тексте стажа пустая строка, то стаж не задан
    Если ПустаяСтрока(ТекстСтажа)=1 Тогда
    Возврат "<<Стаж не задан>>"
    КонецЕсли;
    глРазобратьРазностьДат(ДатаСтажа,Дата(ТекстСтажа),Лет,Месяцев,Дней);
    Возврат ""	+Лет	+" "+глФормаМножественногоЧисла("год","года","лет",Лет)
    +" "+Месяцев+" "+глФормаМножественногоЧисла("месяц","месяца","месяцев",Месяцев)
    +" "+Дней	+" "+глФормаМножественногоЧисла("день","дня","дней",Число(Дней))
    КонецФункции	// глПредставлениеСтажа
    
    

Поделиться этой страницей