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