Как в 1с установить интервал дат
Тип " Дата " — один из базовых типов данных, поддерживаемых в языке 1С версии 7.7. Типом " Дата " в системе «1С:Предприятие» может представляться любая корректная дата.
В выражениях литералы дат (то есть неизменяемые значения типа " Дата " ) записываются в формате 'ДД.ММ.ГГ' или 'ДД.ММ.ГГГГ' , где ГГ или ГГГГ — две или четыре цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца (01, 02, 03 и т.д.). В отличие от строковых литералов, литералы даты следует заключать в одинарные кавычки:
Операции с датами
Для операндов типа "Дата" в языке определены три арифметических операции:
- Дата + Число (к дате прибавляется число дней);
- Дата − Число (от даты отнимается число дней);
- Дата − Дата (результатом будет число дней между датами).
Примеры арифметических операций с датами:
Даты можно сравнивать между собой и использовать в логических операциях. В языке 1С для дат определены следующие операции сравнения:
- больше ( Дата1 > Дата2 );
- больше или равно ( Дата1 >= Дата2 );
- равно ( Дата1 = Дата2 );
- не равно ( Дата1 <> Дата2 );
- меньше ( Дата1 < Дата2 );
- меньше или равно ( Дата1
Пример использования дат в логических операциях:
Преобразование в тип «Дата» значений других базовых типов
В процессе вычисления различных выражений может возникнуть необходимость в явном или неявном преобразовании типов отдельных значений. При преобразовании значений в тип " Дата " система руководствуется следующими правилами:
- Если в начале строки содержится что-то, что может быть проинтерпретировано как строковое представление даты в виде "ДД.ММ.ГГ" , где ГГ — две цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца, то будет произведено соответствующее преобразование. В противном случае значение даты будет нулевым ( '00.00.00' ).
- В случае с числами делается попытка взять целую часть числа и проинтерпретировать как численное представление даты. Если число отрицательно, то итогом является нулевая дата ( '00.00.00' ).
Для явного преобразования в тип " Дата " значений других базовых типов служит системная (встроенная) функция Дата() . Англоязычный синоним имени функции — Date() .
где < ПреобразуемоеЗначение >— числовое или строковое выражение, результат вычисления которого необходимо преобразовать в дату.
Пример использования функции:
У системной функции Дата() имеется также ещё один синтаксис:
- < Год >— числовое выражение, результат вычисления которого будет интерпретироваться как год даты (год должен указываться четырёхзначным числом);
- < Месяц >— числовое выражение, результат вычисления которого будет интерпретироваться как номер месяца даты;
- < Число >— числовое выражение, результат вычисления которого будет интерпретироваться как номер дня в месяце.
Системные функции для работы с датами
Получить текущую дату , то есть дату, установленную в операционной системе, позволяет функция ТекущаяДата() . Она не имеет параметров, а её возвращаемым значением является дата, которая выводится в трее (в правом нижнем углу экрана). Англоязычный синоним имени функции — CurDate() .
Пример использования функции:
Получить текущее время , то есть время, установленное в операционной системе, позволяет системная функция ТекущееВремя() . Возвращаемым значением функции является системное время в текстовом виде. Англоязычный синоним имени функции — CurrentTime() .
- < Час >— имя переменной, куда система вернёт числовое значение часа текущего времени. Параметр является необязательным;
- < Мин >— имя переменной, куда система вернёт числовое значение минут текущего времени. Параметр является необязательным;
- < Сек >— имя переменной, куда система вернёт числовое значение секунд текущего времени. Параметр является необязательным.
Если необходимо получить системное время только в текстовом формате, параметры не используются. Например:
Установить/получить рабочую дату системы «1С:Предприятие» позволяет системная функция РабочаяДата() . Её возвращаемым значением является значение текущей рабочей даты, установленной в системе «1С:Предприятие» до момента вызова функции. Англоязычный синоним имени — WorkingDate() .
- < Дата >— выражение, содержащее дату, которая будет установлена в качестве рабочей. Параметр является необязательным. Если параметр не указан, то рабочая дата в системе не изменяется;
- < РежимСменыРабДаты >— числовое значение, определяющее режим автоматической смены рабочей даты в полночь. Если параметр не указан, то режим не меняется и действует установка, выбранная в параметрах системы. Возможные значения:
- 0 — не менять дату автоматически;
- 1 — менять автоматически с выдачей предупреждения;
- 2 — менять автоматически без предупреждения.
Для получения рабочей даты функция обычно используется без параметров:
Примечание: Рабочая дата, установленная в системе «1С:Предприятие», может отличаться от текущей даты (то есть от даты, установленной в операционной системы). Сменить рабочую дату бухгалтер может, например, в том случае, когда ему необходимо ввести большое количество документов «задним числом». Произвести смену рабочей даты можно в окне настройки параметров системы (вызывается из главного меню программы: « Сервис −> Параметры… »).
Установить/получить вариант задания начала стандартного интервала отображения журнала документов позволяет системная функция НачалоСтандартногоИнтервала() . Англоязычный синоним имени фнкции — BegOfStandardRange() .
где < Вариант >— выражение со значением типа " Дата " или " Строка " . Значением типа " Дата " задаётся конкретная дата начала интервала журнала документов. Возможные строковые значения параметра: "День" (или "Day" ), "Месяц" (или "Month" ), "Квартал" (или "Quarter" ) и "Год" (или "Year" ). Причём, при указании строкового значения будут иметься в виду текущий день (тот, что установлен в системе как рабочая дата), текущий месяц, текущий квартал и текущий год.
Параметр функции является необязательным. Так, например, для получения варианта задания интервала функция используется без параметра. Возвращаемым значением функции является текущий установленный вариант.
Установить/получить вариант задания конца стандартного интервала отображения журнала документов позволяет системная функция КонецСтандартногоИнтервала() . Англоязычный синоним имени фнкции — EndOfStandardRange() .
где < Вариант >— выражение со значением типа " Дата " или " Строка " . Значением типа " Дата " задаётся конкретная дата конца интервала журнала документов. Возможные строковые значения параметра: "День" (или "Day" ), "Месяц" (или "Month" ), "Квартал" (или "Quarter" ) и "Год" (или "Year" ). Причём, при указании строкового значения будут иметься в виду текущий день (тот, что установлен в системе как рабочая дата), текущий месяц, текущий квартал и текущий год.
Параметр функции является необязательным. Так, например, для получения варианта задания интервала функция используется без параметра. Возвращаемым значением функции является текущий установленный вариант.
Примечание: Установить или посмотреть вариант задания стандартного интервала пользователь может в окне настройки параметров системы (вызывается из главного меню программы: « Сервис −> Параметры… »).
Получить строковое представление стандартного периода , в соответствии с указанными датами начала и конца периода, позволяет системная функция ПериодСтр() . В качестве первого и второго параметров функции передаются соответственно даты начала и конца периода (выражения со значениями типа " Дата " ), а функция возвращает его строковое представление. Возвращаемая функцией строка может использоваться, например, для выдачи информации о периоде итогов в отчётах. Англоязычный синоним имени функции — PeriodStr() .
Функции для вычисления даты
Получить дату, отличающуюся от указанной даты на указанное количество месяцев , позволяет функция ДобавитьМесяц() . Англоязычный синоним имени функции — AddMonth() .
- < ИсходнаяДата >— выражение типа " Дата " , содержащее исходную дату;
- < КоличествоМесяцев >— числовое выражение, задающее число месяцев, которое необходимо добавить к дате или вычесть из неё (при отрицательном значении).
Примечание: В общем случае данная функция просто суммирует номер месяца в исходной дате с числом, указанным во втором параметре функции, не меняя при этом номер дня. Исключение составляет случай, когда в исходной дате указан один из последних последних дней месяца (29-ое, 30-ое или 31-ое число), а в возвращаемом месяце этих чисел быть не может. В этом случае функция возвращает последний день месяца, который возможен.
Получить дату начала недели для указанной даты позволяет функция НачНедели() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfWeek() .
Получить дату конца недели для указанной даты позволяет функция КонНедели() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfWeek() .
Получить дату начала месяца для указанной даты позволяет функция НачМесяца() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfMonth() .
Получить дату конца месяца для указанной даты позволяет функция КонМесяца() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfMonth() .
Получить дату начала квартала для указанной даты позволяет функция НачКвартала() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfQuart() .
Получить дату конца квартала для указанной даты позволяет функция КонКвартала() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfQuart() .
Получить дату начала года для указанной даты позволяет функция НачГода() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — BegOfYear() .
Получить дату конца года для указанной даты позволяет функция КонГода() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — EndOfYear() .
Получить год указанной даты позволяет функция ДатаГод() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetYear() .
Получить месяц указанной даты позволяет функция ДатаМесяц() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetMonth() .
Получить день месяца указанной даты позволяет функция ДатаЧисло() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDay() .
Получить номер недели в году для указанной даты позволяет функция НомерНеделиГода() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetWeekOfYear() .
Получить порядковый номер дня в году для указанной даты позволяет функция НомерДняГода() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDayOfYear() .
Получить порядковый номер дня в неделе для указанной даты позволяет функция НомерДняНедели() . В качестве единственного параметра функции передаётся выражение, содержащее исходную дату. Англоязычный синоним имени функции — GetDayOfWeek() .
Процедура выбора интервала дат. Которая анализирует уже заполненые реквизиты ДатаНач и ДатаКон и если они соответствуют стандартному интервалу (год, месяц, квартал, с начала года, с начала квартала. ) устанавливают их при вызове диалога "Настройка периода"
ДеньВСекундах = 24 * 60 * 60 ;
//Дата начала по умолчению, если не указана
ДатаН_Умолчание = НачалоДня ( ТекущаяДата ())- ДеньВСекундах ;
//Дата окончания по умолчанию, если не указана
ДатаК_Умолчание = НачалоДня ( ТекущаяДата ());НастройкаПериода = Новый НастройкаПериода ;
НастройкаПериода . УстановитьПериод (?( ДатаНач = ПустаяДата , ДатаН_Умолчание , ДатаНач ), ?( ДатаКон = ПустаяДата , ДатаК_Умолчание , ДатаКон ));
НастройкаПериода . РедактироватьКакИнтервал = Истина ;
НастройкаПериода . РедактироватьКакПериод = Истина ;
НастройкаПериода . ВариантНастройки = ВариантНастройкиПериода . Период ;Если ДатаНач = ДатаКон Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . День ;
НастройкаПериода . ЗначениеПериода = ДатаНач ;
ИначеЕсли КонецМесяца ( ДатаНач )= КонецДня ( ДатаКон ) И ДатаНач = НачалоМесяца ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . Месяц ;
НастройкаПериода . ЗначениеПериода = ДатаНач ;
ИначеЕсли КонецГода ( ДатаНач )= КонецДня ( ДатаКон ) И ДатаНач = НачалоГода ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . Год ;
НастройкаПериода . ЗначениеПериода = ДатаНач ;
ИначеЕсли КонецКвартала ( ДатаНач )= КонецДня ( ДатаКон ) И ДатаНач = НачалоКвартала ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . Квартал ;
НастройкаПериода . ЗначениеПериода = ДатаНач ;
ИначеЕсли ДатаНач = НачалоГода ( ДатаНач ) И КонецДня ( ДатаКон )= КонецКвартала ( ДатаКон ) И Год ( ДатаНач )= Год ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . КварталСНачалаГода ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
ИначеЕсли ДатаНач = НачалоКвартала ( ДатаКон ) И КонецДня ( ДатаКон )= КонецМесяца ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . МесяцСНачалаКвартала ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
ИначеЕсли ДатаНач = НачалоГода ( ДатаКон ) И КонецДня ( ДатаКон )= КонецМесяца ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . МесяцСНачалаГода ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
ИначеЕсли ДатаНач = НачалоМесяца ( ДатаКон ) И Месяц ( ДатаНач )= Месяц ( ДатаКон ) И Год ( ДатаНач )= Год ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . ДеньСНачалаМесяца ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
ИначеЕсли ДатаНач = НачалоКвартала ( ДатаНач ) И КонецКвартала ( ДатаНач )= КонецКвартала ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . ДеньСНачалаКвартала ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
ИначеЕсли ДатаНач = НачалоГода ( ДатаКон ) И Год ( ДатаНач )= Год ( ДатаКон ) Тогда
НастройкаПериода . ВариантПериода = ВариантПериода . ДеньСНачалаГода ;
НастройкаПериода . ЗначениеПериода = ДатаКон ;
Иначе
НастройкаПериода . ВариантПериода = ВариантПериода . ПроизвольныйИнтервал ;
КонецЕсли;Если НастройкаПериода . Редактировать () Тогда
ДатаНач = НастройкаПериода . ПолучитьДатуНачала ();
ДатаКон = НастройкаПериода . ПолучитьДатуОкончания ();
КонецЕсли;В 1С значение типа «Дата» – это календарная дата григорианского календаря (с 01 января 0001 года по 31 декабря 3999 год) и время с точностью до 0,1 миллисекунды. Разработчику неизбежно приходится сталкиваться с данным типом, поэтому в этой статье предлагаю ознакомиться с его основными функциями и принципами работы.
«Дата» в модулях 1С
Как инициализировать дату
С помощью литерала встроенного языка
С помощью функции 1С Дата()
Как указать пустую дату
Функции для работы с датой
Получить текущую дату
Получить отдельные части даты
Следует заметить, что пробел в номере года вставляется при установках по умолчанию (подразумевается, что не установлен признак группировки в региональных установках).
Определить дату и время начала некоторого периода из даты
Для решения таких задач существует набор функций НачалоГода(), НачалоКвартала(), НачалоМесяца(), НачалоНедели(), НачалоДня(), НачалоЧаса(), НачалоМинуты(). В параметр задаётся значение даты начало периода, которого необходимо определить.
Определить дату и время конца некоторого периода из даты
Для получения конца периода из даты, можно использовать специальные функции НачалоГода(), НачалоКвартала(), НачалоМесяца(), НачалоНедели(), НачалоДня(), НачалоЧаса(), НачалоМинуты(). Параметр принимает значение «нашей даты», аналогично, как и в функции Начало…().
Определить номер недели или дня в году
Определить номер дня в неделе
Как отнять или прибавить к дате в 1С год, месяц, день, час, минуту, секунду
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>Чтобы прибавить, вычесть месяц или год правильно использовать функцию ДобавитьМесяц(, ). Если параметру задать отрицательное значение, то число месяцев отнимается.
Формат даты в 1С
Функция Формат(, ). В параметре перечисляются параметры форматирования через символ «;». Возвращаемый тип строка.
Для задания параметра можно воспользоваться «конструктором форматной строки». При написании кода вызвать его не составляет труда. Необходимо только нажать правую кнопку «мыши» и из контекстного меню выбрать одноимённый конструктор.
На вкладке «Дата» задаём нужный нам формат.
Как вызвать диалоговое окно для ввода даты
Не модальный режим:
«Дата» в запросах 1С
Инициализация даты в запросах
Функция ДАТАВРЕМЯ()
Стоит отметить, что параметры данной функции принимают только литералы в отличие от схожей на неё функции для работы с датой в модулях Дата(). Например запись с передачей в функцию полей выборки из временной таблицы ДАТАВРЕМЯ(вт.Год, вт.Месяц, вт.День) выдаст ошибку.
Пустая дата
Текущая дата и работа с условием по дате в запросе
Так же не стоит забывать, что передать в запрос дату можно с помощью параметра. Для указания текущей даты это единственный вариант.
Получить отдельные части даты. Функции: ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА
В запросе получить отдельные части даты возможно с помощью одноимённых функций ГОД(), КВАРТАЛ(), МЕСЯЦ(), ДЕНЬ(), ЧАС(), МИНУТА(), СЕКУНДА().
Получить начало, конец некоторого периода
Существует две функции для решения таких задач. Соответственно НАЧАЛОПЕРИОДА(, ) и КОНЕЦПЕРИОДА(, ).
Где в параметр указывается «наша дата», а в параметр задаётся значение периода (Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Час, Минута).
Аналогично и для функции КОНЕЦПЕРИОДА().
Добавить сдвиг к дате
Для решения таких задач пригодится функция ДОБАВИТЬКДАТЕ(, , ). В параметр задаётся «наша дата», в параметр временной интервал (Год, Полугодие, Месяц и т.д.).
Использование функции РАЗНОСТЬДАТ()
Дата — один из примитивных типов данных в системе 1С:Предприятие. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Одной из первых моих статей в этой рубрике была небольшая шпаргалка по работе с датами, но о датах в запросах там было написано очень мало. В запросах 1С с датами приходится работать довольно часто, особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии).
Функция Год
Функция Год() возвращает целое число – год даты. Например, выберем все заказы покупателя оформленные с 1 января 2016 года
Функция Квартал
Возвращает номер квартала даты (целочисленное значение от 1 до 4)
Предположим, в ЗаказПокупателя передаем заказ №100 от 12.03.2016, в этом случае наш запрос вернет НомерКвартала = 1
Функция Месяц
Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).
Запрос вернет – 6
Функция ДеньГода
Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).
Запрос вернет – 175
Функция День
Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).
Запрос вернет – 23
Функция Неделя
Принимает параметр типа ДАТА. Возвращает номер недели в году.
Запрос вернет – 25
Функция ДеньНедели
Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).
Запрос вернет – 4
Функция Час
Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).
Запрос вернет – 18
Функция Минута
Принимает параметр типа ДАТА. Возвращает минуты часа (целочисленное значение от 0 до 59).
Запрос вернет – 25
Функция Секунда
Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).
Запрос вернет – 36
Функция НачалоПериода
Функция возвращает для указанной даты начало периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 01.06.2016
Функция КонецПериода
Функция возвращает для указанной даты конец периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Запрос вернет – 30.06.2016
Функция ДобавитьКДате
Функция добавляет к дате указанное количество временных интервалов.
Получаем дату 15.10.2016 0:00:00 Очень удобно, что не приходится задумываться о количестве дней в месяцах.
Количество может быть и отрицательным. Тогда отсчет интервала производится в обратную сторону.Функция РазностьДат
Функция рассчитывает календарную разницу между двумя датами и ее нельзя использовать в местах, где необходимо рассчитать банковских или рабочих дней. Тип может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ
Функция Формат в 1С 8.3 предоставляет достаточно интересный инструмент разработчику для форматирования значений. Особенно часто эта функция используется для вывода примитивных типов данных (даты, времени, чисел, строки, булево) в нужном формате.
Рассмотрим подробнее функцию и способ составления форматной строки.
Функция Формат()
Синтаксис функции достаточно прост:
Значение — форматируемое значение, Форматная строка — строка, заданная определенным образом, из которой формируется правило обработки формата.
Самое интересное — форматная строка. Рассмотрим её подробнее.
Конструктор форматной строки
Для облегчения труда разработчика фирма 1С встроила в платформу специальный конструктор форматной строки.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>Для запуска конструктора достаточно вызвать контекстное меню (правая кнопка мыши) и выбрать в списке «Конструктор форматной строки»:
Сам конструктор выглядит следующим образом:
Где необходимо выбрать нужную Вам вкладку в зависимости от типа данных — Число, Дата или Булево.
Рассмотрим использование функции на примерах.
Формат даты в 1С на примере месяца: прописью, без времени
Получить формат даты без времени:
Формат даты 1С, где месяц прописью:
Формат времени без даты, только час, минута и секунда:
Примеры формата числа
Получим формат числа с двумя точками после запятой:
Число без неразрывных пробелов:
Использование запятой вместо точки для дробной части:
Округление числа (не математическое) до целых:
Вывод лидирующих нулей без неразрывных пробелов:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: