1s посочете датата в заявката. с проверка за празна стойност

1s посочете датата в заявката.  с проверка за празна стойност
1s посочете датата в заявката. с проверка за празна стойност

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

В 1C 8 стойността се счита за попълнена (не празна), ако се различава от стойността по подразбиране за от този тип. Например за референтен тип стойността по подразбиране е Празна връзка(на този наръчник, документ и др.). Също така празни са променливите и реквизитите, съдържащи стойности НулаИ Недефиниран.

1s проверка за празна стойност. Примери

Променлива = References.Nomenclature.EmptyReference(); Check = ValueFilled(Variable);

В този случай променливата Прегледще съдържа стойността Лъжа. Също така функция ValueFilled(<Значение>) . може да се използва директно в условия.

Пример 1.1

If ValueFilled(Variable) Then Report("Стойността в променливата не е празна!"); EndIf;

Променлива = Documents.Expense Report.FindBy Number("000000001"); Check = ValueFilled(Variable);

IN този примерако документът Предварителен отчетс номер 000000001 съществува, тогава в променливата Прегледще съдържа стойността Вярно, в противен случай Лъжа.

използвайте функция ValueFilledне е възможно за променливи от променливи типове като Таблица със стойности, Стойностно дървои така нататък. Функцията работи за всички конфигурации.

Как да проверя дали в 1s таблицата със стойности е празна? За това се използва методът Количество(), с него можете да проверите колко реда се съдържат в таблицата със стойности.

Пример 3. Нека MyTable— таблица със стойности, дефинирани по-горе в кода.

If MyTable.Count() = 0 Then Return; EndIf;

Същият метод може да се използва за определяне на пълнотата на дървото от стойности и избора на резултата от заявката.

Пример 4. Нека MyTreeе дървото на стойностите, дефинирано по-горе в кода.

If MyTree.Rows.Count() = 0 Then Return; EndIf;

Както можете да видите, в дървото на стойностите проверяваме за наличието на низове от първо ниво, ако не са, тогава дървото е празно.

Пример 5. Нека Заявка- заявка към базата данни 1C 8, дефинирана по-горе.

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

  • Как да конвертирате параметри от други типове във въпросния тип;
  • Как да дефинирате празна дата в 1C заявка;
  • Каква е разликата между дата и срок.

Това са въпросите, на които ще се опитаме да отговорим в нашата статия.

Какво е дата и как да я определим

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

  • Годината на събитието;
  • Месецът на това събитие;
  • ден.

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

Съществуващите формати за дата в света имат значителна разлика:

  1. В Русия сме свикнали първо да поставяме деня, след това месеца на събитието и накрая годината;
  2. Жителите на САЩ започват датата с месеца;
  3. Чехи, поляци и словенци записват периода във формат "година - месец - ден".

Това е последният формат, който използва платформата 1C.

Преобразуване към дата

За да получите параметър с тип Дата от няколко стойности или от низ, трябва да използвате кода, показан на фиг. 1

Както се вижда от фигурата по-горе, можете да определите датата както с помощта на един ред, така и с разделянето на този ред на съставните му части с помощта на запетая, резултатът няма да се промени.

Важно е да се разбере, че годината на датата трябва да съдържа четири цифри, включително хилядолетието и века на събитието, месецът, денят, часовете и секундите трябва да са с дължина два знака, включително водещите нули.

Обратното броене в програмата започва от началото на деня на 1 януари 0001 г. За горния код тази стойност може да се определи по един от двата начина (Фигура 2).

Ориз. 2

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

Характеристики на използване на дати в 1C заявки

За повечето типове данни, използвани от платформата 1C, има предварително дефинирани void стойности. За числа това е 0, за връзки можете да дефинирате стойността EmptyReference(), за дата датата на началото на обратното броене се счита за празна стойност, именно с нея подробностите от съответния тип трябва да се сравняват, когато се задават параметри на заявката.

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

Ориз. 3

След като получим празна дата, можем да я посочим като параметър към нашата заявка, тоест да използваме конструкцията (фиг. 4)

Въпреки това, има моменти, когато е по-добре да проверите в тялото на заявката, без да предавате празна дата като параметър. За да направите това, можете да въведете подходящото условие в кода на заявката (фиг. 5) и да използвате функцията за заявка DateTime().

Ориз. 5

В дадения текст на заявката пропуснахме водещите нули от годината, месеца и деня, а също така не посочихме часове, минути и секунди и програмата, както се казва, изяде това предположение.

Дата и срок

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

Точността „до милисекунда“, посочена в техническата документация при описание на примитивен тип Date, е най-силно изразена при избор на записи от виртуални масирегистър за натрупване: ако регистърът за натрупване, в допълнение към таблицата Обороти, има таблиците Салда и Остатъци и обороти, тогава селекция върху тях, извършена за определено време, може да даде различни резултати.

За да разберете как и защо се случва това, разгледайте прост пример:

  1. Преди изпълнение на документа за продажба в 12 часа 31 минути 36 секунди салда по номенклатура Захар са 30 кг.;
  2. документ в определено време 10 кг бяха отписани;
  3. Справката, генерирана на датата на документа в 12 часа 31 минути 36 секунди по таблица Остатъци ще покаже остатък от 30 кг.;
  4. Същият отчет на таблицата Салда и обороти в същото време ще покаже баланс от 20 кг.

Каква е причината за това поведение и как да го избегнем?

Проблемът е, че в таблицата Remains периодът е зададен като отворен сегмент, тоест движенията, извършени към момента на генериране на отчета, не се вземат предвид, тоест времето се взема в началото на второ, посочено в параметъра. В същото време за таблицата Обороти и за таблицата Остатъци и обороти се вземат предвид времевите ограничения, т.е. времето се взема в края на определената секунда.

Има няколко изхода от тази ситуация:

  1. Когато използвате таблицата с остатъците, задайте времева точка с 1 секунда по-голяма от зададената;
  2. Използвайте само таблицата за баланси и обороти (не е най-оптималната опция по отношение на производителността);
  3. Използвайте термина граница.

Последният вариант може да бъде представен от кода, показан на фиг. 6.

В първия параметър на нашия обект посочваме датата, за която трябва да се генерира справката, вторият параметър определя вида на границата. Тъй като за нас е важно движенията на дадена дата да бъдат включени в селекцията, трябва да зададем този параметър на позиция „Включително“.

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

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

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

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

Произволна дата

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

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

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

ИЗБИРАМ
Предварителен отчетAttachedFiles.Link
ОТ
Directory.Advance Report Attached Files КАТО Advance Report Attached Files
КЪДЕТО
Предварителен отчетAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

празна дата

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

В процеса на работа със заявки всеки програмист трябва да взаимодейства с празни стойности по един или друг начин. Какво имаме предвид под празна стойност?

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

Видове нули

Помислете за типовете празни стойности, които могат да се срещнат или изискват в заявка.

  • За типа Number празната стойност е нула - 0.
  • За тип низ - празен ред – «».
  • За типа Дата първи януари на първата година е 01.01.0001 00:00:00. От тази дата се отчита времето в 1C. *
  • За булевия тип стойността по подразбиране технически е False, но логически стойностите на двата типа се попълват. Следователно решението дали празната стойност е False или не се основава на логиката на определен алгоритъм.

*Внимавайте, извън 1C има различни системи за изчисляване на дати от различни точкисправка.

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

Подобен тип Недефинирансъщо съдържа само една стойност, но Undefined не означава липса на данни, а само невъзможност да се определи стойността по подразбиране за типа. Undefined е стойността по подразбиране за съставни типове, включително тези, които не са изрично дефинирани. Например стойността в нова линиятаблица със стойности в колона, за която типът не е изрично дефиниран.

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

Работа с нулеви стойности в заявка

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

Видове Число, низ, булевоса описани в заявката като на вградения език:

SELECT 0 AS ExampleTypeNumber, "Hello World" AS ExampleTypeString, True AS ExampleTypeBoolean

Undefined, тъй като по същество е примитивен тип, се описва по подобен начин:

Изберете Lots.Period From Accumulation Register.Lots As Lots Where Remains.BatchDocument = Undefined

Празните референтни стойности са малко по-трудни за дефиниране. Всички референтни обекти имат предварително дефинирана стойност на услугата EmptyReference. Благодарение на това е възможно да изберете празна връзка по един единствен начин - чрез функцията Стойност:

Изберете Стойност(Reference.Nomenclature.EmptyReference) Като празна номенклатура

Възможностите за работа с нулеви стойности са малко по-богати. Подобно на други примитивни типове, Null се описва по същия начин, както във вградения език. Освен това са предоставени специалният оператор Is Null и функцията Is Null.

  • Операторът Is Null ви позволява да създавате булев изразсравняване на избраната стойност с нулевата стойност.
  • Функцията IsNull връща първия аргумент, ако не е Null, и втория аргумент в противен случай.

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

Практически примери

Използване на функцията Стойност

Изберете Goods.Reference As Nomenclature, Goods.Reference = Value(Catalog.Nomenclature.EmptyReference) Като тазиReferenceEmpty From wGoods As wGoods

Използването на оператор Is Null

Изберете Goods.Link като номенклатура, Goods.Link е нула като тазиLinkEmpty

Нула отляво или пълно присъединяване

Нулева проверка

Примерът демонстрира честа практическа ситуация, когато при ляво съединение за първата таблица няма съвпадение във втората. В този случай всички полета на втората таблица ще бъдат равни на Null.

Изберете WProducts.Reference като номенклатура, Remains.QuantityRemainder като количество, Remains.QuantityRemainder е нула като NoRemainder от WProducts като WProducts Ляво присъединяванеНатрупване Register.GoodsIn Warehouses.Remainders As Balances от TueGoods.Reference = Remains.Nomenclature

Работа с нулеви стойности

Модификация на предишната заявка, за да се демонстрира обща техника за получаване на някои стойности по подразбиране вместо липсващи. В този пример, използвайки функцията IsNull, липсващата остатъчна стойност се заменя с логически правилната 0.

Изберете TueProducts.Reference като номенклатура, IsNull(Remains.QuantityRemainder, 0) като количество от TueProducts като WProducts Ляво присъединяванеНатрупване Register.GoodsIn Warehouses.Remainders As Balances от TueGoods.Reference = Remains.Nomenclature

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