Как да получите текущата дата в заявка 1s. Как да посочите празна дата в заявка? Преобразуване към дата
В тази статия искаме да обсъдим всичко с вас 1C функции на езика за заявки, и конструкции на език за заявки. Каква е разликата между функция и дизайн? Функцията се извиква със скоби и възможните параметри в тях, а конструкцията се изписва без скоби. Несъмнено всички структури и функции на езика за заявки 1Cправят процеса на събиране на данни гъвкав и многофункционален. Тези функции и конструкции се прилагат за полета за заявки, а някои се прилагат и за условия.
1C Функции на езика за заявки
Защото ясно описание 1C функции на езика за заявкие много по-рядко срещано от описанията на структури, решихме да започнем да разглеждаме функциите. Сега нека разгледаме всеки един поотделно, описвайки неговата цел, синтаксис и пример за използване, така че:
1. функция ВРЕМЕ ЗА СРЕЩА- тази функция създава постоянно поле с тип "Дата".
Синтаксис: ВРЕМЕ ЗА СРЕЩА(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Пример за употреба:
2. Функция DATE DIFFERENCE- връща разликата между две дати в едно от измеренията (година, месец, ден, час, минута, секунда). Измерването се предава като параметър.
Синтаксис: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)
Пример за употреба:
Query.Text = "ИЗБЕРЕТЕ | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Брой дни";
3. Функция VALUE- задава постоянно поле с предварително зададен запис от базата данни, може да получи и празна връзка от произволен тип.
Синтаксис: VALUE(<Имя>)
Пример за употреба:
Request.Text = "SELECT //предварително дефиниран елемент | VALUE(Directory.Currencies.Dollar) AS Dollar, //празна връзка | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //трансферна стойност | VALUE(Transfer . Юридическо лице. Физическо лице) AS Физическо лице, //предварително определен акаунт VALUE(Сметкоплан. Самосчетоводни материали) AS Account_10" ;
4. SELECT функция- имаме пред нас аналог на конструкцията IF, който се използва в кода, само този се използва в 1C заявки.
Синтаксис: ИЗБОР КОГА<Выражение>ТОГАВА<Выражение>В ПРОТИВЕН СЛУЧАЙ<Выражение>КРАЙ
Пример за употреба:
Request.Text = //ако сумата е повече от 7500, тогава трябва да има отстъпка от 300 рубли, //така че ако условието е задействано, тогава функцията //връща Сума - 300 //в противен случай заявката ще върне просто Сума "ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО TCReceipts.Amount > 7500 | ТОГАВА TCReceipts.Amount - 300 | ДРУГО TCReceipts.Amount | КРАЙ КАТО AmountWithDiscount | ОТ |
5. Функция EXPRESS- позволява ви да изразите постоянно поле с определен тип.
Синтаксис: EXPRESS(Име на поле КАТО Име на тип)
Пример за употреба:
Query.Text = "SELECT VARIOUS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ДРУГА ИЗБЕРЕТЕ | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) |. END AS Number |. Натрупващ се регистър AS Purchases";
Има ли друг вариант за използване на функцията EXPRESS в полета от смесен тип, къде се срещат? Най-простият пример е „Регистраторът“ за всеки регистър. Така че защо може да се наложи да квалифицираме типа в регистратора? Да разгледаме ситуацията, когато изберем полето "Номер" от регистратора, от коя таблица ще бъде избран номерът? Верният отговор от всички! Следователно, за да може нашата заявка да работи бързо, трябва да посочим явен тип с помощта на функцията EXPRESS
Пример за употреба:
Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";
6. Функция ISNULL(алтернативно изписване ISNULL) - ако полето е от тип NULL, то се заменя с втория параметър на функцията.
Синтаксис: ISNULL(<Поле>, <ПодставляемоеЗначение>)
Пример за употреба:
Също така имайте предвид, че е препоръчително ВИНАГИ да замествате типа NULL с някаква стойност, т.к сравнението с тип NULL винаги връща FALSE, дори ако сравните NULL с NULL. Най-често NULL стойностите се формират в резултат на свързване на таблици (всички видове съединения, с изключение на вътрешни).
Query.Text = //Изберете целия артикул и неговите баланси //ако няма баланс в някой артикул, тогава ще има поле //NULL, което ще бъде заменено със стойността 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemaining, 0) HOW Remaining | FROM |. LEFT CONNECTION Accumulations.GoodsInWarehousesRemainings | PO (GoodsInWarehousesRemainings = No.Link)";
7. Функция ПРЕДСТАВЯНЕ- позволява ви да получите представяне на полето за заявка.
Синтаксис: ПРОИЗВОДИТЕЛНОСТ(<НаименованиеПоля>)
Пример за употреба:
Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |ОТ |Регистър за натрупване.FreeRemaining.Remaining AS FreeRemainingRemaining ";
Конструкции в езика за заявки 1C
Обсъдихме с вас по-горе 1C функции на езика за заявки, сега е време да помислим конструкции в езика за заявки 1C, те са не по-малко важни и полезни, да започваме.
1. Строителство ЛИНК- е логически оператор за проверка на референтен тип. Най-често се среща при проверка на поле от сложен тип спрямо определен тип. Синтаксис: ВРЪЗКА<Имя таблицы>
Пример за употреба:
Request.Text = //ако типът стойност на записващото устройство е Разписка на документа, //тогава заявката ще върне „Получаване на стоки“, в противен случай „Продажби на стоки“ „ИЗБЕРЕТЕ | ИЗБЕРЕТЕ | КОГАТО Remaining.Registrar LINK Document.Receipt of GoodsServices | ТОГАВА ""Потребление" |. КРАЙ НА ДВИЖЕНИЕТО |. Оставащи продукти в складовете" ;
2. Дизайн МЕЖДУ- този оператор проверява дали стойността е в зададения диапазон.
Синтаксис: МЕЖДУ<Выражение>И<Выражение>
Пример за употреба:
Request.Text = //вземете цялата номенклатура, чийто код е в диапазона от 1 до 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;
3. Конструкция Б и Б ЙЕРАРХИЯ- проверка дали стойността е в прехвърления списък (масиви, таблици със стойности и др. могат да се прехвърлят като списък). Операторът IN HIERARCHY ви позволява да видите йерархията (пример за използване на сметкоплан).
Синтаксис: IN(<СписокЗначений>), В ЙЕРАРХИЯ(<СписокЗначений>)
Пример за употреба:
Request.Text = //изберете всички подсметки на акаунта "ИЗБЕРЕТЕ | Самоподдържащ се. Свържете AS сметка | ОТ | Сметкоплан. Самоподдържащ се AS Самоподдържащ се | КЪДЕ | Самоподдържащ се. Връзка В ЙЕРАРХИЯ СТОЙНОСТ (Диаграма на Сметки. Самоиздръжка.
4. Дизайн ПОДОБЕН- Тази функция ни позволява да сравним низ с модел на низ.
Синтаксис: КАТО "<ТекстШаблона>"
Опции за модел на редове:
% - последователност, съдържаща произволен брой произволни символи.
Един произволен знак.
[...] - всеки отделен знак или последователност от знаци, изброени в квадратни скоби. Изброяването може да указва диапазони, например a-z, което означава произволен знак, включен в диапазона, включително краищата на диапазона.
[^...] - всеки отделен знак или последователност от знаци, изброени в квадратни скоби, с изключение на тези, изброени след знака за отрицание.
Пример за употреба:
Query.Text = //намерете цялата номенклатура, която съдържа корена TABUR и започва //или с малка, или с главна буква t "ИЗБЕРЕТЕ | Номенклатура. Връзка | ОТ | Директория. Номенклатура КАТО Номенклатура | КЪДЕ | Продукти. Име КАТО "" [Tt ]abur%""" ;
5. Дизайнът е РАЗРЕШЕН- този оператор ви позволява да изберете само онези записи от базата данни, за които повикващият има разрешение за четене. Тези права се конфигурират на ниво запис (RLS).
Синтаксис: ALLOWED се пише след ключовата дума SELECT
Пример за употреба:
Request.Text = "ИЗБЕРЕТЕ РАЗРЕШЕНИ | Контрагенти. Връзка | ОТ | Директория. Контрагенти КАТО Контрагенти";
6. Дизайн РАЗЛИЧНИ- позволява ви да изберете записи, в които няма дублиращи се записи.
Синтаксис: VARIOUS се пише след ключовата дума SELECT
Пример за употреба:
Request.Text = //избира записи, за които читателят има права "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;
Също така конструкцията VARIOUS може да се използва с оператора ALLOWED и други оператори.
Пример за употреба:
Request.Text = //избира различни записи, за които читателят има права "ИЗБЕРЕТЕ РАЗРЕШЕНИ РАЗЛИЧНИ | Контрагенти.Име |ОТ | Директория. Контрагенти КАТО Контрагенти";
7. Дизайн ПЪРВО- избира броя на записите, посочени в параметъра от резултата от заявката.
Синтаксис: FIRST<число>
Пример за употреба:
Request.Text = //изберете първите 4 CCD номера от директорията "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";
8. Дизайн ЗА ПРОМЯНА- позволява ви да заключите маса, работи само в транзакции (от значение само за автоматични заключвания).
Синтаксис: ЗА СМЯНА<НаименованиеТаблицы>
Пример за употреба:
Query.Text = "ИЗБЕРЕТЕ | Безплатни остатъчни остатъци. Номенклатура, | Безплатни остатъчни остатъци. Склад, | Безплатни остатъчни остатъци. В наличност Остатъчни | ОТ | Регистър на натрупвания. Безплатни остатъци. Остатъци КАТО безплатни остатъчни остатъци | ЗА ПРОМЯНА | Регистър на натрупвания .Безплатни остатъци";
9. Дизайн ПОРЪЧАЙ ПО- организира данните по определено поле. Ако полето е връзка, тогава при задаване на флага АВТОМАТИЧНА ПОРЪЧКАСортирането ще се извърши по представяне на връзката; ако флагът е изключен, тогава връзките се сортират по старшинството на адреса на връзката в паметта.
Синтаксис: СОРТИРАНЕ ПО<НаименованиеПоля>АВТОМАТИЧНА ПОРЪЧКА
Пример за употреба:
Query.Text = "ИЗБЕРЕТЕ | Безплатни остатъчни остатъци. Номенклатура КАТО номенклатура, | Безплатни остатъчни остатъци. Склад КАТО склад, | Безплатни оставащи остатъци. На склад Оставащи | ОТ | Регистрирайте натрупвания. Безплатни остатъци. Оставащи КАТО безплатни оставащи остатъци | | ПОРЪЧАЙТЕ ПО |. Номенклатура |. АВТОМАТИЧНО ЧЕТЕНЕ НА ПОРЪЧКА";
10. Дизайн GROUP BY- използва се за групиране на низове на заявки по конкретни полета. Числовите полета трябва да се използват с всяка агрегатна функция.
Синтаксис: ГРУПИРАЙ ПО<НаименованиеПоля1>, .... , <НаименованиеПоляN>
Пример за употреба:
Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS STOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GROUP BY | ProductsInWarehouses.Nomenclature, | treasures.Warehouse ";
11. Дизайн HAVING- ви позволява да приложите агрегатна функция към условие за избор на данни, подобно на конструкцията WHERE.
Синтаксис: ИМАЩ<агрегатная функция с условием>
Пример за употреба:
Query.Text = //избира групирани записи, където полето InStock е по-голямо от 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInStocks | | ГРУПИРАНЕ ПО |. ProductsInWarehouses.Warehouse |. AMOUNT (ProductsInWarehouses.In Stock) ;
12. Строителство ИНДЕКС ПО- използва се за индексиране на полето за заявка. Изпълнението на заявка с индексиране отнема повече време, но ускорява търсенето в индексираните полета. Може да се използва само във виртуални таблици.
Синтаксис: ИНДЕКС ПО<Поле1, ... , ПолеN>
Пример за употреба:
Request.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";
13. Дизайн КЪДЕ- позволява ви да наложите условие за всякакви полета за избор. Резултатът ще включва само записи, които отговарят на условието.
Синтаксис: КЪДЕТО<Условие1 ОператорЛогСоединения УсловиеN>
Пример за употреба:
Query.Text = //всички записи с CompensationRemaining са избрани<>0 и //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM |Accumulation Register.CompensationRP.Remains AS Comp ensationRPRemains |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | И CompensationRPORemains.AmountForCalcCompRemaining> 100" ;
14. Дизайн РЕЗУЛТАТИ... ОБЩИ- използва се за изчисляване на сумите; дизайнът определя полетата, по които ще се изчисляват сумите и обобщените функции, приложени към полетата за суми. Когато използвате общи суми за всяко поле след конструкцията TOTAL, данните се групират. Има незадължителна конструкция GENERAL, нейното използване също осигурява допълнително групиране. Ще видите пример за резултат от заявката по-долу.
Синтаксис: РЕЗУЛТАТИ<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>ОТ<ОБЩИЕ> <Поле1, ... , ПолеN>
Пример за употреба:
Request.Text = "ИЗБЕРЕТЕ | Изчисления. Споразумение с насрещна страна. Тип на споразумението КАТО Тип договор, | Изчисления. Споразумение с насрещна страна КАТО Договор, | Изчисления. Контрагент, | Изчисления. Сума на салдо за взаимен сетълмент КАТО салдо | ОТ | Регистър на натрупвания. Взаимни Сетълмент С контрагенти. ОБЩО |. СУМА |ОБЩИ, |Тип на споразумението";
Фигурата очертава групировките, които са били формирани по време на изпълнение на заявката, като най-горната се отнася за раздела GENERAL, а втората за полето Counterparty AgreementAgreement Type.
43
NULL – липсващи стойности. Да не се бърка с нулева стойност! NULL не е число, не е равно на интервал, празна препратка или Undefined. NULL е типообразуваща стойност, т.е. има тип NULL и една единствена стойност от този тип. НУЛА...
26
За генериране и изпълнение на заявки към таблици на база данни в платформата 1C се използва специален обект на езика за програмиране Query. Този обект се създава чрез извикване на конструкцията New Request. Удобна заявка...
18
Статията предоставя полезни техники при работа с 1C v.8.2 заявки, както и информация, която не е толкова добре известна за езика на заявките. Не се опитвам да давам Пълно описаниеезик за заявки, но просто искам да се спра на...
13
LIKE - Оператор за проверка на низ за сходство с модел. Аналог на LIKE в SQL. Операторът SIMILAR ви позволява да сравните стойността на израза, посочен вляво от него, с низа на модела, посочен вдясно. Значението на израза...
Всички документи, съществуващи в конфигурации на 1C, и следователно почти всички регистри трябва да имат поне един атрибут с тип Дата, поради което всеки разработчик трябва да знае и разбира:
- Как да конвертирате параметри от други типове във въпросния тип;
- Как да определите празна дата в заявка за 1C;
- Каква е разликата между дата и срок?
Именно на тези въпроси ще се опитаме да отговорим в нашата статия.
Какво е дата и как да я определим
Тъй като вземането на повечето управленски решения и воденето на записи не изискват точност на времето, надвишаваща 1 секунда, разработчиците на платформата 1C решиха, че тази стойност ще бъде абсолютният минимум във формата на датата. По този начин всеки атрибут, описващ времето на събитие в програмата, трябва да съдържа:
- Годината на събитието;
- Месец на това събитие;
- ден.
Не е необходимо да се посочват: час, минута и секунда. Ако тези три параметъра са пропуснати и няма допълнителни условия, програмата автоматично настройва часа към началото на деня.
Съществуващите формати за дата в света имат значителни разлики:
- В Русия сме свикнали първо да поставяме деня, след това месеца на събитието и накрая годината;
- Жителите на САЩ започват датата с месеца;
- Чехи, поляци и словенци записват периоди във формат година – месец – ден.
Това е последният формат, който използва платформата 1C.
Преобразуване към дата
За да получите параметър с тип Дата от няколко стойности или от низ, трябва да използвате кода, показан на фиг. 1
Както се вижда от фигурата по-горе, можете да определите датата или с помощта на един ред, или като разделите този ред на съставните му части със запетая, резултатът няма да се промени.
Важно е да се разбере, че годината на датата трябва да съдържа четири цифри, включително хилядолетието и века на събитието, месецът, денят, часовете и секундите трябва да са с дължина два знака, включително водещите нули.
Отброяването на времето в програмата започва от началото на деня на 1 януари 0001 г. За кода по-горе тази стойност може да се определи по един от двата начина (Фигура 2).
Ориз. 2
Във втория ред пропуснахме часовете, минутите и секундите на събитието, което изобщо не повлия на производителността на нашия код.
Характеристики на използване на дата в 1C заявки
За повечето типове данни, използвани от платформата 1C, има предварително дефинирани void стойности. За числа е 0, за връзки можете да дефинирате стойността EmptyLink(), за дата празната стойност обикновено се счита за начална дата и именно с нея трябва да се сравняват детайлите на съответния тип, когато задавате параметри на заявката.
Важно е да се разбере, че дори ако стойността на даден атрибут на формата от въпросния тип не съдържа никакви числа, т.е. прозорецът изглежда така (фиг. 3), това не означава, че в него не е посочено нищо; на този параметър с празен низ няма да работи.
Ориз. 3
След като получим празна дата, можем да я посочим като параметър към нашата заявка, тоест да използваме конструкцията (фиг. 4)
Въпреки това, има моменти, когато е по-добре да проверите в тялото на заявката, без да подавате празна дата като параметър. За да направите това, можете да въведете подходящото условие в кода на заявката (фиг. 5) и да използвате функцията за заявка DateTime().
Ориз. 5
В горния текст на заявката пропуснахме водещите нули на годината, месеца и деня, а също така не посочихме часовете, минутите и секундите и програмата, както се казва, изяде това предположение.
Граница за дата и час
Друг интересен фактсвързано с връзката между заявките и датите е използването на концепцията за „точка във времето“ при достъп до различни таблици на база данни.
Точността „до милисекунда“, посочена в техническата документация при описание на примитивния тип Дата, се проявява най-ясно при избора на записи от виртуалните таблици на регистъра за натрупване: ако регистърът за натрупване, в допълнение към таблицата за оборот, има Остатък и таблици за оставане и оборот, след което вземането на проби от тях се извършва за определено време, може да даде различни резултати.
За да разберете как и защо се случва това, разгледайте прост пример:
- Преди извършване на документ за продажба в 12 часа 31 минути 36 секунди балансите по Захарна номенклатура са 30 кг.;
- Документът отписва 10 кг в определеното време;
- Отчетът, генериран на датата на документа в 12 часа 31 минути 36 секунди според таблицата Остатък ще покаже остатък от 30 кг.;
- Същият отчет на таблицата Остатъци и обороти за същото време ще покаже баланс от 20 кг.
Каква е причината за това поведение и как да го избегнем?
Проблемът е, че в таблицата Remaining периодът е посочен като отворен сегмент, тоест не се вземат предвид движенията, направени към момента на генериране на отчета, тоест времето се взема в началото на секундата, посочена в параметърът. В същото време за таблицата на оборотите и за таблицата Остатъци и обороти се вземат предвид времевите граници, т.е. времето се взема в края на определената секунда.
Има няколко изхода от тази ситуация:
- Когато използвате таблицата Remains, посочете времева точка с 1 секунда по-голяма от зададената;
- Използвайте само таблицата за остатъци и обороти (не е най-оптималната опция от гледна точка на ефективността);
- Използвайте концепцията за граница.
Последната опция може да бъде представена от кода, показан на фиг. 6.
В първия параметър на нашия обект посочваме датата, за която трябва да се генерира справката, вторият параметър определя вида на границата. Тъй като за нас е важно движенията на дадена дата да бъдат включени в селекцията, трябва да зададем този параметър на позиция „Включително“.
1C заявките, както и вграденият език на платформата 1C:Enterprise, имат функции за работа с дати. Те помагат за опростяване на преобразуването на дати в заявки, като избягват използването голямо количествопараметри. Нека да разгледаме тези функции.
Как да зададете дата в 1C заявки като константа
DATETIME (година, месец, ден, час, минута, секунда). Настроики Година, МесецИ денса задължителни, други не са. Ако не посочите часа, системата ще зададе началото на деня.
Заявка. Текст= "ИЗБИРАМ
ДАТА ЧАС (2016,09,28,12,22,00)";
// Резултат: 28 септември 2016 г. 12:22:00
В допълнение, само числа могат да бъдат посочени изрично като параметри на тази функция. Не можете да посочите стойностите на други функции като параметри. Например, тази конструкция няма да работи:
Заявка. Текст= "ИЗБИРАМ
DATETIME (Година (Източник.Дата),09,28,12,22,00)
От директорията.Source AS Source";
Как да получите началото или края на година, половин година, тримесечие, месец, десетилетие, седмица, ден, час, минута в 1C заявки
За целта се използват следните функции:
- Начален период (дата, период)
- EndPeriod(Дата, Период)
Като параметър датапредава се стойност с тип Дата на.Параметър Период .
Заявка. Текст= "ИЗБИРАМ
Начален период(ДАТА ЧАС (2016,09,28,12,22,00), ДЕСЕТИЛЕТИЕ)";
// Резултат: 21 септември 2016 г. 0:00:00
Заявка. Текст= "ИЗБИРАМ
Краен период (ДАТА ЧАС (2016,09,28,12,22,00), ТРИМЕСЕЧИЕ)";
// Резултат: 30 септември 2016 г. 23:59:59
Както можете да видите от примерите, можете да използвате други вложени функции в тези функции.
Как да получите година, ден от годината, тримесечие, месец, седмица, ден от седмицата, ден, час, минута, секунда от дата в 1C заявки
За да направите това, има съответните функции, на които трябва да предадете датата като параметър.
- функция ГОДИНА (дата)— връща номера на годината;
- функция DAYYEAR (дата)— увеличава броя на деня в годината;
- функция ТРИМЕСЕЧИЕ (Дата)— връща номера на тримесечието;
- функция МЕСЕЦ (дата)— връща номера на месеца;
- функция СЕДМИЦА (дата)— връща номера на седмицата в годината;
- функция ДЕН ОТ СЕДМИЦАТА (Дата)— връща номера на деня от седмицата (понеделник — 1, неделя — 7);
- функция ДЕН (дата)— връща номера на деня в месеца;
- функция ЧАС (дата)— връща часа;
- функция МИНУТА (дата)— връща минути;
- функция ВТОРА (Дата)— връща секунди.
Заявка. Текст= "ИЗБИРАМ
ГОДИНА(ДАТАЧАС (2016,09,28,12,22,00))"; // Резултат: 2016г
Заявка. Текст= "ИЗБИРАМ
СЕДМИЦА(ДАТА ЧАС (2016,09,28,12,22,00))"; // Резултат: 40
Заявка. Текст= "ИЗБИРАМ
ДЕЛНИК (ДАТА ЧАС (2016,09,28,12,22,00))"; // Резултат: 3
Заявка. Текст= "ИЗБИРАМ
DAYEAR(DATETIME (2016,09,28,12,22,00))"; // Резултат: 272
Заявка. Текст= "ИЗБИРАМ
ДЕН(ДАТАЧАС (2016,09,28,12,22,00))"; // Резултат: 28
Как да добавите или извадите от дата година, полугодие, тримесечие, месец, десетилетие, седмица, ден, час, минута, секунда в 1C заявки
За да направите това, използвайте функцията AddToDate(Дата, Период, Стойност).
Като параметър датапредава се стойност с тип Дата на.Параметър Периодможе да приема една от следните стойности: ВТОРО, МИНУТА, ЧАС, ДЕН, СЕДМИЦА, ДЕСЕТИЛЕТИЕ, МЕСЕЦ, ТРИМЕСЕЧИЕ, ПОЛУГОДИНА, ГОДИНА.
Параметър Значениепоказва броя на периодите за добавяне. Ако трябва да се извади периодът, тогава параметърът Значениетрябва да е отрицателен.
Заявка. Текст= "ИЗБИРАМ
AddTODate(DATETIME(2016, 9, 28, 12, 22, 0), HALF YEAR, 1)";
// Резултат: 28 март 2017 г. 12:22:00
Заявка. Текст= "ИЗБИРАМ
AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)";
// Резултат: 18 септември 2016 г. 12:22:00
Как да изчислим разликата в датата в 1C заявки
За да направите това, използвайте функцията DifferenceDate(Дата1, Дата2, Период).
Параметър Дата1- датата, която трябва да се извади.
Параметър Дата2 —дата, от която да се извади.
Параметър Периодможе да приема една от следните стойности: ВТОРО, МИНУТА, ЧАС, ДЕНЯТ, МЕСЕЦ, ТРИМЕСЕЧИЕ, ГОДИНА. Показва в какви единици искаме да получим резултата
Заявка. Текст= "ИЗБИРАМ
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), QUARTER)"; // Резултат: 4
Заявка. Текст= "ИЗБИРАМ
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), Second)";
// Резултат: 31 536 000
Във всички функции с изключение на функцията ВРЕМЕ ЗА СРЕЩА, като параметър датаможе да бъде не само конкретна стойност на дата (константа или параметър на заявка), но и полета на таблицата източник.
Много често в заявките на 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.