Получить текущую дату 1с 8.3

19.11.2019 Советы 

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

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

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

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

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

ДАТАВРЕМЯ (1, 1, 1)

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

ВЫБРАТЬ ПоступлениеНаРасчетныйСчет.Ссылка КАК Ссылка ИЗ Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет ГДЕ ПоступлениеНаРасчетныйСчет.Дата МЕЖДУ ДАТАВРЕМЯ(2018, 1, 1, 0, 0, 0) И ДАТАВРЕМЯ(2018, 1, 10, 23, 59, 59)

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

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

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

ВЫБОР КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 1 ТОГДА "понедельник" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 2 ТОГДА "вторник" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 3 ТОГДА "среда" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 4 ТОГДА "четверг" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 5 ТОГДА "пятница" КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 6 ТОГДА "суббота" ИНАЧЕ "Воскресенье" КОНЕЦ

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

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

При довольно часть встречается необходимость работы с переменными типа «Дата». В данной статье мы рассмотрим основные приемы — передача текущей даты, проверка на пустое значение, произвольная дата.

При написании запросов зачастую необходимо сравнивать данные с текущей датой. Во встроенном языке 1С есть функция ТекущаяДата(). Она позволяет определить текущее время и дату на компьютере. Для произведения операций с текущей датой необходимо передавать в запрос значение этой функции в качестве параметра.

Ниже представлен запрос, выбирающий все файлы, присоединенные к авансовым отчетам с датой создания до настоящего момента:

ПримерЗапроса = Новый Запрос;
ПримерЗапроса.Текст =«
|ВЫБРАТЬ
| АвансовыйОтчетПрисоединенныеФайлы.Ссылка
|ИЗ
| Справочник.АвансовыйОтчетПрисоединенныеФайлыКАК АвансовыйОтчетПрисоединенныеФайлы
|ГДЕ
| АвансовыйОтчетПрисоединенныеФайлы.Дата < &ТекДата»;
ПримерЗапроса.УстановитьПараметр(«ТекДата», ТекущаяДата());

Произвольная дата

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

Обратите внимание, что используя эту функцию в примере выше, в качестве входных параметров мы передавали только три числа (год, месяц, день). Последние три (час, минута, секунда) не являются обязательными и при отсутствии заменяются на «0», то есть начало дня.

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

ВЫБРАТЬ
АвансовыйОтчетПрисоединенныеФайлы.Ссылка
ИЗ
Справочник.АвансовыйОтчетПрисоединенныеФайлы КАК АвансовыйОтчетПрисоединенныеФайлы
ГДЕ
АвансовыйОтчетПрисоединенныеФайлы.Дата < ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Пустая дата

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

Тип: Число; Дата; Булево. Форматируемое значение. <ФорматнаяСтрока> (необязательный) Тип: Строка. Форматная строка представляет собой строковое значение, включающее параметры форматирования. Параметры форматирования перечисляются через символ «;». Наличие параметра означает отличие форматирования от стандартного. Если параметр не задан, то применяется стандартное форматирование, которое в основном соответствует преобразованию значения к строке. Однако для значений типа Число и Дата по умолчанию (0 и 01.01.0001 00:00:00 соответственно) будет выдаваться пустая строка. Каждый параметр задается именем параметра, символом «=» и значением параметра. Значение параметра может указываться в одинарных или двойных кавычках. Это необходимо, если значение параметра содержит символы, используемые в синтаксисе форматной строки. Внутри значения параметра могут указываться произвольные символы, которые при формировании результирующей строки будут отображаться как есть. Таким образом, например, можно указывать разделители часов, минут и секунд при форматировании времени. Если эти символы совпадают со значениями форматной строки, их необходимо заключать в одинарные кавычки. Имена и значения параметров форматной строки: Л (L) — имя языка, страны, для которых будет выполняться стандартное форматирование. Доступные имена языков расположены после описания форматной строки. ЧЦ (ND) — общее число отображаемых десятичных разрядов целой и дробной частей. Исходное число округляется при этом в соответствии с правилами округления Окр15как20. Если указан этот параметр, то для отображения дробной части числа обязательно указание параметра ЧДЦ, иначе дробная часть отображаться не будет. ЧДЦ (NFD) — число десятичных разрядов в дробной части. Исходное число округляется при этом в соответствии с правилами округления Окр15как20. ЧС (NS) — сдвиг разрядов: положительный — деление, отрицательный — умножение. Другими словами, это означает, что исходное число будет умножено или поделено на 10*С, где С — значение параметра по модулю. ЧРД (NDS) — символ-разделитель целой и дробной части. ЧРГ (NGS) — символ-разделитель групп целой части числа. Если в качестве разделителя использовать пустую строку, то в этом случае разделителем будет символ неразрывного пробела. ЧН (NZ) — строка, представляющая нулевое значение числа. Если не задано, то представление в виде пустой строки. Если задано «ЧН=», то в виде «0». Не используется для числовых полей ввода. ЧВН (NLZ) — нужно ли выводить лидирующие нули. Значение данного параметра не задается, собственно наличие параметра определяет вывод лидирующих нулей. ЧГ (NG) — порядок группировки разрядов числа. В качестве значения указываются числа, через запятую, обозначающие количество группируемых разрядов справа налево. Имеют смысл только два первых числа. Первое из них указывает первичную группировку, то есть ту, которая будет использована для наименее значимых разрядов целой части числа. Если второе число не указано, то будут сгруппированы только наименее значимые разряды. Если в качестве второго числа задан 0, то для всех разрядов целой части числа будет применено значение указанное для первичной группировки. Если в качестве второго числа используется значение, отличное от 0, то это значение будет использовано для группировки всех разрядов, кроме уже сгруппированных наименее значимых. ЧО (NN) — представление отрицательных чисел. 0 (0) — строка вида «(1,1)»; 1 (1) — строка вида «-1,1»; 2 (2) — строка вида «- 1,1»; 3 (3) — строка вида «1,1-«; 4 (4) — строка вида «1,1 -«. ДФ (DF) — формат даты. д (d) — день месяца (цифрами) без лидирующего нуля; дд (dd) — день месяца (цифрами) с лидирующим нулем; ддд (ddd) — краткое название дня недели *); дддд (dddd) — полное название дня недели *); М (M) — номер месяца (цифрами) без лидирующего нуля; ММ (MM) — номер месяца (цифрами) с лидирующим нулем; МММ (MMM) — краткое название месяца *); ММММ (MMMM) — полное название месяца *); к (q) — номер квартала в году; г (y) — номер года без века и лидирующего нуля; гг (yy) — номер года без века с лидирующим нулем; гггг (yyyy) — номер года с веком; ч (h) — час в 12 часовом варианте без лидирующих нулей; чч (hh) — час в 12 часовом варианте с лидирующим нулем; Ч (H) — час в 24 часовом варианте без лидирующих нулей; ЧЧ (HH) — час в 24 часовом варианте с лидирующим нулем; м (m) — минута без лидирующего нуля; мм (mm) — минута с лидирующим нулем; с (s) — секунда без лидирующего нуля; сс (ss) — секунда с лидирующим нулем; вв (tt) — отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени). Примечание: *) — не используется для форматной строки поля ввода даты. ДЛФ (DLF) — локальный формат даты. Указывается вариант отображения частей даты. Д (D) — дата (цифрами); ДД (DD) — длинная дата (месяц прописью); В (T) — полное время, дата может объединяться со временем; ДВ (DT) — дата время. Пример: выражение Формат(‘20051120140323’,»ДЛФ=ДДВ») имеет значение «20 ноября 2005 г. 14:03:23″. Важно! Порядок следования опций форматной строки для ДЛФ <дата + время> (ДВ или ДДВ) не может быть изменен. ДП (DE) — строка, представляющая пустую дату (например, Формат(‘00010101000000’ ,»ДП=»»пустая дата»»») вернет строку «пустая дата»). БЛ (BF) — строка, представляющая логическое значение Ложь. БИ (BT) — строка, представляющая логическое значение Истина. Примечание. Использование параметров для поля ввода: параметр ДП (DE) не используется; параметр ДЛФ (DLF) используется только со значениями Д (D), В(T) и ДВ (DT). Возвращаемое значение: Тип: Строка. Строка, полученная в результате форматирования переданного значения. Описание: Формирует удобное для чтения представление значений. Полезно использование в отчетах и при прочем визуальном отображении значений. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Список языков: af Африкаанс af_NA (af_NA) Африкаанс (Намибия) af_ZA Африкаанс (Южная Африка) am Амхарский am_ET Амхарский (Эфиопия) ar Арабский ar_AE Арабский (Объединенные Арабские Эмираты) ar_BH Арабский (Бахрейн) ar_DZ Арабский (Алжир) ar_EG Арабский (Египет) ar_IQ Арабский (Ирак) ar_JO Арабский (Иордания) ar_KW Арабский (Кувейт) ar_LB Арабский (Ливан) ar_LY Арабский (Ливия) ar_MA Арабский (Марокко) ar_OM Арабский (Оман) ar_QA Арабский (Катар) ar_SA Арабский (Саудовская Аравия) ar_SD Арабский (Судан) ar_SY Арабский (Сирия) ar_TN Арабский (Тунис) ar_YE Арабский (Йемен) as Ассамский as_IN Ассамский (Индия) az Азербайджанский az_AZ Азербайджанский (Азербайджан) az_Cyrl Азербайджанский (Кириллица) az_Cyrl_AZ Азербайджанский (Кириллица, Азербайджан) az_Latn Азербайджанский (Латиница) az_Latn_AZ Азербайджанский (Латиница, Азербайджан) be Белорусский be_BY Белорусский (Беларусь) bg Болгарский bg_BG Болгарский (Болгария) bn Бенгальский bn_IN Бенгальский (Индия) ca Каталанский ca_ES Каталанский (Испания) cs Чешский cs_CZ Чешский (Чешская Республика) cy Валлийский cy_GB Валлийский (Великобритания) da Датский da_DK Датский (Дания) de Немецкий de_AT Немецкий (Австрия) de_BE Немецкий (Бельгия) de_CH Немецкий (Швейцария) de_DE Немецкий (Германия) de_LI (de_LI) Немецкий (Лихтенштейн) de_LU Немецкий (Люксембург) el Греческий el_CY (el_CY) Греческий (Кипр) el_GR Греческий (Греция) en Английский en_AU Английский (Австралия) en_BE Английский (Бельгия) en_BW Английский (Ботсвана) en_BZ (en_BZ) Английский (Белиз) en_CA Английский (Канада) en_GB Английский (Великобритания) en_HK Английский (Гонконг, (Область с Особым Административным Управлением, Китай)) en_IE Английский (Ирландия) en_IN Английский (Индия) en_JM (en_JM) Английский (Ямайка) en_MH (en_MH) Английский (Маршалловы Острова) en_MT Английский (Мальта) en_NA (en_NA) Английский (Намибия) en_NZ Английский (Новая Зеландия) en_PH Английский (Филиппины) en_PK Английский (Пакистан) en_SG Английский (Сингапур) en_TT (en_TT) Английский (Тринидад и Тобаго) en_US Английский (Соединенные Штаты Америки) en_VI Английский (Американские Виргинские Острова) en_ZA Английский (Южная Африка) en_ZW Английский (Зимбабве) es Испанский es_AR Испанский (Аргентина) es_BO Испанский (Боливия) es_CL Испанский (Чили) es_CO Испанский (Колумбия) es_CR Испанский (Коста-Рика) es_DO Испанский (Доминиканская Республика) es_EC Испанский (Эквадор) es_ES Испанский (Испания) es_GT Испанский (Гватемала) es_HN Испанский (Гондурас) es_MX Испанский (Мексика) es_NI Испанский (Никарагуа) es_PA Испанский (Панама) es_PE Испанский (Перу) es_PR Испанский (Пуэрто-Рико) es_PY Испанский (Парагвай) es_SV Испанский (Сальвадор) es_US Испанский (Соединенные Штаты Америки) es_UY Испанский (Уругвай) es_VE Испанский (Венесуэлла) et Эстонский et_EE Эстонский (Эстония) eu Баскский eu_ES Баскский (Испания) fa Персидский fa_AF Персидский (Афганистан) fa_IR Персидский (Иран) fi Финский fi_FI Финский (Финляндия) fo Фарерский fo_FO Фарерский (Фарерские острова) fr Французский fr_BE Французский (Бельгия) fr_CA Французский (Канада) fr_CH Французский (Швейцария) fr_FR Французский (Франция) fr_LU Французский (Люксембург) fr_MC (fr_MC) Французский (Монако) fr_SN (fr_SN) Французский (Сенегал) ga Ирландский ga_IE Ирландский (Ирландия) gl Галисийский gl_ES, Галисийский (Испания) gu Гуярати gu_IN Гуярати (Индия) he Иврит he_IL Иврит (Израиль) hi Хинди hi_IN Хинди (Индия) hr Хорватский hr_HR Хорватский (Хорватия) hu Венгерский hu_HU Венгерский (Венгрия) hy Армянский hy_AM Армянский (Армения) hy_AM_REVISED Армянский (Армения, REVISED) id Индонезийский id_ID Индонезийский (Индонезия) is Исландский is_IS Исландский (Исландия) it Итальянский it_CH, Итальянский (Швейцария) it_IT Итальянский (Италия) ja Японский ja_JP Японский (Япония) ka Грузинский ka_GE Грузинский (Грузия) kk Казахский kk_KZ Казахский (Казахстан) kl Гренландский kl_GL Гренландский (Гренландия) kn Каннада kn_IN Каннада (Индия) ko Корейский ko_KR Корейский (Южная Корея) kok Конкани kok_IN Конкани (Индия) ky Киргизский ky_KY Киргизский (Киргизия) lt Литовский lt_LT Литовский (Литва) lv Латышский lv_LV Латышский (Латвия) mk Македонский mk_MK Македонский (Македония) ml Малаялам ml_IN Малаялам (Индия) mr Маратийский mr_IN Маратийский (Индия) ms Малайский ms_BN Малайский (Бруней) ms_MY Малайский (Малайзия) mt Мальтийский mt_MT Мальтийский (Мальта) nb Норвежский букмол nb_NO Норвежский букмол (Норвегия) nl Голландский nl_BE Голландский (Бельгия) nl_NL Голландский (Нидерланды) nn Норвежский нюнорск nn_NO Норвежский нюнорск (Норвегия) om Оромо (Афан) om_ET Оромо (Афан) (Эфиопия) om_KE Оромо (Афан) (Кения) or Ория or_IN Ория (Индия) pa Панджабский pa_IN Панджабский (Индия) pl Польский pl_PL Польский (Польша) ps Пашто (Пушто) ps_AF Пашто (Пушто) (Афганистан) pt Португальский pt_BR Португальский (Бразилия) pt_PT Португальский (Португалия) ro Румынский ro_RO Румынский (Румыния) ru Русский ru_RU Русский (Россия) ru_UA Русский (Украина) sk Словацкий sk_SK Словацкий (Словакия) sl Словенский sl_SI Словенский (Словения) so Сомали so_DJ Сомали (Джибути) so_ET Сомали (Эфиопия) so_KE Сомали (Кения) so_SO Сомали (Сомали) sq Албанский sq_AL Албанский (Албания) sr Сербский sr_BA (sr_BA) Сербский (Босния и Герцеговина) sr_CS Сербский (Сербия и Черногория) sr_Cyrl Сербский (Кириллица) sr_Cyrl_BA (sr_Cyrl_BA) Сербский (Кириллица, Босния и Герцеговина) sr_Cyrl_CS Сербский (Кириллица, Сербия и Черногория) sr_Cyrl_ME (sr_Cyrl_ME) Сербский (Кириллица, Черногория) sr_Cyrl_RS (sr_Cyrl_RS) Сербский (Кириллица, Сербия) sr_Latn Сербский (Латиница) sr_Latn_BA (sr_Latn_BA) Сербский (Латиница, Босния и Герцеговина) sr_Latn_CS Сербский (Латиница, Сербия и Черногория) sr_Latn_ME (sr_Latn_ME) Сербский (Латиница, Черногория) sr_Latn_RS (sr_Latn_RS) Сербский (Латиница, Сербия) sr_ME (sr_ME) Сербский (Черногория) sr_RS (sr_RS) Сербский (Сербия) sv Шведский sv_FI Шведский (Финляндия) sv_SE Шведский (Швеция) sw Суахили sw_KE Суахили (Суахили) sw_TZ Суахили (Танзания) ta Тамильский ta_IN Тамильский (Индия) te Телугу te_IN Телугу (Индия) th Тайский th_TH Тайский (Таиланд) ti Тигриниа ti_ER Тигриниа (Эритрея) ti_ET Тигриниа (Эфиопия) tr Турецкий tr_TR Турецкий (Турция) uk Украинский uk_UA Украинский (Украина) ur Урду ur_PK Урду (Пакистан) uz Узбекский uz_Cyrl Узбекский (Кириллица) uz_Cyrl_UZ Узбекский (Кириллица, Узбекистан) uz_Latn Узбекский (Латиница) uz_Latn_UZ Узбекский (Латиница, Узбекистан) uz_UZ Узбекский (Узбекистан) vi Вьетнамский vi_VN Вьетнамский (Вьетнам) zh Китайский zh_CN Китайский (Китай) zh_Hans Китайский (Hans) zh_Hans_CN Китайский (Hans, Китай) zh_Hans_SG Китайский (Hans, Сингапур) zh_Hant Китайский (Hant) zh_Hant_HK Китайский (Hant, Гонконг (Область с Особым Административным Управлением, Китай)) zh_Hant_MO Китайский (Hant, Макао (Область с Особым Административным Управлением, Китай)) zh_Hant_TW Китайский (Hant, Тайвань) zh_HK Китайский (Гонконг (Область с Особым Административным Управлением, Китай)) zh_MO Китайский (Макао (Область с Особым Административным Управлением, Китай)) zh_SG Китайский (Сингапур) zh_TW Китайский (Тайвань)