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

Обновлено: 05.07.2024

Причиной создания этой функции послужил вот такой формат даты «1 Января 2015 г. 13:25». И чтобы сто раз не возвращаться к теме, сделал что-то универсальное, дабы не тратить время в будущем.

В функции много комментариев.

Для более быстрой адаптации к др.языкам (локализация) создан массив п_мФорматы()

Кто-то заметит, что можно сделать "проще", добавив разделители даты и времени в параметры функции. Но, может попасться "свалка" с различными форматами и тут уже придется долго перебирать все варианты. Поэтому я остановился на множественном "Поиск и Замене"(СтрЗаменить()) вероятных разделителей.

Также, задумывалось, что будут возвращаться параметрами функции (Год, Месяц, День. ), но в последствии я от этого отказался. В коде присутствуют остатки от этой затеи, которые не влияют на скорость,а лишь несколько строк(присвоение значений промежуточным переменным) можно сократить.

Конечно, замечания и критика приветствуются. Спасибо.

Пс:
Можно добавить в поиск/замену слово "год".
А в идеале, нужно заменить всё, кроме букв и цифр, на "."(точку) - 100% универсальность. Только вот, слишком медленная функция получится, наверное. Хотя. надо тестировать. Пока, не критично. Как идея ВРег(стр)<>НРег(стр) = только буквы - может получится быстрее, чем СтрЗаменить()

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Причиной создания этой функции послужил вот такой формат даты «1 Января 2015 г. 13:25»

конструктор форматной строки для даты: ДФ='d ММММ yyyy "г." чч:мм'

"йогурт без даты. " :)

(1) 3.14159, это когда вам известно, что в источнике все даты одного формата, а если нет? а если источник не один, а даты заполняют произвольно? и тд.
Форматы, к сожалению, не всегда "делают погоду".

Примеры использования
echo FormatDateFromDB('01/23/2013', 'DD MMMM YYYY'); // вернет 23 Enero 2013, если язык сайта испанский

echo FormatDateFromDB('7 June 2012 12:00pm', 'SHORT'); // вернет 7 Июня 2012, если язык сайта русский и короткий формат языка - DD MMMM YYYY

echo FormatDateFromDB('7 June 2012 12:00pm'); // вернет 7 Июня 2012 12:00pm, если язык русский и полный формат - DD MMMM YYYY G:MIT

echo FormatDateFromDB('7 June 2012 12:00pm', 'DD.MM'); // вернет 07.06 для любого языка

