Часто при импорте данных из внешних файлов (Excel, TXT, CSV) мы сталкиваемся с тем, что дата передается не в стандартном формате, а в строковом виде, например: «05 май 2023 г.». Платформа 1С не может автоматически распознать такой формат через функцию Дата(), так как она ожидает либо строковое представление стандарта ГГГГММДД, либо стандартный формат операционной системы. Давайте разберем, как решить эту задачу профессионально.
Если мы не можем повлиять на формат входящих данных, нам необходимо реализовать алгоритм, который разберет строку на части, заменит название месяца на его числовой аналог и соберет из этого корректную Дата. Рассмотрим пошаговый алгоритм:
Соответствие, в котором каждому названию месяца сопоставим его порядковый номер в виде строки.СтрРазделить().Дата(), и приведем её к нужному типу.Посмотрим на пример реализации данного подхода:
Месяцы = Новый Соответствие;
Месяцы.Вставить("январь","01");
Месяцы.Вставить("февраль","02");
Месяцы.Вставить("март","03");
Месяцы.Вставить("апрель","04");
Месяцы.Вставить("май","05");
Месяцы.Вставить("июнь","06");
Месяцы.Вставить("июль","07");
Месяцы.Вставить("август","08");
Месяцы.Вставить("сентябрь","09");
Месяцы.Вставить("октябрь","10");
Месяцы.Вставить("ноябрь","11");
Месяцы.Вставить("декабрь","12");
Массив = СтрРазделить(ВхДата, " ", Ложь);
Если Массив.Количество() = 3 Тогда
Год = СтрЗаменить(Массив[2], "г.", "");
МесяцЧислом = Месяцы[Массив[1]];
СтрокаДляДаты = Год + МесяцЧислом + Массив[0];
РезультатДата = Дата(СтрокаДляДаты);
КонецЕсли;
Вместо того чтобы писать сложные парсеры, которые могут сломаться при изменении регистра или смене языка системы, лучше всего перевести обмен на стандартизированные форматы. Если вы интегрируетесь с другими системами, договоритесь об использовании стандарта ISO 8601 (например, 2023-05-17). Для преобразования таких строк платформа предоставляет очень быстрые и надежные механизмы.
Рассмотрим, как легко превратить стандартизированную строку в тип Дата:
// Самый быстрый способ для формата ГГГГ-ММ-ДД
Результат = XMLЗначение(Тип("Дата"), "2023-05-17");
// Способ для формата ГГГГММДД
Результат = Дата("20230517");
При работе с датами важно помнить о следующих нюансах:
СтрЗаменить() для удаления лишних пробелов, точек и пояснительных символов перед конвертацией.Дата в 1С — это всегда комбинация даты и времени. Если в строке время отсутствует, оно по умолчанию будет установлено в 00:00:00.ТипЗнч(), чтобы убедиться, что преобразование прошло успешно и не вызвало ошибку выполнения.Использование Соответствие — это надежное решение для разовых задач по импорту, однако в долгосрочной перспективе архитектурно правильным подходом будет требование от поставщика данных соблюдения единого стандарта даты. Это минимизирует количество ошибок в коде и упростит поддержку вашей системы в будущем.