Как сделать пустую дату 1с

Обновлено: 06.07.2024

При работе с датами 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С

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как выполнять преобразования параметров других типов к рассматриваемому типу;
  • Как определить пустую дату в запросе 1С;
  • Чем отличается дата и граница времени.

Именно на эти вопросы мы и постараемся ответить в нашей статье.

Что такое дата и как ее определить

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

  • Год, когда произошло событие;
  • Месяц этого события;
  • День.

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

Существующие в мире форматы даты имеют существенное различие:

Именно последний формат и использует платформа 1С.

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

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

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

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

Отсчет времени в программе идет от начала дня 1 января 0001 года. Для приведенного выше кода это значение можно определить одним из двух способов (Рис. 2).

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

Особенности использования даты в запросах 1С

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

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

Получив пустую дату, мы можем указать ее в качестве параметра к нашему запросу, то есть использовать конструкцию (Рис. 4)

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

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

Дата и граница времени

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

  1. До проведения в 12 часов 31 минуту 36 секунд документа реализации остатки по номенклатуре Сахар составляли 30 кг;
  2. Документом в указанное время было списано 10 кг;
  3. Отчет, формируемый на дату документа на 12 часов 31 минуту 36 секунд по таблице Остатки, покажет остаток 30кг;
  4. Тот же самый отчет по таблице ОстаткиИОбороты на то же самое время покажет остаток в 20 кг.

В чем же причина подобного поведения и как этого избежать?

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

Выходов из этой ситуации несколько:

  1. При использовании таблицы Остатки, указывать момент времени на 1 секунду больший, чем заданный;
  2. Использовать только таблицу ОстаткиИОбороты (не самый оптимальный с точки зрения производительности вариант);
  3. Использовать понятие Граница.

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

Тип Дата широко используется при разработке в 1С Предприятие 8, и любому разработчику 1С так или иначе приходится сталкиваться с этим типом. Ниже рассмотрены основные примеры и приемы работы с датами в 1С средствами встроенного языка.

Инициализация переменной с типом Дата

Дату можно инициализировать при помощи литералов встроенного языка, а также при помощи функции-конструктора. Минимально необходимыми при указании даты являются год, месяц и день. Часы, минуты и секунды можно не указывать.

// Формат ‘ГГГГММДДччммсс’ Дата = ‘20210505121515’ ; // 05.05.2021 12:15:15 // Для удобства можно использовать любые нечисловые разделители, результат будет одинаковым // Все нечисловые символы в литерале игнорируются Дата = ‘2021.05.05:12:15:15’ ; // 05.05.2021 12:15:15 Дата = ‘2021 + 05 /05 * 12%15 – 15′ ; // 05.05.2021 12:15:15 Дата = ‘2021050512ё15&15’ ; // 05.05.2021 12:15:15 Дата = ‘Это литерал типа дата 2021 Я год 05 Я месяц 05 А я день!12час15минута15секунда!’ ; // 05.05.2021 12:15:15 // Допустимо не указывать часы, минуты и секунды НачалоДня = ‘2021.05.05’ ; // 05.05.2021 00:00:00 // Функция-конструктор даты // Также как для литерала, достаточно указать год, месяц и день // В отличие от литерала, использование нечисловых символов приведет к ошибке. Дата = Дата ( “20210505” ); // 05.05.2021 00:00:00 Дата = Дата ( 2021,05,05 ); // 05.05.2021 00:00:00 Дата = Дата ( 2021,05,05,12,15,15 ); // 05.05.2021 12:15:15

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

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

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

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

Отображение даты происходит согласно настройкам в операционной системе в компьютере.

2. Пустая дата в запросах 1С



Рис. 1 Проверка на пустую дату в запросе в 1С

3. Любая дата в запросе в 1С 8.3



Рис. 2 Пример использования функции ДатаВремя

4. Текущая дата в 1С



Рис. 3 Передать значение текущей даты в 1С через параметр в запрос

5. Примеры различных действий с датой в запросе 1С 8.3

Далее будут представлены различные иные манипуляции с датой в системе 1С:

Рассмотрим, как будет выглядеть полученное посредствам запроса определение начала нынешнего месяца:



Рис. 4 Выбор начала месяца с датой в запросе 1С 8.3

Конец года, можно определить при помощи следующей строчки в запросе:



Рис. 5 Конец года – дата в запросе 1С 8.3

Далее представлено получение полудня в текущей дате внутри запроса:



Рис. 6 Полдень текущей даты в запросе в 1С

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



Рис. 7 Только дата в запросе 1С 8.3

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

Рис. 8 Дата в запросе 1С 8.3 как константа

Последнее действие – это задание максимально точной даты, то есть точность до секунды, это действие может реализовать следующий запрос:



Рис. 9 Точная дата в запросе 1С 8.3

Вас могут заинтересовать следующие статьи:

94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->

Вас могут заинтересовать следующие вебинары:

Программирование в 1С [1] => 1С:Бухгалтерия [2] => 1С:Управление производственным предприятием [3] => 1С: Розница [4] => 1С: CRM [5] => 1С: Управление торговлей [6] => Бюджетирование [7] => СКД [8] => 1С: Конвертация данных [9] => Администрирование 1С [10] => Конвертация данных [11] => Лицензии 1С [12] => Оптимизация [13] => 1С: Документооборот [14] => 1С: ERP [15] => Транспортная логистика [16] => Техническое задание [17] => Продажи [18] => Ценообразование [19] => Планирование [20] => MS SQL Server [21] => Полезные обработки [22] => МСФО [23] => Отчеты в 1С [24] => XML [25] => Внедрение ERP [26] => Перенос данных [27] => Торговое оборудование [28] => РСБУ [29] => 1С:Управление корпоративными финансами [30] => 1С: Колледж [31] => 1С: Аренда и управление недвижимостью [32] => Финансовый учет ) -->

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