Главная » Настройки » 1с функции работы с датой

1с функции работы с датой

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

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

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

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

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

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

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

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

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

Пустая дата

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

При работе с датами 1С, типовой порядок частей даты – год, месяц, день, час, минуты, секунды. При этом часы, минуты, секунды можно пропустить.

При создании даты из строки («приведение к дате») можно указать в локализованном формате (день.месяц.год часы:минуты:секунды), но только полностью.

Например:
//Работа с датами 1С - преобразовать дату в 1С из частей - год, месяц, день (плюс необязательно время)
Дата = Дата(2012,10,30); //без времени
Дата = Дата(2012,10,30,12,00,00); //со временем

//Работа с датами 1С - преобразовать дату в 1С из строки, разные способы
Дата = Дата("20121030"); //год, месяц, день
Дата = Дата("30.10.2012 12:00:00"); //локализованный формат, только полностью

//Работа с датами 1С - указание значения даты без приведения, напрямую
Дата = "20121030"; //без времени
Дата = "20121030120000"; //со временем

Работа с датами 1С — Пустая дата 1С

Чтобы проверить дату 1С на заполненность – ее сравнивают с «пустой датой». При наличии в справочнике/документе реквизита с типом дата, если пользователь не заполнил это поле, то ее значение также будет – «пустая дата».

«Пустая дата» — это 01.01.0001 00:00:00.

Например:
ПустаяДата = "00010101000000";
Если НужнаяДата = "00010101000000" Тогда
Сообщить("Вы не заполнили очень нужную дату");
КонецЕсли;

Работа с датами 1С — Дата в реквизитах (справочников, документов и т.п.)

При указании типа реквизита можно указать использовать:

  • Только дату (время тогда всегда равно 00:00:00)
  • Только время (дата тогда всегда равна 01.01.0001)
  • Дату и время

Получение даты

Для получения даты и времени используется функция 1С ТекущаяДата().

Очень важно место – где вызывается эта функция – на клиенте или на сервере. Подробнее см. тему «Режим исполнения/Исполнение». Часто бывает, что на клиентских машинах время немного разное, поэтому стараются везде использовать серверное время – даже если оно установлено на сервере не верно, то хотя бы у всех клиентов будет одинаковое неверное время.

Для того, чтобы получить серверную дату (дату, установленную в операционной системе компьютера сервера), обычно в конфигурации создают общий модуль с установленной галочкой «Сервер» в свойствах, и в нем создают функцию
//функция расположена в общем модуле, например с именем СерверныеФункции
//в свойствах общего модуля установлена галочка «Сервер» и не установлена галочка «Клиент»
Функция ПолучитьДатуСервера() Экспорт
Возврат ТекущаяДата();
КонецФункции

//вызов этой функции для использования из другого модуля выглядит так
ДокументОбъект.Дата = СерверныеФункции.ПолучитьДатуСервера(); //ИмяМодуля.ИмяФункции()

Также в тонком клиенте непосредственно у функций модулей указывается где она будет исполнена:

Начало и конец дня

Для даты «30.10.2012»:

  • дата начала дня выглядит так «30.10.2012 00:00:00»
  • дата конца дня выглядит так «30.10.2012 23:59:59»

Используется в отчетах и запросах, требующих получить данные за период – день, месяц, год.

Так например период с «01.01.2012 00:00:00» по «31.01.2012 00:00:00» неверен, так как не включает в себя один день месяца (но включает в себя одну секунду последнего дня месяца).

Работа с датами 1С — Сравнение дат

Дата содержит дату и время. При сравнении дат (без учета времени) их обычно приводят к началу дня (месяца, года).

Например:
Дата1 = Дата("30.10.2012 12:00:00");
Если НачалоДня(Дата1) = НачалоДня(ДокументСсылка.Дата) Тогда
Сообщить("Документ введен заданной датой");
КонецЕсли;

На всякий случай, пример сравнения даты в периоде:
Если ДокументСсылка.Дата >= НачалоМесяца(ТекущаяДата()) и
ДокументСсылка.Дата

Работа с датами 1С - Изменение даты

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

Например:
СНачалаДня = ТекущаяДата() – НачалоДня(ТекущаяДата());
Сообщить("С начала дня прошло " + Строка(СНачалаДня) + " секунд");
Сообщить("С начала дня прошло " + Строка(СНачалаДня/60) + " минут");
Сообщить("С начала дня прошло " + Строка(СНачалаДня/60/60) + " часов");

Также мы можем изменить дату, при изменении мы добавляем или отнимаем количество секунд:
НачалоЭтогоДня = НачалоДня(ТекущаяДата());

НачалоПредыдущегоДня = НачалоДня(НачалоЭтогоДня – 1); //убираем секунду – делая «вчера» и берем начало дня у «вчера»

НачалоПредыдущегоДня = НачалоЭтогоДня – 24*60*60; //другой способ – отнимаем 24 часа – 24(часа)*60(получились минуты)*60(секунды)

Работа с датами 1С - Момент времени

Момент времени – это расширенное представление даты, применимое к документам (и соответственно регистрам).

Оно требуется для сравнения времени документов, если дата и время документов одно и то же. Соответственно его можно использовать при отборах в запросах.

Момент времени можно получить у документа следующими способами:
//способ 1
МоментВремениДокумента = ДокументСсылка.МоментВремени();

Также можно сравнить момент времени с датой/временем:
МоментВремениЭталон = Новый МоментВремени(НачалоДня(ТекущаяДата()));
Если ДокументСсылка.МоментВремени().Сравнить(МоментВремениЭталон) = -1 Тогда
Сообщить("Документ введен раньше, чем сегодня");
КонецЕсли;
//Если документ введен сегодняшней датой в 00:00:00, то он все равно введен - сегодня

Работа с датами 1С - Форматирование дат

Тип: Число; Дата; Булево. Форматируемое значение. <ФорматнаяСтрока> (необязательный) Тип: Строка. Форматная строка представляет собой строковое значение, включающее параметры форматирования. Параметры форматирования перечисляются через символ «;». Наличие параметра означает отличие форматирования от стандартного. Если параметр не задан, то применяется стандартное форматирование, которое в основном соответствует преобразованию значения к строке. Однако для значений типа Число и Дата по умолчанию (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 Китайский (Тайвань)



Предыдущая статья: Следующая статья:

© 2015 .
О сайте | Контакты
| Карта сайта