Реквизит дата в формате время

В этой статье научимся узнаем, как работают даты в 1С. Тип Дата — это один из примитивных типов 1С 8.3. При помощи этого типа в программе 1С можно задать дату (например, 10 ноября 2019 года), время (например, 12 часов 32 минуты 45 секунд), а также дату с временем (например, 10 ноября 2019 года 12 часов 32 минуты 45 секунд). В этой статье мы научимся создавать переменные с типом дата, создавать реквизиты объектов с типом дата и работать на форме с этим типом. А также научимся выполнять элементарные операции над датами.

Создаем программно даты в 1С

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

‘ГГГГММДДЧЧММСС’

Где:

ГГГГ – цифры года даты,

ММ —  цифры месяца даты

ДД – цифры дня даты

ЧЧ – цифры часа от 0 до 23

ММ – цифры минут от 0 до 59

СС – цифры секунд от 0 до 59

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

‘ГГГГММДД’.

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

‘00010101ЧЧММСС’

Рассмотрим, примеры. Создадим дату со временем, дату без времени и время с пустой датой. И также все это выведем методом Сообщить. Хотя, метод Сообщить и принимает в качестве параметра тип строка, мы можем и передать в него дату, платформа 1С автоматически её конвертирует в строку.

ПеремДатаВремя = '20190912153030';
ПеремДата      = '20190912';
ПеремВремя     = '00010101153030';

Сообщить(ПеремДатаВремя);
Сообщить(ПеремДата);
Сообщить(ПеремВремя);

И посмотрим, как это все вывелось.

Программное создание дат в 1С

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

Разберем еще один способ создания переменной с типом дата, это использование метода Дата. Этот метод имеет два варианта синтаксис:

Дата(<СтрокаДаты>)

Где:

СтрокаДаты – строка, которая задаётся в уже знакомом нам формате «ГГГГММДДЧЧММСС», принципы задания строки аналогичны принципам задания даты в ординарных кавычках.

Второй вариант

Дата(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Где

Год – цифра года даты,

Месяц – цифра месяца даты,

День – цифры дня даты,

Час – цифры часа

Минута – цифры минуты

Секунда – цифры секунды.

Первый три параметра являются обязательными.

Если нам нужно задать, просто дату (без времени), то будет следующий синтаксис.

Дата(<Год>,<Месяц>,<День>)

А если нужно задать время, то года, месяц и день будут равны 1:

Дата(1,1,1,<Час>,<Минута>,<Секунда>)

Переделаем предыдущий пример.

ПеремДатаВремя = Дата("20190912153030");
ПеремДата      = Дата(2019,9,12);
ПеремВремя     = Дата(1,1,1,15,30,30);

Здесь я использовал два синтаксиса метода Дата. Первый синтаксис, по сути, преобразует строку в дату (строка естественно должна быть задана по правилам). Второй синтаксис, позволяет задать дату при помощи типа число.

Реквизит с типом дата в объектах 1С

Для того, чтобы какой-то реквизит объекта 1С 8.3 был датой, достаточно указать ему соответствующий тип. Например, как мы это делаем со справочником.

Тип дата реквизита объекта 1С

Причем у любого реквизита с типом дата имеется состав даты. Это Дата, Время и Дата и время.

Состав даты реквизита объекта 1С

В зависимости от того, какой состав даты выбран, такой вид даты и можно будет указать в форме объекта.

Состав даты Дата.

Состав даты Дата реквизита объекта 1С на форме объекта 1С

Состав даты Время.

Состав даты Время реквизита объекта 1С на форме объекта 1С

Состав даты Дата и время.

Состав даты Дата и время реквизита объекта 1С на форме объекта 1С

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

Дата на управляемой форме 1С

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

Реквизит с типом дата на управляемой форме 1С

Если мы поместим этот реквизит на форму, то он разместится в виде поля ввода.

Поле ввода реквизита управляемой формы с типом дата

Причем у этого поля ввода имеется справа кнопка, при нажатии на которую будет открыто окно выбора даты.

Окно выбора даты поля ввода реквизита с типом дата

Это окно появляется в том случае, если состав даты реквизита или Дата, или Дата и время.

А отвечает за появление этой кнопки свойство поля ввода «Кнопка выбора».

Кнопка выбора для поля ввода типа дата

Посмотрим, как записывается дата, в зависимости от значения состава даты.

Для этого у поля ввода я создам событие при изменении.

Событие при изменении поля ввода

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

&НаКлиенте
Процедура РеквизитДатаПриИзменении(Элемент)
    Сообщить(РеквизитДата);
КонецПроцедуры

Посмотрим, что вернет этот метод, когда состав даты реквизита — Дата.

Состав даты 1С – дата

Когда состав даты реквизита — Время

Состав даты 1С – время

Когда состав даты реквизита – Дата и время

Состав даты 1С – дата и время

Вы убедились наглядно, что независимо от состава даты, у нас дата всегда записывается в формате ГГГГММДДЧЧММСС.

Разность дат в 1С

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

Например, создадим две даты разностью в минуту, вычтем одну из другой.

Дата1 = Дата(2019,4,20,15,0,0);
Дата2 = Дата(2019,4,20,15,1,0);

Разность = Дата2 - Дата1;

Сообщить(Дата1);
Сообщить(Дата2);
Сообщить(Разность);

И посмотрим, какая разница.

Разность дат в 1С

Мы получили количество секунд разности между Дата2 и Дата1. Если мы вычтем наоборот.

Дата1 = Дата(2019,4,20,15,0,0);
Дата2 = Дата(2019,4,20,15,1,0);

Разность = Дата1 - Дата2;  

То поскольку Дата2 раньше на временной оси, чем Дата1, то получим разность с отрицательным знаком.

Разность дат в 1С

Прибавить дату 1С

Мы также, можем прибавить к дате нужное количество секунда. Делается это просто: к определенной дате, прибавляется то количество секунд, которое нам нужно.

Например, прибавим к дате минуту, час, день.

Дата1 = Дата(2019,4,20,15,0,0);
//прибавим минуту
Дата1ПлюсМинута = Дата1 + 60;
//прибавим час
Дата1ПлюсЧас    = Дата1 + 60*60;
//прибавим день
Дата1ПлюсДень   = Дата1 + 60*60*24;

Сообщить(Дата1);
Сообщить(Дата1ПлюсМинута);
Сообщить(Дата1ПлюсЧас);
Сообщить(Дата1ПлюсДень);

Посмотрим на результат:

Прибавить дату 1С

Также можно и вычесть дату.

Дата1 = Дата(2019,4,20,15,0,0);
//вычтем минуту
Дата1МинусМинута = Дата1 - 60;
//вычтем час
Дата1МинусЧас    = Дата1 - 60*60;
//вычтем день
Дата1МинусДень   = Дата1 - 60*60*24;

Сообщить(Дата1);
Сообщить(Дата1МинусМинута);
Сообщить(Дата1МинусЧас);
Сообщить(Дата1МинусДень);

Посмотрим на результат:

Вычесть дату 1С

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

Другие статьи о примитивных типах:

Пустая дата в 1С

Функции для работы с датами

Примитивный тип Строка

Примитивный тип Булево

Примитивный тип Число

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Из даты получить только время. как?

Я
   ic-kat

24.08.10 — 07:43

есть поле дата, формат: дата и время.

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

как это можно получить?

если формат(), то на выходе строка, а нужно именно дата/время.

   IamAlexy

1 — 24.08.10 — 07:44

время =  дата — началодня(дата)

где то так :)

   smitru

2 — 24.08.10 — 07:46

Что значит «дата/время» в контексте «только время»?

Т.е. тебе нужна дата 01.01.0001 ? Ты не можешь «отрезать» дату т.к. это не предусмотрено конструктивом. Но ты можешь через форматную строку её не показывать.

   Amiralnar

3 — 24.08.10 — 07:46

Не припомню я такого формата — время.

(1) даст разницу в секундах. Автор, видимо, хочет в шестидесятиричной системе, с разделителем…

   ic-kat

4 — 24.08.10 — 07:46

(1) выдает некое количество секунд

   Amiralnar

5 — 24.08.10 — 07:47

А какой смысл? Что тебе надо?

   Смешной 1С

6 — 24.08.10 — 07:47

Формат(ТекущаяДата(), «ДЛФ=T»)

   ic-kat

7 — 24.08.10 — 07:47

(2) когда описываем тип реквизита, если тип дата, то можно выбрать формат: дата, время либо дата время. вот реквизит именно формат время

   ic-kat

8 — 24.08.10 — 07:48

(6) это дает в результате строку

   Смешной 1С

9 — 24.08.10 — 07:48

+(6) Дальше как с датой

   IamAlexy

10 — 24.08.10 — 07:48

(4)
ну да, точно:

время =  дата(‘00010101’) + (Дата-НачалоДня(Дата));

:)

   Amiralnar

11 — 24.08.10 — 07:49

(7) При выборе значения формата — Время используется нулевая дата.

19.20 = 000101011920

   ic-kat

12 — 24.08.10 — 07:50

(5) да, надо именно так.

   smitru

13 — 24.08.10 — 07:54

(7) В 1С времени без даты не бывает по определению… Как вариант можно использовать «нулевую дату» (01.01.0001) но это черевато возможными траблами в будущем.