(3) AnryMc, да, я знаю об этих национальных нюансах. Кстати, MS Excel и MS Access в коде VB используется нац.формат, а в запросах евро "mm/dd/yyyy" - вот где можно запутаться )))
Что касается yyyy/*/* , то можно добавить проверку первого отбора(дней) и если количество сиволов = 4, то . и тут опять тупик: "а следующий месяц или дни?"
С месяцами mm/dd/yyyy сложнее. Разве что контролировать на >12.
Это сложно и сделать на автомате практически нереально. Нельзя определить 01/01/01 где тут месяцы, года и дни ) без дополнительных вопросов = формат (6) premier, Знаю и использовал. Так же знаю, что использование функции разбивающей строку на подстроки сократит код в . И?
К слову, то, что вы не видите код и его количество в обьекте RegExp, это не значит, что его нет. ))
Функция самодостаточна в рамках 1с - это огромный плюс.
Протестируйте( в 1с), что будет быстрее работать, скажем с 100 000 строк. Но, можете не тратить время зря. )) Создание обьекта - это уже огромный "тормоз".А 100000 раз превращает такой вариант в кошмар. Так что, не вижу, ни единого плюса от RegExp в данном случае. Разве что, делать пакетную обработку столбца/структуры, что неудобно в рамках таблиц и циклов. (7) а кто запрещает создавать объект один раз за сеанс и сохранять его во временном хранилище? Где-то на Инфостарте я читал статью на эту тему. А то, что мы не видим код в объекте, позволяет нам не загромождать собственный код. Хотя, я впрочем - совсем не противник альтернативных вариантов. Просто механизм регулярных выражений достаточно мощный и что немаловажно язык - лаконичный. Ну и минусы, конечно есть - COM объект всё-таки, можно использовать только на клиенте.
А вообще, конечно, при отсутствии описания используемого формата, достаточно велика погрешность преобразования. Например:
Сообщить(СтрВДату("2/3/55")) вернёт 02.03.1955 0:00:00, хотя это может быть также и 01.01.0001 02:03:55 т.е. время, а может быть и 02.03.2055 0:00:00, в общем, вариантов много.

(9) premier, (9) premier, вы протестируйте на нескольких сотнях тыщ и будете удивлены. Только не пакетную передачу, а по одной переменной.

))) Блин. вы занудствуете. Если вам известно, что "2/3/55" это время, так передайте в функцию "1/1/01 "+"2/3/55" и не нужны никакие форматы. Вам же известно, что это время. если, конечно, вы не Чумак или Кашпировский ))) Могли бы добавить критики, что функция не отрабатывает "// 2/3/55", а такой "2/3/55 //" делает )) Ну, я же надеялся на вас )

Дам совет, а вы уже можете к нему прислушиваться или нет, это ваше дело. Не используйте никогда сторонние приложения если этого можно избежать. Причин для этого тьма, начиная от средств защиты системы, до самой ОС. Понимаете, между 1с и внешним обьектом может стоять анивирус/hips, зависит от настроек, и ваше приложение может работать нормально, а у пользователя жутко тормозить. Вы лысину заработает на правом яичке, но не догадаетесь, что у него стоит ESET NOD )))
Второй совет, бонус, делайте функции самодостаточными если возможно - это облегчает экспор/импорт/обновления. На самом деле, это, когда у вас есть опыт за пличами. наверное, главный приоритет в функциях/процедурах.

Эту функцию можно вставить в любой проект, даже "голый" и она отработает своё независимо, какие ActiveX/Com разрешены/запрещены/инфицированы/присутствуют и какая это версия - в этом ее огромный плюс.
Более того, разделители же можно добавить, убрать. гибкость и вариативность присутствует на откупе программиста. Каждый может подстроить под свои нужды или добавить большей универсальности. Но смысл и суть функции это : " меньше вопросов - больше дела". Есть дата(кстати, это не время) и она отработает ее по основным, часто встречающимся форматам , а точнее разделителям/делиметерам. Всё! Если ваш формат какой-то особый - это не для вас. Но в гуще своей, если вам встречаются данные с разными форматами, заполняемые разными программами, сканируемые неизвестно откуда и всё это нужно класть в одно место, зычно и красиво, вот, когда эта функция очень нужна.

В общем, регулярные выражения - это очень крутой механизм, очень-очень, но не в данном, я бы сказал примитивном, случае.

Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "01/10/13","01-10-2013","10,13","10.13","01.03.2013 0:00:00" к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида "01/10/13","01-10-2013","10,13","10.13","01.03.2013 0:00:00" к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.

неплохо, только можно было бы разделитель сделать параметром, и код бы упростился (1) dv2008, Я уже думал, но у меня с разных мест идет дата в разных форматах, поэтому чтоб не гадать, поставил все на проверку. (1),(2)
по поводу параметра-разделителя
а он нужен?
попробуйте такое:
Код
Показать полностью

попробуйте вместо минуса использовать другой символ, букву
попробуйте разные символы, напр., "012013"
будете приятно удивлены (3) tdr1225,
попробовал Ваш код, у меня выдает ошибку. что с фигурными скобками, что с минусом:
: Преобразование значения к типу Дата не может быть выполнено Побробуйте, передать строку 01.10/2013 или 01-10/2011. Ваша Функция не совершена. Спасибо. Очень пригодилась.
(6) Хочу сказать, что вся 1С далека от совершенства.
Согласна с (7) - Отдельное спасибо за открытость. Как правило, необходимость перевода строки в дату возникает при загрузке информации откуда-нибудь (например, из текстового файла, или Экселя). В таком случае, написать парсер для даты совсем несложно - потому что все строки одного вида. Таким образом, универсальность здесь оказывается не то чтобы лишней, но может заметно замедлить загрузку. Тем не менее, безусловно, полезная вещь. Отдельное спасибо за открытость

вот пример с меньшей функциональностью и с меньшим временем выполнения:

Функция ДатаИзСтроки10(стрДата) экспорт // "01.12.2011" преобразует в '01.12.2011 0:00:00'
Попытка
возврат Дата(Сред(стрДата,7,4)+Сред(стрДата,4,2)+Лев(стрДата,2))
Исключение
возврат '00010101'
КонецПопытки;
КонецФункции // ДатаИзСтроки10()

Amara; Alalexey; imbaZeratul; enoty200shtyk; rabota.v8.1c; shunk; Tash.B; user1356192; Happy_yahoo; NCHRobert; 1v7; elephant_x; ASV085; s0u1; Неопределено; nekit_rdx; DataReducer; simgo83; eugenek27; stroga; Irwin; PSKMOL; user721122; Hamma; dev_FISHER; paxanb; N2; rayastar; Jon2011; surr; codename-s; b00ker; wau8824ru; CatNotDog; Alex_IT; freeek; PhoenixAOD; Somebody1; Prog1CZUP31; SP2000; PokerFace; Brook; klinval; Doomino; angelochekss666; Gremlin; illUMI; Km91; Montecrizto; buganov; anig99; sanfoto; verad; TeploU; killovolt; + 55 – Ответить (8) Можно вместо "Сред(стрДата,7,4)" Использовать "Прав(стрДата, 4)". И тогда время выполнения уменьшится еще сильнее. Только что преогромно выручил. Преогромное же спасибо. Нет, вернее, СПАСИБО! Спасибо, интересная реализация, жаль время не учитывает. Большое спасибо! Очень нужная и полезная вещица! Пригодилась вовремя! Спасибо! Даже не пришлось думать, спасибо. Очень помогает постоянно. Понадобилось доработать функцию, т.к. требовалось разобрать дату с буржуйским форматом "mm/dd/yyyy".
Вот моя версия, с указанием формата даты:

upd:
Для годов больше 50 (94, например) плюсуется сдвиг 1900, иначе 2000

Вот спасибо!
а если в переданной строке заменить разделитель на некий стандартный (напр. "%"), тогда код можно сделать компактнее, т.е. только для стандартного разделителя. Может кому понадобится без длинных функций. так вот, как ни странно, но работает такая конструкция:
perepetulichka; Manticor; freeek; flyer; fvr2000; getnight; AndreykO; madfox; CeHbKA; + 9 – Ответить (27) kentavr27, при чём Дата("03.06.2014"); не сработает, вызовет исключение, а Дата("03.06.2014 00:00:00"); - сработает. Хотя это и странно, ведь в СП именно год на первом месте. а нет у кого варианта преобразовать из строки вида 06 ноября 2014 г.
а то ничего путного в голову не приходит: придется все имена месяцев перебирать ( (29) Vodoley, вот тут Минимализмы в примере под номером 13 есть нужное вам решение. На всякий случай приведу его здесь полностью Это универсальная функция - работает с любым форматом даты. В том числе с тем, где месяц написан прописью. Дни недели разве что словами нельзя (в данной реализации) называть.

(31) ildarovich, с любым форматом даты как раз-таки не работает )
Уж не спрашивайте меня о специфике, но в общем, я пытался сопротивляться. :)

Доработал предложенный Вами алгоритм для формата данных без даты (только время), пример формата: "ДФ=HH:mm:ss"

(33) DrBlack, мне самому решение задачи №13 не очень нравится. Я его привел "за компанию" с другими комментариями. Не для того, чтобы использовать в готовом виде, а для того, чтобы можно было извлечь приемы использования соответствия в этой задаче.

У меня не прокатило.
Вот так написал:

возвращает пустую дату.

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

(31) Написал вот так:

Не особо универсально конечно, но работает ))

А мне подошел вот такой вариант:

ну, то есть сначала надо вырезать все разделители и получить непрерывный набор цифр:

Дата("20150822110645") равносильно 22.08.2015 11:06:45

Спасибо. Очень помогло. Всё работает, просто замечательно.

Делал себе функцию для даты из exel. функция не универсальная, для решения локальной задачи.

(37)Тема давно уже прошла, но все же. Воспользовался вашей функцией, спасибо, сэкономил несколько минут. В ней опечатка в слове "января" и некорректно распознаются числа, меньшие 10 т..к отсутствуют лидирующие нули.
Спасибо. Мне в обработку загрузки из excel вполне пришлось к месту В замечательном примере вот этот кусок не работает: Формат(Дата(1, ё, 1), "ДФ=MMММ")
Потому, что для пустой даты название месяца не вернет, у меня возвращает "" (пустую строку). В синтакс помощнике сказано, что должен возвращать строку "Пустая дата".
И даже если написать Дата(2,ё,1), тоже не подходит, т.к. название месяца идет в именительном падеже ("Январь"), а в формате "ДЛФ = DD" месяцы идут в родительном ("Января").
Но логика понятна, буду с утра разбираться. Сервак отрубился удаленный. В общем сделал так Сред(Формат(Дата(2019, ё, 10), "ДФ=ddMMMM"), 3) Для загрузки формата "26.07.2019" сделал просто:
Дата(ДатаСтрокой + " 00:00:00") Выложу и я свою "нетленку" :-)
функция разбирает любые корректные даты

Просмотры 90570

Загрузки 0

Рейтинг 123

Создание 29.09.11 16:52

Обновление 29.11.11 04:19

№ Публикации 92455

Тип файла Нет файла

Конфигурация Конфигурации 1cv8

Операционная система Не имеет значения

Страна Россия

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Не указано

Курс рассчитан на тех, кто уже работает с платформой “1С:Предприятие” и имеет опыт доработки различных типовых прикладных решений. 1С:Предприятие для программистов: Расширения конфигурации. Онлайн-интенсив с 15 по 28 декабря 2021 г.

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020 4558 Eugen-S 23

СКД: 5 советов, как сделать лучше

Несколько примеров решения задач с использованием разных подходов

27.10.2021 4477 Neti 19

Что за ? в коде, или Секретный оператор в 1С

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

21.10.2021 8368 SeiOkami 41

Полезные примеры СКД, ч.2

Еще несколько примеров решения задач в СКД.

06.04.2021 10874 Neti 8

27.01.2016 85834 Serginio 116

Обзор полезных методов БСП 3.1.4

Библиотека стандартных подсистем (далее - БСП) является частью любой типовой конфигурации, поэтому умение применять готовые процедуры и функции повышает качество разработки и избавляет от написания лишнего кода. К сожалению, не у всех есть время и упорство овладеть всей документацией, поэтому я собрал воедино наиболее популярный функционал.

25.03.2021 41409 rayastar 51

Звуковое управление в 1С 8.3

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021 7227 velemir 33

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020 8960 comol 31

Использование программных перечислений, ч.1: строковые константы Промо

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016 41157 unichkin 74

Базовые вещи БСП, которые облегчат жизнь программисту 1С

В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.

30.08.2020 20391 quazare 34

[Общий модуль] Динамическое формирование интерфейса

Версия 2.0.0.1 + добавил GitHub

28.08.2020 13066 rpgshnik 74

Форма выбора (подбор) в управляемых формах

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020 79450 user5300 19

Вспомогательные инструкции в коде 1С Промо

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018 36202 tormozit 106

Программная работа с настройками СКД

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020 66182 ids79 26

[СКД] Программное создание схемы компоновки данных

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020 43923 John_d 22

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

30.12.2019 35633 kuzyara 38

Оформление и рефакторинг сложных логических выражений Промо

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012 82910 tormozit 131

Сходство Джаро - Винклера. Нечеткое сравнение строк

В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.

25.12.2019 8466 brooho 19

22.11.2019 12434 Sibars 19

Полезные процедуры и функции для программиста

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019 39858 HostHost 41

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007 54515 tormozit 51

Таблица значений. Нюансы

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019 53328 Yashazz 56

[Шпаргалка] Программное создание элементов формы

Программное создание практически всех популярных элементов формы.

06.09.2019 103297 rpgshnik 75

Агрегатные функции СКД, о которых мало кто знает

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019 78160 ids79 56

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017 51283 tormozit 74

Регистры бухгалтерии. Общая информация

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019 46871 YPermitin 25

Три костыля. Сказ про фокусы в коде

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019 30254 YPermitin 81

Иерархия без "В ИЕРАРХИИ"

22.08.2019 15103 ildarovich 24

Выгрузка документа по условию Промо

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019 18047 m-rv 3

Отслеживание выполнения фонового задания

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019 45361 ids79 22

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019 153360 ids79 75

Фоновое выполнение кода в 1С - это просто

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

02.08.2019 61124 avalakh 27

Как прикрутить ГУИД к регистру сведений Промо

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

16.04.2019 23373 m-rv 18

Разбираемся с параметрами редактирования СКД

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019 42095 json 17

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019 106299 ids79 17

Обработчики событий при записи объектов. Зачем и что за чем?

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

Анна Викулина

Значение типа Дата – один из самых простых типов данных в 1С, который встречается практически постоянно. Ее значение содержит дату григорианского календаря с 01 января 0001 года с точностью до 0,1 миллисекунды.

Создание переменной типа дата приравнивается к переменной строки цифр ‘ГГГГММДДччммсс’, где ГГГГ – год, ММ – месяц, чч – часы (в формате 24 часа), мм – минуты, сс – секунды.

Часто возникают ситуации при работе в 1С перевести строку в дату. Например, при написании даты в формате 18.12.18, 18/12/2018, или другие варианты. Если часы, минуты, секунды опустить, то они приравняются к нулю. Если мы опускаем дату, то она считается равной 1.

Далее мы рассмотрим, как можно сделать преобразование строки в дату. Это действие несложное, но требует определенных знаний. Если у вас возникнут вопросы, обращайтесь за консультацией по программе 1С к нашим специалистам – мы с радостью вам поможем.

Рассмотрим, как можно сделать преобразование строки в дату.

В последних двух примерах удаляется лишний символ в написании даты. Это может быть любой символ разделитель, главное – его или убрать, или заменить точкой.

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

В данном примере мы заменяем символ «:» и берем 8 чисел справа (дату – год, месяц, день), затем приписываем к ним 6 чисел слева (время – часы, минуты, секунды).

Преобразовать строковое представление даты в значение типа дата, можно также используя функцию СтрВДату. Это более универсальная функция, поэтому она справляется с любым форматом написания даты, даже текстовым.

На примерах мы рассмотрели возможность преобразования строки в дату. Используя различные функции можно преобразовать строковое представление даты, введенное различными вариантами написания в значение типа дата. Такие преобразования необходимы, ведь бывает, что пользователь при вводе даты, используя дополнительную клавиатуру, установит как разделитель косую черту, запятую или другой знак, или из написанной текстом даты возникает необходимость ее преобразовать. Во всех этих случаях данные функции будут полезны.

Если у вас регулярно возникают вопросы по настройке программы, обратитесь к нашим специалистам: мы проконсультируем вас и сделаем соответствующие настройки, подобрав при этом оптимальный тариф на сопровождение 1С, исходя из ваших индивидуальных потребностей.

Сергей Лунев

Тип «Дата» в 1С входит в число 4 основных типов данных наряду с числом, строкой и булево. В конфигурациях даты встречаются повсеместно – при разработке невозможно избежать работы с этим типом данных. Поэтому лучше начинать писать запросы, уже понимая, как обрабатывать даты, какие есть возможности для работы с ними, как они хранятся, а до этого «безопаснее» использовать услуги программистов по доработке 1С, которые предоставляют большинство компаний-франчайзи. Рассмотрим на примерах все нюансы написания запросов с различными датами.

Примеры работы с датами в запросах 1С

В первую очередь, необходимо получить дату в запросе в нужном формате – со временем или без него. Выполнить эту задачу можно несколькими путями:

  1. Передать через параметр. Получить текущую дату сеанса можно только этим методом;
  2. Получить дату в запросе из поля выборки;
  3. Преобразовать из числовых значений с помощью функции ДАТАВРЕМЯ().

Самой распространенной задачей при работе с документами является проверка на пустую дату в запросе 1С. В этом случае легче всего сравнить переменную или поле с пустой датой, которая получается с помощью функции ДАТАВРЕМЯ(1,1,1):

Аналогичной командой можно получить произвольную дату и время в запросе. При этом их можно указать с точностью до секунды, задав в качестве параметров 6 чисел. Если же используется только 3 числа, то часы, минуты и секунды будут приравнены к 0 (начало дня). Например, нам необходимо в запросе выбрать документы за первые 10 дней января 2018 года:

В запросе на встроенном языке 1С можно не только выбирать различные поля и получать параметры. Существует множество функций, облегчающих форматирование даты под нужды конкретной задачи.

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

  • НАЧАЛОПЕРИОДА. В качестве параметров указывается дата и промежуток времени, в разрезе которого необходимо получить начало даты. Используется, чтобы преобразовать дату к формату без времени. Для этого необходимо задать второй параметр – «ДЕНЬ»;
  • КОНЕЦПЕРИОДА. Аналогичная команда, возвращающая последнюю дату в разрезе указанных в параметрах единиц;
  • ДОБАВИТЬКДАТЕ. Позволяет получить дату, большую на заданное количество указанных единиц времени. В качестве параметров функции указывают дату, единицу измерения времени и число;
  • РАЗНОСТЬДАТ. Получает разницу между датами в указанных единицах измерения;
  • ДЕНЬНЕДЕЛИ. Вернет порядковый номер одного из дней недели.

Грамотно применяя эти функции, разработчик может решать достаточно нетривиальные задачи. К примеру, получение наименования дня недели текущей даты в запросе в виде строки:

Преобразование типов в запросе 1С из числа или строки в дату – трудоемкое занятие. Из чисел можно получить дату с помощью функции ДАТАВРЕМЯ, из строки – комбинируя функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА ТОГДА ИНАЧЕ. Исходя из этого, разработчики предпочитают получать дату из других типов в модуле и передавать ее в запрос с помощью параметра. К сожалению, это не всегда реализуемо, поэтому приходится менять формат даты в запросе.

Есть возможность указать дату в запросе 1С в качестве параметра для получения данных из виртуальных таблиц регистров. В этой роли также можно использовать все вышеперечисленные функции. Но здесь важно не допустить, чтобы пустая дата в запросе 1С могла сказаться на конечном результате выполнения кода, поэтому обязательно надо делать проверку.

Надеемся, статья была вам полезна. Если у вас остались вопросы по указанию даты в запросе, обратитесь к нашим специалистам в рамках консультационных услуг по 1С, мы обязательно вам поможем.

Читайте также: