1c изчислено поле. Изразен език на системата за съставяне на данни (1Cv8)

31.10.2021

Разгледахме подробно настройките на отчетите, реализирани на базата на системи за контрол на достъпа. Сега нека разгледаме по-фините и подробни настройкиопции за отчет. Прозорецът за “разширени” настройки на опцията отчет се извиква с командата “Още” - “Други” - “Промяна на опцията отчет”.

Прозорецът за промяна на версията на отчета е разделен на две части:

1. Структура на отчета.

2. Настройки на отчета.


Разделът за структура на опцията за отчет е подобен на раздела „Структура“ на стандартните настройки на отчета. Целта и конфигурацията на групировките са разгледани подробно в част 1 на статията.

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

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

Разделът с настройки се състои от следните раздели:

1. Параметри.Съдържа Параметри на ACS, достъпни за потребителя.

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


Таблицата с параметри е представена във формат "Параметър" - "Стойност". Ако е необходимо, можете да промените стойностите на параметрите. Щракването върху бутона „Свойства на елемента за персонализирани настройки“ отваря персонализираните настройки на елемента.


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

Свойствата на елемента с персонализирани настройки също имат групирани полета, полета, селекции и елементи за условен външен вид.

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


Потребителят може да добави два типа полета:

  • Ново поле за избор...
  • Ново поле за израз...

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


Например, нека изчислим приблизителна оценка на броя на продажбите. Ще приемем, че ако са продадени по-малко от 10 единици от даден продукт, сме продали малко, а ако са повече от 10 единици, сме продали много. За да направим това, ще зададем 2 стойности за изчисленото поле: първата ще бъде с избор „Брой стоки, по-малък или равен на „10““, втората с избор „Брой стоки, по-голям от „10“ ””.

Изразителните полета ви позволяват да изчислите стойност с помощта на произволни алгоритми. Те могат да използват функциите на езика за заявки и вградения език за програмиране 1C. Прозорецът за редактиране на полето за израз съдържа две полета за изрази на подробни и обобщени записи. Обобщените записи са групи, конфигурирани в областта „Структура на отчета“ и трябва да се използват агрегатни функции(„Сума“, „Минимум“, „Максимум“, „Количество“).

Например, нека изчислим средния процент на отстъпка. Средният процент на отстъпка се изчислява по формулата: [Сума на продажбите без отстъпка] - [Сума на продажбите с отстъпка] / [Сума на продажбите без отстъпка]. Важно е да запомните, че сумата на продажбите без отстъпка може да е нула, така че използваме оператора SELECT за проверка. Получаваме следните изрази:

· За подробни записи:

Избор

Когато [Продажбена сума без отстъпка] = 0

След това 0

В противен случай [Сума на продажбите без отстъпка] - [Сума на продажбите с отстъпка] / [Сума на продажбите без отстъпка]

Край

· За обобщени записи:

Избор

Когато сума ([Сума на продажбите без отстъпка]) = 0

След това 0

В противен случай Сума ([Сума на продажбите без отстъпка]) - Сума ([Сума на продажбите с отстъпка]) / Сума ([Сума на продажбите без отстъпка])

Край

Както споменахме по-рано, в израза на общите записи използваме агрегатната функция „Сума“.

3. Групируеми полета.Съдържа полета, по които ще бъдат групирани резултатите от варианта на отчета. Групираните полета се конфигурират отделно за всяко групиране, но можете да зададете общи групирани полета за опция за отчет, ако изберете корена „Отчет“ в структурното дърво. Можете да добавите поле от резултата от отчета, потребителско поле или да изберете автоматично поле, след което системата автоматично ще избере полетата. Този раздел също ви позволява да промените реда на групираните полета.


4. Полета.Съдържа полетата, които ще бъдат изведени в резултат на варианта на отчета. Полетата се конфигурират отделно за всяко групиране, но можете да зададете общи полета за опция за отчет, ако изберете корена „Отчет“ в структурното дърво. Можете да добавите поле от резултата от отчета, потребителско поле или да изберете автоматично поле, след което системата автоматично ще избере полетата. Този раздел също ви позволява да промените реда на полетата.

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

  • Auto - системата автоматично поставя полета;
  • Хоризонтално - полетата са разположени хоризонтално;
  • Вертикално - полетата са разположени вертикално;
  • В отделна колона - полетата са разположени в различни колони;
  • Заедно - полетата са разположени в една колона.


