Top.Mail.Ru
Меню
Каталог Программы 1С Опыт и отзывы Услуги Компания Статьи Контакты

Как получить дату из строки в 1С?

Основатель и генеральный директор компании MoscowSoft, Сорокин Сергей
Сорокин Сергей, Генеральный директор MoscowSoft  20.07.2025 Актуальность проверена: 20.07.2025   5 мин.
Подобрать перенос данных 1С

Специализируемся на переносах данных 1С с 2015г.

Подобрать перенос данных 1С >>

Интеграция 1С с маркетплейсами

Специализируемся на интеграциях 1С с маркетплейсами с 2021г.

Изучить продукты >>

Содержание

Часто при работе 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С можно использовать функцию СтрокаВДату(Строка, Формат), которая преобразует строку в значение типа Дата в соответствии с заданным форматом.

MoscowSoft логотип

Нужна помощь?

Если не получается разобраться с вопросом самостоятельно, обратитесь к нам. Получите бесплатную консультацию эксперта!

Основатель и генеральный директор компании MoscowSoft, Сорокин Сергей
Сорокин Сергей, Генеральный директор MoscowSoft

Возврат к списку