поэтому если нужен формат «время», то сохраняйте признак форматной строки и используйте «текущую дату» или например «фиксированную дату» 01.01.2010 (но это зависит от бизнес-логики)

   Amiralnar

14 — 24.08.10 — 07:56

(13) Использование «нулевой» даты является штатным режимом работы с временем в 1С. О каких подводных камнях вы говорите?

Я не услышал, какую прикладныю задачу пытается решить автор, и не представляю, как ему, бедному, помочь.

   ic-kat

15 — 24.08.10 — 07:57

(10) так получилось, спасибо!!

   ic-kat

16 — 24.08.10 — 07:59

(14) клиент хочет, чтоб при создание дока в тч можно было проставлять время посещения, чтоб можно было менять, но если не заполнено, то по умолчанию ставилось текущее.

   smitru

17 — 24.08.10 — 08:03

(14) всё что входит в синтаксис — штатно. Но из практики грабли с «нулевой датой» — типичны. к сожалению многие прогеры не проводят контроль на наличие «нулевой даты» (особенно если дата нулевая, а вот время — нет)

   Amiralnar

18 — 24.08.10 — 08:07

(16) Вы неверно оценили задачу.

В прикладном смысле «время посещения» неразрывно связано с датой посещения, поэтому используйте текущую дату полностью!

В форме документа, в колонке табличной части можно указать формат отображения!

В этом случае будет сохраняться правильное значение, а отображаться — нужное по заданию.

В запросе всегда легко можно обрезать дату, оставив время, а вот наоборот — привязать время к дате — уже сложнее. В 1С не определен оператор + для значений типа «Дата».

(17) «Типичные»  — они хотябы гуглятся, или только в вашем сознании на уровне рефлексов?

   smitru

19 — 24.08.10 — 08:12

(18) «На уровне рефлексов»: «В 1С не определен оператор + для значений типа «Дата».(с) — это глупости

Дата1 = Дата2 + 200; — нормальный оператор для переменной Дата1, Дата2 с типом дата

   Невский Александр

20 — 24.08.10 — 08:23

Новый Дата(0001,01,01,Час(ДатаП),Минута(ДатаП),Секунда(ДатаП))

   Amiralnar

21 — 24.08.10 — 08:26

(19) Скажите, уважаемый, на ваш взгляд, слева и справа от знака «+» находятся переменные типа «Дата»?

Дата1 = Дата2 + 200;

Попробуйте на досуге конструкцию

Дата1 = Дата2 + Дата1;

   smitru

22 — 24.08.10 — 08:40

(21) Уважаемый весьма советую на досуге попробовать конструкив:

Дата1 = ДатаТекущегоДня + ДатаНачалаКвартала — ‘20100101’;

Вы будете удивлены, что результат будет Дата() несмотря на наличие в выражении ДатаТекущегоДня + ДатаНачалаКвартала

   НЕА123

23 — 24.08.10 — 08:49

(22)
не робит сия конструкция.
скобки забыл поставить.
(21)+1

   ic-kat

24 — 24.08.10 — 09:08

(18)формат отображения?
дата нужна не будет точно, только время.
нужно будет отсекать наиболее напряженное время посещения

   ic-kat

25 — 24.08.10 — 09:09

(20) ну, тоже вариант.

   Amiralnar

26 — 24.08.10 — 09:19

(25) А потом вас попросят сказать, _когда_ были напряженные дни…

(ой, прям как месячные вычисляем =) )

  

ic-kat

27 — 24.08.10 — 14:58

(26) угу, это они могут…

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

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

Хранение дат в системе

В базе данных даты хранятся с точностью до секунд. Для реквизитов типа “дата” можно установить вариант хранения “дата и время”, “только дата”, “только время”.

Переменные типа “дата” всегда представляют дату с секундами. Отсчет дат ведется с Рождества Христова (наша эра), т.е. с 01.01.0001 00:00:00 по Григорианскому календарю. Начальная дата – это не совсем дата. Это значение в системе используется для представления “пустой даты” (аналог пустой ссылки для ссылочных типов или пустой строки “” для строкового типа).

Максимальная дата – 31.12.3999 23:59:59

Как получить текущую дату и время?

Дата = ТекущаяДата();

Как явно указать нужную дату?

  • Литералом встроенного языка вида ‘ГГГГММДДччммсс’ :
'20201103160457' 
'2021.05.09:11:00:05' 
  • Функцией глобального контекста Дата():
Дата(2020, 06, 4, 18,45, 23) 
Дата(2021, 2, 16)            
  • Если нам необходимо в тексте запроса указать конкретную дату — тогда используем литерал ДАТАВРЕМЯ():
ДАТАВРЕМЯ(2019, 10, 04)
В текстах модулей
Дата = ‘00010101’;
Дата = ‘00010101000000’;
Дата = ‘00010101′;
Дата = Дата(1,1,1);
В запросе

