gifts2017

Полное преобразование даты в строку

Опубликовал Александр (sashulyT) в раздел Программирование - Практика программирования

При заполнение разных юридических документов (и не только) возникает необходимость  написать дату полностью словами, например:

02.07.07: Второе июля две тысячи седьмой год

В процедуре обрабатывает не все даты, а лишь ближайшие (так мне надо было).
Объявляем три списка значений, в которых будем хранить строковые представления чисел:

Перем
ЧислоСЗ
,
Месяц
,
ГодСЗ;


далее объявляем и заполняем их данными:


Месяц 
= СоздатьОбъект("СписокЗначений")
;
Месяц
.
ДобавитьЗначение
("января", 1)
; 
Месяц
.
ДобавитьЗначение
("февраля", 2)
; 
Месяц
.
ДобавитьЗначение
("марта", 3)
;
Месяц
.
ДобавитьЗначение
("апреля", 4)
;
Месяц
.
ДобавитьЗначение
("мая", 5)
;
Месяц
.
ДобавитьЗначение
("июня", 6)
;
Месяц
.
ДобавитьЗначение
("июля", 7)
;
Месяц
.
ДобавитьЗначение
("августа", 8)
;
Месяц
.
ДобавитьЗначение
("сентября", 9)
;
Месяц
.
ДобавитьЗначение
("октября", 10)
;
Месяц
.
ДобавитьЗначение
("ноября", 11)
;
Месяц
.
ДобавитьЗначение
("декабря", 12)
;
 
ЧислоСЗ 
= СоздатьОбъект("СписокЗначений")
;
ЧислоСЗ
.
ДобавитьЗначение
("Первое", 1)
;  
ЧислоСЗ
.
ДобавитьЗначение
("Второе", 2)
;  
ЧислоСЗ
.
ДобавитьЗначение
("Третье", 3)
;  
ЧислоСЗ
.
ДобавитьЗначение
("Четвертое", 4)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Пятое", 5)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Шестое", 6)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Седьмое", 7)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Восьмое", 8)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Девятое", 9)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Десятое", 10)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Одинадцатое", 11)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Двенадцатое", 12)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Тринадцатое", 13)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Четырнадцатое", 14)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Пятнадцатое", 15)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Шестнадцатое", 16)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Семнадцатое", 17)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Восемнадцатое", 18)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Девятнадцатое", 19)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Двадцатое", 20)
;  
ЧислоСЗ
.
ДобавитьЗначение
("Тридцатое", 30)
; 
ЧислоСЗ
.
ДобавитьЗначение
("Тридцат первое", 31)
;

ЧислоСЗ
.
ДобавитьЗначение
("Двадцать", "2Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Тридцать", "3Х")
;  
ЧислоСЗ
.
ДобавитьЗначение
("Сорок" "4Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Пятьдесят", "5Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Шестьдесят", "6Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Семьдесят", "7Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Восемьдесят", "8Х")
;
ЧислоСЗ
.
ДобавитьЗначение
("Девяносто", "9Х")
;

ГодСЗ 
= СоздатьОбъект("СписокЗначений")
;
ГодСЗ
.
ДобавитьЗначение
("одна тысяча", 1000)
;   
ГодСЗ
.
ДобавитьЗначение
("две тысячи", 2000)
; 

