1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// Процедура вычисляет количество лет, месяцев и дней между двумя датами // // Параметры // Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату) // Дата2 – дата, вторая дата (ранняя дата, с нее начинается ""течение"" стажа) // Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) // Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) // Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2) // Процедура РазобратьРазностьДат(Дата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)))); КонецЕсли; КонецЕсли; КонецПроцедуры |
Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД.
Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды — "ГГ-ММ-ДД".
Пользуйтесь. arithmometr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
//******************************************************** //Назначение: преобразует строку в число путем преобразования каждого символа //по правилам преобразования типов // <стр> - строка; // //Примечание: // Функция зпГлСтрокуВЧисло(стр) Экспорт стр1 = СокрЛП(стр); Чис1 = ""; Для х = 1 По СтрДлина(стр1) Цикл Чис1 = Чис1 + Число(Сред(стр1,х,1)); КонецЦикла; Чис = Число(Чис1); Возврат Чис; КонецФункции // зпГлСтрокуВЧисло(стр) //******************************************************** // Функция зпГлВычислитьСрок(Аргум1,Аргум2="",Парам=777) // <Аргум1> - Дата1 или Срок1 // <Аргум2> - Дата2 или Срок2 // <Срок> - Период в формате ГГ-ММ-ДД // Параметры: '0' - ЗнВозврата = Дата2-Дата1 - вичислить период между датами в формате ГГ-ММ-ДД // '-1' - ЗнВозврата = Дата1-Срок - вычесть период // '1' - ЗнВозврата = Дата1+Срок - добавить период // Иначе ЗнВозврата = Правильный срок // 'П' - ЗнВозврата = Правильный срок прописью // 'К' - ЗнВозврата = Правильный срок прописью краткий формат // '+' - ЗнВозврата = Срок1+Срок2 - сложить периоды //////// '-' - ЗнВозврата = Срок1-Срок2 - вычесть периоды // // Примечание: Ст.241-1 КЗоТ Украины // Функция зпГлВычислитьСрок(Аргум1,Аргум2="",Парам="") Экспорт Перем ЗнВозврата; Если (Парам=0) Тогда Дата1 = Мин(Дата(Аргум1),Дата(Аргум2)); Дата2 = Макс(Дата(Аргум1),Дата(Аргум2)); Мес = (ДатаГод(Дата2) - ДатаГод(Дата1))* 12 + (ДатаМесяц(Дата2) - ДатаМесяц(Дата1)); Дни = ДатаЧисло(Дата2) - ДатаЧисло(Дата1); Если (Дни < 0) Тогда Мес = Мес - 1; Дни = Дни + ДатаЧисло(КонМесяца(Дата1)); КонецЕсли; Если (Дни >= ДатаЧисло(КонМесяца(Дата2))) и (Дата2 = КонМесяца(Дата2)) Тогда Мес = Мес + 1; Дни = 0; КонецЕсли; Лет = Цел(Мес/12); Мес = Мес - Лет* 12; ЗнВозврата = Формат(Лет,"Ч(0)2.0")+"-"+Формат(Мес,"Ч(0)2.0")+"-"+Формат(Дни,"Ч(0)2.0"); ИначеЕсли (Число(Парам)*Число(Парам)=1) Тогда Дата1 = Дата(Аргум1); Аргум2 = зпГлВычислитьСрок(Аргум2); Срок = Аргум2; Мес = Число(Лев(Срок,2))* 12 + Число(Сред(Срок,4,2)); Дни = Число(Прав(Срок,2)); Дата2 = ДобавитьМесяц(Дата1,Парам*Мес); Если (Дата1 = КонМесяца(Дата1)) Тогда Дни = Мин(ДатаЧисло(КонМесяца(Дата2)) - 1, Дни); ИначеЕсли (Дни >= ДатаЧисло(КонМесяца(Дата2))*((1-Парам)/2) - Парам*ДатаЧисло(Дата2)) Тогда Дни = Мин(ДатаЧисло(КонМесяца(ДобавитьМесяц(Дата2,1))) - 1, Дни); КонецЕсли; ЗнВозврата = Дата2 + Парам*Дни; Иначе Если (Найти(Парам, "+") > 0) Тогда Срок1 = зпГлСтрокуВЧисло(СтрЗаменить(Аргум1+".","-",""))/10; Срок2 = зпГлСтрокуВЧисло(СтрЗаменить(Аргум2+".","-",""))/10; Дни = Срок1%100 + Срок2%100; Мес = Цел((Срок1%10000 + Срок2%10000 - Дни)/1000); Лет = Цел(Срок1/10000) + Цел(Срок2/10000); Мес = Мес + Цел(Дни/30); Дни = Дни%30; Лет = Лет + Цел(Мес/12); Мес = Мес%12; Иначе Срок = зпГлСтрокуВЧисло(СтрЗаменить(Аргум1+".","-",""))/10; Мес = Цел(Срок/100) - Цел(Срок/10000)*(100-12); Дни = Мин(Срок - Цел(Срок/100)* 100, 30); Лет = Цел(Мес/12); Мес = Мес - Лет* 12; КонецЕсли; Если (Найти(Парам, "П") > 0) Тогда ЗнВозврата = "років "+Лет+", місяців "+Мес+", днів "+Дни; ИначеЕсли (Найти(Парам, "К") > 0) Тогда ЗнВозврата = ""+Лет+"р."+Мес+"м."+Дни+"д."; Иначе ЗнВозврата = Формат(Лет,"Ч(0)2.0")+"-"+Формат(Мес,"Ч(0)2.0")+"-"+Формат(Дни,"Ч(0)2.0"); КонецЕсли; КонецЕсли; Возврат ЗнВозврата; КонецФункции |