Запрос = Новый Запрос;
Запрос.Текст =
	“ВЫБРАТЬ
	|	Т.Ссылка КАК ФизическоеЛицо
	|ИЗ
	|	Справочник.ФизическиеЛица КАК Т
	|ГДЕ
	|	ДатаРождения = ДАТАВРЕМЯ(1,1,1,0,0,0)”;



Запрос = Новый Запрос;
Запрос.Текст =
	“ВЫБРАТЬ
	|	Т.Ссылка КАК ФизическоеЛицо
	|ИЗ
	|	Справочник.ФизическиеЛица КАК Т
	|ГДЕ
	|	ДатаРождения = &ПустаяДата”;
Запрос.УстановитьПараметр(“ПустаяДата”, ‘00010101’);

Как соединить дату и время?

Функция СоединитьДатуИВремя(Дата, Время) Экспорт
	ДатаСтрока = Формат(Дата, “ДФ=”“ггггММдд”“”);
	ВремяСтрока = Формат(Время, “ДФ=”“ЧЧммсс”“”);
	Результат = Дата(ДатаСтрока + ВремяСтрока);
	
	Возврат Результат;
КонецФункции

Как сложить две даты

ПустаяДата = ‘00010101000000’;
ПолученнаяДата = ПустаяДата + (Дата1  ПустаяДата) + (Дата2  ПустаяДата);

Как вычислить количество дней между двумя датами

Первый способ – запросом:

Запрос = Новый Запрос;
Запрос.Текст =
	“ВЫБРАТЬ 
	|	РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,МЕСЯЦ) КАК Месяцев,
	|	РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,ДЕНЬ) КАК Дней”;

Второй способ:

КоличествоДней = (ДатаОкончания  ДатаНачала)/60/60/24;

Как добавить к дате секунду, минуту, час, день

Дата представляет собой количество секунд, прошедших с 1 января 0001 года 00:00:00. Поэтому, чтобы добавить к дате дни, часы, минуты и так далее, нужно прибавить соответствующее количество секунд:

Результат = Дата(2016, 07, 21) + 1; 			
Результат = Дата(2016, 07, 21) + 2 * 60; 		
Результат = Дата(2016, 07, 21) + 60*60*10; 		
Результат = Дата(2016, 07, 21) + 5 * 60*60*24; 		

Как добавить или отнять от даты месяц

Результат = ДобавитьМесяц(Дата(2016, 07, 21), 5); 
Результат = ДобавитьМесяц(Дата(2016, 07, 21), 3) 

Дата в 1С 8.3 — это примитивный тип данных, который всегда имеет формат: год, месяц, день, час, минута, секунда. Поэтому переменная типа дата содержит не только дату, но и время. Простой способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках вида ‘ГГГГММДДччммсс’ (если часы, минуты и секунды не указывать, то они приравниваются к 00:00:00) где:

ГГГГ — четыре цифры года (включая тысячелетие и век);

ММ — две цифры месяца;

ДД — две цифры даты;

//———————————-

чч — две цифры часа (в 24-х часовом формате);

мм — две цифры минут;

сс — две цифры секунд.

Работа с датой и временем в 1С 8.3:

&НаКлиенте
Процедура РаботаСДатойИВременем(Команда)// Установка даты в переменную
   
ТолькоДата = ‘20200415’; // 15.04.2020

    // Преобразование строки в дату

ТолькоДата = Дата(«20200415»); // 15.04.2020

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

ТолькоДата = Дата(2020, 04, 15); // 15.04.2020

    // Установка в дате: часы, минуты и секунды

ДатаВремя = ‘20200415162703’; // 15 апреля 2020 г. 16 ч. 27 мин. 03 сек.

    // Получение года (месяца, дня, часа, минуты, секунды) у даты

Год_Даты = Год(ДатаВремя); // 2020
   
Месяц_Даты = Месяц(ДатаВремя); // 4
   
День_Даты = День(ДатаВремя); // 15
   
Час_Даты = Час(ДатаВремя); // 16
   
Минута_Даты = Минута(ДатаВремя); // 27
   
Секунда_Даты = Секунда(ДатаВремя); // 03

    // Прибавление к дате 3 секунды

Сообщить(ДатаВремя + 3); // 15.04.2020 16:27:06

    // Прибавление к дате два месяца

Сообщить(ДобавитьМесяц(ДатаВремя, 2));// 15.06.2020 16:27:03

    // Вычитание от даты одного месяца

Сообщить(ДобавитьМесяц(ДатаВремя, —1));// 15.03.2020 16:27:03

     // Получение текущей (рабочей) даты

Сообщить(ТекущаяДата());

КонецПроцедуры

Прибавить день к дате или вычесть день из даты в 1С 8.3:

// вариант 1:
&НаКлиенте
Процедура ОперацииДеньДата(Команда)

   Сообщить(МатематикаДень(‘20200415’, 1)); //16.04.2020 0:00:00
   Сообщить(МатематикаДень(‘20200415’, —1)); //14.04.2020 0:00:00

КонецПроцедуры

&НаКлиенте
Функция МатематикаДень(Дата, ЧислоДней)

   Возврат Дата+86400*ЧислоДней;// 86400 сек.

КонецФункции

// или вариант 2 (менее универсальный):
&НаКлиенте
Функция ПолучитьСледующийДень(Дата)

   // с помощью функции КонецДня прибавляем секунду к 15.04.2020 23:59:59

  Возврат КонецДня(Дата)+1;// и получаем следующий день 16.04.2020 00:00:00

КонецФункции

Дополнительные функции при работе с датой в 1С 8.3:

&НаКлиенте
Процедура ДополнительныеФункцииДаты(Команда)

   // Указываем дату явно:
   ДатаВремя = ‘20200415162703’; // 15 апреля 2020 г. 16:27:03
   //или
   ДатаВремя = ‘2020.04.15:16:27:03’; // 15 апреля 2020 г. 16:27:03

   Сообщить(ДеньГода(ДатаВремя)); // 15

   Сообщить(ДеньНедели(ДатаВремя)); // 3 — Среда (нумерация с понедельника «1»)

   Сообщить(НеделяГода(ДатаВремя)); // 3 Неделя

   Сообщить(НачалоГода(ДатаВремя)); // 01.01.2020 0:00:00
   Сообщить(КонецГода(ДатаВремя)); // 31.12.2020 23:59:59

   Сообщить(НачалоКвартала(ДатаВремя)); // 01.04.2020 0:00:00
   Сообщить(КонецКвартала(ДатаВремя)); // 30.06.2020 23:59:59

   Сообщить(НачалоМесяца(ДатаВремя)); // 01.04.2020 0:00:00
   Сообщить(КонецМесяца(ДатаВремя)); // 30.04.2020 23:59:59

   Сообщить(НачалоНедели(ДатаВремя)); // 13.04.2020 0:00:00
   Сообщить(КонецНедели(ДатаВремя)); // 19.04.2020 23:59:59

   Сообщить(НачалоДня(ДатаВремя)); // 15.04.2020 0:00:00
   Сообщить(КонецДня(ДатаВремя)); // 15.04.2020 23:59:59

   Сообщить(НачалоЧаса(ДатаВремя)); // 15.04.2020 16:00:00
   Сообщить(КонецЧаса(ДатаВремя)); // 15.04.2020 16:59:59

   Сообщить(НачалоМинуты(ДатаВремя)); // 15.04.2020 16:27:00
   Сообщить(КонецМинуты(ДатаВремя)); // 15.04.2020 16:27:59

КонецПроцедуры

Преобразование в дату десятисимвольной строки в 1С 8.3:

&НаКлиенте
Процедура ПреобразованиеВДатуСтроки10Симв(Команда) // «15.04.2020» преобразуем в ‘15.04.2020 0:00:00’

    // Строковая дата без времени преобразовывается в дату со временем:

СтрокаДаты=«15.04.2020»;
   
ТолькоДата = Дата(Сред(СтрокаДаты,7,4)+Сред(СтрокаДаты,4,2)+Сред(СтрокаДаты,0,2)); // формат даты ‘15.04.2020 0:00:00’КонецПроцедуры

Проверка на пустое значение даты (заполнение) в 1С 8.3:

&НаКлиенте
Процедура ПроверкаНаПустоеЗначениеДаты(Команда)

  ПустаяДата = ‘00010101’;

  //способ №1
  Если ПустаяДата = ‘00010101’ Тогда // или ‘00010101000000’
      Сообщить(«Эта дата пустая»);
  КонецЕсли;

  //способ №2
  Если ПустаяДата = ‘0001–01–01’ Тогда
      Сообщить(«Эта дата пустая»);
  КонецЕсли;

  //способ №3
  Если ПустаяДата = Дата(1,1,1) Тогда // или Дата(1, 1, 1, 0, 0, 0)
      Сообщить(«Эта дата пустая»);
  КонецЕсли;

  //способ №4
  Если НЕ ЗначениеЗаполнено(ПустаяДата) Тогда
      Сообщить(«Эта дата пустая»);
  КонецЕсли;

КонецПроцедуры

Проверка на пустое значение даты в Запросе в 1С 8.3:

