Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 апр 2024, 00:38

Платформа 7.7 (7.70.027): есть ли функция Дата прописью?

Автор Shok, 10 июн 2010, 08:43

0 Пользователей и 1 гость просматривают эту тему.

Shok

Доброго времени суток, Уважаемые! Возникла необходимость вывести из 1С в шаблон Word дату, но дата должна быть прописью.. Подскажите пожалуйста есть ли готовая функция которая возвращает по сокращённой дате Дату прописью? например 01 июля 2009 надо - первое июля две тысячи девятого года. Заранее спасибо!

Myti


Shok

Цитата: Myti от 10 июн 2010, 09:00
смотри функцию "Формат" в синтаксисе
Спасибо, но
там нет такого.. мне нужно чтоб всё в дате было прописью..

Myti

хм.
http://www.infostart.ru/public/21999/

Обработка "Дата прописью"

Публикация № 21999 27.08.09

Приемы и методы разработки - Универсальные функции

  • Фото1

Бывает нужно дату представить в письменном виде например так:
27.09.2009г. - двадцать седьмого августа две тысячи девятого года.
Тогда Вам сюда.
Обработка учитывает тысячелетия, столетия и десятилетия.

Обработка формирует дату пропись в именительном и родительном падеже. Альтернатива есть на ссылке //infostart.ru/projects/5716/. Мы Сашкой начали делать эту обработку независимо и кто быстрее. Сделали по разному, но результат тоже. Правда он выложил первый :).

Скачать файлы

Наименование Файл Версия Размер

Дата прописью


.epf 8,06Kb

132

.epf 8,06Kb 132 Скачать

Специальные предложения


Myti

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

Shok

