Часто при работе 1С со сторонними информационными системами (например, при парсинге сайтов) необходимо из строковой переменной получить дату. Когда одна 1С общается с другой, такой проблемы при грамотной архитектуре не возникает. Разберем, как можно конвертировать значение строкового типа в дату.
Функция Дата() для преобразования строки в дату в 1С
Для преобразования строки в дату используют функцию Дата(). Эта функция имеет два варианта синтаксиса.
Первый вариант синтаксиса - передать строку с локальном формате даты. Обязательно с указанием года из четырех цифр, месяца из двух цифр, даты из двух цифр, далее часа из двух цифр, аналогично минут и секунд. Формат этот можно представить так: "ГГГГММДДччммсс".
Второй вариант синтаксиса - передать в параметрах функции Дата() информацию о годе, месяце, дне, часе, минутах и секундах через запятую. Все шесть переменных должны быть числового формата.
Информацию из синтакс-помощника с примерами конвертации читайте в конце статьи.
Функция СтрокаВДату() из БСП для конвертации строки в дату по формату
Плохо, что в платформе 1С нет стандартной функции для преобразования строки в дату. Такая функция нужна, т.к. чаще всего дата в виде строки, полученная парсингом сайта или из других информационных систем, выглядит так: “21.07.2025”. И вот чтобы ее превратить в дату с помощью функции Дата(), нужно долго разбивать строку точками на день, месяц, год, потом конвертировать в число и потом передавать в функцию Дата(). Необходимо более простой инструмент.
Быстро конвертируйте в дату с помощью функции БСП СтрокаВДату().
В некоторых версиях БСП функция находится в общем модуле СтроковыеФункцииКлиентСервер, а в других - в ОбщегоНазначенияКлиентСервер. Определяйте имя общего модуля в своем случае самостоятельно.
Пример вызова может выглядеть так:
Результат = СтроковыеФункцииКлиентСервер.СтрокаВДату(МояСтрока);
Или так:
Результат = ОбщегоНазначенияКлиентСервер.СтрокаВДату(Значение)
А если в конфигурации 1С нет БСП?
В этом случае можете добавить код функции СтрокаВДату() и вызывать ее из кода. Программный код может выглядеть следующим образом:
// Преобразует исходную строку в дату. // // Параметры: // ДатаСтрока - Строка - Строка, которую необходимо привести к дате. // // Возвращаемое значение: // Дата - Полученная дата. // Функция СтрокаВДату(Знач ДатаСтрока) Экспорт ПозицияПробела = СтрНайти(ДатаСтрока, " ", НаправлениеПоиска.СНачала); Если ПозицияПробела > 0 Тогда ДатаСтрока = Лев(ДатаСтрока, ПозицияПробела - 1); КонецЕсли; ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", "")); ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2); Если СтрДлина(ДатаСтрока) = 6 Тогда ДатаСтрока = "20" + ДатаСтрока; КонецЕсли; ОписаниеТипа = Новый ОписаниеТипов("Дата"); Результат = ОписаниеТипа.ПривестиЗначение(ДатаСтрока); Возврат Результат; КонецФункции
Когда формат отличается от “DD.MM.YYYY”, есть синтаксис с указанием формата даты. В этом случае код функции выглядит следующим образом:
//Преобразование строки в дату/время с указанием строки форматирования. //При ошибке преобразования генерируется исключение. //Допустимые значения в строке форматирования: // yyyy - год полностью // yy - год сокращённо // mm - месяц // dd - день // hh - часы // nn - минуты // ss - секунды // Разделитель в исходной строке и строке форматирования может различаться. // // Параметры: // ДатаСтрока - Строка - Исходная строка с датой // ФорматДаты - Строка - Формат даты в переданной строке // // Возвращаемое значение: // Дата // // Пример: // СтрокаВДатуВремя("02.06.22", "dd.mm.yy") // СтрокаВДатуВремя("02.06.22 12:30:00, "dd.mm.yy hh:nn:ss") // СтрокаВДатуВремя("02/06/22 12:30:00, "dd.mm.yy hh:nn:ss") Функция СтрокаВДатуВремя(ДатаСтрока, ФорматДаты = "dd.mm.yyyy") Экспорт Если ЗначениеЗаполнено(ДатаСтрока) Тогда Попытка Годы = СтрНайти(ФорматДаты, "yyyy"); Годы = ?(Годы = 0 , 0, Число(Сред(ДатаСтрока, Годы, 4))); Если Годы = 0 Тогда Годы = СтрНайти(ФорматДаты, "yy"); Годы = ?(Годы = 0 , 0, Число("20" + Сред(ДатаСтрока, Годы, 2))); КонецЕсли; Месяцы = СтрНайти(ФорматДаты, "mm"); Дни = СтрНайти(ФорматДаты, "dd"); Часы = СтрНайти(ФорматДаты, "hh"); Минуты = СтрНайти(ФорматДаты, "nn"); Секунды = СтрНайти(ФорматДаты, "ss"); Возврат Дата( ?(Годы = 0, 1, Годы), ?(Месяцы = 0, 1, Число(Сред(ДатаСтрока, Месяцы, 2))), ?(Дни = 0, 1, Число(Сред(ДатаСтрока, Дни, 2))), ?(Часы = 0, 0, Число(Сред(ДатаСтрока, Часы, 2))), ?(Минуты = 0, 0, Число(Сред(ДатаСтрока, Минуты, 2))), ?(Секунды = 0, 0, Число(Сред(ДатаСтрока, Секунды, 2))) ) Исключение ВызватьИсключение "Ошибка преобразования строки """ + ДатаСтрока + """ в дату по формату """ + ФорматДаты + """" КонецПопытки; Иначе Возврат Неопределено КонецЕсли; КонецФункции // СтрокаВДатуВремя
Информация про функцию Дата() из синтакс-помощника
Глобальный контекст (Global context)
Дата (Date)
Вариант синтаксиса: По строке
Синтаксис:
Дата(<Значение>)
Параметры:
<Значение> (обязательный)
Тип: Строка.
Исходное значение даты.
Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS.
Описание варианта метода:
При преобразовании строка должна содержать дату в каноническом формате "ГГГГММДДччммсс" (см. раздел "Примитивные типы данных").
Вариант синтаксиса: По составляющим
Синтаксис:
Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>)
Параметры:
<Год> (обязательный)
Тип: Число.
Год даты.
<Месяц> (обязательный)
Тип: Число.
Месяц даты.
<День> (обязательный)
Тип: Число.
День даты.
<Час> (необязательный)
Тип: Число.
Час даты.
<Минута> (необязательный)
Тип: Число.
Минута даты.
<Секунда> (необязательный)
Тип: Число.
Секунда даты.
Описание варианта метода:
Допускаются следующие формы задания параметров:
- Дата(Год, Месяц, День);
- Дата(Год, Месяц, День, Час, Минута, Секунда);
Возвращаемое значение:
Тип: Дата.
Описание:
Преобразует полученный параметр (параметры) в значение типа Дата.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Внимание: Данный метод не поддерживается при работе через COM-соединение
Для преобразования строки в дату в 1С можно использовать функцию «Дата()».
Вариант 1: преобразование по строке. Строка должна содержать дату в локальном формате или в каноническом виде YYYYMMDDHHMMSS. Пример: Дата("20211231123456").
Вариант 2: преобразование по составляющим частям. Если известны составные части даты — год, месяц, день и т. д., можно использовать конструктор даты по составляющим. Задавать параметры можно как в виде строки, так и числом. Пример: Дата("2021", "12", "24", "12", "34", "56").
Также для преобразования строки в дату в 1С можно использовать функцию СтрокаВДату(Строка, Формат), которая преобразует строку в значение типа Дата в соответствии с заданным форматом.













