&НаСервере
Процедура ПроверкаНаПустоеЗначениеДатыВЗапросе(Команда)

  //способ №1
  Запрос = Новый Запрос(«ВЫБРАТЬ
    |   ДатаРегистрацииЕГР
    | ИЗ
    |   Справочник.Контрагенты
    | ГДЕ
    |    ДатаРегистрацииЕГР = &ПустаяДата»;
  Запрос.УстановитьПараметр(«ПустаяДата», ‘00010101’);

  //способ №2
  Запрос = Новый Запрос(«ВЫБРАТЬ
    |   ДатаРегистрацииЕГР
    | ИЗ
    |   Справочник.Контрагенты
    | ГДЕ
    |    ДатаРегистрацииЕГР = ДАТАВРЕМЯ(1,1,1,0,0,0)»;
  // или ДАТАВРЕМЯ(0001,01,01,0,0,0) или ДАТАВРЕМЯ(1,1,1)

  РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
  Пока Записи.Следующий() Цикл
      // Обход результата запроса по каждой записи в полученной выборке
  КонецЦикла;

КонецПроцедуры

Сложение двух дат в 1С 8.3:

&НаКлиенте
Функция СложениеДат(Команда)

   ПустаяДата = ‘00010101’;
   Дата1 = ‘20200415’; // 15.04.2020
   Дата2 = ‘20220214’; // 14.02.2022

   Результат = ПустаяДата + (Дата1 ПустаяДата) + (Дата2 ПустаяДата);

   Сообщить(«Дата = «+Результат); // Дата = 29.05.4041 0:00:00

   Возврат Результат;

КонецФункции

Сравнение двух дат в 1С 8.3:

&НаКлиенте
Процедура СравнениеДат(Команда)Дата1 = ‘20200415’; // 15.04.2020
   
Дата2 = ‘20200415’; // 15.04.2020Если Дата1.Сравнить(Дата2) = 0 Тогда
       
Сообщить(«Даты равны»);
    КонецЕсли;

КонецПроцедуры

Расчет количества дней между датами в 1С 8.3:

&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатами(Команда)ДатаНач = ‘20200415’;
   
ДатаКон = ‘20200417’;РазницаВСекундах = ДатаКон ДатаНач; // 172800 секунды
   
РазницаВДнях = Цел(РазницаВСекундах/86400); // 2 дняКонецПроцедуры

Расчет количества дней между датами ЗАПРОСОМ в 1С 8.3:

&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатамиЗапросом(Команда)ДатаНач = ‘20200415’;
   
ДатаКон = ‘20200417’;Сообщить(РазницаДатНаСервере(ДатаНач, ДатаКон, «ДЕНЬ»)); //2 дняКонецПроцедуры&НаСервере
Функция РазницаДатНаСервере(ДатаНач, ДатаКон, СтрПериод)//СтрПериод — может быть «ДЕНЬ», «НЕДЕЛЯ», «МЕСЯЦ», «ГОД»
   
Запрос = Новый Запрос(«ВЫБРАТЬ РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, «+СтрПериод+«) КАК РазностьДат»);
   
Запрос.УстановитьПараметр(«ДатаНач», ДатаНач);
   
Запрос.УстановитьПараметр(«ДатаКон», ДатаКон);

    Возврат

Запрос.Выполнить().Выгрузить()[0].РазностьДат;

КонецФункции

Узнать текущую дату в миллисекундах в 1С 8.3:

&НаКлиенте
Процедура УзнатьТекущуюДатуВМиллисекундах(Команда)

   Сообщить(ТекущаяУниверсальнаяДатаВМиллисекундах()); //79 452 791 027 745

КонецПроцедуры

// Примечание: не совершайте чужих ошибок:
//
// Чтобы упорядочить данные в порядке поступления, разработчик добавил измерение МоментВремени И заполнил его

// из ТекущаяУниверсальнаяДатаВМиллисекундах(). При поступлении пакета разные наборы данных зарегистрировались одной миллисекундой

// (см.скриншот ниже).
//
// Всё работало, до тех пор, пока в обмен не добавили сценарий «удаляем данные, затем добавляем данные».

// Появилась плавающая ошибка — часть данных теряется. На самом деле данные сперва приходят, потом удаляются, т.к. нарушен порядок.
//
// Вывод: точности миллисекунд может быть недостаточно.

// Вариант решения, например — добавить поле с порядковым номером записи, по всем записям или в рамках секунды.


💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Дата и время:

Copyright©, «Программист 1С в г.Минске», 03.04.2020

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Содержание:

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

2.    Настроить формат даты в 1С

Разработчики в современных версиях конфигураций на платформе 8.3 предлагают нам использовать управляемые формы списков документов, в которых документы за прошедший и будущий периоды отображаются только в формате ДД.ММ.ГГГГ, а документы, введенные текущей датой, только временем:

 периоды отображаются в формате ДД.ММ.ГГГГ

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

Если мы попробуем в настройках формы документа для элемента “Дата” выбрать формат ДД.ММ.ГГГГ и сохранить настройки, то в форме списка документов отображение даты не изменится.

настройка формы документа

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

Решение подойдет для любой типовой или нетиповой конфигурации на платформе 8.3 с управляемыми формами, где доступен инструмент “Изменить форму”, а также присутствует возможность работы с полем “Ссылка” (должна быть не составного типа).  

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

Шаг 1.

Открываем нужную форму списка документов и нажимаем кнопку “Ещё”. Далее нажимаем кнопку “Изменить форму”.

Например, так это выглядит в форме “Заказы клиентов”:

     форма Заказы клиентов

Шаг 2.

В окне настройки формы документа нам необходимо найти элемент “Ссылка” и выделить его, кликнув мышью. Нажать на кнопку “Добавить поля”. В окне “Выберите поля для размещения в форме” нужно отметить поле “Дата” и нажать “Ок”.

Выберите поля для размещения

Шаг 3.

Новый элемент формы называется “Дата (Ссылка)”. Его нужно с помощью стрелок на командной панели (или с помощью сочетания клавиш Ctrl+Shift+Up) поместить рядом с элементом “Дата”. Теперь снимаем флаг с элемента “Дата”. Выделяем элемент “Дата (Ссылка)” и нажимаем кнопку “Формат”.  

выделяем элемент Дата Ссылка

2. Настроить формат даты в 1С

Итак, мы добавили время и дату в списке документов. Теперь перейдем к этапу настройки.

Шаг 4.

В результате проделанного ранее откроется конструктор форматной строки. В нем нужно перейти на закладку “Дата” и настроить формат даты в 1С, который вам нужен. Для принятия изменений в конструкторе форматной строки нажимаем на кнопку “Ок”. Видим, что в настройках формы поле “Формат” заполнилось исходя из настроек, которые были сделаны в конструкторе форматной строки. Для принятия изменений в форме нажимаем кнопку “Применить” и закрываем окно настроек формы.

Настроить формат даты

Готово! А вот и результат наших стараний:

закрываем окно настроек формы

Специалист компании ООО «Кодерлайн»

Кригер Максим Александрович

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2021-02-24T11:02:56+00:00 Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

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

Полный синтаксис (нажмите, чтобы раскрыть)

Оглавление (нажмите, чтобы раскрыть)

&НаКлиенте
Процедура ВыполнитьКод(Команда)
 
    /// Как инициализировать дату константой в 1с 8.3, 8.2
 
    МояДата = '20130724'; // 24.07.2013
 
    /// Как преобразовать строку в дату в 1с 8.3, 8.2
 
    МояДата = Дата("20130724"); // 24.07.2013
 
    /// Как инициализировать дату отдельными компонентами в 1с 8.3, 8.2
 
    МояДата = Дата(2013, 07, 24); // 24.07.2013
 
    /// Как указать в дате часы, минуты и секунды в 1с 8.3, 8.2
 
    МояДата = '20130724132506'; // 24 июля 2013 г. 13 ч. 25 мин. 6 сек.
 
    /// Как узнать год (месяц, день, час, минута, секунда) у
    /// даты в 1с 8.3, 8.2
 
    Г =  Год(МояДата); // 2013
    М =  Месяц(МояДата); // 7
    Д =  День(МояДата); // 24
    Ч =  Час(МояДата); // 13
    Ми = Минута(МояДата); // 25
    С =  Секунда(МояДата); // 6
 
    /// Как получить текущую дату в 1с 8.3, 8.2
 
    Сообщить(ТекущаяДата());
 
    /// Операции с датой в 1с 8.3, 8.2
 
    Сообщить(ТекущаяДата() + 1); // прибавили секунду
 
    Сообщить(ДобавитьМесяц(ТекущаяДата(), 1)); // прибавили месяц
    Сообщить(ДобавитьМесяц(ТекущаяДата(), -1)); // отняли месяц
 
    /// Вспомогательные функции для работы с датой в 1с 8.3, 8.2
 
    МояДата = '20130110125905'; // 10 января 2013 года 12:59:05
 
    Сообщить(ДеньГода(МояДата)); // 10
 
    Сообщить(ДеньНедели(МояДата)); // 4 т.е. четверг (нумерация с понедельника)
 
    Сообщить(НеделяГода(МояДата)); // 2
 
    Сообщить(НачалоГода(МояДата)); // 01.01.2013 0:00:00
    Сообщить(КонецГода(МояДата)); // 31.12.2013 23:59:59
 
    Сообщить(НачалоКвартала(МояДата)); // 01.01.2013 0:00:00
    Сообщить(КонецКвартала(МояДата)); // 31.03.2013 23:59:59
 
    Сообщить(НачалоМесяца(МояДата)); // 01.01.2013 0:00:00
    Сообщить(КонецМесяца(МояДата)); // 31.01.2013 23:59:59
 
    Сообщить(НачалоНедели(МояДата)); // 07.01.2013 0:00:00
    Сообщить(КонецНедели(МояДата)); // 13.01.2013 23:59:59
 
    Сообщить(НачалоДня(МояДата)); // 10.01.2013 0:00:00
    Сообщить(КонецДня(МояДата)); // 10.01.2013 23:59:59
 
    Сообщить(НачалоЧаса(МояДата)); // 10.01.2013 12:00:00
    Сообщить(КонецЧаса(МояДата)); // 10.01.2013 12:59:59
 
    Сообщить(НачалоМинуты(МояДата)); // 10.01.2013 12:59:00
    Сообщить(КонецМинуты(МояДата)); // 10.01.2013 12:59:59 
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Работа с типом Дата в языке 1С 8.3, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

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

Форматные строки используются в:

При использовании функции Формат, следует помнить, что она возвращает строковое значение, т.е. представление переданной даты в определенном формате.

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

В свойствах полей, ячеек макета, конструктор форматной строки вызывается нажатием кнопки. А в коде он вызывается аналогично конструктору запроса: контекстное меню -> Конструктор форматной строки…

конструктор форматной строки 1с
То есть правильный вызов конструктора для метода Формат, выглядит так:

  • Следует описать функцию Формат, без форматной строки:
    ФорматДата = Формат(Дата, "");
  • Поставить курсор между кавычек, вызвать конструктор;
  • После окончания работы с конструктором нажать ОК.
    ФорматДата = Формат(Дата, "ДФ=dd.MM.yyyy");

Конструктор форматной строки

Сам же конструктор форматной строки представляет собой набор вкладок, предназначенных для форматирования данных различных типов. Нас интересует вкладка Дата. 

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

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

  • д (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 часовой вариант представления времени).

Также можно добавлять в форматную строку произвольный текст, используя кавычки (если добавляемый текст не может быть интерпретирован, как составная часть даты, тогда можно обойтись и без кавычек):

Формат даты 1с с произвольным текстом

Итоговый текст такой форматной строки будет выглядеть следующим образом:

ФорматДата = Формат(Дата, "ДФ='dd.MM.yyyy ""г.""'");

Примеры использования формата дат

Приведем несколько примеров форматирования даты.

Дата без времени (05.10.2020)

ФорматДата = Формат(Дата, "ДЛФ=D");

Только время (12:35:50)

ФорматДата = Формат(Дата, "ДЛФ=T");

Месяц текстом, год полностью (Октябрь 2020)

ФорматДата = Формат(Дата, "ДФ='ММММ гггг'");

Месяц текстом кратко, год без тысячелетия (окт. 20)

ФорматДата = Формат(Дата, "ДФ='МММ гг'");

Месяц числом, через точку год полностью (10.2020)

ФорматДата = Формат(Дата, "ДФ=ММ.гггг");

Склонение названия месяца

При форматировании даты не всегда достаточно именительного падежа. Иногда требуется указать, к примеру, что отчет сформирован в «Октябре 2020 г.», а не в «Октябрь 2020 г.». Для решения этой проблемы подойдет серверная строковая функция ПолучитьСклоненияСтроки (доступна, начиная с версии платформы 8.3.13).

ПолучитьСклоненияСтроки(<СклоняемаяСтрока>, <ОписаниеСтроки>, <ФорматнаяСтрока>);

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

Пример. Отформатировать дату в «месяц год», месяц в предложном падеже вывести в виде сообщения.

&НаСервереБезКонтекста
Процедура СклонениеПериодаНаСервере(Дата)

    Месяц = Формат(Дата, "ДФ='MMMM yyyy'");
	
    Описание = "ПЛ=Мужской";
    ФорматнаяСтрока = "ПД=Предложный";
    МассивСклонение = ПолучитьСклоненияСтроки(Месяц, Описание, ФорматнаяСтрока);

    Если Не МассивСклонение.Количество() = 0 Тогда
        МесяцПредложный = МассивСклонение[0];
    Иначе
        МесяцПредложный = Месяц;
    КонецЕсли;	
	
    ШаблонСообщения = "Отчет сформирован в %1";
    ТекстСообщения = СтрШаблон(ШаблонСообщения, МесяцПредложный);
	
    Сообщить(ТекстСообщения);
	
КонецПроцедуры


Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей нашего сайта:

  • Монгольские компании в москве
  • Мондиал бизнес консорциум ооо
  • Монетка реквизиты организации
  • Монополия на большую компанию
  • Монопольные компании в россии

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии