Как преобразовать строку в дату в 1С

Преобразование строки в дату - одна из самых частых задач при работе с данными в 1С. Это необходимо при загрузке данных из файлов, обработке введенных пользователем значений или работе с внешними системами.

 

Зачем это нужно

В 1С дата - это отдельный тип данных, который нельзя просто так взять и получить из строки. Правильное преобразование позволяет:

- Обрабатывать данные импорта из Excel и CSV-файлов

- Корректно работать с датами из внешних систем

- Анализировать периоды в отчетах

- Сортировать данные по хронологии

 

Базовые способы преобразования

 

Самый простой способ - использовать функцию Дата():

СтрокаСДатой = "25.12.2023";
Попытка
    Дата = Дата(СтрокаСДатой);
Исключение
    Сообщить("Не удалось преобразовать строку в дату");
КонецПопытки;
  

 

Этот код попытается преобразовать строку в дату, и если формат не распознается - перехватит ошибку.

 

Работа с разными форматами дат

 

Часто возникает ситуация, когда даты приходят в разных форматах. Используйте параметры преобразования:

 

// Для формата "20231225"
Дата1 = Дата("20231225", "ДФ=yyyyMMdd");

// Для формата "25-12-2023"
Дата2 = Дата("25-12-2023", "ДФ=dd-MM-yyyy");

// Для формата "2023/12/25"
Дата3 = Дата("2023/12/25", "ДФ=yyyy/MM/dd");
  

 

Определение формата даты автоматически

 

Если вы не уверены в формате даты, можно использовать множественное преобразование:

 

СтрокаСДатой = "25.12.2023";
Форматы = Новый Массив;
Форматы.Добавить("ДФ=dd.MM.yyyy");
Форматы.Добавить("ДФ=MM/dd/yyyy");
Форматы.Добавить("ДФ=yyyy-MM-dd");

Дата = Неопределено;
Для Каждого Формат Из Форматы Цикл
    Попытка
        Дата = Дата(СтрокаСДатой, Формат);
        Прервать;
    Исключение
        // Пробуем следующий формат
    КонецПопытки;
КонецЦикла;
  

 

Подводные камни и частые ошибки

 

- Региональные настройки - дата зависит от настроек системы пользователя

- Неявное преобразование - иногда 1С пытается преобразовать строку автоматически, но лучше делать это явно

- Пустые строки - всегда проверяйте на пустоту перед преобразованием

- Некорректные даты - что делать с датами вроде "30.02.2023"

 

Обработка ошибок преобразования

 

Всегда используйте блоки Попытка-Исключение при работе с преобразованием дат:

 

Процедура ПреобразоватьДату(СтрокаДаты)
    
    Если ПустаяСтрока(СтрокаДаты) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Попытка
        Возврат Дата(СтрокаДаты);
    Исключение
        Сообщить("Ошибка преобразования: " + СтрокаДаты);
        Возврат Неопределено;
    КонецПопытки;
    
КонецПроцедуры
  

Что почитать дальше

 

Для углубленного изучения темы рекомендую:

- Функции работы с датами: НачалоГода(), КонецКвартала(), ДобавитьМесяц()

- Форматирование дат в строку: Формат()

- Работа с датами в запросах

- Времена года и праздничные дни в бизнес-логике

 

Попрактикуйтесь: напишите обработку, которая принимает строку с датой в произвольном формате и пытается определить дату автоматически, перебирая популярные форматы.

 

Учебный центр S1P-академия.
Обучение профессии 1С:Программист с нуля до Middle.

Соцсети

111250, г.Москва, проезд завода Серп и Молот 1с1, офис 1.