Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "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));
Стр = Сред(Стр,Поз + ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.
При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.
Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.
Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)
Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "01/10/13","01-10-2013","10,13","10.13","01.03.2013 0:00:00" к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.
(3) tdr1225,
попробовал Ваш код, у меня выдает ошибку. что с фигурными скобками, что с минусом:
{(2)}: Преобразование значения к типу Дата не может быть выполнено
Как правило, необходимость перевода строки в дату возникает при загрузке информации откуда-нибудь (например, из текстового файла, или Экселя). В таком случае, написать парсер для даты совсем несложно - потому что все строки одного вида. Таким образом, универсальность здесь оказывается не то чтобы лишней, но может заметно замедлить загрузку. Тем не менее, безусловно, полезная вещь. Отдельное спасибо за открытость
Спасибо. Делала импорт отсканированных Товарных чеков из EXCEL в авансовый отчет. Для этого сначала в EXCEL дату входящего документа преобразовывала из формата Текст в формат Дата, а затем в формат число. Далее при импорте в 1с необходимо было преобразовать это число-дату в дату 1с - при этом учесть и то, что в EXCEL исчисление даты начинается с 01.01.1900 и то, что в EXCEL 1900год - высокосный год. Выглядело это так:
ДатаВходящегоДокумента = Дата('19000101')+(86400*(Число(ДатаВходящегоДокумента)-2)
с вашей функцией как-то лаконичней:
ДатаВходящегоДокумента = ПолучитьДатуИзСтроки(ДатаВходящегоДокумента)
К тому же избавилась от ненужных преобразований даты в EXCEL .
Понадобилось доработать функцию, т.к. требовалось разобрать дату с буржуйским форматом "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
Вот спасибо!
а если в переданной строке заменить разделитель на некий стандартный (напр. "%"), тогда код можно сделать компактнее, т.е. только для стандартного разделителя.
(27) kentavr27, при чём Дата("03.06.2014"); не сработает, вызовет исключение, а Дата("03.06.2014 00:00:00"); - сработает. Хотя это и странно, ведь в СП именно год на первом месте...
(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'
КонецПопытки
КонецФункции
Показать
Это универсальная функция - работает с любым форматом даты. В том числе с тем, где месяц написан прописью. Дни недели разве что словами нельзя (в данной реализации) называть.
(33) DrBlack, мне самому решение задачи №13 не очень нравится. Я его привел "за компанию" с другими комментариями. Не для того, чтобы использовать в готовом виде, а для того, чтобы можно было извлечь приемы использования соответствия в этой задаче.
(37)Тема давно уже прошла, но все же. Воспользовался вашей функцией, спасибо, сэкономил несколько минут. В ней опечатка в слове "января" и некорректно распознаются числа, меньшие 10 т..к отсутствуют лидирующие нули.
В замечательном примере вот этот кусок не работает: Формат(Дата(1, ё, 1), "ДФ=MMММ")
Потому, что для пустой даты название месяца не вернет, у меня возвращает "" (пустую строку). В синтакс помощнике сказано, что должен возвращать строку "Пустая дата".
И даже если написать Дата(2,ё,1), тоже не подходит, т.к. название месяца идет в именительном падеже ("Январь"), а в формате "ДЛФ = DD" месяцы идут в родительном ("Января").
Но логика понятна, буду с утра разбираться. Сервак отрубился удаленный.
Выложу и я свою "нетленку" :-)
функция разбирает любые корректные даты
// Функция преобразует строку в дату
//
// Параметры:
// ДатаСтрокой - строка - дата в любом формате даты https://yandex.ru/support/partnermarket/export/date-format.html
// АмериканскийФормат - булево - нужно указывать если известно, что дата в таком формате ММ/ДД/ГГГГ
//
// Возвращаемое значение:
// Значение типа "Дата"
//
Функция ПолучитьДатуИзСтроки(Знач ДатаСтрокой,АмериканскийФормат=Ложь)
Если ПустаяСтрока(ДатаСтрокой) Тогда
Возврат Дата("00010101000000");
КонецЕсли;
ДатаСтрокой=СокрЛП(СтрЗаменить(ДатаСтрокой," "," "));
Если Найти(нРег(ДатаСтрокой),"янв")>0 или
Найти(нРег(ДатаСтрокой),"фев")>0 или
Найти(нРег(ДатаСтрокой),"мар")>0 или
Найти(нРег(ДатаСтрокой),"апр")>0 или
Найти(нРег(ДатаСтрокой),"май")>0 или
Найти(нРег(ДатаСтрокой),"мая")>0 или
Найти(нРег(ДатаСтрокой),"июн")>0 или
Найти(нРег(ДатаСтрокой),"июл")>0 или
Найти(нРег(ДатаСтрокой),"авг")>0 или
Найти(нРег(ДатаСтрокой),"сен")>0 или
Найти(нРег(ДатаСтрокой),"окт")>0 или
Найти(нРег(ДатаСтрокой),"ноя")>0 или
Найти(нРег(ДатаСтрокой),"дек")>0 Тогда // месяц прописью
// 31 декабря 2013 г.
// 31 дек 13
// 31-дек-13
// декабрь 2013
// 2013, декабрь
// 2013, 31 декабря
ДатаСтрокой=СтрЗаменить(ДатаСтрокой,"г.",""); // 31 декабря 2013 г. -> 31 декабря 2013
ДатаСтрокой=СтрЗаменить(ДатаСтрокой,"г",""); // 31 декабря 2013 г -> 31 декабря 2013
ДатаСтрокой=СокрЛП(ДатаСтрокой);
Если Найти(ДатаСтрокой,",")>0 Тогда // 2013, 31 декабря
_ЧастиДаты=СтрРазделить(ДатаСтрокой,",");
ДатаСтрокой=_ЧастиДаты[1]+" "+_ЧастиДаты[0]; // 31 декабря 2013
ДатаСтрокой=СокрЛП(ДатаСтрокой);
КонецЕсли;
ДатаСтрокой=СтрЗаменить(ДатаСтрокой,"-"," "); // 31-дек-13 -> 31 дек 13
_ЧастиДаты=СтрРазделить(ДатаСтрокой," ");
Если _ЧастиДаты.Количество()=2 Тогда // декабрь 2013
_ЧастиДаты.Вставить(0,"01"); // 01 декабрь 2013
КонецЕсли;
Если нРег(Лев(_ЧастиДаты[1],3))="янв" Тогда
_ЧастиДаты[1]="01";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="фев" Тогда
_ЧастиДаты[1]="02";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="мар" Тогда
_ЧастиДаты[1]="03";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="апр" Тогда
_ЧастиДаты[1]="04";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="мая" или нРег(Лев(_ЧастиДаты[1],3))="май"Тогда
_ЧастиДаты[1]="05";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="июн" Тогда
_ЧастиДаты[1]="06";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="июл" Тогда
_ЧастиДаты[1]="07";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="авг" Тогда
_ЧастиДаты[1]="08";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="сен" Тогда
_ЧастиДаты[1]="09";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="окт" Тогда
_ЧастиДаты[1]="10";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="ноя" Тогда
_ЧастиДаты[1]="11";
ИначеЕсли нРег(Лев(_ЧастиДаты[1],3))="дек" Тогда
_ЧастиДаты[1]="12";
КонецЕсли;
_Дата=_ЧастиДаты[0]+"."+_ЧастиДаты[1]+"."+_ЧастиДаты[2]; // 31.12.2013
_Время="00:00:00";
ИначеЕсли Найти(ДатаСтрокой,"T")>0 Тогда // 31.12.2013T23:59:59.999Z
_ЧастиДаты=СтрРазделить(ДатаСтрокой,"T");
_Дата =_ЧастиДаты[0];
_Время=_ЧастиДаты[1];
Если Найти(_Время,"+")>0 Тогда // 20130225T182510+03
_Время=СокрЛП(Лев(_Время,Найти(_Время,"+")-1));
КонецЕсли;
Если Найти(_Время,":")=0 Тогда // 20130225T182510
_Время=Лев(_Время+"000000",6);
_Время=Сред(_Время,1,2)+":"+Сред(_Время,3,2)+":"+Сред(_Время,5,2);
ИначеЕсли СтрЧислоВхождений(_Время,":")=1 Тогда // 2013-12-31T23:59
_Время=_Время+":00";
КонецЕсли;
ИначеЕсли Найти(ДатаСтрокой," ")>0 Тогда // 31.12.2013 23:59:59
_ЧастиДаты=СтрРазделить(ДатаСтрокой," ");
_Дата =_ЧастиДаты[0];
_Время=_ЧастиДаты[1];
Если Найти(_Время,"+")>0 Тогда // 2013/02/25 18:25:10 +03:00
_Время=СокрЛП(Лев(_Время,Найти(_Время,"+")-1));
КонецЕсли;
Если Найти(_Время,":")=0 Тогда // 20130225 182510
_Время=Лев(_Время+"000000",6);
_Время=Сред(_Время,1,2)+":"+Сред(_Время,3,2)+":"+Сред(_Время,5,2);
ИначеЕсли СтрЧислоВхождений(_Время,":")=1 Тогда // 2013-12-31 23:59
_Время=_Время+":00";
КонецЕсли;
Иначе
_Дата =ДатаСтрокой;
_Время="00:00:00";
КонецЕсли;
Если Найти(_Дата,".")=0 и Найти(_Дата,"/")=0 и СтрДлина(_Дата)=8 Тогда // 20131231 YYYYMMDD
_Дата=Сред(_Дата,1,4)+"-"+Сред(_Дата,5,2)+"-"+Сред(_Дата,7,2); // 2013-12-31
КонецЕсли;
Если Найти(_Дата,"/")>0 Тогда
_ЧастиДаты=СтрРазделить(_Дата,"/");
Если СтрДлина(_ЧастиДаты[0])=4 Тогда // YYYY/MM/DD
_Дата=СтрЗаменить(_Дата,"/","-"); // 2013-12-31
Иначе
Если АмериканскийФормат Тогда // ММ/ДД/ГГГГ
_Дата=_ЧастиДаты[1]+"."+_ЧастиДаты[0]+"."+_ЧастиДаты[2]; // 31.12.2013
Иначе
_Дата=СтрЗаменить(_Дата,"/","."); // 31.12.2013
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Найти(_Дата,"-")>0 Тогда // 2013-12-31
_ЧастиДаты=СтрРазделить(_Дата,"-"); // ГГГГ|ММ|ДД
Если СтрДлина(_ЧастиДаты[2])=4 Тогда // ДД|ММ|ГГГГ -> 31-12-2013
_Дата=_ЧастиДаты[0]+"."+_ЧастиДаты[1]+"."+_ЧастиДаты[2]; // 31.12.2013
Иначе
_Дата=_ЧастиДаты[2]+"."+_ЧастиДаты[1]+"."+_ЧастиДаты[0]; // 31.12.2013
КонецЕсли;
КонецЕсли;
Если Найти(_Дата,".")=0 Тогда // Какая-то хрень
Возврат Дата("00010101000000");
КонецЕсли;
// Основная обработка
_ЧастиДаты=СтрРазделить(_Дата,"."); // ДД|ММ|ГГГГ
Если _ЧастиДаты.Количество()=2 Тогда //"12.13" или "12.2013";
_ЧастиДаты.Вставить(0,"01"); // 01.12.2013
КонецЕсли;
Для iii=0 По _ЧастиДаты.Количество()-1 Цикл
Если СтрДлина(_ЧастиДаты.Получить(iii))<2 Тогда // 1.6.2013
_ЧастиДаты.Установить(iii,Прав("00"+_ЧастиДаты.Получить(iii),2)); // 01.06.2013
КонецЕсли;
КонецЦикла;
// год в формате ГГ
Если СтрДлина(_ЧастиДаты[2])=2 Тогда // 31.12.13
Если _ЧастиДаты[2]<"50" Тогда // 31.12.13
_ЧастиДаты[2]="20"+_ЧастиДаты[2]; // 31.12.2013
Иначе
_ЧастиДаты[2]="19"+_ЧастиДаты[2]; // 31.12.1970
КонецЕсли;
КонецЕсли;
_ЧастиВремени=СтрРазделить(_Время,":");
Для iii=0 По _ЧастиВремени.Количество()-1 Цикл
Если СтрДлина(_ЧастиВремени.Получить(iii))<2 Тогда // 0|0|0
_ЧастиВремени.Установить(iii,Прав("00"+_ЧастиВремени.Получить(iii),2)); // 00|00|00
КонецЕсли;
Если СтрДлина(_ЧастиВремени.Получить(iii))>2 Тогда // 23|59|59.999Z
_ЧастиВремени.Установить(iii,Лев(_ЧастиВремени.Получить(iii),2)); // 00|00|00
КонецЕсли;
КонецЦикла;
Попытка
Возврат Дата(_ЧастиДаты[2]+_ЧастиДаты[1]+_ЧастиДаты[0]+_ЧастиВремени[0]+_ЧастиВремени[1]+_ЧастиВремени[2]) // 20131231235959
Исключение
Сообщить("Ошибка преобразования даты "+ДатаСтрокой);
Возврат Дата("00010101000000");
КонецПопытки;
КонецФункции // ПолучитьДатуИзСтроки
(56) согласен, глупость я написал :-)
у себя заменил строку "ДатаСтрокой=СтрЗаменить(ДатаСтрокой,"г",""); // 31 декабря 2013 г -> 31 декабря 2013" на
Если Прав(ДатаСтрокой,1)="г" Тогда
ДатаСтрокой=Лев(СтрДлина(ДатаСтрокой)-1);
КонецЕсли;
В функциях множество ошибок. Склейка переменных с условиями. Отправка к несуществующим функциям общего модуля. В общем неприятная статейка с функцией, которую потом надо напильником обработать.