При разработке часто пользователю хочется видеть на форме день недели словом, например: Вторник , Среда и т.д. Собственно как получить день недели словом?
Через функцию формат:
Код 1C v 8.3 ДеньПрописью = Формат(ТекущаяДата(), "ДФ=дддд");
Еще вариант для краткого представления:
Код 1C v 8.3 мнстр = "пн
|вт
|ср
|чт
|пт
|сб
|вс";
ДеньПрописью = СтрПолучитьСтроку(мнстр,ДеньНедели(ТекущаяДата()));
Основная функция будет использовать в себе три вспомогательных:
Код 1C v 8.х Функция РазностьМеждуДатамиВМесяцах(Дата1,Дата2)
Год1 = Год(Дата1);
Год2 = Год(Дата2);
Месяц1 = Месяц(Дата1);
Месяц2 = Месяц(Дата2);
День1 = День(Дата1);
День2 = День(Дата2);
Результат = (Год1 - Год2) * 12 + Месяц1 - Месяц2;
Если Результат < 0 Тогда Результат = 0 - Результат; КонецЕсли;
Если ((Дата1 > Дата2) И (День1 < День2)) ИЛИ ((Дата1 < Дата2) И (День1 > День2)) Тогда
Результат = Результат - 1;
КонецЕсли;
Возврат Результат;
КонецФункции
Код 1C v 8.х Функция ВозрастВМесяцахИГодах(Месяцы)
Структура = Новый Структура;
Структура.Вставить("Год");
Структура.Вставить("Месяц");
Структура.Месяц = Месяцы % 12;
Структура.Год = (Месяцы - Структура.Месяц) / 12;
Возврат Структура;
КонецФункции
Код 1C v 8.х Функция ВозрастПрописью(Структура)
Строка = "";
Если Структура.Год > 0 Тогда
ПоследняяЦифраГода = Число(Сред(Строка(Структура.Год), СтрДлина(Строка(Структура.Год)), 1));
Если (ПоследняяЦифраГода = 1) И (Структура.Год <> 11) Тогда Строка = Строка(Структура.Год) + " год"; КонецЕсли;
Если (ПоследняяЦифраГода >= 2) И (ПоследняяЦифраГода <=4) И ((Структура.Год < 12) ИЛИ (Структура.Год > 14)) Тогда Строка = Строка(Структура.Год) + " года"; КонецЕсли;
Если ((ПоследняяЦифраГода >= 5) И (ПоследняяЦифраГода <=9)) ИЛИ (ПоследняяЦифраГода = 0) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
Если (Структура.Год >= 11) И (Структура.Год <= 14) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
КонецЕсли;
Если (Структура.Год > 0) И (Структура.Год < 3) И (Структура.Месяц > 0) Тогда
Строка = Строка + ", ";
КонецЕсли;
Если (Структура.Месяц > 0) И (Структура.Год <= 3) Тогда
Если Структура.Месяц = 1 Тогда Строка = Строка + "1 месяц"; КонецЕсли;
Если (Структура.Месяц >= 2) И (Структура.Месяц <= 4) Тогда Строка = Строка + Строка(Структура.Месяц) + " месяца"; КонецЕсли;
Если Структура.Месяц >= 5 Тогда Строка = Строка + Строка(Структура.Месяц) + " месяцев"; КонецЕсли;
КонецЕсли;
Возврат Строка;
КонецФункции
А вот и основная:
Код 1C v 8.х Функция ВозрастВычислить(Возраст,Дата)
Месяцы = РазностьМеждуДатамиВМесяцах(Возраст,Дата);
ВозрастСтруктура = ВозрастВМесяцахИГодах(Месяцы);
ВозрастПрописью = ВозрастПрописью(ВозрастСтруктура);
Возврат ВозрастПрописью;
КонецФункции
Изменения 2011.07.26: Небольшие доработки в процедуре
ВозрастПрописью - теперь всё работает правильно.
При помощи приведенных ниже функций можно вывести дату прописью, например:
03.08.2009 - третье августа две тысячи девятого года
Код 1C v 8.х
// Функция Дата прописью
// Параметры:
// ДП - Дата
// Возвращаемое значение:
// дата прописью
//
// Модификация для v8: Evgeny Migachev
Функция ДатаПрописью(ДП) Экспорт
стрРез = "";
Д=Формат(ДП,"ДЛФ=D");
спсМес = Новый СписокЗначений;
спсМес.Добавить("января");
спсМес.Добавить("февраля");
спсМес.Добавить("марта");
спсМес.Добавить("апреля");
спсМес.Добавить("мая");
спсМес.Добавить("июня");
спсМес.Добавить("июля");
спсМес.Добавить("августа");
спсМес.Добавить("сентября");
спсМес.Добавить("октября");
спсМес.Добавить("ноября");
спсМес.Добавить("декабря");
спсЧисл = Новый СписокЗначений;
спсЧисл.Добавить("первое","первого");
спсЧисл.Добавить("второе","второго");
спсЧисл.Добавить("третье","третьего");
спсЧисл.Добавить("четвертое","четвертого");
спсЧисл.Добавить("пятое","пятого");
спсЧисл.Добавить("шестое","шестого");
спсЧисл.Добавить("седьмое","седьмого");
спсЧисл.Добавить("восьмое","восьмого");
спсЧисл.Добавить("девятое","девятого");
//числительные им.падеж
спсЧислИм = Новый СписокЗначений;
спсЧислИм.Добавить("тысяча","тысячного");
спсЧислИм.Добавить("две тысячи","двухтысячного");
спсЧислИм.Добавить("три тысячи","трехтысячного");
спсЧислИм.Добавить("четыре тысячи","четырёхтысячного");
спсЧислИм.Добавить("пять","пятитысячного");
спсЧислИм.Добавить("шесть","шеститысячного");
спсЧислИм.Добавить("семь","семитысячного");
спсЧислИм.Добавить("восемь","восьмитысячного");
спсЧислИм.Добавить("девять","девятитысячного");
спсСотни = Новый СписокЗначений;
спсСотни.Добавить("сто");
спсСотни.Добавить("двести");
спсСотни.Добавить("триста");
спсСотни.Добавить("четыреста");
спсСотни.Добавить("пятьсот");
спсСотни.Добавить("шестьсот");
спсСотни.Добавить("семьсот");
спсСотни.Добавить("восемьсот");
спсСотни.Добавить("девятьсот");
//десятки им.падеж
спсДесИм = Новый СписокЗначений;
спсДесИм.Добавить("","десятого");
спсДесИм.Добавить("двадцать","двадцатого");
спсДесИм.Добавить("тридцать","тридцатого");
спсДесИм.Добавить("сорок","сорокового");
спсДесИм.Добавить("пятьдесят","пятидесятого");
спсДесИм.Добавить("шестьдесят","шестидесятого");
спсДесИм.Добавить("семьдесят","семидесятого");
спсДесИм.Добавить("восемьдесят","восьмидесятого");
спсДесИм.Добавить("девяносто","девяностого");
//субдесятки род.падеж
спсСубДесРод = Новый СписокЗначений;
спсСубДесРод.Добавить("одиннадцатого");
спсСубДесРод.Добавить("двенадцатого");
спсСубДесРод.Добавить("тринадцатого");
спсСубДесРод.Добавить("четырнадцатого");
спсСубДесРод.Добавить("пятнадцатого");
спсСубДесРод.Добавить("шестнадцатого");
спсСубДесРод.Добавить("семнадцатого");
спсСубДесРод.Добавить("восемнадцатого");
спсСубДесРод.Добавить("девятнадцатого");
спсДес = Новый СписокЗначений;
спсДес.Добавить("десятое");
спсДес.Добавить("двадцатое","двадцать");
спсДес.Добавить("тридцатое","тридцать");
спсДес.Добавить("сороковое","тридцать");
спсДес.Добавить("пятидесятое","тридцать");
спсДес.Добавить("шестидесятое","тридцать");
спсДес.Добавить("семидесятое","тридцать");
спсСубДес = Новый СписокЗначений;
спсСубДес.Добавить("одиннадцатое");
спсСубДес.Добавить("двенадцатое");
спсСубДес.Добавить("тринадцатое");
спсСубДес.Добавить("четырнадцатое");
спсСубДес.Добавить("пятнадцатое");
спсСубДес.Добавить("шестнадцатое");
спсСубДес.Добавить("семнадцатое");
спсСубДес.Добавить("восемнадцатое");
спсСубДес.Добавить("девятнадцатое");
спсДаты = СтрЗаменить(СокрЛП(Д),".",Символы.ПС);
//разбираем день
стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,1)));
Если СтрДлина(стрДень)=1 Тогда
стрДень = спсЧисл.Получить(Число(стрДень)-1).Значение;
Иначе
десДень = Число(Лев(стрДень,1));
едДень = Число(Прав(стрДень,1));
Если едДень=0 Тогда
стрДень = спсДес.Получить(десДень-1).Значение;
Иначе
Если десДень>1 Тогда
т = Строка(спсДес.Получить(десДень-1));
стрДень = т+" "+Строка(спсЧисл.Получить(едДень-1).Значение);
Иначе
стрДень = спсСубДес.Получить(едДень-1).Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
//разбираем месяц
стрМес = спсМес.Получить(Число(СтрПолучитьСтроку(спсДаты,2))-1).Значение;
//разбираем год
стрГод = СтрПолучитьСтроку(спсДаты,3);
длинаГода = СтрДлина(стрГод);
Если длинаГода=4 Тогда
тыс = Сред(стрГод,1,1); сот = Сред(стрГод,2,1); дес = Сред(стрГод,3,1); ед = Сред(стрГод,4,1);
_т = спсЧислИм.Получить(Число(тыс)-1).Значение;
Если (Число(сот)=0) и (Число(дес)=0) и (Число(ед)=0) Тогда
миллениум = Строка(спсЧислИм.Получить(Число(тыс)-1));
стрГод = миллениум;
Иначе
с = ""; дс = ""; е = "";
Если Число(сот)<>0 Тогда
с = спсСотни.Получить(Число(сот)-1).Значение;
КонецЕсли;
Если Число(дес)<>0 Тогда
Если Число(ед)=0 Тогда
дг = Строка(спсДесИм.Получить(Число(дес)-1));
дс = дг;
Иначе
дс = спсСубДесРод.Получить(Число(ед)-1).Значение;
КонецЕсли;
КонецЕсли;
Если (Число(дес)>1) или (Число(дес)=0) Тогда
Если Число(ед)<>0 Тогда
е =Строка(спсЧисл.Получить(Число(ед)-1));
КонецЕсли;
КонецЕсли;
стрГод = Строка(_т)+" "+Строка(с)+" "+Строка(дс)+" "+Строка(е);
КонецЕсли;
Иначе
КонецЕсли;
стрГод = стрГод+" года";
стрГод = СтрЗаменить(стрГод," "," ");
стрРез = Строка(стрДень)+" "+Строка(стрМес)+" "+Строка(стрГод);
стрРез = СтрЗаменить(стрРез," "," ");
Возврат стрРез;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
сообщить(ДатаПрописью(РеквизитДатаНаФорме));
КонецПроцедуры
Код 1C v 7.x
// ПрописьДата()
//
// Параметры:
// Д - дата в формате ДД.MM.ГГГГ
// Возвращаемое значение:
// дата прописью
//
// Автор: hunter
Функция глПрописьДата(Д) Экспорт
стрРез = "";
спсМес = СоздатьОбъект("СписокЗначений");
спсМес.ДобавитьЗначение("января");
спсМес.ДобавитьЗначение("февраля");
спсМес.ДобавитьЗначение("марта");
спсМес.ДобавитьЗначение("апреля");
спсМес.ДобавитьЗначение("мая");
спсМес.ДобавитьЗначение("июня");
спсМес.ДобавитьЗначение("июля");
спсМес.ДобавитьЗначение("августа");
спсМес.ДобавитьЗначение("сентября");
спсМес.ДобавитьЗначение("октября");
спсМес.ДобавитьЗначение("ноября");
спсМес.ДобавитьЗначение("декабря");
спсЧисл = СоздатьОбъект("СписокЗначений");
спсЧисл.ДобавитьЗначение("первое","первого");
спсЧисл.ДобавитьЗначение("второе","второго");
спсЧисл.ДобавитьЗначение("третье","третьего");
спсЧисл.ДобавитьЗначение("четвертое","четвертого");
спсЧисл.ДобавитьЗначение("пятое","пятого");
спсЧисл.ДобавитьЗначение("шестое","шестого");
спсЧисл.ДобавитьЗначение("седьмое","седьмого");
спсЧисл.ДобавитьЗначение("восьмое","восьмого");
спсЧисл.ДобавитьЗначение("девятое","девятого");
//числительные им.падеж
спсЧислИм = СоздатьОбъект("СписокЗначений");
спсЧислИм.ДобавитьЗначение("тысяча","тысячного");
спсЧислИм.ДобавитьЗначение("две тысячи","двухтысячного");
спсЧислИм.ДобавитьЗначение("три тысячи","трехтысячного");
спсЧислИм.ДобавитьЗначение("четыре тысячи","четырёхтысячного");
спсЧислИм.ДобавитьЗначение("пять","пятитысячного");
спсЧислИм.ДобавитьЗначение("шесть","шеститысячного");
спсЧислИм.ДобавитьЗначение("семь","семитысячного");
спсЧислИм.ДобавитьЗначение("восемь","восьмитысячного");
спсЧислИм.ДобавитьЗначение("девять","девятитысячного");
спсСотни = СоздатьОбъект("СписокЗначений");
спсСотни.ДобавитьЗначение("сто");
спсСотни.ДобавитьЗначение("двести");
спсСотни.ДобавитьЗначение("триста");
спсСотни.ДобавитьЗначение("четыреста");
спсСотни.ДобавитьЗначение("пятьсот");
спсСотни.ДобавитьЗначение("шестьсот");
спсСотни.ДобавитьЗначение("семьсот");
спсСотни.ДобавитьЗначение("восемьсот");
спсСотни.ДобавитьЗначение("девятьсот");
//десятки им.падеж
спсДесИм = СоздатьОбъект("СписокЗначений");
спсДесИм.ДобавитьЗначение("","десятого");
спсДесИм.ДобавитьЗначение("двадцать","двадцатого");
спсДесИм.ДобавитьЗначение("тридцать","тридцатого");
спсДесИм.ДобавитьЗначение("сорок","сорокового");
спсДесИм.ДобавитьЗначение("пятьдесят","пятидесятого");
спсДесИм.ДобавитьЗначение("шестьдесят","шестидесятого");
спсДесИм.ДобавитьЗначение("семьдесят","семидесятого");
спсДесИм.ДобавитьЗначение("восемьдесят","восьмидесятого");
спсДесИм.ДобавитьЗначение("девяносто","девяностого");
//субдесятки род.падеж
спсСубДесРод = СоздатьОбъект("СписокЗначений");
спсСубДесРод.ДобавитьЗначение("одиннадцатого");
спсСубДесРод.ДобавитьЗначение("двенадцатого");
спсСубДесРод.ДобавитьЗначение("тринадцатого");
спсСубДесРод.ДобавитьЗначение("четырнадцатого");
спсСубДесРод.ДобавитьЗначение("пятнадцатого");
спсСубДесРод.ДобавитьЗначение("шестнадцатого");
спсСубДесРод.ДобавитьЗначение("семнадцатого");
спсСубДесРод.ДобавитьЗначение("восемнадцатого");
спсСубДесРод.ДобавитьЗначение("девятнадцатого");
спсДес = СоздатьОбъект("СписокЗначений");
спсДес.ДобавитьЗначение("десятое");
спсДес.ДобавитьЗначение("двадцатое","двадцать");
спсДес.ДобавитьЗначение("тридцатое","тридцать");
спсДес.ДобавитьЗначение("сороковое","тридцать");
спсДес.ДобавитьЗначение("пятидесятое","тридцать");
спсДес.ДобавитьЗначение("шестидесятое","тридцать");
спсДес.ДобавитьЗначение("семидесятое","тридцать");
спсСубДес = СоздатьОбъект("СписокЗначений");
спсСубДес.ДобавитьЗначение("одиннадцатое");
спсСубДес.ДобавитьЗначение("двенадцатое");
спсСубДес.ДобавитьЗначение("тринадцатое");
спсСубДес.ДобавитьЗначение("четырнадцатое");
спсСубДес.ДобавитьЗначение("пятнадцатое");
спсСубДес.ДобавитьЗначение("шестнадцатое");
спсСубДес.ДобавитьЗначение("семнадцатое");
спсСубДес.ДобавитьЗначение("восемнадцатое");
спсСубДес.ДобавитьЗначение("девятнадцатое");
спсДаты = СтрЗаменить(СокрЛП(Д),".",РазделительСтрок);
//разбираем день
стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,1)));
Если СтрДлина(стрДень)=1 Тогда
стрДень = спсЧисл.ПолучитьЗначение(Число(стрДень));
Иначе
десДень = Число(Лев(стрДень,1));
едДень = Число(Прав(стрДень,1));
Если едДень=0 Тогда
стрДень = спсДес.ПолучитьЗначение(десДень);
Иначе
Если десДень>1 Тогда
т = ""; спсДес.ПолучитьЗначение(десДень,т);
стрДень = т+" "+спсЧисл.ПолучитьЗначение(едДень);
Иначе
стрДень = спсСубДес.ПолучитьЗначение(едДень);
КонецЕсли;
КонецЕсли;
КонецЕсли;
//разбираем месяц
стрМес = спсМес.ПолучитьЗначение(Число(СтрПолучитьСтроку(спсДаты,2)));
//разбираем год
стрГод = СтрПолучитьСтроку(спсДаты,3);
длинаГода = СтрДлина(стрГод);
Если длинаГода=4 Тогда
тыс = Сред(стрГод,1,1); сот = Сред(стрГод,2,1); дес = Сред(стрГод,3,1); ед = Сред(стрГод,4,1);
_т = спсЧислИм.ПолучитьЗначение(Число(тыс));
Если (Число(сот)=0) и (Число(дес)=0) и (Число(ед)=0) Тогда
миллениум = ""; спсЧислИм.ПолучитьЗначение(Число(тыс),миллениум);
стрГод = миллениум;
Иначе
с = ""; дс = ""; е = "";
Если Число(сот)<>0 Тогда
с = спсСотни.ПолучитьЗначение(Число(сот));
КонецЕсли;
Если Число(дес)<>0 Тогда
Если Число(ед)=0 Тогда
_дг = ""; спсДесИм.ПолучитьЗначение(Число(дес),_дг);
дс = _дг;
Иначе
Если Число(дес)>1 Тогда
дс = спсДесИм.ПолучитьЗначение(Число(дес));
Иначе
дс = спсСубДесРод.ПолучитьЗначение(Число(ед));
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если (Число(дес)>1) или (Число(дес)=0) Тогда
Если Число(ед)<>0 Тогда
//е = "";
спсЧисл.ПолучитьЗначение(Число(ед),е);
КонецЕсли;
КонецЕсли;
стрГод = _т+?(ПустоеЗначение(с)=0," ","")+с+?(ПУстоеЗначение(дс)=0," ","")+дс+" "+е;
КонецЕсли;
Иначе
КонецЕсли;
стрГод = стрГод+" года";
стрРез = стрДень+" "+стрМес+" "+стрГод;
//Сообщить(стрДень+" "+стрМес+" "+стрГод);
Возврат стрРез;
КонецФункции
Код 1C v 8.х
//Функция формирует удобное для чтения представление значений.
// Примеры форматирования чисел
ЗначФормат = Формат(123456.789, "ЧЦ=10; ЧДЦ=2"); // ЗначФормат = "123 456,79"
ЗначФормат = Формат(123456.789, "ЧГ=0; ЧДЦ=2"); // ЗначФормат = "123456,79"
ЗначФормат = Формат(123456.789, "ЧРД='-'"); // ЗначФормат = "123 456-789"
ЗначФормат = Формат(-123456.789, "ЧО=0"); // ЗначФормат = "(123 456,789)";
ЗначФормат = Формат(13, "ЧЦ=5; ЧВН=; ЧГ=0"); // ЗначФормат = "00013";
//В 8 версии для вывовода чисел прописью используется ЧислоПрописью
ЧислоПрописью(Сумма, "L=ru_RU", Валюта.ПараметрыПрописиНаРусском)
ЧислоПрописью(1457.25,"L=en_US","dollar, dollars, cent, cents, 2"); // One thousand four hundreds fifty seven dollars 25 cents.
ЧислоПрописью(Сумма,"Рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2");
//Пример представления Числа в виде Даты
ЗначФормат = Формат(25021949, "ЧЦ=8; ЧРГ=.; ЧВН=; ЧГ=4,2,0"); // ЗначФормат = "25.02.1949"
// Примеры форматирования дат
ЗначФормат = Формат('20020820153309', "ДФ=""дд ММММ гггг 'г.' ЧЧ:мм:сс"""); // ЗначФормат = "20 августа 2002 г. 15:33:09"
ЗначФормат = Формат('20020820153309', "ДФ=""дд/ММ-гггг"""); // ЗначФормат = "20/08-2002"
ЗначФормат = Формат('20020820153309', "ДФ='q ""кв."" yyyy'"); // ЗначФормат = "3 кв. 2002";
ЗначФормат = Формат('20020820153309', "ДФ='""Итого"" q ""квартал""'") ; // ЗначФормат = "Итого 3 квартал";
ЗначФормат = Формат('20020820153309', "ДФ='ММММ гггг'"); // ЗначФормат = "Август 2002 г.";
ЗначФормат = Формат('20020820153309', "ДЛФ=ДД"); // ЗначФормат = "20 августа 2002 г.";
ЗначФормат = Формат('20020820153309', "ДЛФ=Д"); // ЗначФормат = "20.08.2002";
ЗначФормат = Формат('20020820153309', "ДЛФ=В"); // ЗначФормат = "15:33:09";
ЗначФормат = Формат('20020820153309', "ДФ=HHmmssyyyyMMdd"); // ЗначФормат = "15330920020820";
ЗначФормат = Формат('20020820153309', "ДФ=HH:mm:ss yyyy MM dd"); // Время 24 часа - ЗначФормат = "15:33:09 2002 08 20";
ЗначФормат = Формат('20020820153309', "ДФ=hh:mm:ss yyyy MM dd"); // Время 12 часов - ЗначФормат = "03:33:09 2002 08 20";
Формат(Дата(2009, 1, 1), "ДЛФ=DD") + ", " + ОпределитьДеньНедели(ДеньНедели(Дата(2009, 1, 1))); // 1 января 2009 г., Четверг (Смотрите в "Работаем с Датами" Функция Определить день недели)
Формат(Дата(2009, 1, 1), "ДФ=ММММ") + ", " + Формат(Дата(2009, 1, 1), "ДФ=yyyy") + " г."; // Январь, 2009 г.
Формат(НачалоНедели(Дата(2009, 1, 1)), "ДФ='dd MMMM yyyy'") + " г. - " + Формат(КонецНедели(Дата(2009, 1, 1)), "ДФ='dd MMMM yyyy'") + " г."; // 29 декабря 2008 г. - 04 января 2009 г.
// ДЕКАДУ нельзя вывести через формат, но можно так:
Строка(Цел(День(Дата('20020820153309')) / 10) + 1)+" декада" = 2 декада
// Примеры форматирования логических выражений
ЗначФормат = Формат(Истина, "БЛ=Отсутствует; БИ=Доступен"); // ЗначФормат = "Доступен";
ЗначФормат = Формат(Ложь, "БЛ=Нет; БИ=Да"); // ЗначФормат = "Нет";
Код 1C v 7.x
// Символы, определяющие тип форматируемых данных:
// Ч — число (Англоязычный синоним: N)
ЗначФормат = Формат(123.15, "Ч(0)10.2") // 0000123.15
Долг = Строка(Формат(Долг(), "Ч12.2")) + " " + Валюта.Сокр_назв;
// Возможен вывод денежных величин и просто целых чисел прописью. В этом случае форматная строка должна иметь вид "ЧПДС".
// Наличие буквы "П" (в английском варианте для аналогичной цели используется буква "S") определяет сам факт вывода числа прописью.
// Символ "Д" (в английском варианте — "M") обозначает вывод денежной величины и является необязательным.
// Символ "С" (в английском варианте — "H") также необязателен и означает вывод с копейками.
ИтогоСуммаПрописью = Формат(Итог("Сумма"), "ЧПДС");
КоличествоНаименованийПрописью = Формат(КоличествоСтрок(), "ЧП");
// С — строка (Англоязычный синоним: S)
// "Сn", где n — положительное целое число определяющее ширину поля, в котором будет размещаться строка.
// В случае, если ширина поля превосходит длину строки сформатированная строка будет дополнена справа пробелами, если же ширина поля меньше длины строки — строка будет усечена справа.
// Д — дата (Англоязычный синоним: D)
ДатаДокумента = Формат(Док.ДатаДок,"Д ДД.ММ.ГГ"); //12.03.08
ДатаДокумента = Формат("01.01.1999", "Д(0)ДДММММГГГГ"); // 01 Января 1999 г.
//Для форматирования даты используется форматная строка вида "Д<ПодстрокаФормата>", где <Подстрока Формата> представляет собой строку, определяющую вид сформатированного представления даты:
//DDMMYY (ДДММГГ) дата в виде ДД.ММ.ГГ
//DDMMYYYY (ДДММГГГГ) дата в виде ДД.ММ.ГГГГ
//DDMMMMYYYY (ДДММММГГГГ) дата в виде ДД месяц прописью ГГГГ
//(0)DDMMMMYYYY ((0)ДДММММГГГГ) этот формат представляет собой вариант предыдущего формата с тем отличием, что число месяца всегда выводится двумя цифрами, т. е. для чисел меньших 10 спереди будет добавлен 0. Например: Формат('01.01.1999', ' 'Д(0)ДДММММГГГГ' ') = 01 Января 1999 г.
//MMMMYYYY (ММММГГГГ) дата в виде месяц прописью ГГГГ
//MMMMYY (ММММГГ) дата в виде месяц прописью ГГ
//ММММ (ММММ) дата в виде месяц прописью
//QQQQYYYY (ККККГГГГ) дата в виде N квартала ГГГГ
//QQQQYY (ККККГГ) дата в виде N квартала ГГ
//QQQQ дата в виде N квартала
//YYYYMMDD (ГГГГММДД) дата в виде ГГГГММДД, то есть дата '10.11.1998' будет представлена как строка "19981110"
//WWWW (HHHH) выводит наименование дня недели, соответствующее указанной дате. Наименования дней недели берутся из файла прописи.
Код 1C v 8.х
// Процедура вычисляет количество лет, месяцев и дней между двумя датами
//
// Параметры
// Дата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
Код 1C v 7.x
//********************************************************
//Назначение: преобразует строку в число путем преобразования каждого символа
//по правилам преобразования типов
// <стр> - строка;
//
//Примечание:
//
Функция зпГлСтрокуВЧисло(стр) Экспорт
стр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");
КонецЕсли;
КонецЕсли;
Возврат ЗнВозврата;
КонецФункции