1c сравнение на дати в заявка. Как да посочите празна дата в заявка? Преобразуване към дата

Доста често има нужда да работите с променливи от типа „Дата“. В тази статия ще разгледаме основните техники - предаване на текущата дата, проверка за празна стойност, произволна дата.

Когато пишете заявки, често трябва да сравнявате данните с текущата дата. Вграденият 1C език има функцията CurrentDate(). Позволява ви да определите текущия час и дата на вашия компютър. За да извършвате операции с текущата дата, трябва да предадете стойността на тази функция като параметър към заявката.

По-долу е дадена заявка, която избира всички файлове, прикачени към отчети за разходи с дата на създаване до момента:

ExampleRequest = Нова заявка;
Пример Request.Text = "
|ИЗБЕРЕТЕ
| AdvanceReportAttachedFiles.Link
| ОТ
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|КЪДЕ
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Пример Request.SetParameter("CurrentDate", CurrentDate());

Персонализирана дата

Обсъдената по-горе функция ви позволява да сравнявате и следователно да правите избор за всеки период. Този метод ви позволява да зададете строг избор в заявката, без да използвате допълнителни параметри.

Моля, обърнете внимание, че когато използваме тази функция в примера по-горе, ние подадохме само три числа (година, месец, ден) като входни параметри. Последните три (час, минута, секунда) не са задължителни и ако липсват, се заменят с „0“, т.е. началото на деня.

Този пример ще извлече всички файлове, прикачени към отчетите за разходите до края на миналата 2016 г. В тази връзка ще посочим час, минута и секунда, за да сравним часовата точка „31 декември 2016 г. 23:59:59“.

ИЗБИРАМ
AdvanceReportAttachedFiles.Link
ОТ
Directory.AdvanceReportAttachedFiles КАТО AdvanceReportAttachedFiles
КЪДЕТО
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Празна дата

Най-лесният начин да проверите променлива, за да видите дали съдържа празна дата, е да използвате просто сравнение. В този пример чрез запитване ще изберем всички касови бележки към сметката, за които не е попълнена входящата дата.

43
NULL – липсващи стойности. Да не се бърка с нулева стойност! NULL не е число, не е равно на интервал, празна препратка или Undefined. NULL е типообразуваща стойност, т.е. има тип NULL и една единствена стойност от този тип. НУЛА... 26
За генериране и изпълнение на заявки към таблици на база данни в платформата 1C се използва специален обект на езика за програмиране Query. Този обект се създава чрез извикване на конструкцията New Request. Удобна заявка... 18
Статията предоставя полезни техники при работа с 1C v.8.2 заявки, както и информация, която не е толкова добре известна за езика на заявките. Не се опитвам да давам Пълно описаниеезик за заявки, но просто искам да се спра на... 13
LIKE - Оператор за проверка на низ за сходство с модел. Аналог на LIKE в SQL. Операторът SIMILAR ви позволява да сравните стойността на израза, посочен вляво от него, с низа на модела, посочен вдясно. Значението на израза...

Типът „Дата“ в 1C е един от 4-те основни типа данни заедно с число, низ и булев тип. Датите са повсеместни в конфигурациите – невъзможно е да се избегне работата с този тип данни по време на разработката. Ето защо е по-добре да започнете да пишете заявки, като вече разбирате как да обработвате дати, какви опции има за работа с тях и как се съхраняват. Нека да разгледаме примери за всички нюанси на писане на заявки с различни дати.

Примери за работа с дати в 1C заявки

На първо място, трябва да получите датата в заявката в необходимия формат - с или без час. Има няколко начина за изпълнение на тази задача:

  1. Преминаване през параметър. Можете да получите само текущата дата на сесията, като използвате този метод;
  2. Вземете датата в заявката от полето за избор;
  3. Преобразувайте от числови стойности с помощта на функцията DATETIME().

Най-често срещаната задача при работа с документи е проверката за празна дата в заявка за 1C. В този случай е най-лесно да сравните променлива или поле с празна дата, която се получава с помощта на функцията DATETIME(1,1,1):

ДАТА ЧАС (1, 1, 1)

Използвайки подобна команда, можете да получите произволна дата и час в заявка. Освен това те могат да бъдат зададени с точност до секунда, като се посочат 6 числа като параметри. Ако се използват само 3 числа, тогава часовете, минутите и секундите ще бъдат зададени на 0 (началото на деня). Например трябва да изберем документи за първите 10 дни на януари 2018 г. в заявката:

