1С скд текущая дата в запросе

1С скд текущая дата в запросе

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

Текущая дата

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

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

ПримерЗапроса = Новый Запрос;
ПримерЗапроса.Текст =«
|ВЫБРАТЬ
| АвансовыйОтчетПрисоединенныеФайлы.Ссылка
|ИЗ
| Справочник.АвансовыйОтчетПрисоединенныеФайлыКАК АвансовыйОтчетПрисоединенныеФайлы
|ГДЕ
| АвансовыйОтчетПрисоединенныеФайлы.Дата Произвольная дата

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

Обратите внимание, что используя эту функцию в примере выше, в качестве входных параметров мы передавали только три числа (год, месяц, день). Последние три (час, минута, секунда) не являются обязательными и при отсутствии заменяются на «0», то есть начало дня.

В рамках данного примера будут получены все файлы, присоединенные к авансовым отчетам до конца прошлого 2016 года. В связи с этим мы укажем час, минуту и секунду, чтобы сравнивать моментом времени «31 декабря 2016 г 23:59:59».

ВЫБРАТЬ
АвансовыйОтчетПрисоединенныеФайлы.Ссылка
ИЗ
Справочник.АвансовыйОтчетПрисоединенныеФайлы КАК АвансовыйОтчетПрисоединенныеФайлы
ГДЕ
АвансовыйОтчетПрисоединенныеФайлы.Дата Пустая дата

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

ВЫБРАТЬ
ПоступлениеНаРасчетныйСчет.Ссылка
ИЗ
Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет
ГДЕ
ПоступлениеНаРасчетныйСчет.ДатаВходящегоДокумента = ДАТАВРЕМЯ(1, 1, 1)

Дата в запросе в 1С может быть получена:

  • как значение полей выборки,
  • как параметр запроса
  • как результат исполнения встроенных функций языка запроса
  • ДАТАВРЕМЯ
  • ДОБАВИТЬКДАТЕ
  • НАЧАЛОПЕРИОДА
  • КОНЕЦПЕРИОДА
Читайте также:  Как настроить репитер tp link tl wa850re

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

Получение дат

Как передать текущую дату в запрос?

Запрос . УстановитьПараметр ( «ТекущаяДата» , ТекущаяДата ( ) ) ;
тзРезультатЗапроса = Запрос . Выполнить ( ) . Выгрузить ( ) ;

Далее приводятся только тексты запросов.

Как получить начало текущего месяца?

Конец текущего года?

Как получить полдень текущей даты?

Добавим использование функции ДОБАВИТЬКДАТЕ(ДАТА,<ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ>,ЧИСЛО)

Как получить дату без времени (0:00)

Как задать дату-константу в запросе 1С?

Возможно задать дату с точностью до секунды?

А до милисекунды?

Вычисления над датами

Разность в секундах,минутах,часах, днях, неделях получается при использовании функции РАЗНОСТЬДАТ(Дата1,Дата2,<ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ>)

Как получить номер текущего месяца?

ВЫБРАТЬ
МЕСЯЦ(&ТекущаяДата) как ТекущийМесяц,
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ТекущаяДата,ГОД),КОНЕЦПЕРИОДА(&ТекущаяДата,МЕСЯЦ),МЕСЯЦ) как ПолныхПрошедшихМесяцев

Как получить день недели?

ВЫБРАТЬ
ДЕНЬНЕДЕЛИ(&ТекущаяДата) КАК НомерДня,
ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 1
ТОГДА "понедельник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 2
ТОГДА "вторник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 3
ТОГДА "среда"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 4
ТОГДА "четверг"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 5
ТОГДА "пятница"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 6
ТОГДА "суббота"
ИНАЧЕ "Воскресенье"
КОНЕЦ КАК НаименованиеДняНедели

Сколько осталось до Нового года?

ВЫБРАТЬ
&ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1) КАК НовыйГодНаступил,
ВЫБОР
КОГДА &ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1)
ТОГДА "Да, наступил"
ИНАЧЕ "Нет, не наступил"
КОНЕЦ КАК Ответ,
РАЗНОСТЬДАТ(&ТекущаяДата,ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2017, 1, 1),СЕКУНДА,-1),ДЕНЬ) как ОсталосьДней,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ДЕНЬ),ЧАС) как ОсталосьЧасов,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ЧАС),Минута) как ОсталосьМинут,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,Минута),Секунда) как ОсталосьСекунд

Что еще следует знать про дату в запросах?

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

  • для среза последних значений в регистре сведений в качестве момента на которое берется значение. Если периодичность регистра не совпадает с переданным параметром, система обрежет лишние (секунда, дни в зависимости от), округления не происходит
  • для остатков регистра накопления в качестве дата остатка
  • для оборотов регистров бухгалтерии или регистра накопления (НачалоПериода,КонецПериода)
  • других виртуальных таблиц
Читайте также:  Как делать скрин на телефоне хонор

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

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

Сортировка даты в запросе производится в рамках секунды.

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

Внешнее представление даты определяется представлением операционной системы, управлять из запроса, а также приводить в строковое представление в классическом запросе невозможно в отличии от СКД, где возможна пост-обработка и условное оформление.

Допускается применение функции МАКСИМУМ(),МИНИМУМ() к дата в запросе, как в группировке так и в итогах запроса.

Ошибка «неверные параметры» возникает в случае, когда вместо даты передается null, число или что-то иное.

Преобразовать строку в дату в запросе

Специальных функций нет. но возможно преобразование через функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расчеты.Параметр,
Расчеты.ВерныйПараметр,
ВЫБОР
КОГДА Расчеты.символ1 = "2"
ТОГДА 2
КОГДА Расчеты.символ1 = "1"
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ * 1000 + ВЫБОР
КОГДА Расчеты.символ2 = "0"
ТОГДА 0
КОГДА Расчеты.символ2 = "1"
ТОГДА 1
КОГДА Расчеты.символ2 = "2"
ТОГДА 2
КОГДА Расчеты.символ2 = "3"
ТОГДА 3
КОГДА Расчеты.символ2 = "4"
ТОГДА 4
КОГДА Расчеты.символ2 = "5"
ТОГДА 5
КОГДА Расчеты.символ2 = "6"
ТОГДА 6
КОГДА Расчеты.символ2 = "7"
ТОГДА 7
КОГДА Расчеты.символ2 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 100 + ВЫБОР
КОГДА Расчеты.символ3 = "0"
ТОГДА 0
КОГДА Расчеты.символ3 = "1"
ТОГДА 1
КОГДА Расчеты.символ3 = "2"
ТОГДА 2
КОГДА Расчеты.символ3 = "3"
ТОГДА 3
КОГДА Расчеты.символ3 = "4"
ТОГДА 4
КОГДА Расчеты.символ3 = "5"
ТОГДА 5
КОГДА Расчеты.символ3 = "6"
ТОГДА 6
КОГДА Расчеты.символ3 = "7"
ТОГДА 7
КОГДА Расчеты.символ3 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 10 + ВЫБОР
КОГДА Расчеты.символ4 = "0"
ТОГДА 0
КОГДА Расчеты.символ4 = "1"
ТОГДА 1
КОГДА Расчеты.символ4 = "2"
ТОГДА 2
КОГДА Расчеты.символ4 = "3"
ТОГДА 3
КОГДА Расчеты.символ4 = "4"
ТОГДА 4
КОГДА Расчеты.символ4 = "5"
ТОГДА 5
КОГДА Расчеты.символ4 = "6"
ТОГДА 6
КОГДА Расчеты.символ4 = "7"
ТОГДА 7
КОГДА Расчеты.символ4 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ КАК НомерГода
ПОМЕСТИТЬ Цифры
ИЗ
Расчеты КАК Расчеты
;

Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.

С помощью языка запросов 1С 8 решаются практически все задачи по получению данных в платформе 1С 8.3 и 8.2. Дата — один из часто используемых типов данных. Рассмотрим, как использовать дату в запросах 1С.

Читайте также:  Linux mint версия ядра

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

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

Например, отберем только не закрытые банковские счета из справочника. Критерий того, что они не закрытые, — наличие пустой даты в поле «ДатаЗакрытия»:

Получите 267 видеоуроков по 1С бесплатно:

ВЫБРАТЬ
БанковскиеСчета.Ссылка
ИЗ
Справочник.БанковскиеСчета КАК БанковскиеСчета
ГДЕ
БанковскиеСчета.ДатаЗакрытия = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

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

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

Например, отберем все документы «Счет на оплату покупателю» за месяц, от 1 до 28 февраля:

ВЫБРАТЬ
СчетНаОплатуПокупателю.Ссылка
ИЗ
Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
ГДЕ
СчетНаОплатуПокупателю.Дата МЕЖДУ ДАТАВРЕМЯ(2015, 2, 1, 0, 0, 0) И ДАТАВРЕМЯ(2015, 2, 28, 23, 59, 59)

Текущая дата в запросе

К сожалению, в языке запросов нет аналога метода «ТекущаяДата()», поэтому чтобы получить это значение, его можно передать в запрос с помощью параметра:

Запрос = Новый Запрос;
Запрос.Текст = »
|ВЫБРАТЬ
| СчетНаОплатуПокупателю.Ссылка
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ГДЕ
| СчетНаОплатуПокупателю.Дата = &ТекущаяДата«;
Запрос.УстановитьПараметр(«ТекущаяДата», ТекущаяДата());

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Ссылка на основную публикацию
Adblock
detector