gifts2017

Функция преобразования СТРОКИ в ДАТУ

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

Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "01/10/13","01-10-2013","10,13","10.13","01.03.2013 0:00:00" к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.

	 ФункцияПолучитьДатуИзСтроки(Стр) 

	     Д = Дата("00010101000000");

	     ЕслиПустаяСтрока(Стр) Тогда
	         Возврат Д;
	     КонецЕсли;

	     ЕслиНайти(Стр,".") > 0 Тогда

	         Если Найти(Стр,":") > 0 И Найти(Стр," ") > 0 Тогда 
	             М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр," ");
	             ВозвратПолучитьДатуИзСтроки(М[0]);
	         КонецЕсли;

	         М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,".");

	     ИначеЕсли Найти(Стр,"/")>0 Тогда

	         М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"/");

	     ИначеЕсли Найти(Стр,",")>0 Тогда

	         М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,",");

	     ИначеЕсли Найти(Стр,"-")>0 Тогда

	         М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"-");

	     КонецЕсли; 

	     Попытка

	         Если М.Количество() = 3 Тогда //"01.02.13" или "01.02.2013"
	             Год = ?(СтрДлина(М[2]) = 2,2000 + М[2],М[2]);
	             Д = Дата(Год,М[1],М[0]);
	         ИначеЕсли М.Количество() = 2 Тогда //"02.13" или "02.2013";
	             Год = ?(СтрДлина(М[1]) = 2,2000 + М[1],М[1]);
	             Д = Дата(Год,М[0],1);
	         КонецЕсли;

	     Исключение
	     КонецПопытки; 

	     ВозвратД; 

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

	 // Функция "расщепляет" строку на подстроки, используя заданный
	 //        разделитель. Разделитель может иметь любую длину.
	 //        Если в качестве разделителя задан пробел, рядом стоящие пробелы
	 //        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
	 //        игнорируются.
	 //        Например,
	 //        РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
	 //        три из которых - пустые строки, а
	 //        РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
	 //
	 //    Параметры:
	 //        Стр -  строка, которую необходимо разложить на подстроки.
	 //                        Параметр передается по значению.
	 //        Разделитель -     строка-разделитель, поумолчанию - запятая.
	 //
	 //
	 //    Возвращаемое значение:
	 //        массив значений, элементы которого - подстроки
	 //

	 ФункцияРазложитьСтрокуВМассивПодстрок(ЗначСтр, Разделитель = ",") Экспорт

	     МассивСтрок = НовыйМассив();

	     ЕслиРазделитель = " " Тогда

	         Стр = СокрЛП(Стр);

	         Пока Истина Цикл

	             Поз = Найти(Стр,Разделитель);

	             Если Поз = 0 Тогда
	                 МассивСтрок.Добавить(Стр);
	                 Возврат МассивСтрок;
	             КонецЕсли;

	             МассивСтрок.Добавить(Лев(Стр,Поз - 1));
	             Стр = СокрЛ(Сред(Стр,Поз));

	         КонецЦикла;

	     Иначе

	         ДлинаРазделителя = СтрДлина(Разделитель);

	         Пока Истина Цикл

	             Поз = Найти(Стр,Разделитель);

	             Если Поз = 0 Тогда
	                 МассивСтрок.Добавить(Стр);
	                 Возврат МассивСтрок;
	             КонецЕсли;

	             МассивСтрок.Добавить(Лев(Стр,Поз - 1));
	             Стр = Сред(Стр,Поз + ДлинаРазделителя);

	         КонецЦикла;
	     КонецЕсли;

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

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Виктор Ким (victorkim64) (1.00 $m)
Подписаться Добавить вознаграждение
Комментарии
0. Max (maxtomsk) 30.09.11 09:23
Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "01/10/13","01-10-2013","10,13","10.13","01.03.2013 0:00:00" к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.



Перейти к публикации

1. Антон (dv2008) 30.09.11 13:40
неплохо, только можно было бы разделитель сделать параметром, и код бы упростился
2. Max (maxtomsk) 30.09.11 15:39
(1) dv2008, Я уже думал, но у меня с разных мест идет дата в разных форматах, поэтому чтоб не гадать, поставил все на проверку...
3. Федор (tdr1225) 06.10.11 10:53
(1),(2)
по поводу параметра-разделителя
а он нужен?
попробуйте такое:
Код
ст = "01-10-2013";
сообщить(Дата(ст)); 
Показать полностью

попробуйте вместо минуса использовать другой символ, букву
попробуйте разные символы, напр., "01{10}2013"
будете приятно удивлены
4. Max (maxtomsk) 29.11.11 04:12
(3) tdr1225,
попробовал Ваш код, у меня выдает ошибку. что с фигурными скобками, что с минусом:
{(2)}: Преобразование значения к типу Дата не может быть выполнено
5. Федор (tdr1225) 29.11.11 08:10
6. abc2000 (abc2000) 30.11.11 05:13
Побробуйте, передать строку 01.10/2013 или 01-10/2011. Ваша Функция не совершена.
7. Dima Dima (dumal) 30.11.11 17:04
Как правило, необходимость перевода строки в дату возникает при загрузке информации откуда-нибудь (например, из текстового файла, или Экселя). В таком случае, написать парсер для даты совсем несложно - потому что все строки одного вида. Таким образом, универсальность здесь оказывается не то чтобы лишней, но может заметно замедлить загрузку. Тем не менее, безусловно, полезная вещь. Отдельное спасибо за открытость
8. Александр Скороходов (askorn) 01.12.11 09:19
вот пример с меньшей функциональностью и с меньшим временем выполнения:

Функция ДатаИзСтроки10(стрДата) экспорт // "01.12.2011" преобразует в '01.12.2011 0:00:00'
Попытка
возврат Дата(Сред(стрДата,7,4)+Сред(стрДата,4,2)+Лев(стрДата,2))
Исключение
возврат '00010101'
КонецПопытки;
КонецФункции // ДатаИзСтроки10()
surr; codename-s; b00ker; 88wau24ru; CatNotDog; Alex_IT; freeek; PhoenixAOD; Somebody1; kostyaomsk; SP2000; PokerFace; Brook; klinval; Doomino; angelochekss666; Gremlin; illUMI; Km91; Montecrizto; buganov; anig99; sanfoto; verad; TeploU; killovolt; +26 Ответить
9. Сергей Сергеев (SERJ_1CC) 06.12.11 09:50
10. finder10 (finder10) 16.12.11 19:41
Только что преогромно выручил. Преогромное же спасибо. Нет, вернее, СПАСИБО!
11. Роман Роман (hr7095) 20.01.12 12:13
Спасибо, пригодилось. Сэкономил время.
12. Юлия Петрова (petrovaUL) 01.02.12 12:52
13. Карина -- (ponaroshku) 24.07.12 05:15
14. EfiopReal (Созинов) 09.08.12 14:08
Спасибо, интересная реализация, жаль время не учитывает.
15. Ula1c (ula1c) 12.03.13 12:46
Спасибо. Делала импорт отсканированных Товарных чеков из EXCEL в авансовый отчет. Для этого сначала в EXCEL дату входящего документа преобразовывала из формата Текст в формат Дата, а затем в формат число. Далее при импорте в 1с необходимо было преобразовать это число-дату в дату 1с - при этом учесть и то, что в EXCEL исчисление даты начинается с 01.01.1900 и то, что в EXCEL 1900год - высокосный год. Выглядело это так:
ДатаВходящегоДокумента = Дата('19000101')+(86400*(Число(ДатаВходящегоДокумента)-2)
с вашей функцией как-то лаконичней:
ДатаВходящегоДокумента = ПолучитьДатуИзСтроки(ДатаВходящегоДокумента)
К тому же избавилась от ненужных преобразований даты в EXCEL .
16. Nata (Nata) 21.05.13 01:46
Спасибо. Очень пригодилась.
(6) Хочу сказать, что вся 1С далека от совершенства.
Согласна с (7) - Отдельное спасибо за открытость.
17. Александр Федоров (Sasha255n) 04.07.13 15:05
Спсибо Долго рассказывать для чего но пригодилась
18. Ольга (_n26__) 12.08.13 08:04
Большое спасибо! Очень нужная и полезная вещица! Пригодилась вовремя! Спасибо!
19. Роман Верховых (Lo1jke) 20.08.13 19:48
Даже не пришлось думать, спасибо. Очень помогает постоянно.
20. Иван Борисов (Kaavan) 09.09.13 05:35
21. Иван Борисов (Kaavan) 09.09.13 05:37
Понадобилось доработать функцию, т.к. требовалось разобрать дату с буржуйским форматом "mm/dd/yyyy".
Вот моя версия, с указанием формата даты:
Функция ПолучитьДатуИзСтроки(Стр, ФорматДаты="")
    Д = Дата("00010101000000");
    Если ПустаяСтрока(Стр) Тогда
        Возврат Д;
	КонецЕсли;
	
	Если Не ПустаяСтрока(ФорматДаты) Тогда
	    Если Найти(ФорматДаты,".")>0 Тогда
	        Если Найти(ФорматДаты,":")>0 И Найти(ФорматДаты," ")>0 Тогда 
	            МассивФормат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматДаты," ");
	            Возврат ПолучитьДатуИзСтроки(МассивФормат[0]);
	        КонецЕсли;
	        МассивФормат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматДаты,".");
	    ИначеЕсли Найти(ФорматДаты,"/")>0 Тогда
	        МассивФормат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматДаты,"/");
	    ИначеЕсли Найти(ФорматДаты,",")>0 Тогда
	        МассивФормат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматДаты,",");
	    ИначеЕсли Найти(ФорматДаты,"-")>0 Тогда
	        МассивФормат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФорматДаты,"-");
	    КонецЕсли;
        Если МассивФормат.Количество()<>3 Тогда
			ФорматДаты = "";
        КонецЕсли;
	КонецЕсли;

    Если Найти(Стр,".")>0 Тогда
        Если Найти(Стр,":")>0 И Найти(Стр," ")>0 Тогда 
            МассивДата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр," ");
            Возврат ПолучитьДатуИзСтроки(МассивДата[0]);
        КонецЕсли;
        МассивДата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр,".");
    ИначеЕсли Найти(Стр,"/")>0 Тогда
        МассивДата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр,"/");
    ИначеЕсли Найти(Стр,",")>0 Тогда
        МассивДата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр,",");
    ИначеЕсли Найти(Стр,"-")>0 Тогда
        МассивДата = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр,"-");
    КонецЕсли;

    Попытка
		Если МассивДата.Количество()=3 Тогда //"01.02.13" или "01.02.2013"
			Если ФорматДаты <> "" Тогда
				Для й = 0 ПО МассивФормат.Количество()-1 Цикл
					ЭлементФормата = МассивФормат[й];
					Если Найти(ЭлементФормата, "д")>0 ИЛИ Найти(ЭлементФормата, "Д")>0 ИЛИ Найти(ЭлементФормата, "D")>0 ИЛИ Найти(ЭлементФормата, "d")>0 Тогда
						День = Число(МассивДата[й]);
					КонецЕсли;
					Если Найти(ЭлементФормата, "м")>0 ИЛИ Найти(ЭлементФормата, "М")>0 ИЛИ Найти(ЭлементФормата, "M")>0 ИЛИ Найти(ЭлементФормата, "m")>0 Тогда
						Месяц = Число(МассивДата[й]);
					КонецЕсли;
					Если Найти(ЭлементФормата, "г")>0 ИЛИ Найти(ЭлементФормата, "Г")>0 ИЛИ Найти(ЭлементФормата, "Y")>0 ИЛИ Найти(ЭлементФормата, "y")>0 Тогда
						Год = МассивДата[й];
						Если СтрДлина(Год)=2 Тогда
							Если Число(Год) > 50 Тогда
								Год = 1900 + Год;
							Иначе	
								Год = 2000 + Год;
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
            	Д = Дата(Год, Месяц, День);
			Иначе
				Год = ?(СтрДлина(МассивДата[2])=2,2000+МассивДата[2],МассивДата[2]);
           		Д = Дата(Год, МассивДата[1], МассивДата[0]);
			КонецЕсли;			
        ИначеЕсли МассивДата.Количество()=2 Тогда //"02.13" или "02.2013";
            Год = ?(СтрДлина(МассивДата[1])=2,2000+МассивДата[1],МассивДата[1]);
            Д = Дата(Год,МассивДата[0],1);
        КонецЕсли;
    Исключение
    КонецПопытки;

    Возврат Д;
КонецФункции
...Показать Скрыть


upd:
Для годов больше 50 (94, например) плюсуется сдвиг 1900, иначе 2000
22. Алексей Столбов (ITAlex) 26.09.13 17:54
Вот спасибо!
а если в переданной строке заменить разделитель на некий стандартный (напр. "%"), тогда код можно сделать компактнее, т.е. только для стандартного разделителя.
23. JLaikova (JLaikova) 01.10.13 15:58
Спасибо! Помогла очень функция!!!!
24. Виктор Ким (victorkim64) 11.10.13 07:42
Спасибо. свою делать лень. пригодилась.
25. Сергей Сторожев (ssa) 21.11.13 14:25
26. Ololo Anonim (ololoanonim) 05.05.14 07:05
Спасибо. Оооооочень полезная вещь.
27. Andrey (kentavr27) 10.07.14 15:08
Может кому понадобится без длинных функций... так вот, как ни странно, но работает такая конструкция:
Дата("03.06.2014 0:15:55"); =>  03.06.2014 0:15:55	//Тип("Дата")

равно как
Дата("3.6.2014 0:15:55"); =>  03.06.2014 0:15:55	//Тип("Дата")
perepetulichka; Manticor; freeek; flyer; fvr2000; getnight; AndreykO; madfox; CeHbKA; +9 Ответить 1
28. Алек4сандр Ершов (sanja) 22.09.14 09:24
Спасибо, пригодилась функция.
29. Vodoley (Vodoley) 10.12.14 14:44
а нет у кого варианта преобразовать из строки вида 06 ноября 2014 г.
а то ничего путного в голову не приходит: придется все имена месяцев перебирать (
30. Андрей Зырянов (AndreykO) 12.01.15 08:22
(27) kentavr27, при чём Дата("03.06.2014"); не сработает, вызовет исключение, а Дата("03.06.2014 00:00:00"); - сработает. Хотя это и странно, ведь в СП именно год на первом месте...
31. Сергей (ildarovich) 12.01.15 09:14
(29) Vodoley, вот тут Минимализмы в примере под номером 13 есть нужное вам решение. На всякий случай приведу его здесь полностью
Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт 
    Попытка 
        ё = Формат('00010101', "ДФ=" + ФорматДаты) // - необязательная проверка первого правильности параметра 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101' 
    КонецПопытки; 
    Ч = Новый Соответствие; 
    Для ё = 1 По СтрДлина(ФорматДаты) + 7 Цикл 
        Ч[Сред(ФорматДаты + "dMyHhms", ё, 1)] = 0    // - инициализация частей даты 
    КонецЦикла; 
    Для ё = 1 По 12 Цикл 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMММ"), Формат(ё, "ЧЦ=4; ЧВН=")); // - замена названий месяцев числами 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMМ" ), Формат(ё, "ЧЦ=3; ЧВН=")) 
    КонецЦикла; 
    Для ё = 1 По СтрДлина(ФорматДаты) Цикл 
        Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Дано, ё, 1)); // - накопление частей даты 
        Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, ё, 1)) И НЕ Найти("0123456789", Сред(Дано, ё, 1)) // - необязательная проверка на цифры 
    КонецЦикла; 
    Ч["y"] = Ч["y"] + ?(Ч["y"] < 50, 2000, ?(Ч["y"] < 100, 1900, 0)); // - дополнение двух цифр года до четырех 
    Попытка 
        Возврат Дата(Ч["y"], Ч["M"], Ч["d"], Ч["H"] + Ч["h"], Ч["m"], Ч["s"]) 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101' 
    КонецПопытки 