ИЗБЕРЕТЕ разписка към текуща сметка. Връзка AS Връзка ОТ документа. Разписка към текуща сметка AS разписка към текуща сметка WHERE разписка към текуща сметка. Дата МЕЖДУ DATETIME(2018, 1, 1, 0, 0, 0) И DATETIME(2018, 1, 10, 23, 59, 59)

В заявка на вградения език 1C можете не само да избирате различни полета и да получавате параметри. Има много функции, които улесняват форматирането на дати за конкретна задача. Ако често работите с дати в заявка, тогава трябва да знаете тези команди:

  • НАЧАЛО НА ПЕРИОД.Параметрите показват датата и периода от време, в контекста на който е необходимо да се получи началото на датата. Използва се за преобразуване на дата във вечен формат. За да направите това, трябва да зададете втория параметър – „ДЕН”;
НАЧАЛО НА ПЕРИОД(,) НАЧАЛО НА ПЕРИОД(&Дата, ДЕН) период>дата>
  • КРАЙ НА ПЕРИОДА.Подобна команда, която връща последната дата по отношение на единиците, посочени в параметрите;
  • ADDKDATE.Позволява ви да получите дата, която е по-голяма с определен брой определени времеви единици. Функционалните параметри включват дата, единица за време и число;
ADDKDATE(,) ADDKDATE(&Дата, ДЕН, 10) количество>тип>дата>
  • ДАТА НА РАЗЛИКА.Получава разликата между датите в посочените единици;
DIFFERENCEDATE(,) DIFFERENCEDATE(&Дата1, &Дата2, ДЕН) тип>дата2>дата1>
  • ДЕН ОТ СЕДМИЦАТА.Връща поредния номер на един от дните от седмицата.

Използвайки правилно тези функции, разработчикът може да реши доста нетривиални проблеми. Например получаване на името на деня от седмицата на текущата дата в заявка като низ:

ИЗБЕРЕТЕ WHENDAY ОТ СЕДМИЦА(&CurrentDate) = 1 СЛЕД ТОВА "Понеделник" WHENDAYDAY(&CurrentDate) = 2 СЛЕД ТОВА "Вторник" WHENDAY ОТ СЕДМИЦА(&CurrentDate) = 3 СЛЕД ТОВА "Сряда" WHENDAYDAY(&CurrentDate) = 4 СЛЕД ТОВА "Четвъртък" WHENDAY СЕДМИЦИ (&Текуща дата) = 5 СЛЕД ТОВА "Петък" ДЕН ОТ СЕДМИЦАТА (&Текуща дата) = 6 СЛЕД ТОВА "Събота" ИНАЧЕ "Неделя" КРАЙ

Преобразуването на типове в 1C заявка от число или низ в дата е трудоемка задача. Можете да получите дата от числа с помощта на функцията DATETIME, от низ - чрез комбиниране на функцията SUBSTRING и конструкцията SELECT WHEN THEN ELSE. Въз основа на това разработчиците предпочитат да получат датата от други типове в модула и да я предадат на заявката с помощта на параметър. За съжаление, това не винаги е възможно, така че трябва да промените формата на датата в заявката.

Възможно е да посочите датата в заявка 1C като параметър за получаване на данни от таблици на виртуални регистри. Тази роля може също да използва всички горепосочени функции. Но тук е важно да не допускаме празна датав заявка 1C може да повлияе на крайния резултат от изпълнението на кода, така че трябва да се направи проверка.

Много често в заявките на 1C трябва да работите с дати. Особено когато заявката се прави към обекти с метаданни, които съдържат периодична информация. По правило това са регистри (информация, натрупване, изчисление, счетоводство). Нека да разгледаме най-често използваните функции на езика за заявки 1C за работа с дати. Ще изградим примери на базата на информационния регистър Организации на служителите ZUP конфигурации версия 2.5.

  • ВРЕМЕ ЗА СРЕЩА

    Позволява да получите дата в заявка (със или без час), като посочите година, месец, ден, час, минута, секунда.
    Синтаксис:
    ДАТА ЧАС (година, месец, ден, час, минута, секунда)
    Обикновено часът, минутата и секундата не са посочени. Нека дадем мини пример. Въведете следния текст в конзолата за заявки:

    ИЗБЕРЕТЕ ДАТА ЧАС(2016, 1, 1)

    В резултат на изпълнение на заявката получаваме датата - 01.01.2016 г.
    Всъщност е трудно да си представим ситуация, в която датата ще бъде посочена по този начин в искане. В крайна сметка, когато трябва да посочите период, се използват параметри. Но има случаи, когато тази функция е от особена стойност. Това е, когато трябва да посочим празна дата в полетата или в условията на заявката. Позволете ми да ви напомня, че за езика 1C празна дата има формата - 0001.01.01. По този начин, за да получите празна дата в заявка, просто посочете DATETIME(1; 1; 1). Като пример, нека изберем от информационния регистър Организации на служителитезаписи, които не са попълнени Период на завършване:

    ИЗБЕРЕТЕ Организационни служители.Период, Организационни служители.Служител, Организационни служители.Позиция, Организационни служители.Организационен отдел ОТ Информация за регистъра.Организационни служители КАТО Организационни служители WHERE Организационни служители.Период на завършване = DATETIME(1, 1, 1)

  • НАЧАЛО НА ПЕРИОД

    За посочена датавръща началото на периода, който въвежда.
    Синтаксис:
    НАЧАЛО НА ПЕРИОД (дата, тип период)
    PeriodType може да приема следните стойности: МИНУТА, ЧАС, ДЕН, СЕДМИЦА, МЕСЕЦ, ТРИМЕСЕЧИЕ, ГОДИНА, ДЕСЕТИЛЕТИЕ, ПОЛУГОДИНА
    В конзолата за заявки въведете:

    ИЗБЕРЕТЕ НАЧАЛО НА ПЕРИОД (ДАТА ЧАС (2016, 1, 15), МЕСЕЦ)

    Заявката ще се върне - 01.01.2016 г
    А сега един пример. Както знаете, периодичността на регистъра Организации на служителитеедин ден. Нека създадем заявка, в която ще се показва началната дата на месеца вместо действителния период на запис.

    ИЗБЕРЕТЕ НАЧАЛО НА ПЕРИОД(Служители на организации.Период, МЕСЕЦ) КАТО Начало на месеца, Служители на организации.Служител, Служители на организации.Длъжност, Служители на организации.Разделение на организация ОТ Информация за регистъра.Служители на организации КАТО Служители на организации

  • КРАЙ НА ПЕРИОДА

    Синтаксисът е същият като за началото на периода. И както подсказва името, той връща края на периода по дата и тип период. Няма да го разглеждаме подробно. Нека се ограничим до един мини пример.
    Заявка:

    ИЗБЕРЕТЕ КРАЙ НА ПЕРИОДА(ДАТАЧАС(2016, 1, 15), МЕСЕЦ)

    Връща се на 31.01.2016 23:59:59
    Както можете да видите, стойността се връща с точност до секундата.

  • ADDKDATE

    Добавя определения брой интервали от време към датата.
    Синтаксис:
    ADDKDATE(Дата, Тип период, Количество)
    PeriodType приема същите стойности като за функцията НАЧАЛО НА ПЕРИОД
    Например, нека изберем датата февруари:

    ИЗБЕРЕТЕ ADDKDATE(DATETIME(2016, 2, 15), MONTH, 2)

    Получаваме датата 04/15/2016 0:00:00 Въпреки факта, че февруари е кратък месец, денят на получената дата е същият като оригиналния. Много е удобно, че не е нужно да мислите за броя на дните в месеците.
    Количеството може да бъде и отрицателно. След това интервалът се брои в обратна посока.

  • ДАТА НА РАЗЛИКА

    Изчислете разликата между две дати в посочените единици.
    Синтаксис:
    РАЗЛИКА В ДАТАТА (начална дата, крайна дата, тип период)
    Типът период може да приема следните стойности: СЕКУНДА, МИНУТА, ЧАС, ДЕНЯТ, МЕСЕЦ, ТРИМЕСЕЧИЕ, ГОДИНА
    Например:

    ИЗБЕРЕТЕ РАЗЛИЧНА ДАТА(ДАТАЧАС(2016, 2, 15), ДАТАЧАС(2016, 3, 1), ДЕН)

    връща 15

Тук прегледахме най-често използваните функции на езика за заявки 1C. Останалите се използват доста рядко. Ако е необходимо, примери за работа с тях могат да бъдат намерени в помощта, вградена в платформата 1C.



грешка:Съдържанието е защитено!!