телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Логически операции (1C предприятие). Логически операции (1c enterprise) Използване на логическо ИЛИ в условия

Условията в заявките се прилагат, когато е необходимо да се изберат не всички записи от таблица на информационна база 1C, а само тези, които отговарят на един или повече критерии за избор.

Условията в 1C заявките могат да бъдат зададени по различни начини в зависимост от характеристиките на самата заявка и източника на данни.

Ключова дума "КЪДЕ"

Ключова дума КЪДЕТОизползва се в 1C заявки, когато условие се прилага към записи, избрани от информационната база. В този случай филтрирането на записи се извършва на етапа на избирането им от таблицата на информационната база.

Например, има маса Плащания, съдържащ списък на служителите и извършените плащания към тях.

Ако трябва да изберете плащания в размер на поне 10 000, тогава заявката ще изглежда така

Заявка. Текст= "ИЗБИРАМ
| Плащания. Служител,
| Плащания.Заплата
| ОТ
| Плащания
|КЪДЕ
| Плащания. Заплата >=10000"

Резултатът от заявката ще бъде следната таблица.

Ключова дума „ИМАНЕ“

Ключова дума ИМАЩв 1C заявки се използва, когато е необходимо да се избере сред вече избрани записи. Например, тази ключова дума се използва, когато трябва да филтрирате групирани записи в резултат на заявка.

Нека се върнем към примера, обсъден по-горе. Да речем, че трябва да изберете от таблица Плащанияслужители, получили общо над 20 000. За да направите това, първо трябва да въведете групиране по поле Служител, изчислете сумата по поле Заплатаза всеки служител, след което от получените записи изберете тези, които отговарят на условието.

Текстът на заявката ще изглежда така.

Заявка. Текст= "ИЗБИРАМ
| Плащания. Служител,
| AMOUNT(Плащания.Заплата) КАТО заплата
| ОТ
| Плащания
|ГРУПИРАНЕ ПО
| Плащания. Служител
|ИМАНЕ
| AMOUNT(Плащания.Заплата) > 20000"

Резултатът от изпълнението на тази заявка ще бъде такъв.

Този пример ясно показва разликата между ключовите думи КЪДЕТОИ ИМАЩ.Ако използваме думата КЪДЕТОвместо ИМАЩ, тогава първо ще бъдат избрани записи със заплата, по-голяма от 20 000, и след това от тях ще бъде изчислена сумата за всеки служител. В резултат на това ще получим празен резултат от заявката, защото никой служител не е получил повече от 20 000 на едно плащане.

Условия за избор във виртуални регистрови таблици

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

  1. чрез параметрите на виртуалната таблица;
  2. чрез секции за заявки КЪДЕТОили ИМАЩ.

Разлики между разделите КЪДЕТОИ ИМАЩвече разгледахме. За да разберете как условията в тези раздели на заявката се различават от условията в параметрите на виртуалната таблица, трябва да разберете какво виртуални регистрови таблицив 1C. Тяхната важна характеристика е, че не съществуват в информационната база. Това е инструмент, предоставен ни от платформата 1C:Enterprise за оптимизиране на конфигурацията.

По този начин, ако дадено условие е посочено в параметрите на виртуална таблица, тогава то се прилага на етапа на нейното формиране от записи в реалната регистърна таблица. И ако на раздели КЪДЕТОили ИМАЩ, след което - към записите на вече формирана виртуална таблица.

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

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

Заявка с условие в параметрите на виртуалната таблица ще изглежда така:

В този случай ще получим един запис: Долар 28,3от 01.02.2007г. Това ще бъде правилното решение на проблема.

Ако поставим условието в секцията КЪДЕТО,тогава резултатът от заявката ще бъде празен, тъй като първо ще се направи изрязване на първите за всяка валута (в резултат ще получим два записа от 01.01.2007 г. 30,25 долараИ 40,5 евро), след което от тях ще бъдат избрани записи, които отговарят на условието. Но и двата получени записа подлежат на добре< 30 не задоволяват.

Езикът за заявки в 1C 8 е опростен аналог на добре познатия „структуриран език за програмиране“ (както по-често се нарича SQL). Но в 1C се използва само за четене на данни; обектен модел на данни се използва за промяна на данни.

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

Примерна заявка:

ИЗБИРАМ
Банки. Име,
Банки.CorrAccount
ОТ
Справочник.Банки КАК Банки

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

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

Описание на конструкциите на езика за заявки

Структура на заявката

За да получите данни, е достатъчно да използвате конструкциите "SELECT" и "FROM". Най-простата заявка изглежда така:

ИЗБЕРЕТЕ * ОТ Директории.Номенклатура

Където “*” означава избиране на всички полета от таблицата, а Directories.Nomenclature – името на таблицата в базата данни.

Нека да разгледаме по-сложен и общ пример:

ИЗБИРАМ
<ИмяПоля1>КАК<ПредставлениеПоля1>,
Сума(<ИмяПоля2>) КАК<ПредставлениеПоля2>
ОТ
<ИмяТаблицы1>КАК<ПредставлениеТаблицы1>
<ТипСоединения>СЪЕДИНЕНИЕ<ИмяТаблицы2>КАК<ПредставлениеТаблицы2>
ОТ<УсловиеСоединениеТаблиц>

КЪДЕТО
<УсловиеОтбораДанных>

ГРУПИРАЙ ПО
<ИмяПоля1>

СОРТИРАНЕ ПО
<ИмяПоля1>

РЕЗУЛТАТИ
<ИмяПоля2>
ОТ
<ИмяПоля1>

В тази заявка избираме данните от полетата „FieldName1“ и „FieldName1“ от таблиците „TableName1“ и „TableName“, присвояваме синоними на полетата с помощта на оператора „HOW“ и ги свързваме с помощта на определено условие „TableConnectionCondition ”.

От получените данни избираме само данни, които отговарят на условието от „КЪДЕ” „Условие за избор на данни”. След това групираме заявката по поле „Име на поле1”, докато сумираме „Име на поле2”. Създаваме общи суми за полето „Име на поле1“ и последното поле „Име на поле2“.