ГодСЗ
.
ДобавитьЗначение
("первый", 1)
; 
ГодСЗ
.
ДобавитьЗначение
("второй", 2)
;
ГодСЗ
.
ДобавитьЗначение
("третий", 3)
;
ГодСЗ
.
ДобавитьЗначение
("четвертый", 4)
;
ГодСЗ
.
ДобавитьЗначение
("пятый", 5)
;
ГодСЗ
.
ДобавитьЗначение
("шестой", 6)
;
ГодСЗ
.
ДобавитьЗначение
("седьмой", 7)
;
ГодСЗ
.
ДобавитьЗначение
("восьмой", 8)
;
ГодСЗ
.
ДобавитьЗначение
("девятый", 9)
;
ГодСЗ
.
ДобавитьЗначение
("десятый", 10)
;
ГодСЗ
.
ДобавитьЗначение
("одинадцатый", 11)
;
ГодСЗ
.
ДобавитьЗначение
("двенадцатый", 12)
;
ГодСЗ
.
ДобавитьЗначение
("тринадцатый", 13)
;
ГодСЗ
.
ДобавитьЗначение
("четырнадцатый", 14)
;
ГодСЗ
.
ДобавитьЗначение
("пятнадцатый", 15)
;
ГодСЗ
.
ДобавитьЗначение
("шестнадцатый", 16)
;
ГодСЗ
.
ДобавитьЗначение
("семнадцатый", 17)
;
ГодСЗ
.
ДобавитьЗначение
("восемьнадцатый",18)
;
ГодСЗ
.
ДобавитьЗначение
("девятнадцатый", 19)
; 
ГодСЗ
.
ДобавитьЗначение
("двадцаты", 20)
;
ГодСЗ
.
ДобавитьЗначение
("тридцатый", 30)
;
ГодСЗ
.
ДобавитьЗначение
("сороковой", 40)
;
ГодСЗ
.
ДобавитьЗначение
("пятидесятый", 50)
;
ГодСЗ
.
ДобавитьЗначение
("шестидесятый", 60)
; 
ГодСЗ
.
ДобавитьЗначение
("семидесятый", 70)
;
ГодСЗ
.
ДобавитьЗначение
("восвидесятый", 80)
;
ГодСЗ
.
ДобавитьЗначение
("девяностый", 90)
;

Пусть ДатаА - дата которую надо преобразовать.

	номерМесяца 
=
ДатаМесяц
(
ДатаА
)
; 
	МесяцСтр	
=
месяц
.
Получить
(
номерМесяца
)
;  
	
	числоДаты	
=
ДатаЧисло
(
ДатаА
)
;
	
Если (
числоДаты 
<= 20)
или 
(
числоДаты 
>= 30)
тогда
		ЧислоСтр 
=
ЧислоСЗ
.
Получить
(
числоДаты
)
; 
	иначе                                          
		ЧислоСтр 
=
ЧислоСЗ
.
Получить
("2Х") + " " +
Нрег
(
ЧислоСЗ
.
Получить
(
числоДаты
-20))
; 
	
КонецЕсли
;

	годДаты		
=
строка
(
ДатаГод
(
датаА
))
; 
	тысячЛет	
=
Число
(
Лев
(
годДаты
, 1))
;
	стоЛет		
=
Число
(
Сред
(
годДаты
, 2, 1))
; 
	копЛет		
=
Число
(
Сред
(
годДаты
, 3, 2))
;
	
	ГодСТр 
=
ГодСЗ
.
Получить
(
тысячЛет 
* 1000) +
?
(
стоЛет
=9, " девятьсот ", " ")
;
	                                 
	
Если
копЛет
<20
тогда
		ГодСТр 
=
ГодСТр 
+
ГодСЗ
.
Получить
(
копЛет
)
;
	иначеЕсли прав
(
строка
(
копЛет
), 1)<>"0"
тогда                                  
		номМес 
=
цел
(
копЛет
/10)
;
		ГодСТр 
=
ГодСТр 
+
Нрег
(
ЧислоСЗ
.
Получить
(
строка
(
номМес
)+"Х")) + " " +
Нрег
(
ГодСЗ
.
Получить
(
копЛет
-
номМес
*10))
; 
	иначе
		ГодСТр 
=
ГодСТр 
+
Нрег
(
ГодСЗ
.
Получить
(
копЛет
))
; 
	
КонецЕсли
;



ну а дальше выводим дату, или возвращаем:

сообщить
(
строка
(
ДатаА
) + ": " +
ЧислоСтр 
+ " " +
МесяцСтр 
+ " " +
ГодСТр 
+ " год")
;


Возврат
ЧислоСтр 
+ " " +
МесяцСтр 
+ " " +
ГодСТр 
+ " год")
;

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа