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

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

Что такое пустая дата в 1С? Эта дата, которая соответствует дате григорианского календаря 1 января 1 года 0 часов, 0 минут и 0 секунд. Такая дата с таким временем в 1С считается пустой.

Задаем пустую дату

Задать пустую дату в модуле можно несколькими способами.

При помощи ординарных кавычек:

НашаПустаяДата = '00010101';

Или:

НашаПустаяДата = '00010101000000';

При помощи метода Дата:

НашаПустаяДата = Дата(1,1,1);

Или:

НашаПустаяДата = Дата(1,1,1,0,0,0);

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

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

Сравниваем с пустой датой

Как в программном модуле проверить является ли какая-либо дата пустой? Сделать это можно двумя способами. В первом способе используется метод  ЗначениеЗаполнено. Этот метод вернёт Истина, если дата не пустая, и Ложь, если дата пустая. Например, узнаем, является ли НашаПустаяДата пустой. Для этого будем использовать условие.

НашаПустаяДата = Дата(1,1,1,0,0,0);

Если ЗначениеЗаполнено(НашаПустаяДата) Тогда 
	Сообщить("Дата пустая");
иначе
	Сообщить("Дата не пустая");
КонецЕсли;

В этом случае, выйдет сообщение, что дата пустая.

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

Если же мы проверим так не пустую дату.

НашаНеПустаяДата   = Дата(2011,1,1);
Если ЗначениеЗаполнено(НашаНеПустаяДата) Тогда 
	Сообщить("Дата не пустая");
иначе
	Сообщить("Дата пустая");
КонецЕсли;

То функция ЗначениеЗаполнено вернёт Истина, и выйдет другое сообщение.

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

Можно проверять, просто сравнивая какую-то переменную или реквизит с пустой датой. Например, в коде ниже проверяется, является ли реквизит формы ДатаЗаписиДокумента пустой датой.

Если ДатаЗаписиДокумента = Дата(1,1,1) Тогда 
	Сообщить("Эта дата пустая!");
КонецЕсли;

Где:  ДатаЗаписиДокумента  реквизит управляемой формы.

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

Задаем пустую дату в запросе

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

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |	ПродажаТоваров.Номер КАК Номер,
               |	ПродажаТоваров.Дата КАК Дата,
               |	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПустая
               |ИЗ
               |	Документ.ПродажаТоваров КАК ПродажаТоваров";

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

Также, мы можем передать значение с пустой датой в запрос.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |	ПродажаТоваров.Номер КАК Номер,
               |	ПродажаТоваров.Дата КАК Дата,
               |	&ПустаяДатаВЗапрос КАК ДатаПустая
               |ИЗ
               |	Документ.ПродажаТоваров КАК ПродажаТоваров";
Запрос.УстановитьПараметр("ПустаяДатаВЗапрос",Дата(1,1,1));

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

Пустая дата в 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

Подписывайтесь на мой канал в телеграмме: https://t.me/Programming1CNizamutdinov

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

четырнадцать − 6 =