КонецФункции
...Показать Скрыть
Это универсальная функция - работает с любым форматом даты. В том числе с тем, где месяц написан прописью. Дни недели разве что словами нельзя (в данной реализации) называть.
DoctorRoza; invertercant; +2 Ответить 1
32. Юрий (Mart) 19.08.15 12:09
А мне подошел вот такой вариант:

ДатаСтрокой = "2015-08-22";
ДатаДатой = Дата(СтрЗаменить(ДатаСтрокой, "-", "")); // 22.08.2015 0:00:00

ну, то есть сначала надо вырезать все разделители и получить непрерывный набор цифр:

Дата("20150822110645") равносильно 22.08.2015 11:06:45
33. Evgeniy Nikolaenko (DrBlack) 03.12.15 11:57
(31) ildarovich, с любым форматом даты как раз-таки не работает )
Уж не спрашивайте меня о специфике, но в общем, я пытался сопротивляться... :)

Доработал предложенный Вами алгоритм для формата данных без даты (только время), пример формата: "ДФ=HH:mm:ss"

Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) 
	ФорматДаты = СтрЗаменить(ФорматДаты, "ДФ=",  "");
	Попытка 
        ё = Формат('00010101', "ДФ=" + ФорматДаты); // - необязательная проверка первого правильности параметра 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101'; 
	КонецПопытки;
	ЭтоВремяБезДаты = Найти(ФорматДаты, "y") = 0;
	Ч = Новый Соответствие; 
    Для ё = 1 По СтрДлина(ФорматДаты) + 7 Цикл 
        Ч[Сред(ФорматДаты + "dMyHhms", ё, 1)] = 0;    // - инициализация частей даты 
    КонецЦикла; 
    Для ё = 1 По 12 Цикл 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMММ"), Формат(ё, "ЧЦ=4; ЧВН=; ЧГ=0")); // - замена названий месяцев числами 
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMМ" ), Формат(ё, "ЧЦ=3; ЧВН=; ЧГ=0")); 
    КонецЦикла; 
    Для ё = 1 По СтрДлина(ФорматДаты) Цикл 
        Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Дано, ё, 1)); // - накопление частей даты 
        Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, ё, 1)) И НЕ Найти("0123456789", Сред(Дано, ё, 1)); // - необязательная проверка на цифры 
	КонецЦикла;
	Если НЕ ЭтоВремяБезДаты Тогда
    		Ч["y"] = Ч["y"] + ?(Ч["y"] < 50, 2000, ?(Ч["y"] < 100, 1900, 0)); // - дополнение двух цифр года до четырех 
	Иначе
		Ч["y"] = 1;
		Ч["M"] = 1;
		Ч["d"] = 1;
	КонецЕсли;
    Попытка 
        Возврат Дата(Ч["y"], Ч["M"], Ч["d"], Ч["H"] + Ч["h"], Ч["m"], Ч["s"]); 
    Исключение 
        Ошибка = Истина; 
        Возврат '00010101'; 
    КонецПопытки 
