Загрузка данных


// Преобразует строку вида "ДД.ММ.ГГГГ" в дату.
// Если строка некорректна, возвращает пустую дату Дата(1, 1, 1).
Функция СтрокаВДату(Знач СтрокаДаты) Экспорт
	
	ПустаяДата = Дата(1, 1, 1);
	
	Части = СтрРазделить(СокрЛП(СтрокаДаты), ".", Ложь);
	Если Части.Количество() <> 3 Тогда
		Возврат ПустаяДата;
	КонецЕсли;
	
	ОписаниеЧисла = Новый ОписаниеТипов("Число", 
		Новый КвалификаторыЧисла(4, 0, ДопустимыйЗнак.Неотрицательный));
	
	Для Каждого Часть Из Части Цикл
		Если Не СтрокаИзЦифр(Часть) Тогда
			Возврат ПустаяДата;
		КонецЕсли;
	КонецЦикла;
	
	День  = ОписаниеЧисла.ПривестиЗначение(Части[0]);
	Месяц = ОписаниеЧисла.ПривестиЗначение(Части[1]);
	Год   = ОписаниеЧисла.ПривестиЗначение(Части[2]);
	
	Если СтрДлина(Части[2]) = 2 Тогда // "01.03.26"
		Год = 2000 + Год;
	КонецЕсли;
	
	Если Год < 1 Или Месяц < 1 Или Месяц > 12 Или День < 1 Тогда
		Возврат ПустаяДата;
	КонецЕсли;
	
	Если День > День(КонецМесяца(Дата(Год, Месяц, 1))) Тогда // 31.02, 29.02 в невисокосный год
		Возврат ПустаяДата;
	КонецЕсли;
	
	Возврат Дата(Год, Месяц, День);
	
КонецФункции

Функция СтрокаИзЦифр(Знач Строка)
	
	Если ПустаяСтрока(Строка) Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Для Индекс = 1 По СтрДлина(Строка) Цикл
		Если СтрНайти("0123456789", Сред(Строка, Индекс, 1)) = 0 Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
	
КонецФункции