1s SKD не показва общи резултати. Примери за използване на функцията scd - изчисляване на израз. Създаване на настройки за представяне на отчет

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

Ето примери за такива задачи:

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

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

Днес ще разгледаме използването на някои функции на ACS, като използваме конкретни примери.

Видео 1. Как да получа сумата в отчета като обща сума?

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

Всъщност този проблем може да бъде разрешен с помощта на заявка (без ACS функции), но има 2 проблема:

  • Сама по себе си такава заявка ще бъде сложна - ще отнеме време за разработването и отстраняването на грешки.
  • Такава заявка ще натовари сериозно системата - и колкото повече данни, толкова по-бавно ще работи.

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

Видео 2. Как да получа стойността от предишния ред на отчета?

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

Ето няколко примера, когато това може да е полезно:

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

Такива проблеми също са трудоемки за решаване с помощта на заявка, но в ACS това се прави в един ред:

Видео 3. Как да сравним общата сума за текущия ред с референтната стойност?

Пример, когато тази функционалност може да бъде полезна:

  • Системата поддържа отчет на продажбите от мениджъри
  • Ръководителят на отдела извършва лични продажби заедно с мениджърите
  • Изисква се извеждане на отчет за продажбите по мениджър
  • Отчетът също трябва да показва делтата спрямо обема на продажбите на ръководителя на отдела.

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

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

И отново, с помощта на SKD, този проблем се решава в един ред:

Видео 4. Получаване на кумулативен сбор в кръстосана таблица

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

Ще покажем как да контролираме посоката на изчисляване на общите суми с помощта на един ACS параметър:

Видео 5. Извеждане на табличната част в отделна отчетна клетка

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

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

Да разгледаме един пример:

Няколко единици стоки се изпращат до клиента с различни отстъпки. Трябва да покажете стойностите на отстъпката за всеки продукт в отчет и да изчислите средната отстъпка. Да създадем отчет за системата за контрол на достъпа.
За всички полета, за които трябва да покажем суми, ще зададем израз (метод) за тяхното изчисляване в раздела „Ресурси“. За полето "Отстъпка" задайте метода на изчисление като "Средно".

Извеждаме отчета:

Както можете да видите, общата сума за полето „Отстъпка“ се изчислява като средно аритметично от стойностите на полето, т.е. сумата от всички стойности, разделена на броя на стойностите. Но защото Тъй като обемите на стоките, изпратени с различни отстъпки, са различни, средната отстъпка може да се изчисли по друг начин: например като съотношение на общото количество изпратени стоки, като се вземе предвид отстъпката, към общото количество изпратени стоки. Но тук възниква въпрос: ако можете да напишете формула за изчисляване на стойностите на полетата на подробните записи в ACS, тогава сумите се изчисляват автоматично според израза, посочен в раздела „Ресурси“, и там, като видяхме по-рано, „Средно“ се изчислява като средната аритметична стойност на показаните стойности, като В този случай трябва ли да изчисля общата сума в тази колона, като използвам собствената си формула?
Всъщност не е трудно. За да направим това, ще коригираме нашия отчет, като добавим към него необходимите полета, които ще участват в изчислението, в нашия случай това са „AmountWithDiscount“ и „AmountAtPrice“.

За да „обучим“ ACS да показва нашите резултати, предприемаме следните стъпки:
1. в раздела „Настройки“ задайте име на групирането „“, например „ResultSKD“, за да направите това, извикайте контекстното меню за групирането и щракнете върху „задайте име“;

2. в раздела „Оформления“ добавете „оформление на заглавката на групирането“, където избираме предварително зададеното име „TotalSKD“;

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

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

За да оставите изхода само на общия си ред, трябва в раздела „Настройки“ в секцията „Други настройки“ на изхода на оформлението да деактивирате изхода за „Хоризонтално общо общо оформление“ и „Вертикално общо общо оформление“

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


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

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

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

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

Настроики:

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

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

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

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

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

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

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

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

  1. кумулативен сбор в групирането;
  2. кумулативна сума в кръстосана таблица;
  3. получаване на предишната стойност;
  4. PM изход в един ред.

1. Получаване на показател на база начисляване

Нека получим количеството стоки като кумулативна сума на ниво групиране. За да направите това, създайте изчисляемо поле (вижте Фигура 1).
В раздела "Ресурси" задайте функцията за изчисляемото поле:
CalculateExpression("Sum(QuantityTurnover)", "First", "Current")
който ще сумира броя на продуктите от първия запис до текущия (вижте Фигура 2).

Ако кумулативното общо количество на артикул трябва да бъде получено на ниво подробни записи, тогава задаваме функцията CalculateExpression за изчисляемото поле в раздела „Изчислени полета“ (вижте Фигура 3).
В зависимост от нивото на получаване на кумулативната сума създаваме групиране (виж Фигура 4): на ниво ресурс - групиране по стоки, на ниво дистанционно управление - групиране на подробни записи.
Фигура 4. Групиране на отчети с кумулативни суми

2. Получаване на стойността на индикатора от предишния ред

Нека вземем обменния курс за датата и предходната дата. За да направите това, създайте изчисляемо поле и напишете следния израз в полето за израз (вижте Фигура 5):
CalculateExpression("Оценка", "Предишен", "Предишен")
който ще вземе предишната стойност на обменния курс за текущия ред, последният параметър на функцията ограничава получаването на данни.
Тъй като работим на ниво подробни записи, веднага отиваме в раздела „Настройки“ и създаваме групиране - подробни записи.

3. Получаване на индикатор като кумулативна сума в кръстосана таблица

Нека да получим количеството стоки на база начисляване по периоди. За да направите това, създайте изчисляемо поле (вижте Фигура 1). В раздела „Ресурси“ указваме следния израз за изчисляемото поле (вижте Фигура 6):
CalculateExpression("Sum(QuantityTurnover)", "Период", "Първи", "Текущ")
който на ниво групиране ще изчисли количеството стоки в интервала от първия ред до текущия в контекста на периода за всеки артикул.
В раздела „Настройки“ създайте таблица с групиране по елемент в ред и групиране по период в колона (вижте Фигура 7).

4. Извеждане на таблични данни в един ред

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

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

В самата заявка ние не конфигурираме общите суми, а отиваме в раздела „Ресурси“ на състава на данните. На ниво схема на съставяне на данни ние определят ресурси. Това са полетата, които трябва да се преброят на ниво групиране. Щракнете върху бутона “>>” и системата сама ще прехвърли всички цифрови полета и ще ги определи като ресурси.

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

Нека създадем стандартна настройка за съставяне на данни.
Кликнете върху бутона „Отваряне на дизайнера на настройки“.

Да изберем типа отчет - списък. Щракнете върху бутона "Напред".

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

Нека да изберем всички полета и да преместим полето за контрагента на горната позиция. Щракнете върху бутона „OK“.

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

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

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

Настройване на ресурси в схемата за съставяне на данни 1C

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

Тук в полето „Израз“ можем да напишем собствен израз.

В полето "Израз" имаме достъп и до функциите на общите модули.

Освен това можете да посочите в полето „Изчисли по...“ по кои групи да се изчислява ресурсът. Ако полето „Изчисли по...” не е попълнено, тогава крайната стойност на ресурса ще бъде изчислена на всички нива на групиране, които са дефинирани в настройките на опцията отчет. В нашия случай трябва да попълним полето „Изчисли по...“ на ресурса „Количество“, тъй като можем да продаваме стоки с различни мерни единици. Например: масло в литри и колела на парчета. Не е ли вярно, че би било нелогично количествата на тези стоки да се сумират? Следователно трябва да оставим сумирането на количеството на ниво позиция и на ниво контрагент
Нека премахнем сумирането.

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

Възможности при описване на ресурси в схемата за съставяне на данни 1C

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

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

Ако генерираме отчет, ще видим, че за контрагента „Дерия” минималната покупка е пет броя от продуктовата гама „Самозалепваща хартия”.

  • В полето „Израз“ освен да напишете формула, можете да използвате специална функция за съставяне на данни, наречена „Изчисляване“. Тази функция ви позволява да изчислите някаква крайна стойност, като използвате определена формула. Например, за всеки контрагент е необходимо да се знае процентът на покупките в натурални единици спрямо общия обем. Но как да получите общия обем на покупките по количество? За да направите това, използвайте функцията "Изчисли" и напишете следния израз в полето "Израз":
Sum(Quantity)/Calculate("Sum(Quantity)", "TotalTotal")*100

Както се вижда, всички параметри на функцията "Calculate" са низове. За да може полето за количество да се показва красиво в отчета, ще го конфигурираме в раздела „Набори от данни“. В реда за количество ще намерим полето „Опции за редактиране“. Нека отворим диалоговия прозорец, намерете реда „Формат“ и редактирайте реда за формат в него, като зададете стойността „Точност“ на две в раздела „Число“.

Нека изготвим отчета и да видим резултата от изчисляването на процента покупки за контрагента „AUPP KOS LLP“ спрямо
общ обем:


В края на статията искам да ви препоръчам един безплатен от Анатолий Сотников. Това е курс от опитен програмист. Той ще ви покаже на отделна основа как да създавате отчети в системата за контрол на достъпа. Просто трябва да слушате внимателно и да запомните! Ще получите отговори на следните въпроси:
  • Как да създадете прост отчет със списък?
  • За какво служат колоните Поле, Път и Заглавие в раздела „Полета“?
  • Какви са ограниченията за полетата за оформление?
  • Как да конфигурирате правилно ролите?
  • Какви са ролите на полетата за оформление?
  • Къде мога да намеря раздела за съставяне на данни в заявка?
  • Как да конфигурирате параметрите в системата за контрол на достъпа?
  • Става още по-интересно...
Може би не трябва да се опитвате сами да сърфирате в интернет в търсене на необходимата информация? Освен това всичко е готово за употреба. Просто започнете! Всички подробности за това какво има в безплатните видео уроци

Ето един от уроците за маркиране на състава на данните в заявка:

КАТЕГОРИИ

ПОПУЛЯРНИ СТАТИИ

2024 “kuroku.ru” - Тор и подхранване. Зеленчуци в оранжерии. Строителство. Болести и неприятели