Последната стъпка е да сортирате заявката с помощта на конструкцията ORDER BY.

Общи проекти

Нека да разгледаме общите структури на езика за заявки 1C 8.2.

ПЪРВОн

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

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки Код AS BIC
ОТ
Справочник.Банки КАК Банки
СОРТИРАНЕ ПО
Банки. Име

Заявката ще получи първите 100 записа от директорията „Банки“, сортирани по азбучен ред.

ПОЗВОЛЕН

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

Ако потребител се опита да използва заявка за четене на записи, които са недостъпни за него, той ще получи съобщение за грешка. За да избегнете това, трябва да използвате конструкцията „ALLOWED“, т.е. заявката ще чете само записи, които са разрешени за нея.

ИЗБЕРЕТЕ РАЗРЕШЕНО
Хранилище на допълнителна информация Връзка
ОТ
Директория. Хранилище на допълнителна информация

РАЗЛИЧНИ

Използването на „DIFFERENT“ ще предотврати въвеждането на дублирани редове в резултата от заявката на 1C. Дублирането означава, че всички полета на заявката съвпадат.

ИЗБЕРЕТЕ ПЪРВИТЕ 100
Банки. Име,
Банки Код AS BIC
ОТ
Справочник.Банки КАК Банки

EmptyTable

Тази конструкция се използва много рядко за комбиниране на заявки. Когато се присъединявате, може да се наложи да посочите празна вложена таблица в една от таблиците. Операторът “EmptyTable” е точно за това.

Пример от помощта на 1C 8:

ИЗБЕРЕТЕ Връзка.Номер, ПРАЗНА ТАБЛИЦА.(№, артикул, количество) КАТО състав
ОТ Документ. Разходна фактура
КОМБИНИРАЙТЕ ВСИЧКО
ИЗБЕРЕТЕ Link.Number, Contents.(LineNumber, Product, Quantity)
ОТ Документ.Фактура Документ.Фактура.Състав.*

ISNULL

Много полезна функция, която ви позволява да избегнете много грешки. YesNULL() ви позволява да замените NULL стойността с желаната. Много често се използва при проверка за наличие на стойност в обединени таблици, например:

ИЗБИРАМ
Връзка към номенклатурата,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
ОТ


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

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW е оператор, който ни позволява да присвоим име (синоним) на таблица или поле. Видяхме пример за използване по-горе.

Тези конструкции са много сходни - те ви позволяват да получите низово представяне на желаната стойност. Единствената разлика е, че REPRESENTATION преобразува всякакви стойности в тип низ, докато REPRESENTATIONREF преобразува само референтни стойности. РЕФЕРЕНТНО ПРЕДСТАВЯНЕ се препоръчва да се използва в заявки за система за композиране на данни за оптимизация, освен ако, разбира се, полето за референтни данни не е планирано да се използва в селекции.

ИЗБИРАМ
View(Link), //низ, например „Авансов отчет № 123 от 10.10.2015 г.
View(DeletionMark) AS DeleteMarkText, //низ, „Да“ или „Не“
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True или False
ОТ
Документ. Предварителен отчет

ЕКСПРЕСНО

Express ви позволява да преобразувате стойностите на полетата в желания тип данни. Можете да конвертирате стойност или в примитивен тип, или в референтен тип.

Express за референтен тип се използва за ограничаване на исканите типове данни в полета от сложен тип, често използвани за оптимизиране на производителността на системата. Пример:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Тип на ActivityForTaxAccountingCosts

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

EXPRESS(Коментар AS ред(150))

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

Вземете безплатно 267 видео урока за 1C:

Пример за използване на IS NULL в 1C заявка:

ИЗБИРАМ ОТ
Реф
ЛЯВА ВРЪЗКА RegisterAccumulations.ProductsInWarehouses.Remaining AS Product Remaining
Софтуерна номенклатураRef.Link = Продадени стокиCommitteesRemains.Номенклатура
WHERE NOT Оставащи продукти. QuantityRemaining Е NULL

Типът данни в заявка може да се определи чрез използване на функциите TYPE() и VALUETYPE() или чрез използване на логическия оператор REFERENCE. Двете функции са сходни.

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

В допълнение към използването на предадени параметри в заявки на езика за заявки 1C, можете да използвате предварително зададени стойности или . Например трансфери, предварително дефинирани директории, сметкопланове и т. н. За това се използва конструкцията „Value()“.

Пример за употреба:

WHERE Номенклатура.Тип номенклатура = Стойност(Директория.Видове номенклатура.Продукт)

WHERE Контрагенти.Тип информация за контакт = Стойност(Изброяване.Типове информация за контакт.Телефон)

WHERE Салда по сметки. Счетоводна сметка = Стойност (Сметкоплан. Печалба. Печалба Загуба)

Връзки

Има 4 вида връзки: НАЛЯВО, ДЯСНО, ПЪЛЕН, ВЪТРЕШЕН.

ЛЯВО и ДЯСНО ВЪРЗВАНЕ

Съединенията се използват за свързване на две таблици въз основа на конкретно условие. Характеристика, когато ЛЯВО ПРИСЪЕДИНЯВАНЕе, че вземаме първата посочена таблица в нейната цялост и условно свързваме втората таблица. Полетата на втората таблица, които не могат да бъдат обвързани с условие, се попълват със стойността НУЛА.

Например:

Той ще върне цялата таблица с контрагенти и ще попълни полето „Банка“ само там, където ще бъде изпълнено условието „Име на контрагенти = Име на банки“. Ако условието не е изпълнено, полето Банка ще бъде настроено на НУЛА.

RIGHT JOIN на езика 1Cабсолютно подобни ЛЯВА връзка, с изключение на една разлика - в ПРАВО НА СВЪРЗВАНЕ„Основната“ маса е втората, а не първата.

ПЪЛНА СВЪРЗВАНЕ

ПЪЛНА СВЪРЗВАНЕсе различава от ляво и дясно по това, че показва всички записи от две таблици и свързва само тези, които може да свърже по условие.

Например:

ОТ

ПЪЛНА СВЪРЗВАНЕ
Справочник.Банки КАК Банки

ОТ

Езикът за заявки ще върне и двете таблици напълно само ако е изпълнено условието за обединяване на записите. За разлика от ляво/дясно свързване, възможно е NULL да се появи в две полета.

ВЪТРЕШНО СЪЕДИНЕНИЕ

ВЪТРЕШНО СЪЕДИНЕНИЕсе различава от пълния по това, че показва само онези записи, които могат да бъдат свързани според дадено условие.

Например:

ОТ
Указател Контрагенти AS Клиенти

ВЪТРЕШНО СЪЕДИНЕНИЕ
Справочник.Банки КАК Банки

ОТ
Клиенти.Име = Банки.Име

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

Асоциации

Конструкциите JOIN и JOIN ALL комбинират два резултата в един. Тези. резултатът от извършването на две ще бъде „слят“ в един, общ.

Тоест системата работи точно както обикновените, само за временна маса.

Как да използвате INDEX BY

Трябва обаче да се вземе предвид една точка. Изграждането на индекс върху временна таблица също отнема време за завършване. Ето защо е препоръчително да използвате конструкцията „ “ само ако е известно със сигурност, че във временната таблица ще има повече от 1-2 записа. В противен случай ефектът може да е обратен - производителността на индексираните полета не компенсира времето, необходимо за изграждане на индекса.

ИЗБИРАМ
Валутни курсове Последно напречно сечение Валута КАТО Валута,
Валутни курсове Последно напречно сечение.
PUT Валутни курсове
ОТ
Информационен регистър.Валутни курсове.Последен отрязък(&период,) AS Валутни курсовеПоследен отрязък
ИНДЕКС ПО
Валута
;
ИЗБИРАМ
ЦениНоменклатура.Номенклатура,
ЦениНоменклатури.Цена,
Цени Номенклатури. Валута,
Валутни курсове
ОТ
Информационен регистър. Номенклатурни цени. Последен отрязък (&период,
Номенклатура B (&номенклатура) И PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Валутни курсове КАТО Валутни курсове
Номенклатури на цените на софтуера.Валута = Валутни курсове.Валута

Групиране

Езикът за заявки 1C ви позволява да използвате специални агрегатни функции, когато групирате резултатите от заявките. Групирането може да се използва и без агрегатни функции за „елиминиране“ на дубликати.

Съществуват следните функции:

Сума, Количество, Брой различни, Максимум, Минимум, Средно.

Пример #1:

ИЗБИРАМ
Продажби на стоки и услуги Стоки.Номенклатура,
SUM(Продажби на СтокиУслугиСтоки.Количество) КАТО Количество,
SUM(Продажби на СтокиУслугиСтоки.Сума) КАТО Сума
ОТ

ГРУПИРАЙ ПО
Продажба на стоки и услуги Стоки Номенклатура

Заявката получава всички редове със стоки и ги обобщава по количество и суми по позиции.

Пример №2

ИЗБИРАМ
Банки.Код,
QUANTITY(DIFFERENT Banks.Link) КАТО брой дубликати
ОТ
Справочник.Банки КАК Банки
ГРУПИРАЙ ПО
Банки.Код

Този пример ще покаже списък с BIC кодове в директорията „Банки“ и ще покаже колко дубликати съществуват за всеки от тях.

Резултати

Резултатите са начин за получаване на данни от система с йерархична структура. Агрегираните функции могат да се използват за обобщени полета, точно както за групиране.

Един от най-популярните начини за използване на резултатите на практика е груповото отписване на стоки.

ИЗБИРАМ




ОТ
Документ Продажби на стоки и услуги Стоки КАК да продавате стоки и услуги Стоки
СОРТИРАНЕ ПО

РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
Номенклатура

Резултатът от заявката ще бъде следната йерархия:

Общи резултати

Ако трябва да получите общи суми за всички „общи суми“, използвайте оператора „ОБЩИ“.

ИЗБИРАМ
Продажби на стоки и услуги Стоки Номенклатура AS Номенклатура,
Продажби на стоки и услуги Стоки Връзка AS Документ,
Продажби на стоки и услуги Стоки. Количество КАКТО Количество,
Продажби на стоки и услуги Стоки. Сума КАТО сума
ОТ
Документ Продажби на стоки и услуги Стоки КАК да продавате стоки и услуги Стоки
СОРТИРАНЕ ПО
Продажби на стоки и услуги Стоки Връзка Дата
РЕЗУЛТАТИ
SUM (Количество),
SUM(сума)
ОТ
СА ЧЕСТИ,
Номенклатура

В резултат на изпълнение на заявката получаваме следния резултат:

В което 1 ниво на групиране е агрегирането на всички необходими полета.

Аранжиране

Операторът ORDER BY се използва за сортиране на резултата от заявка.

Сортирането за примитивни типове (низ, число, булев) следва обичайните правила. За полетата от референтен тип сортирането се извършва по вътрешното представяне на връзката (уникалния идентификатор), а не по код или по референтно представяне.

ИЗБИРАМ

ОТ
Справочник.Номенклатура AS Номенклатура
СОРТИРАНЕ ПО
Име

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

Автоматична поръчка

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

Ако трябва да покажете записите на таблицата в постоянен ред, трябва да използвате конструкцията Auto-Order.

ИЗБИРАМ
Номенклатура. Име КАТО Име
ОТ
Справочник.Номенклатура AS Номенклатура
АВТОМАТИЧНА ПОРЪЧКА

Виртуални маси

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

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

  • разрез на първия;
  • изрязване на последното.
  • остатъци;
  • революции;
  • салда и оборот.
  • движения от субконто;
  • революции;
  • скорост Dt Kt;
  • остатъци;
  • салда и оборот
  • подконто.
  • база;
  • графични данни;
  • действителен срок на валидност.

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

ИЗБИРАМ
Продукти в складови остатъци и оборот Номенклатура,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
СтокиВСкладовеОстатъциИОборот.КоличествоВходящи,
СтокиВСкладовеОстатъциИОборот.КоличествоПотребление,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
ОТ
RegisterAccumulations.GoodsInWarehouses.RemainsAndTurnover AS СтокиВСкладовеRemainsAndTurnover

Тази заявка ви позволява бързо да извлечете голямо количество данни.

Опции за виртуална маса

Много важен аспект при работата с виртуални таблици е използването на параметри. Параметрите на виртуалната таблица са специализирани параметри за избор и конфигурация.

За такива таблици се счита за неправилно да се използва селекция в конструкцията „WHERE“. В допълнение към факта, че заявката става неоптимална, е възможно да получите неверни данни.

Пример за използване на тези параметри:

Регистър на натрупвания Стоки в складове Салда и обороти (& Начало на периода, & Край на периода, Месец, Движения и граници на периода, Номенклатура = & Задължителна номенклатура)

Алгоритъм за виртуални маси

Например най-използваната виртуална таблица от типа „Остатъци” съхранява данни от две физически таблици – салда и движения.

Когато използвате виртуална таблица, системата извършва следните манипулации:

  1. Получаваме най-близката изчислена стойност по отношение на датата и измерванията в таблицата с общите суми.
  2. „Добавяме“ сумата от таблицата за движение към сумата от таблицата с общите суми.


Такива прости действия могат значително да подобрят работата на системата като цяло.

Използване на Query Builder

Създател на заявки– инструмент, вграден в системата 1C Enterprise, който значително улеснява разработването на заявки към бази данни.

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

Текстовият конструктор на заявката се стартира от контекстното меню (десен бутон на мишката) на желаното място в програмния код.

Описание на конструктора на заявки 1C

Нека разгледаме всеки раздел на дизайнера по-подробно. Изключение прави разделът Builder, който е тема за друга дискусия.

Раздел Таблици и полета

Този раздел определя източника на данни и полетата, които трябва да бъдат показани в отчета. По същество тук са описани конструкциите SELECT.. FROM.

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

В контекстното меню на виртуални таблици можете да зададете параметри на виртуална таблица:

Раздел Връзки

Разделът се използва за описание на връзките на няколко таблици и създава конструкции с думата CONNECTION.

Раздел Групиране

В този раздел системата ви позволява да групирате и обобщавате задължителните полета на резултата от таблицата. Описва използването на конструкциите ГРУПИРАНЕ ПО, СУМА, МИНИМУМ, СРЕДНО, МАКСИМУМ, КОЛИЧЕСТВО, БРОЙ РАЗЛИЧНИ.

Раздел Условия

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

Раздел Разширени

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

Групиране Избиране на записи:

  • Първо Н– параметър, който връща само N записа към заявката (оператор FIRST)
  • Без дубликати– гарантира уникалността на получените записи (оператор DIFFERENT)
  • Позволен– позволява ви да изберете само онези записи, които системата ви позволява да изберете, като вземете предвид (ПОЗВОЛЕНА конструкция)

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

Отдолу има знаме Заключете получените данни за по-късна промяна. Позволява ви да активирате възможността за задаване на заключване на данни, което гарантира безопасността на данните от момента на четенето им до промяната им (важи само за режима на автоматично заключване, дизайн ЗА ПРОМЯНА).

Раздел Присъединявания/Псевдоними

В този раздел на дизайнера на заявки можете да зададете възможността за свързване на различни таблици и псевдоними (конструкцията HOW). Таблиците са посочени от лявата страна. Ако поставите флаговете срещу таблицата, ще се използва конструкция UNITE, в противен случай - UNITE ALL (разлики между двата метода). От дясната страна е посочено съответствието на полетата в различни таблици; ако съответствието не е посочено, заявката ще върне NULL.

Раздел за поръчка

Това определя реда, в който се сортират стойностите (ORDER BY) - низходящ (DESC) или възходящ (ASC).

Има и едно интересно знаме - Автоматична поръчка(в заявката - АВТОМАТИЧНА ПОРЪЧКА). По подразбиране системата 1C показва данни в „хаотичен“ ред. Ако зададете този флаг, системата ще сортира данните по вътрешни данни.

Раздел Пакет на заявка

В раздела дизайнер на заявки можете да създавате нови и да го използвате като навигация. В текста на заявката пакетите се разделят със символа “;” (запетая).

Бутон „Заявка“ в дизайнера на заявки

В долния ляв ъгъл на дизайнера на заявки има бутон Заявка, с който можете да видите текста на заявката по всяко време:

В този прозорец можете да направите корекции на заявката и да я изпълните.


Използване на конзолата за заявки

Конзолата за заявки е прост и удобен начин за отстраняване на грешки в сложни заявки и бързо получаване на информация. В тази статия ще се опитам да опиша как да използвам Query Console и ще дам връзка за изтегляне на Query Console.

Нека да разгледаме по-отблизо този инструмент.

Изтеглете 1C конзола за заявки

Първо, за да започнете да работите с конзолата за заявки, трябва да я изтеглите от някъде. Лечението обикновено се разделя на два вида - контролирани форми и конвенционални (или понякога се наричат ​​8.1 и 8.2/8.3).

Опитах се да комбинирам тези два изгледа в една обработка - желаната форма се отваря в желания режим на работа (в управляван режим конзолата работи само в дебел режим).

Описание на конзолата за заявки 1C

Нека започнем да разглеждаме конзолата за заявки с описание на основния панел за обработка:

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

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

Отляво, в полето „Заявка“, можете да създавате нови заявки и да ги запазвате в дървовидна структура. Втората група бутони отговаря за управлението на списъка със заявки. С него можете да създавате, копирате, изтривате, премествате заявка.

  • Изпълниискане– просто изпълнение и резултати
  • Изпълнение на пакета– позволява ви да видите всички междинни заявки в пакет от заявки
  • Преглед на временни таблици– позволява ви да видите резултатите, които временните заявки връщат в таблица

Параметри на заявката:

Позволява ви да зададете текущите параметри за заявката.

В прозореца с параметри на заявката е интересно следното:

  • Бутон Вземете от заявкаавтоматично намира всички параметри в заявката за удобство на програмиста.
  • Флаг Общи параметри за всички заявки– когато е инсталиран, обработката му не изчиства параметрите при преминаване от заявка към заявка в общия списък със заявки.

Задайте параметър със списък от стойностиМного е просто, просто когато избирате стойност на параметър, щракнете върху бутона за изчистване на стойността (кръст), системата ще ви подкани да изберете типа данни, където трябва да изберете „Списък със стойности“:

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

Тук можете да зададете параметри за автоматично запазване на заявки и параметри за изпълнение на заявки.

Текстът на заявката се въвежда в полето за заявка на конзолата. Това може да стане чрез просто въвеждане на тест на заявка или чрез извикване на специален инструмент - дизайнер на заявки.

Дизайнерът на заявки 1C 8 се извиква от контекстното меню (десен бутон на мишката), когато щракнете върху полето за въвеждане:

Това меню също има такива полезни функции като изчистване или добавяне на нов ред („|“) към заявката или получаване на кода на заявката в тази удобна форма:

Заявка = Нова заявка;
Request.Text = ”
|ИЗБЕРЕТЕ
| Валути.Връзка
| ОТ
| Справочник.Валути AS Валути”;
RequestResult = Request.Execute();

Долното поле на конзолата за заявки показва полето за резултат от заявката, поради което е създадена тази обработка:



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

Оптимизация на заявките

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

Селекции във виртуална таблица с помощта на конструкцията WHERE

Необходимо е да се прилагат филтри към детайлите на виртуалната таблица само чрез VT параметрите. При никакви обстоятелства не трябва да използвате конструкцията WHERE за избор във виртуална таблица; това е сериозна грешка от гледна точка на оптимизацията. В случай на избор чрез WHERE, всъщност системата ще получи ВСИЧКИ записи и едва след това ще избере необходимите.

ДЯСНО:

ИЗБИРАМ

ОТ
Регистър на натрупвания. Взаимни разплащания с участници в организации. Салда (
,
Организация = &Организация
И Индивидуално = &Индивидуално) КАК Взаимни разплащания с Участници в Организации Салда

ГРЕШНО:

ИЗБИРАМ
Взаимни разплащания с участниците в организациите Салда
ОТ
Регистър на натрупвания Взаимни разчети с участници в организации Салда (,) КАК Взаимни разчети с участници в организации Салда
КЪДЕТО
Взаимни разплащания с участници в организациите Салда Организация = & Организация
И Взаимни разплащания с участници в баланси на организации. Индивидуално = &Индивидуално

Получаване на стойността на поле от сложен тип с помощта на точка

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

Например, крайно нежелателно е оптимизацията да има достъп до полето за запис в регистъра – регистратор. Регистраторът има съставен тип данни, сред които са всички възможни типове документи, които могат да записват данни в регистъра.

ГРЕШНО:

ИЗБИРАМ
Запис Set.Recorder.Date,
RecordSet.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS SetRecords

Тоест, всъщност такава заявка ще има достъп не до една таблица, а до 22 таблици на база данни (този регистър има 21 типа регистратори).

ДЯСНО:

ИЗБИРАМ
ИЗБОР
WHEN ProductsOrg.Registrar LINK Документ. Продажби на продукти и услуги
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Дата
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Дата
КРАЙ КАТО ДАТА,
ProductsOrg.Quantity
ОТ
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

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

ДЯСНО:

ИЗБИРАМ
ПродуктиОрганизации.Дата,
ПродуктиОрганизации.Количество
ОТ
Регистър на натрупванията Стоки на организации AS Стоки на организации

Подзаявки в условие за присъединяване

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

ГРЕШНО:

ИЗБИРАМ …

ЛЯВО ПРИСЪЕДИНЯВАНЕ (
ИЗБЕРЕТЕ ОТ RegisterInformation.Limits
КЪДЕТО …
ГРУПИРАЙ ПО...
) ОТ …

ДЯСНО:

ИЗБИРАМ …
PUT Ограничения
ОТ Информационен регистър.Ограничения
КЪДЕТО …
ГРУПИРАЙ ПО...
ИНДЕКС ПО...;

ИЗБИРАМ …
ОТ Документ Продажби на стоки и услуги
LEFT JOIN Граници
ОТ …;

Обединяване на записи с виртуални таблици

Има ситуации, когато при свързване на виртуална маса с други, системата не работи оптимално. В този случай, за да оптимизирате производителността на заявката, можете да опитате да поставите виртуалната таблица във временна таблица, като не забравяте да индексирате обединените полета в заявката за временна таблица. Това се дължи на факта, че VT често се съдържат в няколко физически таблици на СУБД; в резултат на това се компилира подзаявка, за да ги изберете, и проблемът се оказва подобен на предишната точка.

Използване на селекции въз основа на неиндексирани полета

Една от най-честите грешки при писане на заявки е използването на условия за неиндексирани полета, това противоречи правила за оптимизиране на заявки.СУБД не може да изпълни оптимално заявка, ако заявката включва избор на неиндексируеми полета. Ако вземете временна таблица, трябва също да индексирате полетата за връзка.

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

  1. Индексът съдържа всички полета, изброени в условието.
  2. Тези полета са в самото начало на индекса.
  3. Тези селекции са последователни, т.е. стойностите, които не са включени в условието на заявката, не са „вградени“ между тях.

Ако СУБД не избере правилните индекси, цялата таблица ще бъде сканирана - това ще има много негативно влияние върху производителността и може да доведе до продължително блокиране на целия набор от записи.

Използване на логическо ИЛИ в условия

Това е всичко, тази статия обхваща основните аспекти на оптимизацията на заявките, които всеки 1C експерт трябва да знае.

Много полезен безплатен видео курс за разработване и оптимизиране на заявки, Горещо препоръчвамза начинаещи и повече!

Числото в 1C 8 е стойност от примитивен тип Номер. Числовият тип може да представлява всяко десетично число. С числови данни е възможно да се извършват основни аритметични операции: събиране, изваждане, умножение и деление. Максималният брой цифри за число в 1s 8: 38 знака.

Числови литерали: набор от цифри във формата: [+|-](0|1|2|3|4|5|6|7|8|9)[.(0|1|2|3|4| 5|6| 7|8|9)] „.“ се използва като разделител между целите и дробните части. (точка).

Пример 1: Нека създадем числова променлива

Число Pi = 3,14;

Преобразуване на стойности от друг тип в число

Можете да конвертирате стойности от тип низ или булев тип ( Булева стойност). Тип стойност Булева стойностсе преобразува в число съгласно следните правила:

  • Лъжапреобразуван в 0;
  • Вярносе преобразува в 1.

Тип стойност Линиясе преобразува в число, ако е низово представяне на литерал от числов тип.

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

Пример 2. Преобразувайте низа “1.25” в число 1c

Низ = "1,25"; Получено число = число (низ);

След изпълнение на този код в променливата ReceivedNumberще съдържа числова стойност 1.25

Пример 3: Преобразувайте низа „Hello world!“ в число.

String = "Здравей свят!"; Получено число = число (низ);

Ако се опитате да изпълните този код, ще получите съобщение за грешка: „Преобразуване на стойност в тип Номерне може да се изпълни."

Функции за работа със стойности от тип Number в 1s 8.3

Този раздел ще обсъди основните функции за работа с числа в 1c 8 и ще предостави примери за тяхното използване.

Cel

Cel(<Число>) . Връща цялата част от числото, предадено като параметър.

Пример 4. Определете дали числото 121 се дели на 11.

Дивидент = 121; Делител = 11; Резултат = Дивидент / Делител; If Goal(Result) = Result Then Report("Разделя изцяло"); Друг отчет ("Неделимо"); endIf;

Резултатът от изпълнението на този код ще бъде показването на съобщението „Раздели на цяло“ на екрана.

Окр.

Okr(<Число>, <Разрядность>, <РежимОкругления> ). Функцията закръгля числото, подадено в първия параметър, до десетичния знак, подадено във втория параметър. Битовата стойност може да бъде или нула (закръгляване до цяло число), или отрицателно (закръгляване до съответната цифра на цялото число). Параметър Режим на закръгляванеможе да приема стойности:

  • 0 (или режим на закръгляване. Закръглете 15 като 10). Закръглява надолу, т.е. закръгляването на 1,5 ще върне 1;
  • 1 (или режим на закръгляване. Завъртете 15 като 20). Закръглява нагоре, т.е. закръгляването на 1,5 ще върне 2;

Пример 5. За да разберем по-добре принципите на закръгляването, нека разгледаме закръглянето нагоре и надолу до цяло число, на редица числа от 1,1 до 1,9

Array = Нов масив; Стъпка = 0,1; Число = 1; Чао номер< 1.9 Цикл Число = Число + Шаг; Массив.Добавить(Число); КонецЦикла; Для Каждого Стр Из Массив Цикл Сообщить("Исходное: "+Стр+" В меньшую: "+Окр(Стр,0,0)+" В большую:"+Окр(Стр,0,1)); КонецЦикла;

Pow

Pow(<Основание>, <Показатель>) . Повишава числото, предадено в първия параметър, до степента, предадена във втория параметър.

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

Брой = 144; KvRoot = Pow(число, 1/2); Число = Pow(KvRoot, 2); Доклад (номер);

Резултатът от изпълнението на кода ще бъде показването на числото 144.

Други функции за работа със стойности на числов тип в 1s 8.3

  • Вход (<Число>) . Получава натурален логаритъм от числото, предадено в параметъра;
  • Log10(<Число>) . Получава десетичния логаритъм на числото, предадено като параметър;
  • грях(<Угол>) . Получава синуса на ъгъл, зададен в радиани. Ъгълът се предава като параметър;
  • защото(<Угол>) . Получава косинуса на ъгъла;
  • тен(<Угол>) . Получава тангенса на ъгъл;
  • ASin(<Угол>) . Получава арксинуса на ъгъла;
  • ACos(<Угол>) . Получава арккосинус на ъгъл;
  • Тен(<Угол>) . Получава аркутангенс на ъгъл;
  • Exp (<Число>). Получава експонентата на числото, предадено на параметъра.

По правило изучаването на всеки език за програмиране започва с пример за написване на първата проста програма („Здравей, свят!“). Това се прави, за да се демонстрира ясно работата с основни синтактични структури. Ние няма да правим изключение от този общоприет начин на представяне на материал, когато изследваме нова среда за разработка, и следователно нашата първа статия трябва да се разглежда в същата светлина. В него ще анализираме подробно отговорите на следните въпроси относно програмирането на платформата 1C:Enterprise 8:

  • Къде и с каква помощ да напишете програмен код на вградения език 1C?
  • Какво представляват софтуерните модули, какви са правилата за работа с тях?
  • Какво е променлива, как да работим с нея, как и къде да я декларираме?
  • Какви оператори за сравнение, присвояване и условни оператори има и как ги използвате?
  • Булеви операции - какво представляват и как се работи с тях?
  • Защо имаме нужда от цикли и как да ги използваме?

Статията ще бъде полезна за всички, които все още не са запознати с разработката на платформата 1C:Enterprise 8, но искат да научат как да програмират на 1C.

Приложимост

Материалът е подходящ за платформата 1C:Enterprise 8, издание 8.2. и 8.3.

Променливи и оператори

В тази статия започваме да изучаваме вградения език 1C:Enterprise 8. Изпълнимият код се съдържа в програмни модули.

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

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

Така всеки модул описва поведението на конфигурацията в определен момент. Модулът съдържа преди всичко раздел за описание на променливи. Тези. можем да декларираме някои променливи в модула.

В бъдеще те могат да се използват в процедурите и функциите на този модул. Ако дадена променлива е дефинирана с ключовата дума Export, тя ще бъде достъпна извън този модул. Примерен ред за деклариране на променлива:

Перемски склад, отдел, складов износ;

След декларацията на променливите има раздел с процедури и функции.

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

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

състояние=1;
Нов израз=2;
Резултат=3;

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

Разделителят на оператора е символът ";" (точка и запетая). Този знак отбелязва края на изявлението. Тези. операторът може да бъде написан по следния начин:

Резултат=100Х200
+400
-600;

Няма значение на колко реда се намира изявлението.

Разбира се, често е по-удобно и по-ясно да поставите оператора на един ред, но понякога операторите са доста дълги (броят на редовете може разумно да достигне няколко десетки).

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

Процедура CalculateValue()

Първоначална стойност = 100;
Междинна стойност = Първоначална стойност/5;
Крайна стойност = Първоначална стойност+Междинна стойност

Край на процедурата

Въпреки това е по-добре да използвате точка и запетая в крайния израз. Възможно е след време строителството да бъде продължено и окончателното становище вече да не е окончателно. Ще трябва специално да наблюдаваме тази ситуация.

Променливите са предназначени да съхраняват някаква стойност от произволен тип данни. Те се използват за междинно съхранение на информация за обработка.

В почти всеки софтуерен модул, който извършва някакво действие, има различни променливи. Въвеждането на променливи по стойности в платформата 1C:Enterprise 8 е меко.

Например, една променлива може да съдържа стойност от един тип данни, а след това няколко реда по-късно - друг тип:

Създаден = невярно;
Създаден = Вярно;
Създаден =100;

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

  • имплицитен метод (споменаването от лявата страна на оператора за присвояване описва тази променлива, няма предварително описание на променливата с думата Променлива, т.е. няма специален раздел за описание на променливи);
  • изрично описание на променливите (Variable Control Data;). Използва се изрична декларация на променливи, например, ако се предвижда последващо предаване на тази променлива към функция.

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

В този случай името на променливата трябва да отразява значението на тази променлива. Имената на променливи с една буква (като A, B, C) са лоши примери. Те не отразяват същността на променливите.

Примери за правилни имена на променливи: Counter (увеличаваща се променлива за цикъл), Counterparty. Ако името на променливата съдържа няколко думи, тогава всяка нова дума, за по-голяма яснота, трябва да започва с главна буква.

Запазени думи като Procedure, Function, Loop, EndLoop и др. не могат да се използват в имена на променливи. (тези структури са маркирани в червено в програмния модул).

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

Трябва да се отбележи, че типовете данни не са запазени думи (например Array, Boolean, True, False). Системата ще приеме правилно такива имена на променливи.

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

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

Относно езика. Можете да използвате руски, английски или комбинация от двата езика. Ако е удобно за някого, можете безопасно да използвате английски за писане на програмен код, както и да комбинирате руски и английски. Това не е важно за Платформата.

Много имена на английски са доста трудни за запомняне. При използване на комбинация от два езика четимостта на програмния код се влошава.

Булеви операции

Операторите за сравнение често използват булева логика, която връща True или False.

Например, в условен оператор можете да сравните: Ако събитие = продажба, тогава алгоритъмът ще следва едно разклонение (т.е. ако стойността е True), ако условието е False, ще се изпълни друго разклонение на алгоритъма.

Условията могат да бъдат доста сложни, могат да се комбинират, като се използват следните оператори: И, ИЛИ и НЕ. И така, за оператора И:

Truth And Truth = Истина;
Вярно и невярно = невярно;
False и True = False;
False И False = False.

За оператора OR е достатъчно един от операндите да е равен на True, тогава стойността на комбинацията ще бъде True. Стойността False се получава само когато и двата операнда са False.

Операторът NOT просто обръща текущата стойност (False към True, True към False).

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

Операторът NOT има най-висок приоритет, следван от оператора AND, следван от оператора OR. Всичко, което е затворено в скоби, има най-висок приоритет и се изпълнява първо.

Например, нека зададем приоритети (последователност на изпълнение) за операции в дадения израз:

НЕ(Условие1 ИЛИ Условие2) И Условие3 ИЛИ Условие4
1.Резултат1 = (Условие1 ИЛИ Условие2);
2. Резултат2 = НЕ Резултат1;
3. Резултат3 = Резултат2 И Условие1;
4. Резултат = Резултат3 ИЛИ Условие4;

Има правило за преобразуване:

НЕ (Условие1 ИЛИ Условие2) = НЕ Условие1 И НЕ Условие2.

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

Оператор за присвояване

Операторът за присвояване не трябва да се бърка с оператора за равенство, въпреки че имат еднакъв правопис.

Принципът на оператора за присвояване е, че на лявата стойност (променливата от лявата страна) се присвоява стойността, която е вдясно от знака за равенство. Да разгледаме един пример:

Променлива1 = Променлива2 = Променлива3;

На променлива1 се присвоява стойност за равенство от булева логика, т.е. True, ако Variable2 = Variable3, или False в противен случай.

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

Този проблем се решава с помощта на оператора за присвояване и има две решения.

Решение №1 с помощта на временна променлива:
Временна променлива = променлива1;
Променлива1 = Променлива2;
Променлива2 = Временна променлива;

Решение №2:
Променлива1 = Променлива1 + Променлива2;
Променлива2 = Променлива1 – Променлива2;
Променлива1 = Променлива1 – Променлива2;

Условен оператор

Има такъв оператор If, след което е необходимо да се опише някакво условие (самото условие може да бъде доста голямо). Условието е последвано от думата Then и операторите, които трябва да бъдат изпълнени.

Това може да бъде последвано от ключовата дума Else и поредица от други твърдения. Ако има няколко различни условия, можете да използвате поредица от ключови думи В противен случай Ако(вижте примера по-долу). Цялата конструкция трябва да завършва с ключовата дума EndIf, последвано от точка и запетая.

В допълнение към простите и множество условия, има съкратена форма на условния оператор: ?(Условие, Израз1, Израз2);

Ако условието е вярно, то ще бъде изпълнено Израз1, в противен случай - Израз2. Примерен код: ExpensiveProduct = ?(Product.Price>100000, True, False);

На практика вместо сравнителни записи със стойността Вярно (Лъжа) Тип:

If Variable = True Then
И
Ако променлива = False Тогава

действително използваните еквивалентни обозначения са:

Ако е променлива тогава
И
Ако НЕ е променлива, тогава

Циклични оператори

За всеки тип цикъл е необходимо изрично да посочите края на този цикъл, като използвате ключовата дума Край на цикъла. Има няколко вида цикли.

Примка на брояч– цикъл с фиксиран брой повторения. Условието за излизане от цикъла е превишаване на граничната стойност. Примерно използване за изчисляване на стойността на A!

А = 5;
Факториал = 1;
За брояч = 1 чрез цикъл
Факториал = Факториал * Брояч;
EndCycle;

Цикъл по условие– условието на дадения цикъл е изпълнено, стига да е истина. Пример:

RemainingAmount = 1000;
Цена на допълнителен продукт = 243;
Количество = 0;
Докато оставащото количество>0 цикъл
Количество = Количество+1;
Оставаща сума = Оставаща сума – Количество*Цена на допълнителен продукт;
Цена на допълнителен продукт = Цена на допълнителен продукт * 0,8;
Край на цикъла
Количество = Количество-1;

Този цикъл изчислява колко единици от продукт могат да бъдат закупени за дадена сума (1000 рубли), ако след закупуване на всяка единица от продукт предишната му цена се умножи по коефициент 0,8. Оригиналната цена на продукта е 243 рубли.

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

Преминете през колекции (друго име за всички).

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

Можете да итерирате през елементите на колекция, като използвате специален тип цикъл.

Например, има масив от числа, трябва да изчислите сумата от всички елементи на масива:

Сума = 0;
За всеки елемент от цикъл на масив
Сума=Сума+Елемент;
EndCycle;

Има специални оператори за цикли: продължиИ Прекъсване.

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

Оператор Прекъсванепозволява на цикъла да приключи изпълнението, дори ако условието на цикъла е вярно.

Това завършва първото ни запознаване с разработката на вътрешния език 1C.

Какво ще кажете за Hello World? Все още не сме го написали, нали? Да, но нищо не пречи да го направите сами, защото... знанието ВЕЧЕ е достатъчно. Е, ако не се получи, тогава можете да погледнете тук.

Прилага се следното логически операции:

НЕ логично НЕ (отрицание); И логично И;

ИЛИ е логическо ИЛИ.

Операндите на логическите операции трябва да бъдат логически изрази. В табл 2.5 показва резултатите от логическите операции върху логическите изрази LP1 и LP2, приемайки стойностите вярно(I) или лъжа(L).

Таблица на истината

Таблица 2.5

DX1 DX2 LV1 И LV2 DX1 ИЛИ DX2 НЕ DX1
И И И И Л
И Л Л И Л
Л И Л И И
Л Л Л Л И

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

2.6.5. ПРИОРИТЕТ НА ОПЕРАЦИИ

Всички операции на 1C се извършват в израза отляво надясно в съответствие с техния приоритет (предимство), т.е. ако две последователни операции имат еднакъв приоритет, първоначално се изпълнява лявата операция. Подизразите, затворени в скоби, се оценяват първи. В табл 2.6 Операциите на 1C са подредени в низходящ ред според техния приоритет.

Приоритет на операцията

Таблица 2. b

% *,/ +, НЕ И ИЛИ<, <=, >, >=, =, <>

Коментирайте.Всяка клетка от таблицата съдържа операции с еднакъв приоритет.

Пример:

8 % 2 * 3 // Връща 0
8 % (2 * 3) // Връщане 2

Тъй като логическите операции са по-стари от релационните операции, следният логически израз е неправилен:

3>2 и 4< 5 // Так неверно

тъй като първоначално се изчисляват логическите подизрази 2 и 4

чиито операнди не съществуват вярноили лъжа.И това не е вярно.

Но логическият израз е правилен

(3 > 2) и (4< 5) // Это истински пример.Изчислете резултата от булев израз

(x/a = 1) или (b/(a + b)< 1) и не (б = а) или (х <>6) когато x = 6.0, А= 2,0 и b = 3,0.

След като изчислим резултата от операциите на подизрази, затворени в скоби, получаваме:

лъжаили вярнои не лъжаили лъжа.

лъжаили вярноИ вярноили лъжа.След екзекуцията вярноИ вярно невярноили вярноили лъжа.Краен резултат: вярно.

2.7. МАСИВИ

Масиве обект с данни, съдържащ множество стойности, които са достъпни чрез техния номер ( индекс).

Броят на елементите в масива се нарича негов размер.Размерът на масива може да бъде само целочислена литерална константа.

Променлив оператор;

декларира едномерен масив (вектор) Аот пет елемента. Елементите на масива имат следните имена: а, а, а, аИ А.В тези имена стойностите 1-5 са индекси на елементи на масива.

Масивът се счита за дефиниран, ако са посочени стойностите на всички негови елементи. За да зададете първоначалните стойности на елементите на масива (инициализация на масива), е възможен следният цикъл:

за in = 1 до 5 цикъл

Задачи

ще промени съответно стойностите на 2-рия и 5-ия елемент на масива А.

Като цяло числови изрази т.нар индексни изрази.Например:

а = 9,1; // Промяна на стойността на 3-тия елемент от масива А

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

а = 9,1; // Промяна на стойността на първия елемент от масива А

Стойността на индекса не трябва да надхвърля границите на масива. Така че, когато работите с предварително деклариран масив Аот петте елемента операторите са грешни

Елементите на един и същи масив могат да бъдат от различни типове. Например:

a = ‘25.11.01’; // Елемент от тип Дата Елементите на масива могат да бъдат от агрегатен тип. Например:

cEmployees = CreateObject(“Директория.Служители”);

таблица = CreateObject(“Таблица”);

Един масив не може да съдържа други масиви като елементи.

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

Пример:

процедура InitializationArray(a) променлива, размер;

размер A = размер (a); // Вградената функция Size ще върне размера на масива А

за in = 1 в цикъл на размера

a[in] = 1; // Сега всички елементи на масива са равни на един endCycle;

endProcedure // Инициализация на масив

процедура Execute() променлива;

// Извикване на процедура, която задава началните стойности на елементите на масива

// Действителният му параметър е името на масива InitializeArray(a);

endProcedure // Изпълнение



Свързани публикации