Пресметај го изразот skd. Корисни примери на шема за состав на податоци

Пример како можете да ги добиете полињата од претходниот запис во групација и не само. Практично за пресметување на разликата помеѓу вредностите на претходната и сегашната цена.

Суштината на решението е да се користи функцијата на јазикот на изразување SKD Пресметајте израз ()во додаденото пресметано поле кое го повикав Делта. Функцијата ги има следните параметри:

Опции:

  • Изразување. Тип на Линија;
  • групирање. Тип на Линија;
  • Тип на пресметка. Тип на Линија;
  • Започнете
  • Крај. Низа што содржи една од опциите;
  • Сортирање. Линија;
  • Хиерархиски сорт;
  • Ракување со нарачка со исти вредности

Ние сме заинтересирани за параметрите 4 и 5 ( Започнетеи Крај). Изразот ќе изгледа вака:

isNULL((ПРЕСМЕТАЈ ИЗРАЗ ("Цена", "Претходна", "Претходна") - Цена), 0)

Овде ја пресметуваме претходната вредност на полето Ценаи од него одземете ја тековната вредност на полето Цена. Природно, за првиот запис, претходната вредност нема да се пресмета и резултатот од одземањето со вредноста на тековното поле ќе биде Null, така што сè е „чисто“, ја користиме функцијата isNULL (isNull) за да го претвориме Null во нула. .

Ставете табела со вредности во ќелија на документ со табела

Понекогаш е неопходно да се постави табеларниот дел од документот или податоците што се редовите на табеларниот дел во една ќелија од документот со табеларни пресметки, на пример вака:

За да го направите ова, треба да ја користите функцијата: ComputeExpressionGroupedValueTable() , кој има параметри:

  • Изразувањее изразот што треба да се оценува. Тип String. Линијата може да содржи повеќе изрази одделени со запирки. Секој израз може да биде проследен со изборниот клучен збор AS и името на колоната на табелата со вредности. На пример: „Изведувач, износ (износ на промет) како обем на продажба“.
  • Групирање на изрази на полиња- групирање изрази на полиња одделени со запирки. На пример, „Изведувач, партија“;
  • Избор на записие израз кој се применува на детални записи. На пример, „DeletionMark = False“;
  • Избор на групирање- изборот се применува на групните записи. На пример: „Amount(AmountTurnover) > &Parameter1“.

За да го направите ова, создаваме пресметано поле во кое ќе ја прикажеме добиената табела, а потоа го ставаме ова поле во ресурсите со изразот CalculateExpressionGroupedValueTable („Номенклатура, количина“)

Колони со броеви

Пример за тоа како колоните може да се нумерираат во SKD.

Суштината на решението:

  1. Креираме барање во кое ги нумерираме редовите на резултатот на барањето во рамките на одредена подреденост
  2. Прикажување на резултатот во вкрстена картичка

ВАЖНО!

Откако линиите во барањето се нумерирани, тие мора да се стават во BT и потоа да се изберат од овој BT, инаку ACS ќе направи сè на свој начин и погрешните полиња ќе паднат во групирањето

За да го добиете резултатот, треба да креирате пресметано поле со изразот „Вработен“ + Формат(NPP, „FH=3; FH=")и пресметаното име на полето, во кое е лесно да се смести Вработениот, потоа го ставаме полето Целосно имедо ресурс со израз Максимум (полно име)или едноставно Целосно име- нема разлика

Наизменични групи со истакнување во боја

Некаде на Mista или на истиот 1Cskd.ru имаше прашање како да се истакнат линиите што формираат групи со различни бои

Ова се постигнува со создавање пресметано поле:

Пресметајте го изразот („Количина (различни ставки)“, „Прва“, „Претходна“, „Заедно“) % 2

Го броиме бројот на различни „групи“ на полето Номенклатура, групирањата може да се бројат со поставување на вредноста на параметарот ProcessingSameOrderValues ​​= „Заедно“

Остатокот од поделбата на два ќе стане јасно дали оваа група е рамна или не, соодветно, создаваме условен дизајн елемент со условот Поле = 1

Останувајќи во контекст на карактеристиките. Карактеристики по линија со количина во загради

На истиот 1CSkd.ru имаше тема во која авторот бара помош за правење извештај, каде што во една од колоните е потребна листа на карактеристики (големини на чевли) со нивниот број. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Ова се постигнува со користење на истата функција Пресметајте ExpressionWith GroupingArray()

Во овој пример, функцијата изгледа вака:

Пресметајте израз со GroupingArray ("Карактеристика на номенклатурата. Опис +
""("" + Формат(Број на преостанатиот дел,""CH=0"") + "")""",
,
"ValueFilled(FeatureNomenclature)")

Третиот параметар е избор, тој ви овозможува да избегнете презентација на празна низа "" - соодветно, нема да видите остатоци без карактеристики

Спојувајте две табели со копче Низа = Број

Или варијанта како да конвертирате вредност од типот број во низа во SKD

Периодично на форумите гледам тема како „Како да конвертирате број во стринг во барањето“. Ако пишувате извештај за ACS и треба да извршите таква трансформација, тогаш не треба да пишувате никакви трикови во барањето.

За да се конвертира број во низа, доволно е само да се користи јазичната функција на изразување на системот за составување податоци SKD Линија ()или Формат()

За да конвертирате низа во број, можете да ја користите функцијата Пресметај()

Подреди по низа како по број

Во мојот пример, јас едноставно ќе го прикажам директориумот на вработените, подредувајќи го по персонален број (шифра)

Резултатот ќе изгледа вака:

Ова се постигнува со креирање на пресметано поле и користење на функцијата јазик за изразување SKD Пресметај()

  1. Направете пресметано поле TabNumberNumber, со изразот: Пресметајте (Employee.Code)
  2. Подреди по ова поле

всушност, ова е конверзија на низа во број користејќи ја функцијата на јазикот на изразување SKD Пресметај()

Исто така, ве советувам да погледнете во „Видео упатства на skd“ (лесно се пребаруваат во Google)

Кога развивам, користам конвертирано .

Во светлината на претстојното издание на 8.2.14, ќе се обидам да опишам некои од новите карактеристики на системот за составување податоци.

Отворете ја шемата за состав на податоци, по можност во надворешен извештај, за да го олесните уредувањето.

Додаваме множество податоци за пребарување и запишуваме, рачно или користејќи го создавачот на барања, наједноставното барање:

1. Поставете барање во ACS.

2. Поставете пресметани полиња во ACS

3. Ние го конфигурираме распоредот на податоци на табулаторот за поставки

4. Го лансираме 1C Enterprise 8.2.14. Го отвораме извештајот. Формираме, примаме.

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

1. Тековниот датум()

Го враќа датумот на системот. При поставување на распоредот на изгледот, во сите изрази кои се присутни во изгледот, функцијата CurrentDate() се заменува со вредноста на тековниот датум.

2. ПРЕСМЕТУВАЧКИ ИЗРАЗ()

Синтакса:

Пресметај израз(,)

Опис:

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

Функцијата го зема предвид изборот на групирања, но не ги зема предвид хиерархиските селекции.

Функцијата не може да се примени на групација во групниот избор на таа групација. На пример, при изборот на групацијата Номенклатура, не можете да го користите изразот Пресметајте го изразот („Сум (Збир на промет)“, „Вкупно Вкупно“) > 1000. Но, таков израз може да се користи при хиерархиска селекција.

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

При пресметување на интервални изрази за глобален збир (параметарот Grouping е поставен на GrandTotal ), се смета дека нема записи за пресметување детални податоци и пресметување на збирни функции.

Изградувач на распоред при генерирање на израз на функција Пресметајте израз, ако изразот за подредување содржи полиња што не можат да се користат во групирањето, ја заменува функцијата Пресметајте изразна НУЛА.

Опции

Тип на: Линија. Изразот што треба да се оцени.

Тип на: Линија. Го содржи името на групацијата во чиј контекст треба да се оценува изразот. Ако се користи празна низа како име на групирање, пресметката ќе се изврши во контекст на тековното групирање. Ако стрингот GrandTotal се користи како име на групирање, пресметката ќе се изврши во контекст на вкупната сума. Во спротивно, пресметката ќе се изврши во контекст на родителската групација со тоа име.

На пример:

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

Во овој пример, резултатот ќе биде односот на износот по полиња Продажба.Износ Прометгрупирање записи во збирот на истото поле во целиот распоред;

Тип на: Линија. Параметарот може да ги земе следните вредности:

· Севкупниот резултат— изразот ќе се оценува за сите записи за групирање.

· Хиерархија— изразот ќе се евалуира за матичниот хиерархиски запис, ако постои, и за целата групација, ако нема хиерархиски запис од родител.

· групирање— изразот ќе биде оценет за тековниот групен запис на групирањето.

· GroupingNotResource— при пресметување на функција за групен запис по ресурси, изразот ќе се пресметува за првиот групен запис од почетното групирање.

При пресметување на функцијата Пресметајте израз () со значење GroupingNotResourceза групните записи кои не се групирања по ресурси, функцијата се пресметува на ист начин како што би се пресметала ако вредноста на параметарот е еднаква на вредноста групирање.

Изградувачот на распоред на распоред на композиции на податоци, при генерирање на распоредот на составот на податоци, при прикажување на полето за ресурси на кое се врши групирањето, става израз во изгледот што се пресметува со помош на функцијата Пресметајте израз () , наведувајќи го параметарот GroupingNotResource. За други ресурси групирани по ресурси, се поставуваат редовни изрази на ресурси.

Тип на: Линија. Одредува кој запис да започне фрагментот во кој ќе се пресметаат збирните функции на изразот и од кој запис да се добијат вредностите на полињата надвор од збирните функции. Вредноста може да биде една од следниве:

· Прво (прво)

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

· Претходна (Претходна)

· Следно (Следно)

· Тековно (Тековно)

· LimitingValue(BoundaryValue) LimitingValue

Тип на: Линија. Покажува до кој запис да се продолжи фрагментот во кој се пресметуваат збирните функции на изразот. Вредноста може да биде една од следниве:

· Прво (прво). Треба да го добиете првиот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување од почетокот на групирањето. Добиената вредност мора да биде цел број поголем од нула. На пример, First(3) - добивање на третиот рекорд од почетокот на групирањето.

Ако првиот запис е надвор од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи, а сакате да добиете First(4), тогаш се смета дека нема записи.

· Последно (последно). Треба да го добиете најновиот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување од крајот на групирањето. Добиената вредност мора да биде цел број поголем од нула. На пример, Last(3) - добијте го третиот запис од крајот на групирањето.

Ако последниот запис е надвор од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи, а сакате да го добиете Last(4) , тогаш се смета дека нема записи.

· Претходна (Претходна). Треба да го добиете претходниот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување назад од тековниот запис за групирање. На пример, Previous(2) - земете го претходниот од претходниот рекорд.

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

При добивање на претходниот рекорд за збирниот збир, се смета дека е добиен првиот рекорд.

· Следно (Следно). Треба да го добиете следниот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување напред од тековниот запис за групирање. На пример, Next(2) - добијте го следното од следниот запис.

Ако следниот рекорд оди подалеку од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи, а третиот запис добива Next(), тогаш се смета дека нема записи.

Кога ќе се прими следниот запис за вкупниот број на групирање, се смета дека нема запис.

· Тековно (Тековно). Треба да го добиете тековниот запис.

Кога се превзема за збир на групирање, се враќа првиот запис.

· LimitingValue(BoundaryValue). Потребата да се добие записот според одредената вредност. По зборот LimitingValueво загради треба да го наведете изразот со чија вредност сакате да го започнете фрагментот, првото поле за подредување.

Записот ќе биде првиот запис чија вредност на полето за нарачка е поголема или еднаква на наведената вредност. На пример, ако го користите полето Период како поле за нарачка и ги има вредностите 01/01/2010 , 02/01/2010 , 03/01/2010 , и сакате да добиете Гранична вредност (Датум-Време (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("Збир(вредност)", Тековен, Тековен)ќе биде еднакво на 50.

При одредување на вредност на параметар еднаква на Заедно, во параметри Започнетеи Крајне можете да наведете поместување за позициите Прво, Последно, Претходно, Следно.

CalculateExpression („Износ (AmountTurnover)“, „First“, „Current“)

Ако сакате да ја добиете вредноста за групирање во претходната линија, можете да го користите следниов израз:

CalculateExpression („Курс“, „Претходно“)

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

ComputeExpressionGroupedArray(,) -

Функцијата враќа низа, чиј секој елемент го содржи резултатот од евалуацијата на изразот за групирање според наведеното поле.

ComputeExpressionGroupedValueTable(,) -

Функцијата враќа табела со вредности, од која секој ред содржи резултат од евалуација на изразите за групирање според наведеното поле

Пополнета вредност() - Враќа True ако вредноста е различна од стандардната вредност од овој тип, различна од NULL , различна од нула референца, различна од Undefined . Буловите вредности се тестираат против NULL. Низите се проверуваат за знаци без празно место.

Формат(, ) - Земете ја форматираната низа од положената вредност. Низата за формат е поставена во согласност со низата за формат на системот 1C: Enterprise.

Подстринг(, , ) - Оваа функција е дизајнирана да избира подниза од низа.

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

Линија() - Ако низата се пренесе како параметар, тогаш функцијата враќа низа што содржи стринг претстави на сите елементи од низата, одделени со знаците „;“. Ако табела со вредности се пренесе како параметар, тогаш функцијата враќа низа што содржи низа претстави на сите редови од табелата со вредности, а претставите на ќелиите на секоја линија се одделени со знаците „;“ и линиите се одделени со знакот за нова линија. Ако некој елемент има празна претстава на низа, тогаш се прикажува низа наместо нејзината репрезентација.

  • 1C-Битрикс
  • Една од најважните области на деловниот софтвер е известувањето. Колку е лесно да се прилагоди постоечкиот извештај на променливите потреби на бизнисот (и законодавството) или да се направи нов, може да зависи (и не во фигуративна смисла!) Судбината на бизнисот, без разлика дали е извештај за даночната служба или дијаграм на зависноста на побарувачката на стоки од сезоната и други фактори . Моќен и флексибилен систем за известување кој го олеснува извлекувањето на вистинските податоци од системот, ги прикажува во разбирлива форма, овозможувајќи му на крајниот корисник да го реконфигурира стандардниот извештај за да ги види податоците во ново светло - ова е идеалот што секој деловниот систем треба да се стреми кон.

    Во платформата 1C: Enterprise, механизам наречен Data Composition System (накратко ACS) е одговорен за генерирање извештаи. Во оваа статија ќе се обидеме да дадеме краток опис на идејата и архитектурата на механизмот ACS и неговите можности.


    ACS е механизам заснован на декларативен опис на извештаите. ACS е дизајниран да создава извештаи и прикажува информации кои имаат сложена структура. Патем, покрај развивањето извештаи, механизмот ACS се користи и во 1C: Enterprise во динамична листа, алатка за прикажување информации за список со богата функционалност (прикажување рамни и хиерархиски списоци, условно форматирање на редови, групирање итн.) .

    Малку историја

    Во првата верзија на платформата 1C: Enterprise 8, верзија 8.0, беа направени извештаи на следниов начин:
    1. Едно или повеќе прашања беа напишани на јазикот на барањата 1C (јазик сличен на SQL, повеќе за тоа подолу).
    2. Напишан е код кој ги пренесува резултатите од извршените барања во документ или графикон за табеларни пресметки. Кодот може да изврши и работа што не може да се изврши во барање - на пример, тој ги пресметуваше вредностите користејќи го вградениот јазик 1C.
    Пристапот е јасен, но не и најзгодно - има минимум визуелни поставки, сè треба да се програмира од рака на рака. И еден од адутите во тоа време на целосно новата платформа 1C:Enterprise 8 беше минимизирањето на количината на код во апликациското решение што треба да се напише рачно, особено поради визуелниот дизајн. Би било логично да се следи истиот пат во механизмот за известување. Ова беше направено со развивање на нов механизам - систем за составување податоци.

    Една од идеите што ја формираа основата на ACS беше флексибилноста и прилагодувањето на извештаите, кои се достапни и за развивачот и за крајниот корисник. Идеално, би сакале да му дадеме на крајниот корисник пристап до истиот сет на алатки за дизајнирање извештаи како и развивачот. Би било логично да се направи единствен сет на алатки достапни за секого. Па, бидејќи алатките вклучуваат учество на крајниот корисник, тоа значи дека употребата на програмирање во нив треба да се отстрани на минимум (најдобро од сè, целосно да се елиминира), а визуелните поставки да се користат максимално.

    Формулирање на проблемот

    Задачата пред развојниот тим беше оваа - да се направи систем за известување кој не се базира на алгоритамски (т.е. преку пишување код), туку на декларативен пристап за креирање извештаи. И ние веруваме дека проблемот е успешно решен. Според нашето искуство, околу 80% од потребното известување може да се имплементира со помош на ACS без ниту една линија код (освен за пишување формули за пресметаните полиња), во најголем дел - преку визуелни поставки.
    Развојот на првата верзија на ACS траеше околу 5 човечки години.

    Два јазика

    Два јазици се вклучени во креирањето извештаи. Еден од нив е јазикот за пребарување што се користи за преземање на податоците. Вториот е јазикот на изразување на составот на податоци, дизајниран да пишува изрази што се користат во различни делови на системот, на пример, во поставките за состав на податоци, за да ги опише сопствените изрази на полиња.

    Јазик на барање

    Јазикот за пребарување е базиран на SQL и лесно го совладаат оние кои го знаат SQL. Барај пример:

    Лесно е да се видат аналози на стандардните секции за пребарување на SQL - ИЗБИРА, ОД, ГРУПА ПО, НАРАЧАЈ ПО.

    Во исто време, јазикот за прашања содржи значителен број наставки фокусирани на одразување на спецификите на финансиските и економските задачи и на максималното намалување на напорите за развој на применети решенија:

    • Референцирање на полиња преку точка. Ако полињата на табелата имаат референтен тип (тие складираат врски до објекти од друга табела), развивачот може да се повика на нив во текстот на барањето преку „.“, додека бројот на нивоа на вгнездување на таквите врски не е ограничен со систем (на пример, Нарачка на клиентите. Договор. Организација. Телефон).
    • Повеќедимензионално и повеќестепено формирање на резултати. Вкупните и подвкупните збирки се формираат земајќи ги предвид групирањето и хиерархијата, нивоата може да се заобиколат во произволен редослед со сумирање на подзбирки, се обезбедува правилна конструкција на збирките по временски димензии.
    • Поддршка за виртуелни табели. Виртуелните табели обезбедени од системот ви овозможуваат да добивате речиси готови податоци за повеќето апликативни задачи без потреба да пишувате сложени прашања. Така, виртуелната табела може да обезбеди податоци за билансот на стоки во контекст на периоди во одреден временски период. Во исто време, виртуелните табели максимално ги користат зачуваните информации, на пример, претходно пресметаните збирки итн.
    • Привремени маси. Јазикот за пребарување ви овозможува да користите привремени табели во барањата. Со нивна помош, можете да ги подобрите перформансите на барањата, во некои случаи да го намалите бројот на заклучувања и да го олесните читањето на текстот на барањето.
    • сериски барања. За поудобна работа со привремени табели, јазикот на барањата поддржува работа со сериски барања - така, создавањето на привремена табела и неговата употреба се ставаат во едно барање. Сериско барање е низа од барања одделени со точка-запирка („;“). Барањата во серијата се извршуваат едно по друго. Резултатот од извршувањето на сериско барање, во зависност од користениот метод, ќе биде или резултатот вратен од последното барање од серијата или низа од резултатите од сите сериски барања по редоследот што ги следат барањата во серијата.
    • Добивање прегледи на референтни полиња. Секоја табела со објекти (во која е зачуван директориум или документ) има виртуелно поле - „Претставување“. Ова поле содржи текстуално претставување на објектот и ја олеснува работата на известувачот. Значи, за документ, ова поле ги содржи сите клучни информации - името на типот на документот, неговиот број и датум (на пример, „Продажба 000000003 од 07.06.2017 17:49:14“), зачувувајќи го развивачот од пишување пресметано поле.
    • и сл.
    Моторот за пребарување автоматски го менува барањето, земајќи ги предвид улогите на корисникот во чие име се извршува барањето (т.е., корисникот ќе ги види само податоците што има право да ги види) и функционалните опции (т.е. во согласност со оној што е конфигуриран во функционалноста на апликациското решение).

    Исто така, постојат специјални екстензии за јазик за пребарување за SKD. Проширувањето се врши со помош на специјални инструкции за синтакса затворени во кадрави загради и ставени директно во текстот на барањето. Со помош на екстензии, развивачот одредува кои операции ќе може да ги изврши крајниот корисник со прилагодување на извештајот.

    На пример:

    • ИЗБЕРЕТЕ. Оваа реченица ги опишува полињата што корисникот ќе може да ги избере за излез. По овој клучен збор, псевдонимите на полињата од главната листа за избор на барања, кои ќе бидат достапни за прилагодување, се наведени одделени со запирки. Пример: (SELECT номенклатура, магацин)
    • КАДЕ. Ги опишува полињата на кои корисникот може да примени избор. Овој предлог користи полиња од табела. Не е дозволено користење на псевдоними на полето од избраната листа. Секој синдикален дел може да содржи свој елемент WHERE. Примери: (WHERE номенклатура.*, Магацин ), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • и сл.
    Пример за користење на екстензии:

    Јазик на изразување на составот на податоци

    Јазикот на изразување на составот на податоци е дизајниран да пишува изрази што се користат, особено, за опишување на сопствени изрази на полиња. ACS ви овозможува да дефинирате сопствени полиња во извештајот користејќи или ваши сопствени изрази или групи на опции со услови за нивно избирање (аналогно на CASE во SQL). Прилагодените полиња се аналогни на пресметаните полиња. Тие можат да се постават и во конфигураторот и во режимот 1C:Enterprise, но функциите на заедничките модули не можат да се користат во прилагодени изрази на полиња. Затоа, сопствените полиња се повеќе за корисникот отколку за развивачот.

    Пример:

    Процесот на креирање извештај за ACS

    Кога креираме извештај, треба да креираме распоред кој дефинира како податоците ќе се прикажуваат во извештајот. Можете да креирате распоред врз основа на шема за состав на податоци. Шемата за состав на податоци ја опишува суштината на податоците што се дадени на извештајот (од каде да ги добиете податоците и како можете да го контролирате неговиот состав). Шемата за состав на податоци е основата на која може да се генерираат сите видови извештаи. Шемата за состав на податоци може да содржи:
    • барање текст со упатства за системот за составување податоци;
    • опис на неколку збирки на податоци;
    • детален опис на достапните полиња;
    • опис на односите помеѓу неколку збирки на податоци;
    • опис на параметрите за прибирање податоци;
    • опис на распоредот на терените и групирањата;
    • и сл.

    На пример, можете да додадете барање во шемата за состав на податоци како збир на податоци и да го повикате конструкторот на барањето, што ви овозможува графички да составите барање со произволна сложеност:

    Резултатот од стартувањето на создавачот на барања ќе биде текстот на барањето (во јазикот на барањето 1C: Enterprise). Овој текст може рачно да се прилагоди доколку е потребно:

    Може да има неколку множества на податоци во шемата за состав на податоци, множества на податоци може да се поврзат во распоред на произволен начин, може да се додадат пресметани полиња, може да се постават параметри за извештај итн. Вреди да се спомене една интересна карактеристика на механизмот за пребарување во 1C: Enterprise. Прашањата на крајот се преведени на дијалект на SQL специфичен за DBMS со кој апликацијата директно работи. Општо земено, се обидуваме максимално да ги користиме можностите на серверите DBMS (ограничени сме од фактот што ги користиме само оние способности кои се истовремено достапни во сите DBMS поддржани од платформата 1C: Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Така, на ниво на барање во пресметаните полиња, можеме да ги користиме само оние функции што се преведени во SQL.

    Но, на ниво на шема за состав на податоци, веќе можеме да додадеме сопствени полиња и да користиме функции во нив во вградениот јазик за развој на 1C (вклучувајќи ги и оние напишани од нас), што во голема мера ги проширува можностите на извештаите. Технички, изгледа вака - сè што може да се преведе во SQL се преведува во SQL, барањето се извршува на ниво на DBMS, резултатите од барањето се ставаат во меморијата на апликацискиот сервер 1C, а ACS ги пресметува вредностите од пресметаните полиња за секој запис, чии формули се напишани на јазик 1C.


    Додавање прилагодени полиња

    Можете да додадете кој било број на табели и графикони во извештајот:


    Дизајнер на извештаи


    Пријавете при извршување

    Со помош на ACS, корисникот може да додаде сложени селекции во извештајот (кои ќе бидат додадени на барањето на вистинските места), условно форматирање (што ви овозможува различно форматирање - фонт, боја итн. - излезни полиња во зависност од нивните вредности) и многу повеќе.

    Накратко опишете го процесот на градење и генерирање извештај на следниов начин:

    • Развивачот во времето на дизајнирање со помош на дизајнерот (или при извршување со помош на код) ја дефинира шемата за распоред на податоци:
      • Текст на барање/барања
      • Опис на пресметаните полиња
      • Врски помеѓу прашања (ако има повеќе од едно)
      • Опции за известување
      • Стандардни поставки
      • итн.
    • Горенаведените поставки се зачувани во изгледот
    • Корисникот отвора извештај
      • Можеби прави дополнителни поставки (на пример, ги менува вредностите на параметрите)
      • Притискање на копчето „Генерирај“.
    • Корисничките поставки се однесуваат на шемата за состав на податоци дефинирана од развивачот.
    • Се формира среден распоред на составот на податоците, кој содржи инструкции за тоа од каде да се добијат податоците. Конкретно, прашањата наведени во изгледот се коригираат. Значи, полињата што не се користат во извештајот се отстранети од барањето (ова е направено со цел да се минимизира количината на добиени податоци). Сите полиња што се користат во пресметаните формули на полињата се додаваат во барањето.
    • Обработувачот на составот на податоци е вклучен во случајот. Процесорот за распоред извршува прашања, поврзува множества на податоци, ги пресметува вредностите на пресметаните полиња и ресурси, врши групирање. Со еден збор, ги прави сите пресметки што не беа извршени на ниво на DBMS.
    • Процесорот за излез на податоци започнува барање за извршување и ги прикажува добиените податоци во документ со табеларни пресметки, графикон итн.


    Процесот на генерирање на извештај од механизмот ACS

    Се обидуваме да ја минимизираме количината на податоци за известување пренесени од серверот до клиентската апликација. При прикажување на податоци во документ со табеларни пресметки, при отворање на документ со табеларни пресметки, ги пренесуваме од серверот само оние линии што корисникот ги гледа на почетокот на документот. Како што корисникот се движи по линиите на документот, податоците што недостасуваат се преземаат од серверот до клиентот.

    Кориснички поставки

    Сите алатки на ACS се достапни и за развивачот и за крајниот корисник. Но, практиката покажа дека крајниот корисник често е исплашен од изобилството на можности на алатот. Покрај тоа, во повеќето случаи, на крајниот корисник не му е потребна целата моќ на поставките - доволно е тој да има брз пристап до поставување на еден или два параметри на извештајот (на пример, период и договорна страна). Почнувајќи со одредена верзија на платформата, развивачот на извештаи има можност да означи кои поставки за извештај му се достапни на корисникот. Ова е направено со користење на полето за избор „Вклучи во корисничките поставки“. Исто така, поставките за извештај сега имаат знаменце „Режим на приказ“ што зема една од трите вредности:
    • Брз пристап. Поставката ќе се прикаже директно на горниот дел од прозорецот за извештај.
    • Обичен. Поставката ќе биде достапна преку копчето „Поставки“.
    • Не е достапно. Поставката нема да биде достапна за крајниот корисник.


    Поставување режим на прикажување во време на дизајнирање


    Прикажете ја поставката во режимот за брз пристап при извршување (под копчето Генерирање)

    Развојни планови

    Еден од приоритетите во развојот на ACS за нас е поедноставувањето на корисничките поставки. Нашето искуство покажува дека за некои крајни корисници, работата со корисничките поставки е сè уште сериозна работа. Ние го земаме тоа предвид и работиме во оваа насока. Според тоа, на програмерите ќе им стане полесно да работат со ACS, бидејќи ние, како и досега, сакаме да обезбедиме единствена алатка за поставување извештаи и за развивачот и за крајниот корисник.

    Во светлината на претстојното издание на 8.2.14, ќе се обидам да опишам некои од новите карактеристики на системот за составување податоци.

    Отворете ја шемата за состав на податоци, по можност во надворешен извештај, за да го олесните уредувањето.

    Додаваме множество податоци за пребарување и запишуваме, рачно или користејќи го создавачот на барања, наједноставното барање:

    1. Поставете барање во ACS.

    2. Поставете пресметани полиња во ACS

    3. Ние го конфигурираме распоредот на податоци на табулаторот за поставки

    4. Го лансираме 1C Enterprise 8.2.14. Го отвораме извештајот. Формираме, примаме.

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

    1. Тековниот датум()

    Го враќа датумот на системот. При поставување на распоредот на изгледот, во сите изрази кои се присутни во изгледот, функцијата CurrentDate() се заменува со вредноста на тековниот датум.

    2. ПРЕСМЕТУВАЧКИ ИЗРАЗ()

    Синтакса:

    Пресметајизраз(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)

    Опис:

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

    Функцијата го зема предвид изборот на групирања, но не ги зема предвид хиерархиските селекции.

    Функцијата не може да се примени на групација во групниот избор на таа групација. На пример, при изборот на групацијата Номенклатура, не можете да го користите изразот Пресметај израз („Сум(СумПремет)“, „ВкупноВкупно“) > 1000. Но, таков израз може да се користи при хиерархиска селекција.

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

    При пресметување на интервални изрази за вкупната сума (параметарот Grouping е поставен на GrandTotal), се смета дека нема записи за пресметување детални податоци и пресметување на збирни функции.

    Изградувачот на распоред, кога го генерира изразот на функцијата Пресметај израз, ако изразот за подредување содржи полиња што не можат да се користат при групирање, ја заменува функцијата Пресметај израз со NULL.

    Опции

    <Выражение>

    Тип: Низа. Изразот што треба да се оцени.

    <Группировка>

    Тип: Низа. Го содржи името на групацијата во чиј контекст треба да се оценува изразот. Ако се користи празна низа како име на групирање, пресметката ќе се изврши во контекст на тековното групирање. Ако стрингот GrandTotal се користи како име на групирање, пресметката ќе се изврши во контекст на вкупната сума. Во спротивно, пресметката ќе се изврши во контекст на родителската групација со тоа име.

    На пример:

    Збир (продажба.Сумпромет)/Пресметај(„Сум(продажба.Сумпромет)“, „Вкупно вкупно“)

    Во овој пример, резултатот ќе биде односот на износот за полето Sales.AmountVolume на записот за групирање до износот на истото поле во целиот распоред;

    <ОбластьВычисления>

    Тип: Низа. Параметарот може да ги земе следните вредности:

    • GeneralTotal - изразот ќе се пресметува за сите записи за групирање.
    • Хиерархија - изразот ќе се евалуира за матичниот хиерархиски запис, доколку постои, и за целата групација, ако нема хиерархиски запис од родител.
    • Групирање - изразот ќе се оценува за тековниот запис за групирање.
    • GroupingNotResource - кога се пресметува функција за групен запис по ресурси, изразот ќе се пресметува за првиот групен запис од оригиналното групирање.

    При пресметување на функцијата Пресметајте израз ()со вредноста GroupingNotResource за групните записи кои не се групирања по ресурси, функцијата се оценува на ист начин како што би се пресметала ако вредноста на параметарот е еднаква на вредноста на Групирање.

    Изградувачот на распоред на распоред на композиции на податоци, при генерирање на распоредот на составот на податоци, при прикажување на полето за ресурси на кое се врши групирањето, става израз во изгледот што се пресметува со помош на функцијата Пресметајте израз (), наведувајќи го параметарот GroupingNotResource. За други ресурси групирани по ресурси, се поставуваат редовни изрази на ресурси.

    <Начало>

    Тип: Низа. Одредува кој запис да започне фрагментот во кој ќе се пресметаат збирните функции на изразот и од кој запис да се добијат вредностите на полињата надвор од збирните функции. Вредноста може да биде една од следниве:

    <Конец>

    Тип: Низа. Покажува до кој запис да се продолжи фрагментот во кој се пресметуваат збирните функции на изразот. Вредноста може да биде една од следниве:

    • Прво (Прво). Треба да го добиете првиот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување од почетокот на групирањето. Добиената вредност мора да биде цел број поголем од нула. На пример, First(3) - добивање на третиот рекорд од почетокот на групирањето.

    Ако првиот запис е надвор од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи, а сакате да добиетеFirst(4), тогаш се смета дека нема записи.

    • Последно (Последна). Треба да го добиете најновиот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување од крајот на групирањето. Добиената вредност мора да биде цел број поголем од нула. На пример, Last(3) - Го добива третиот запис од крајот на групирањето.

    Ако последниот запис е надвор од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи, а сакате да го добиетеLast(4), тогаш се смета дека нема записи.

    • Претходна. Треба да го добиете претходниот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување назад од тековниот запис за групирање. На пример, Previous(2) - земете го претходниот од претходниот рекорд.

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

    При добивање на претходниот рекорд за збирниот збир, се смета дека е добиен првиот рекорд.

    • Следно (Следно). Треба да го добиете следниот запис за групирање. По зборот во загради, можете да наведете израз, чиј резултат ќе се користи како поместување напред од тековниот запис за групирање. На пример, Next(2) - добијте го следното од следниот запис.

    Ако следниот рекорд оди подалеку од групирањето, тогаш се смета дека нема записи. На пример, ако има 3 записи и третиот запис добива Next(), тогаш се смета дека нема записи.

    Кога ќе се прими следниот запис за вкупниот број на групирање, се смета дека нема запис.

    • Тековна (Тековна). Треба да го добиете тековниот запис.

    Кога се превзема за збир на групирање, се враќа првиот запис.

    • BoundaryValue. Потребата да се добие записот според одредената вредност. По зборот RestrictingValue во загради, треба да го наведете изразот со чија вредност сакате да го започнете фрагментот, првото поле за нарачување.

    Записот ќе биде првиот запис чија вредност на полето за нарачка е поголема или еднаква на наведената вредност. На пример, ако полето Период се користи како поле за нарачка и ги има вредностите 01/01/2010, 02/01/2010, 03/01/2010 и сакате да ја добиете LimitValue(DateTime(2010 , 1, 15)), потоа ќе се добие записник со датум 02/01. 2010 г.

    <Сортировка>

    Тип: Низа. Наведени се изрази разделени со запирки кои ги опишуваат правилата за подредување. Ако не е одредено, тогаш подредувањето се врши на ист начин како и за групирањето за кое се оценува изразот. По секој израз, можете да ги наведете клучните зборови Asc (за подредување по растечки редослед), Descending (за подредување по опаѓачки редослед) и AutoOrder (за подредување на референцираните полиња според полињата според кои сакате да го сортирате референцираниот објект). Зборот Auto Order може да се користи и со растечки и со опаѓачки зборови.

    <ИерархическаяСортировка>

    Тип: Низа. Слично на опцијата Сортирање. Се користи за уредување на хиерархиски записи. Ако не е наведено, создавачот на распоред генерира нарачка според нарачката наведена во параметарот Сортирање.

    <ОбработкаОдинаковыхЗначенийПорядка>

    Тип: Низа. Одредува правило за одредување на претходниот или следниот запис ако има повеќе записи со иста вредност на нарачување:

    • Одделно значи дека секвенцата на нарачани записи се користи за одредување на претходните и следните записи. Стандардна вредност.
    • Together (Together) значи дека претходните и следните записи се одредуваат врз основа на вредностите на изразите за нарачка.

    На пример, ако добиената низа е подредена по датум:

    датумот Целосно име Значење
    1 01 јануари 2001 година Иванов М. 10
    2 02 јануари 2001 година Петров С. 20
    3 03 јануари 2001 година Сидоров Р. 30
    4 04 јануари 2001 година Петров С. 40

    Ако вредноста на параметарот е Separate, тогаш:

    § претходниот запис во записот 3 ќе биде записот 2.

    § ако пресметковниот фрагмент е дефиниран како Тековен, Тековен (соодветно, параметрите Почеток и Крај), тогаш за записот 2 овој фрагмент ќе се состои од еден запис 2. Изразот Пресметај израз („Збир (вредност)“, Тековен, Тековен) ќе биде еднакво на 20.

    Ако вредноста на параметарот е Together, тогаш:

    § претходниот запис во записот 3 ќе биде записот 1.

    § ако пресметковниот фрагмент е дефиниран како Тековен, Тековен (соодветно, параметрите за почеток и крај), тогаш за записот 2 овој фрагмент ќе се состои од записи 2 и 3. Изразот CalculateExpression(“Sum(Value)”, Current, Current) ќе да биде еднаква на 50.

    При одредување на вредноста на параметарот еднаква на Together, во параметрите Start и End, не можете да наведете поместување за позициите First, Last, Previous, Next.

    CalculateExpression („Износ (AmountTurnover)“, „First“, „Current“)

    Ако сакате да ја добиете вредноста за групирање во претходната линија, можете да го користите следниов израз:

    CalculateExpression („Курс“, „Претходно“)

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

    ComputeExpressionGroupedArray(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    Функцијата враќа низа, чиј секој елемент го содржи резултатот од евалуацијата на изразот за групирање според наведеното поле.

    ComputeExpressionGroupedValueTable(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

    Функцијата враќа табела со вредности, од која секој ред содржи резултат од евалуација на изразите за групирање според наведеното поле

    Пополнета вредност(<Выражение>) – Враќа True ако вредноста е различна од стандардната вредност од овој тип, различна од NULL, различна од нула референца, различна од Undefined. Буловите вредности се тестираат за NULL. Низите се проверуваат за знаци без празно место.

    Формат(<Выражение>, <Форматная строка>) – Добијте ја форматираната низа од положената вредност. Низата за формат е поставена во согласност со низата за формат на системот 1C: Enterprise.

    Подстринг(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) - Оваа функција е дизајнирана да избира подниза од низа.

    Должина на низата(<Выражение>) – Функцијата е дизајнирана да ја одредува должината на низата. Параметар - израз на тип на низа

    Линија(<Выражение>) – Ако низата се пренесе како параметар, тогаш функцијата враќа низа што содржи стринг претстави на сите елементи од низата, одделени со знаците „; “. Ако табела со вредности се пренесе како параметар, тогаш функцијата враќа низа што содржи стринг претстави на сите редови од табелата со вредности, а претставите на ќелиите на секоја линија се одделени со знаците „; “, и жици со знак за нова линија. Ако некој елемент има празна претстава на низа, тогаш наместо нејзино претставување, се прикажува низа<Пустое значение>.

    Здраво драг читател! Имаме уште една лекција за основите на системот за распоред. Се запознавте со функциите на јазикот на изразување SKD, ги видовте карактеристиките на системот за распоред, а исто така ги сфативте основните поставки за полињата за распоред. И сега ќе разгледаме нов материјал. Оди!

    Дополнителни поставки за полињата ACS.

    Колона "тип на вредност"ви овозможува да го одредите типот на податоци за полето за распоред. Зошто да го наведете типот, на пример, за полето „Номенклатура“, ако веќе знаете за каков тип станува збор? Ова е потребно ако полето за распоред е од композитен тип. Можете да изберете одреден тип, а потоа при филтрирање според ова поле, ќе се изберат вредности од овој тип.

    Колона „Достапни вредности“ви овозможува да ги наведете вредностите достапни за избор и да го ограничите изборот на корисникот на одредени граници.

    Колона "Декор"ви овозможува да го поставите изгледот на полето за распоред без да користите распоред. Можете да ја одредите бојата на фонтот, бојата на рамката, ориентацијата на текстот и така натаму.

    Колона „Опции за уредување“ви овозможува да одредите како да го уредите полето за распоред. На пример, можете да наведете брз избор на ставки од список во избор. Стандардно, полето за распоред ги наследува сите опции за уредување од објектот на метаподатоци.

    Пресметани полиња

    Можете да креирате свои пресметани полиња на картичката Пресметани полиња од составот на податоци.

    Зошто ни се потребни пресметани полиња кога можеме да ги креираме на ниво на барање? Сите полиња не можат да се опишат со барање. Ако треба да составите сложено поле од различни збирки податоци, на пример, типови на барање и објекти, тогаш пресметаните полиња се неопходни. Не можете да додадете поле за состав на податоци ако изворот на податоци е барање и автоматско пополнување, но можете да додадете онолку полиња колку што сакате користејќи пресметани полиња.

    Во колоната од пресметаното поле „Израз“ треба да напишете произволен израз што ги користи полињата на составот на податоците, повикувајќи се на нивната патека (колона „Пат“ на табулаторот „Група на податоци“). Или можете да ги користите функциите за математичка трансформација, или можете да се повикате на функциите на општите модули. На пример, да го напишеме името на пресметаното поле „Отстапување“ во колоната „Пат до податоци“, а следново во полето „Израз“:

    Износ - Цена* Количина

    Проверете уште една, а исто така можете да преземете користејќи ги овие функции.

    Во суштина, пресметаните полиња се поставени на истите поставки како и полињата за распоред. Овде недостасува само колоната Хиерархиска група. Кога пишувате пресметани полиња, не можете да се повикате на други пресметани полиња.

    Како да префрлите параметри и селекции на извештај изграден на ACS без да креирате формулар за извештај?

    &Клиент // Предавање параметри во извештајот ACS Procedure Command Processing(Command Parameter, Command Execution Parameters) Selection = New Structure("Nomenclature", Command Parameter) ; FixedSettings = GetFixedSettings() ; FormParameters = Нова структура( „ShapeOnOpen, Избор, клуч за варијанта, фиксни поставки", Вистина , Избор, „Варијанта на извештај за продажба“, Фиксни поставки); OpenForm( „Извештај.Извештај за продажба.Форма“, FormParameters) ; EndProcedure &AtServer функција GetFixedSettings() Извештај за продажба = Извештаи. Извештај за продажба. Креирај() ; SKD = ​​Извештај за продажба. DataCompositionScheme; Поставки = SKD. Стандардни поставки; StartPeriod = Поставки. Податоци за параметри. FindParameterValue( NewDataCompositionParameter("PeriodStart") ); Почеток на периодот. Вредност = MonthStart(CurrentDate()) ; Почеток на периодот. Употреба = точно; StartPeriod = Поставки. Податоци за параметри. FindParameterValue( NewDataCompositionParameter("EndPeriod") ); Краен период. Вредност = Краен месец(Тековен датум() ); Краен период. Употреба = точно; Поставки за враќање; Крај Функции // GetFixedSettings()

    Како да ги усогласите насловите на колоните до центарот во извештајот на SKD?

    Потребно е да поставите два параметри во полето „Дизајн“ на табулаторот „Податоци“:

    Хоризонтална положба: Центар Вертикална положба: центар

    Исто така, на табулаторот „Поставки“ на дното ќе најдете друго јазиче: „Условен изглед“. Таму за секоја групација, параметар итн. можете да го поставите изгледот што го сакате.

    Изгледа дека кажал сè! Како што се сеќавате, имате можност да поставувате прашања, доколку ги има. Ќе се обидам да одговорам. Во иднина планирам да пишувам повеќе статии на оваа тема, затоа не заборавајте да се претплатите на ажурирањата на нашата страница за да не ја пропуштите! Исто така, задолжително направете тест за да го консолидирате материјалот од оваа лекција.

    На крајот од статијата сакам да ве советувам бесплатно од Анатолиј Сотников. Ова е курс од искусен програмер. Тој ќе ви покаже на посебна основа како да креирате извештаи во ACS. Треба само да слушате внимателно и да запомните! Ќе добиете одговори на прашања како што се:
    • Како да креирате едноставен извештај за список?
    • За што служат колоните Поле, Патека и Наслов на картичката Полиња?
    • Кои се ограничувањата на полињата за распоред?
    • Како правилно да поставите улоги?
    • Кои се улогите на полињата за распоред?
    • Каде можам да го најдам јазичето за распоред на податоци во барањето?
    • Како да ги конфигурирате параметрите во SKD?
    • Дополнително поинтересно...
    Можеби не треба да се обидувате сами да сурфате на Интернет во потрага по потребните информации? Покрај тоа, сè е подготвено за употреба. Само започнете! Сите детали за тоа што има во бесплатните видео упатства