5. Избор.Съдържа селекции, използвани във варианта на отчета. Създаването на селекции беше обсъдено подробно в част 1 на тази статия. Филтрите се конфигурират отделно за всяко групиране, но можете да зададете общи филтри за опция за отчет, ако изберете корена „Отчет“ в структурното дърво.


6. Сортиране.Съдържа полетата за сортиране, използвани във варианта на отчета. Настройването на полета за сортиране беше обсъдено подробно в част 1 на тази статия. Сортирането се конфигурира отделно за всяко групиране, но можете да зададете общи полета за сортиране за опция за отчет, ако изберете корена „Отчет“ в структурното дърво.


7. Условна регистрация.Съдържа условни дизайнерски елементи, използвани във варианта на отчета. Настройването на условен външен вид беше обсъдено подробно в част 1 на тази статия. Условният външен вид се конфигурира отделно за всяко групиране, но можете да зададете общи елементи на условен външен вид за опция за отчет, ако изберете корена „Отчет“ в структурното дърво.


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


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


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

Правилното използване на схема за съставяне на данни (DCS) ви позволява да:

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

Но не всички разработчици се възползват максимално от възможностите на схемата, тъй като не всички нейни настройки са очевидни и интуитивни. По-специално, много хора знаят, че в 1C SKD има изчислени полета, но не разбират напълно обхвата на тяхното използване и методите за работа с тях.

Какво е изчислено поле

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

Факт е, че ACS е нещо повече от просто показване на резултата от заявка и това ясно се вижда от формата за създаване на диаграма (фиг. 1).

Изчисляваните полета ви позволяват да извършвате определени действия с генерирания набор от данни:

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

Нека да прегледаме този списък.

Масив от стойности в една клетка

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


Така създадохме допълнително поле за изчисление в нашата схема;


Както можете да видите от примера по-горе, няма трудности при добавяне и обработка на изчислени полета. Използвахме две функции: Array() и ConnectRows().

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

  1. Разделител на елементи – показва кой символ ще отдели един елемент от масива или един ред от таблица със стойности от друг (в нашия случай пропуснахме този параметър и по подразбиране беше зададен нов ред);
  2. Разделител на колони – знак, използван за разделяне на колони в таблица със стойности (точка и запетая се използва по подразбиране).

Достъп до експортните функции на общ модул

Функциите на общ модул могат да действат като източник на данни за попълване на изчислено поле.

Няколко важни точки:

  • Функцията трябва да може да се експортира;
  • Ако дадена функция се намира в общ модул с набор от атрибути „Глобален“, тя се извиква директно по име, в противен случай функцията трябва да се извика според схемата „Име на споделен модул“. "Име на функцията, която ще бъде извикана."

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


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

Езикови изрази за оформление

Доста често в работата на разработчика възниква ситуация, когато е необходимо да се покаже резултатът от разделянето в полето ACS:

  1. Изчислете средната цена на артикула;
  2. Всякакви лихви;
  3. Изчисления на средни доходи и др.

За да избегнете проблеми, в тези случаи е препоръчително да въведете тест за деление на 0 в изчислителното поле.

Това може да стане с помощта на конструкцията „Избор Когато….Тогава… В противен случай… Край“.

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

Да приемем, че можете да получите сумата на документа от предишния ред на нашата заявка, като посочите стойността Calculate Expression („Сума на документа“, „Предишна сума“) в полето „Израз“.

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


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

Съответно, сега е необходимо да се изчислят сумите за горните групи („Складове“, „Видове складове“) и общата сума.
За да направите това, използвайте функцията CalculateExpressionWithGroupArray:
ОЦЕНЯВАНЕ НА ИЗРАЗ С ГРУПОВ МАСИВ (EVALEXPRESSIONWITHGROUPARRAY)
Синтаксис:
EvaluateExpressionWithGroupArray(,)
Описание:
Функцията връща масив, всеки елемент от който съдържа резултата от изчисляването на израз за групиране по указаното поле.
Създателят на оформление, когато генерира оформление, преобразува параметрите на функцията в термини на полета за оформление на оформление на данни. Например полето Account ще бъде преобразувано в DataSet.Account.
Конструкторът на оформление, когато генерира изрази за изхода на потребителско поле, чийто израз съдържа само функцията CalculateArrayWithGroupArray(), генерира изходния израз, така че изходната информация да е подредена. Например за персонализирано поле с израза:

CalculateExpressionWithGroupArray("Сума(СумаОборот)", "Контрагент")
Създателят на оформление ще генерира следния израз за изход:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.SumTurnover)),Sum(DataSet.SumTurnover)",,"DataSet.Account"),"2")))

Параметри:

Тип: низ. Изразът, който трябва да се оцени. Низ, например Amount(AmountTurnover).

Тип: низ. Изрази на групиращи полета – изрази на групиращи полета, разделени със запетаи. Например Изпълнител, Страна.

Тип: низ. Израз, описващ селекцията, приложена към подробни записи. Изразът не поддържа използването на агрегатни функции. Например DeletionFlag = False.

Тип: низ. Израз, описващ селекцията, приложена към групови записи. Например Сума(СумаОборот) > &Параметър1.
Пример:

Maximum(CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Counterparty"));

Подробно описание на синтаксиса на функцията можете да намерите на http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Сега, за изчислението, дублираме полето „Поръчка“ с различни стойности „Изчисляване по...“, използвайки следните изрази, имайте предвид, че във всяко по-високо ниво се използват стойностите на нивата под групировките .

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

В светлината на предстоящото издание на 8.2.14, ще се опитам да опиша някои нови функции на системата за съставяне на данни.

Отворете диаграмата на оформлението на данните, за предпочитане във външен отчет, за да улесните редактирането.

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

1. Настройте заявка в системата за контрол на достъп.

2. Настройте изчислителни полета в системата за контрол на достъп

3. Конфигурирайте оформлението на данните в раздела с настройки

4. Стартирайте 1C Enterprise 8.2.14. Отворете отчета. Формираме, получаваме.

Описание на самите нови функции:

1. CurrentDate()

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

2. COMPUTEEXPRESSION()

Синтаксис:

CalculateExpression(,)

Описание:

Функцията е предназначена да оценява израз в контекста на някакво групиране.

Функцията взема предвид избора на групи, но не взема под внимание йерархичния избор.

Функцията не може да бъде приложена към групиране в груповия избор на това групиране. Например при избора на групиране на номенклатурата не можете да използвате израза CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Но такъв израз може да се използва при йерархичен подбор.

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

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

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

Опции

Тип: Линия. Изразът, който трябва да се оцени.

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

Например:

Sum(Sales.SumTurnover)/Calculate("Sum(Sales.SumTurnover)", "Total")

IN в този примеррезултатът ще бъде съотношението на сумата по поле Продажби.СумаОборотгрупиране на записи до сумата от едно и също поле в цялото оформление;

Тип: Линия. Параметърът може да приема следните стойности:

· Обща сума— изразът ще бъде изчислен за всички групиращи записи.

· Йерархия— изразът ще бъде оценен за родителския йерархичен запис, ако има такъв, и за цялото групиране, ако няма родителски йерархичен запис.

· Групиране— изразът ще бъде оценен за текущия запис на групиране на група.

· ГрупиранеНеРесурс— когато се изчислява функция за групов запис по ресурси, изразът ще бъде изчислен за първия групов запис от първоначалното групиране.

При изчисляване на функция CalculateExpression() със смисъл ГрупиранеНеРесурсза групови записи, които не са групирани по ресурси, функцията се изчислява по същия начин, както би била изчислена, ако стойността на параметъра е равна на стойността Групиране.

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

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

· Първо

· Последен (последен)

· Предишен

· Следващ (Следващ)

· Текущ

· Ограничаваща стойност(Гранична стойност) Ограничаваща стойност

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

· Първо. Необходимо е да се получи първият групиращ запис. След думата в скоби можете да посочите израз, резултатът от който ще се използва като отместване от началото на групирането. Получената стойност трябва да е цяло число, по-голямо от нула. Например First(3) - получаване на третия запис от началото на групирането.

Ако първият запис е извън групирането, тогава се счита, че няма записи. Например, ако има 3 записа и искате да получите First(4), тогава се счита, че няма записи.

· Последен (последен). Трябва да получите последния групиращ запис. След думата в скоби можете да посочите израз, резултатът от който ще се използва като отместване от края на групирането. Получената стойност трябва да е цяло число, по-голямо от нула. Например Last(3) - получаване на третия запис от края на групата.

Ако последно влизаненадхвърля групирането, счита се, че няма записи. Например, ако има 3 записа и искате да получите Last(4), тогава се счита, че няма записи.

· Предишен. Трябва да получите предишния запис на групиране. След думата в скоби можете да зададете израз, резултатът от който ще се използва като отместване обратно от текущия групиращ запис. Например Previous(2) - получаване на предишния от предишния запис.

Ако предишният запис надхвърля групирането (например за втория групиращ запис трябва да получите Previous(3)), тогава се получава първият групиращ запис.

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

· Следващ (Следващ). Трябва да получите следващия групиращ запис. След думата в скоби можете да посочите израз, резултатът от който ще се използва като отместване напред спрямо текущия запис в групирането. Например Next(2) - получаване на next от следващия запис.

Ако следващият запис надхвърли групирането, тогава се счита, че няма записи. Например, ако има 3 записа и третият запис получава Next(), тогава се счита, че няма записи.

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

· Текущ. Трябва да получите текущия запис.

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

· Ограничаваща стойност(Гранична стойност). Необходимостта от получаване на запис с определената стойност. След словото Ограничаваща стойноств скоби трябва да посочите израза, с чиято стойност искате да започнете фрагмента, първото поле за подреждане.

Първият запис, чиято стойност на полето за подреждане е по-голяма или равна на указаната стойност, ще бъде върнат като запис. Например, ако полето Период се използва като поле за поръчка и има стойности 01/01/2010, 02/01/2010, 03/01/2010 и искате да получите LimitingValue(DateTime(2010, 1, 15)), тогава ще бъде получен запис с дата 01.02.2010 г.

Тип: Линия. Изброява изрази, разделени със запетаи, които описват правилата за подреждане. Ако не е посочено, тогава подреждането се извършва по същия начин, както за групирането, за което се оценява изразът. След всеки израз можете да посочите ключова дума Възраст(за подреждане във възходящ ред), Спускане(за подреждане в низходящ ред) и Автоматична поръчка(за да подредите референтните полета по полетата, по които искате да подредите референтния обект). Слово Автоматична поръчкаможе да се използва като с думата Възраст, така и със словото Спускане.

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

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

· Отделнопоказва, че последователност от подредени записи се използва за определяне на предишния и следващия запис. Стойност по подразбиране.

· Заеднопоказва, че предишният и следващият запис се определят въз основа на стойностите на подреждащите изрази.

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

Дата Пълно име Значение
1 01 януари 2001 г

Иванов М.

10
2 02 януари 2001 г Петров С. 20
3 03 януари 2001 г Сидоров Р. 30
4 04 януари 2001 г Петров С. 40

Отделно, това:

§ предишният запис към запис 3 ще бъде запис 2.

Актуално, Актуално(съответно параметри Започнетеи Край), тогава за запис 2 този фрагмент ще се състои от един запис 2. Изразът ще бъде равен на 20.

Ако стойността на параметъра е Заедно, това:

§ предишният запис към запис 3 ще бъде запис 1.

§ ако изчислителният фрагмент е дефиниран като Актуално, Актуално(съответно параметри Започнетеи Край), тогава за запис 2 този фрагмент ще се състои от записи 2 и 3. Израз CalculateExpression("Sum(Value)", Current, Current)ще бъде равно на 50.

Когато зададете стойност на параметър, равна на Заедно, в параметри Започнетеи Крайне можете да посочите отместване за позиции Първи, Последен, Предишен, Следващ.

CalculateExpression("Sum(SumTurnover)", "First", "Current")

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

CalculateExpression("Оценка", "Предишен")

списък новфункции:

CalculateExpressionWithGroupArray(,) -

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

CalculateExpressionWithGroupValueTable(,) -

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

ValueFilled() - Връща True, ако стойността е различна от стойността от този типпо подразбиране, различно от NULL, различно от празна препратка, различно от Недефинирано. Булевите стойности се проверяват за NULL стойности. Низовете се проверяват за липса на знаци, които не са интервали

формат(, ) - Получаване на форматиран низ от предадената стойност. Форматиращият низ се задава според форматиращ низсистеми "1C:Enterprise".

Подниз(, , ) – Тази функция е предназначена да извлича подниз от низ.

Дължина на линията() - Функцията е предназначена да определя дължината на низ. Параметърът е низов израз

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