Цитата: Myti от 10 июн 2010, 10:17
Если на 7,,,то
// ПрописьДата()
Функция глПрописьДата(Д) Экспорт
   стрРез = "";
   
   спсМес = СоздатьОбъект("СписокЗначений");
   спсМес.ДобавитьЗначение("января");
   спсМес.ДобавитьЗначение("февраля");
   спсМес.ДобавитьЗначение("марта");
   спсМес.ДобавитьЗначение("апреля");
   спсМес.ДобавитьЗначение("мая");
   спсМес.ДобавитьЗначение("июня");
   спсМес.ДобавитьЗначение("июля");
   спсМес.ДобавитьЗначение("августа");
   спсМес.ДобавитьЗначение("сентября");
   спсМес.ДобавитьЗначение("октября");
   спсМес.ДобавитьЗначение("ноября");
   спсМес.ДобавитьЗначение("декабря");
   
   спсЧисл = СоздатьОбъект("СписокЗначений");
   спсЧисл.ДобавитьЗначение("первое","первого");
   спсЧисл.ДобавитьЗначение("второе","второго");
   спсЧисл.ДобавитьЗначение("третье","третьего");
   спсЧисл.ДобавитьЗначение("четвертое","четвертого");
   спсЧисл.ДобавитьЗначение("пятое","пятого");
   спсЧисл.ДобавитьЗначение("шестое","шестого");
   спсЧисл.ДобавитьЗначение("седьмое","седьмого");
   спсЧисл.ДобавитьЗначение("восьмое","восьмого");
   спсЧисл.ДобавитьЗначение("девятое","девятого");
   
   //числительные им.падеж
   спсЧислИм = СоздатьОбъект("СписокЗначений");
   спсЧислИм.ДобавитьЗначение("тысяча","тысячного");
   спсЧислИм.ДобавитьЗначение("две тысячи","двухтысячного");
   спсЧислИм.ДобавитьЗначение("три тысячи","трехтысячного");
   спсЧислИм.ДобавитьЗначение("четыре тысячи","четырёхтысячного");
   спсЧислИм.ДобавитьЗначение("пять","пятитысячного");
   спсЧислИм.ДобавитьЗначение("шесть","шеститысячного");
   спсЧислИм.ДобавитьЗначение("семь","семитысячного");
   спсЧислИм.ДобавитьЗначение("восемь","восьмитысячного");
   спсЧислИм.ДобавитьЗначение("девять","девятитысячного");
   
   спсСотни = СоздатьОбъект("СписокЗначений");
   спсСотни.ДобавитьЗначение("сто");
   спсСотни.ДобавитьЗначение("двести");
   спсСотни.ДобавитьЗначение("триста");
   спсСотни.ДобавитьЗначение("четыреста");
   спсСотни.ДобавитьЗначение("пятьсот");
   спсСотни.ДобавитьЗначение("шестьсот");
   спсСотни.ДобавитьЗначение("семьсот");
   спсСотни.ДобавитьЗначение("восемьсот");
   спсСотни.ДобавитьЗначение("девятьсот");
   
   //десятки им.падеж
   спсДесИм = СоздатьОбъект("СписокЗначений");
   спсДесИм.ДобавитьЗначение("","десятого");
   спсДесИм.ДобавитьЗначение("двадцать","двадцатого");
   спсДесИм.ДобавитьЗначение("тридцать","тридцатого");
   спсДесИм.ДобавитьЗначение("сорок","сорокового");
   спсДесИм.ДобавитьЗначение("пятьдесят","пятидесятого");
   спсДесИм.ДобавитьЗначение("шестьдесят","шестидесятого");
   спсДесИм.ДобавитьЗначение("семьдесят","семидесятого");
   спсДесИм.ДобавитьЗначение("восемьдесят","восьмидесятого");
   спсДесИм.ДобавитьЗначение("девяносто","девяностого");
   
   //субдесятки род.падеж
   спсСубДесРод = СоздатьОбъект("СписокЗначений");
   спсСубДесРод.ДобавитьЗначение("одиннадцатого");
   спсСубДесРод.ДобавитьЗначение("двенадцатого");
   спсСубДесРод.ДобавитьЗначение("тринадцатого");
   спсСубДесРод.ДобавитьЗначение("четырнадцатого");
   спсСубДесРод.ДобавитьЗначение("пятнадцатого");
   спсСубДесРод.ДобавитьЗначение("шестнадцатого");
   спсСубДесРод.ДобавитьЗначение("семнадцатого");
   спсСубДесРод.ДобавитьЗначение("восемнадцатого");
   спсСубДесРод.ДобавитьЗначение("девятнадцатого");
   
   спсДес = СоздатьОбъект("СписокЗначений");
   спсДес.ДобавитьЗначение("десятое");
   спсДес.ДобавитьЗначение("двадцатое","двадцать");
   спсДес.ДобавитьЗначение("тридцатое","тридцать");
   спсДес.ДобавитьЗначение("сороковое","тридцать");
   спсДес.ДобавитьЗначение("пятидесятое","тридцать");
   спсДес.ДобавитьЗначение("шестидесятое","тридцать");
   спсДес.ДобавитьЗначение("семидесятое","тридцать");
   
   спсСубДес = СоздатьОбъект("СписокЗначений");
   спсСубДес.ДобавитьЗначение("одиннадцатое");
   спсСубДес.ДобавитьЗначение("двенадцатое");
   спсСубДес.ДобавитьЗначение("тринадцатое");
   спсСубДес.ДобавитьЗначение("четырнадцатое");
   спсСубДес.ДобавитьЗначение("пятнадцатое");
   спсСубДес.ДобавитьЗначение("шестнадцатое");
   спсСубДес.ДобавитьЗначение("семнадцатое");
   спсСубДес.ДобавитьЗначение("восемнадцатое");
   спсСубДес.ДобавитьЗначение("девятнадцатое");
   
   спсДаты = СтрЗаменить(СокрЛП(Д),".",РазделительСтрок);
   //разбираем день
   стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,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," ","")+дс+" "+е;
      КонецЕсли;
   Иначе
      
   КонецЕсли;
   стрГод = стрГод+" года";
   стрРез = стрДень+" "+стрМес+" "+стрГод;
   //Сообщить(стрДень+" "+стрМес+" "+стрГод);
   Возврат стрРез;
КонецФункции

Большое большое Спасибо! Очень долго искал.. Хорошо что есть добрые люди)

Myti


vasya1

Здравствуйте. Стесняюсь спросить... по пунктам можете рассказать куда это вставить, чтобы в счёте всё это работало? Спасибо.

volodya1122

Этот текст вставить в глобальный модуль (между любыми функциями или процедурами).
в печатной форме счета где нудно написать дату прописю вставить выражение  глПрописьДата(ДатаДок)

andrey-ekt

Почету-то день и месяц пишет прописью, а год цифрой причем только последние 2, т.е. шестое августа 14 года

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск