// Преобразует строку вида "ДД.ММ.ГГГГ" в дату.
// Если строка некорректна, возвращает пустую дату Дата(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 Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции