Как сделать пустую дату 1с
При работе с датами 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) и использовать функцию запроса ДатаВремя().
В приведенном тексте запроса мы опустили лидирующие нули у года, месяца и дня, а так же не указали часов, минут и секунд и программа, что называется, скушала это допущение.
Дата и граница времени
Для того чтобы понять, как и почему это происходит, рассмотрим простой пример:
- До проведения в 12 часов 31 минуту 36 секунд документа реализации остатки по номенклатуре Сахар составляли 30 кг;
- Документом в указанное время было списано 10 кг;
- Отчет, формируемый на дату документа на 12 часов 31 минуту 36 секунд по таблице Остатки, покажет остаток 30кг;
- Тот же самый отчет по таблице ОстаткиИОбороты на то же самое время покажет остаток в 20 кг.
В чем же причина подобного поведения и как этого избежать?
Проблема в том, что в таблице Остатки период задается открытым отрезком, то есть, движения, осуществленные на момент времени формирования отчета не берутся в расчет, то есть время берется на начало указанной в параметре секунды. В то же самое время, для таблицы Оборотов и для таблицы ОстаткиИОбороты границы времени берутся в расчет то есть время берется на конец указанной секунды.
Выходов из этой ситуации несколько:
- При использовании таблицы Остатки, указывать момент времени на 1 секунду больший, чем заданный;
- Использовать только таблицу ОстаткиИОбороты (не самый оптимальный с точки зрения производительности вариант);
- Использовать понятие Граница.
Последний вариант можно представить кодом, указанном на Рис. 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] => Финансовый учет ) -->
Читайте также: