1С 8.3 Дата прописью - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Дата прописью

Данные > Примеры кода 1С > 1С 8.3 Дата и время
Перейти в основной раздел:
При наличии общей процедуры (см.модуль ОбщегоНазначения) в 1С 8.3:

Функция Дата_прописью_ОбщегоНазначения(ДатаРеквизит) Экспорт // вер.2021

  
ОбластьШапки.Параметры.Дата = ВРег(Лев(ОбщегоНазначения.ДатаПрописью(ДатаРеквизит), 1)) + Сред(ОбщегоНазначения.ДатаПрописью(ДатаРеквизит), 2);

КонецФункции
Выводим дату прописью (только словами. без цифр) в 1С 8.3:
Функция Дата_прописью(ДатаРеквизит) Экспорт // вер.2021

    // Более быстрый и оптимизированный вариант Функции Дата прописью
    // Исправлена и корректно выводит даты с 2000 года (включительно) по 2099

   
ДР=Формат(ДатаРеквизит,"ДЛФ=D");

   
//Наименование месяца
   
МесяцСЗ = Новый СписокЗначений;
   
МесяцСЗ.Добавить("января");
   
МесяцСЗ.Добавить("февраля");
   
МесяцСЗ.Добавить("марта");
   
МесяцСЗ.Добавить("апреля");
   
МесяцСЗ.Добавить("мая");
   
МесяцСЗ.Добавить("июня");
   
МесяцСЗ.Добавить("июля");
   
МесяцСЗ.Добавить("августа");
   
МесяцСЗ.Добавить("сентября");
   
МесяцСЗ.Добавить("октября");
   
МесяцСЗ.Добавить("ноября");
   
МесяцСЗ.Добавить("декабря");

   
//Наименование числа
   
ЧислоСЗ = Новый СписокЗначений;
   
ЧислоСЗ.Добавить("первое","первого");
   
ЧислоСЗ.Добавить("второе","второго");
   
ЧислоСЗ.Добавить("третье","третьего");
   
ЧислоСЗ.Добавить("четвертое","четвертого");
   
ЧислоСЗ.Добавить("пятое","пятого");
   
ЧислоСЗ.Добавить("шестое","шестого");
   
ЧислоСЗ.Добавить("седьмое","седьмого");
   
ЧислоСЗ.Добавить("восьмое","восьмого");
   
ЧислоСЗ.Добавить("девятое","девятого");

   
//Наименование числительного (в именительном падеже)
   
ЧислоИП = Новый СписокЗначений;
   
ЧислоИП.Добавить("тысяча","тысячного");
   
ЧислоИП.Добавить("две тысячи","двухтысячного");
   
ЧислоИП.Добавить("три тысячи","трехтысячного");
   
ЧислоИП.Добавить("четыре тысячи","четырёхтысячного");
   
ЧислоИП.Добавить("пять","пятитысячного");
   
ЧислоИП.Добавить("шесть","шеститысячного");
   
ЧислоИП.Добавить("семь","семитысячного");
   
ЧислоИП.Добавить("восемь","восьмитысячного");
   
ЧислоИП.Добавить("девять","девятитысячного");

   
//Наименование сотен
   
СотниСЗ = Новый СписокЗначений;
   
СотниСЗ.Добавить("сто");
   
СотниСЗ.Добавить("двести");
   
СотниСЗ.Добавить("триста");
   
СотниСЗ.Добавить("четыреста");
   
СотниСЗ.Добавить("пятьсот");
   
СотниСЗ.Добавить("шестьсот");
   
СотниСЗ.Добавить("семьсот");
   
СотниСЗ.Добавить("восемьсот");
   
СотниСЗ.Добавить("девятьсот");

   
//Наименование десяток (в именительном падеже)
   
ДесяткиИП = Новый СписокЗначений;
   
ДесяткиИП.Добавить("","десятого");
   
ДесяткиИП.Добавить("двадцать","двадцатого");
   
ДесяткиИП.Добавить("тридцать","тридцатого");
   
ДесяткиИП.Добавить("сорок","сорокового");
   
ДесяткиИП.Добавить("пятьдесят","пятидесятого");
   
ДесяткиИП.Добавить("шестьдесят","шестидесятого");
   
ДесяткиИП.Добавить("семьдесят","семидесятого");
   
ДесяткиИП.Добавить("восемьдесят","восьмидесятого");
   
ДесяткиИП.Добавить("девяносто","девяностого");

   
//Наименование субдесяток от 11 до 20 (в родительном падеже)
   
СубДесРП = Новый СписокЗначений;
   