КонецФункции
...Показать Скрыть
34. Сергей (ildarovich) 03.12.15 14:36
(33) DrBlack, мне самому решение задачи №13 не очень нравится. Я его привел "за компанию" с другими комментариями. Не для того, чтобы использовать в готовом виде, а для того, чтобы можно было извлечь приемы использования соответствия в этой задаче.
35. Дмитрий Герасименко (Winston) 29.01.16 10:22
Спасибо. Очень помогло. Всё работает, просто замечательно.
36. Андрей Зырянов (AndreykO) 11.03.16 06:46
Спасибо. Очень помогло. Всё работает.
37. Дмитрий Поликарпов (dmpolik) 04.08.16 16:06
Делал себе функцию для даты из exel... функция не универсальная, для решения локальной задачи.

Функция ПолучитьДату(тДата)
	
		ТаблицаМесяцев = Новый ТаблицаЗначений;
		ТаблицаМесяцев.Колонки.Добавить("Номер");
		ТаблицаМесяцев.Колонки.Добавить("Написание");
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "01";
		Нстр.Написание = "ЯНВРАРЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "02";
		Нстр.Написание = "ФЕВРАЛЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "03";
		Нстр.Написание = "МАРТА";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "04";
		Нстр.Написание = "АПРЕЛЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "05";
		Нстр.Написание = "МАЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "06";
		Нстр.Написание = "ИЮНЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "07";
		Нстр.Написание = "ИЮЛЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "08";
		Нстр.Написание = "АВГУСТА";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "09";
		Нстр.Написание = "СЕНТЯБРЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "10";
		Нстр.Написание = "ОКТЯБРЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "11";
		Нстр.Написание = "НОЯБРЯ";
		нстр = ТаблицаМесяцев.Добавить();
		Нстр.Номер = "12";
		Нстр.Написание = "ДЕКАБРЯ";
        	
	
		тДата 		= СокрЛП(СтрЗаменить(тДата,"г."," "));
		ДоПробела  	= Найти(тДата," ");
		тЧисло 		= СокрЛП(Лев(тДата,ДоПробела));
		тГод 		= СокрЛП(Прав(тДата,4));
		ДлинаСтроки = СтрДлина(тДата);
		МесяцСтрока = Лев(тДата,ДлинаСтроки-4);
		ДлинаМесяца = СтрДлина(МесяцСтрока);
		МесяцСтрока = СокрЛП(Прав(МесяцСтрока,ДлинаМесяца-2));
		СтрТабл = ТаблицаМесяцев.Найти(ВРег(МесяцСтрока),"Написание");
		тМесяц = СтрТабл.Номер;
		Дат = Дата(тГод+тМесяц+тЧисло);

		
		Возврат Дат;
	
КонецФункции	
...Показать Скрыть
38. Дмитрий Поликарпов (dmpolik) 04.08.16 16:11
забыл дата формата "27 ноября 2015 г."