СубДесРП.Добавить("одиннадцатого");
   
СубДесРП.Добавить("двенадцатого");
   
СубДесРП.Добавить("тринадцатого");
   
СубДесРП.Добавить("четырнадцатого");
   
СубДесРП.Добавить("пятнадцатого");
   
СубДесРП.Добавить("шестнадцатого");
   
СубДесРП.Добавить("семнадцатого");
   
СубДесРП.Добавить("восемнадцатого");
   
СубДесРП.Добавить("девятнадцатого");
   
СубДесРП.Добавить("двадцать");

   
//Наименование десяток (в именительном падеже)
   
СубДесСЗ = Новый СписокЗначений;
   
СубДесСЗ.Добавить("десятое");
   
СубДесСЗ.Добавить("двадцатое","двадцать");
   
СубДесСЗ.Добавить("тридцатое","тридцать");
   
СубДесСЗ.Добавить("сороковое","сорок");
   
СубДесСЗ.Добавить("пятидесятое","пятьдесят");
   
СубДесСЗ.Добавить("шестидесятое","шестьдесят");
   
СубДесСЗ.Добавить("семидесятое","семьдесят");

   
//Наименование от 11 до 29 включительно
   
СубДесИП = Новый СписокЗначений;
   
СубДесИП.Добавить("одиннадцатое");
   
СубДесИП.Добавить("двенадцатое");
   
СубДесИП.Добавить("тринадцатое");
   
СубДесИП.Добавить("четырнадцатое");
   
СубДесИП.Добавить("пятнадцатое");
   
СубДесИП.Добавить("шестнадцатое");
   
СубДесИП.Добавить("семнадцатое");
   
СубДесИП.Добавить("восемнадцатое");
   
СубДесИП.Добавить("девятнадцатое");
   
СубДесИП.Добавить("двадцатое");
   
СубДесИП.Добавить("двадцать первое");
   
СубДесИП.Добавить("двадцать второе");
   
СубДесИП.Добавить("двадцать третье");
   
СубДесИП.Добавить("двадцать четвертое");
   
СубДесИП.Добавить("двадцать пятое");
   
СубДесИП.Добавить("двадцать шестое");
   
СубДесИП.Добавить("двадцать седьмое");
   
СубДесИП.Добавить("двадцать восьмое");
   
СубДесИП.Добавить("двадцать девятое");

   
ПДата = СтрЗаменить(СокрЛП(ДР),".",Символы.ПС); // Преобразование даты

    //Разборка дня
   
ДеньСтрока = СокрЛП(Число(СтрПолучитьСтроку(ПДата,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));
                ИначеЕсли
Число(Год_ед)>0 и Число(Год_дес)>1 Тогда//например 2021
                   
дес_г  = Строка(ДесяткиИП.Получить(Число(Год_дес)-1).Значение);
                Иначе
                   
дес_г = СубДесРП.Получить(Число(Год_ед)-1).Значение;
                КонецЕсли;

            КонецЕсли;

            Если (
Число(Год_дес)>1) или (Число(Год_дес)=0) Тогда
                Если
Число(Год_ед)<>0 Тогда
                   
ед_год =Строка(ЧислоСЗ.Получить(Число(Год_ед)-1));
                КонецЕсли;
            КонецЕсли;

           
ГодСтрока = Строка(ЗначениеЧисл)+" "+Строка(сот_г)+" "+Строка(дес_г)+" "+Строка(ед_год);

        КонецЕсли;
    КонецЕсли;

   
ГодСтрока = ГодСтрока+" года";
   
ГодСтрока = СтрЗаменить(ГодСтрока,"  "," ");
   
Результат_строка = Строка(ДеньСтрока)+" "+Строка(МесяцСтрока)+" "+Строка(ГодСтрока);
   
Результат_строка = СтрЗаменить(Результат_строка,"  "," ");

    Возврат
Результат_строка;

КонецФункции

&НаКлиенте
Процедура Старт(Кнопка)

   
Сообщить(Дата_прописью(Объект.ДатаРеквизит));

   
//Тест:
    //27.04.2000 = двадцать седьмое апреля двухтысячного года
    //15.12.2005 = пятнадцатое декабря две тысячи пятого года
    //04.08.2017 = четвертое августа две тысячи семнадцатого года
    //08.04.2023 = восьмое апреля две тысячи двадцать третьего года
    //17.10.2047 = семнадцатое октября две тысячи сорок седьмого года
    //30.01.2099 = тридцатое января две тысячи девяносто девятого года

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 27.04.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому