Kalkulahin ang expression na skd. Kapaki-pakinabang na Mga Halimbawa ng Schema ng Komposisyon ng Data

Isang halimbawa kung paano mo makukuha ang mga field ng nakaraang tala sa isang pagpapangkat at hindi lamang. Maginhawa para sa pagkalkula ng pagkakaiba sa pagitan ng mga halaga ng nakaraang presyo at ang kasalukuyang isa.

Ang kakanyahan ng solusyon ay ang paggamit ng function ng expression na wika SKD Compute Expression() sa idinagdag na kalkuladong patlang na tinawag ko Delta. Ang function ay may mga sumusunod na parameter:

Mga Pagpipilian:

  • Pagpapahayag. Uri Linya;
  • pagpapangkat. Uri Linya;
  • Uri ng Pagkalkula. Uri Linya;
  • Magsimula
  • Tapusin. Isang string na naglalaman ng isa sa mga opsyon;
  • Pag-uuri. Linya;
  • HierarchicalSort;
  • Pangangasiwa ng Parehong Order ng Mga Halaga

Interesado kami sa mga parameter 4 at 5 ( Magsimula At Tapusin). Magiging ganito ang expression:

isNULL((KALCULATE EXPRESSION("Presyo", "Nakaraan", "Nakaraan") - Presyo), 0)

Dito namin kinakalkula ang nakaraang halaga ng field Presyo at ibawas ang kasalukuyang halaga ng field mula dito Presyo. Naturally, para sa unang tala, ang nakaraang halaga ay hindi kakalkulahin at ang resulta ng pagbabawas na may halaga ng kasalukuyang patlang ay magiging Null, upang ang lahat ay "malinis" ginagamit namin ang isNULL function (isNull) upang i-convert ang Null sa zero .

Maglagay ng talahanayan ng mga halaga sa isang cell ng dokumento ng spreadsheet

Minsan kinakailangan na ilagay ang tabular na bahagi ng dokumento o ang data na mga row ng tabular na bahagi sa isang cell ng spreadsheet na dokumento, halimbawa tulad nito:

Upang gawin ito, kailangan mong gamitin ang function: ComputeExpressionGroupedValueTable() , na may mga parameter:

  • Pagpapahayag ay ang pagpapahayag na susuriin. Uri ng String. Ang isang linya ay maaaring maglaman ng maraming expression na pinaghihiwalay ng mga kuwit. Ang bawat expression ay maaaring sundan ng opsyonal na keyword na AS at ang pangalan ng column ng talahanayan ng halaga. Halimbawa: "Kontratista, Halaga(AmountTurnover) Bilang SalesVolume".
  • Field ExpressionsGroupings- pagpapangkat ng mga field expression na pinaghihiwalay ng mga kuwit. Halimbawa, "Kontratista, Party";
  • Pagpili ng Record ay isang ekspresyong inilapat sa mga detalyadong tala. Halimbawa, "DeletionMark = False";
  • Pagpili ng Pagpapangkat- inilapat ang pagpili sa mga talaan ng pangkat. Halimbawa: "Halaga(AmountTurnover) > &Parameter1".

Upang gawin ito, lumikha kami ng isang kinakalkula na patlang kung saan ipapakita namin ang resultang talahanayan, pagkatapos ay inilalagay namin ang patlang na ito sa mga mapagkukunan na may expression CalculateExpressionGroupedValueTable("Nomenclature, Quantity")

Mga hanay ng numero

Isang halimbawa kung paano maaaring bilangin ang mga column sa SKD.

Ang kakanyahan ng solusyon:

  1. Lumilikha kami ng query kung saan binibilang namin ang mga row ng resulta ng query sa loob ng isang partikular na subordination
  2. Ipinapakita ang resulta sa isang crosstab

MAHALAGA!

Matapos mabilang ang mga linya sa query, dapat silang ilagay sa BT at pagkatapos ay mapili mula sa BT na ito, kung hindi, gagawin ng ACS ang lahat sa sarili nitong paraan at ang mga maling field ay mahuhulog sa pagpapangkat.

Upang makuha ang resulta, kailangan mong lumikha ng isang kinakalkula na patlang na may expression "Empleyado" + Format(NPP,"FH=3; FH=") at ang kinakalkula na pangalan ng field, kung saan madaling ilagay ang Empleyado, pagkatapos ay ilagay namin ang field Buong pangalan sa isang mapagkukunan na may ekspresyon Maximum(buong pangalan) o simple lang Buong pangalan- walang pagkakaiba

Alternating group na may color highlighting

Sa isang lugar sa Mista o sa parehong 1Cskd.ru may tanong kung paano i-highlight ang mga linya na bumubuo ng mga grupo na may iba't ibang kulay

Ito ay nakakamit sa pamamagitan ng paglikha ng isang kalkuladong field:

Kalkulahin ang Expression("Dami (Iba't Ibang Item)","Una", "Nakaraan","Magkasama") % 2

Binibilang namin ang bilang ng iba't ibang "pagpapangkat" ng field ng Nomenclature, mabibilang ang mga pagpapangkat sa pamamagitan ng pagtatakda ng value ng ProcessingSameOrderValues ​​​​parameter = "Together"

Ang natitira sa paghahati ng dalawa ay gagawing malinaw kung ang pangkat na ito ay pantay o hindi, ayon sa pagkakabanggit, lumikha kami ng isang kondisyong elemento ng disenyo na may kundisyon Patlang = 1

Nananatili sa konteksto ng mga katangian. Mga katangian sa bawat linya na may dami sa mga bracket

Sa parehong 1CSkd.ru mayroong isang paksa kung saan ang may-akda ay humihingi ng tulong sa paggawa ng isang ulat, kung saan sa isa sa mga hanay ng isang listahan ng mga katangian (mga sukat ng sapatos) kasama ang kanilang numero ay kinakailangan. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Ito ay nakamit gamit ang parehong function Kalkulahin ang ExpressionWith GroupingArray()

Sa halimbawang ito, ganito ang hitsura ng function:

Kalkulahin ang ExpressionWith GroupingArray("Characteristic of Nomenclature.Description +
""("" + Format(Bilang ng Natitira,""CH=0"") + "")""",
,
"ValueFilled(FeatureNomenclature)")

Ang pangatlong parameter ay isang seleksyon, pinapayagan ka nitong maiwasan ang pagtatanghal ng isang walang laman na string "" - nang naaayon, hindi ka makakakita ng mga nalalabi nang walang mga katangian

Pagsamahin ang dalawang table na may key String = Number

O isang variant kung paano i-convert ang value ng uri ng numero sa isang string sa SKD

Paminsan-minsan sa mga forum nakakakita ako ng paksa tulad ng "Paano i-convert ang isang numero sa isang string sa isang query." Kung nagsusulat ka ng isang ulat sa ACS at kailangan mong magsagawa ng gayong pagbabago, kung gayon hindi mo kailangang magsulat ng anumang mga trick sa kahilingan.

Upang i-convert ang isang numero sa isang string, gamitin lang ang expression na function ng wika ng SKD data composition system Linya() o Format()

Upang i-convert ang isang string sa isang numero, maaari mong gamitin ang function Compute()

Pagbukud-bukurin ayon sa string bilang ayon sa numero

Sa aking halimbawa, ipapakita ko lamang ang direktoryo ng empleyado, pag-uuri-uriin ito ayon sa numero ng tauhan (code)

Magiging ganito ang resulta:

Ito ay nakakamit sa pamamagitan ng paglikha ng isang kalkuladong field at paggamit ng expression na function ng wika SKD Compute()

  1. Gumawa ng kalkuladong field TabNumberNumber, na may ekspresyong: Kalkulahin(Employee.Code)
  2. Pagbukud-bukurin ayon sa field na ito

sa katunayan, ito ay ang conversion ng isang string sa isang numero gamit ang function ng expression na wika SKD Compute()

Pinapayuhan din kita na tingnan ang "Mga video tutorial sa skd" (madaling hanapin sa Google)

Kapag bumubuo, gumagamit ako ng na-convert na .

Dahil sa paparating na release ng 8.2.14, susubukan kong ilarawan ang ilan sa mga bagong feature ng system ng komposisyon ng data.

Buksan ang scheme ng komposisyon ng data, mas mabuti sa isang panlabas na ulat, upang gawing mas madali ang pag-edit.

Nagdaragdag kami ng set ng data ng query at isinusulat, manu-mano man o gamit ang tagabuo ng query, ang pinakasimpleng query:

1. Mag-set up ng kahilingan sa ACS.

2. I-set up ang mga kalkuladong field sa ACS

3. Kino-configure namin ang layout ng data sa tab na mga setting

4. Inilunsad namin ang 1C Enterprise 8.2.14. Binuksan namin ang ulat. Binubuo namin, tinatanggap namin.

Paglalarawan ng mga bagong feature mismo:

1. Ang kasalukuyang petsa()

Ibinabalik ang petsa ng system. Kapag inilatag ang layout ng layout, sa lahat ng expression na naroroon sa layout, ang CurrentDate() function ay pinapalitan ng halaga ng kasalukuyang petsa.

2. COMPUTE EXPRESSION()

Syntax:

Compute Expression(,)

Paglalarawan:

Ang function ay idinisenyo upang suriin ang isang expression sa konteksto ng ilang pagpapangkat.

Isinasaalang-alang ng function ang pagpili ng mga pagpapangkat, ngunit hindi isinasaalang-alang ang mga hierarchical na seleksyon.

Hindi mailalapat ang function sa isang pagpapangkat sa pagpili ng pangkat ng pagpapangkat na iyon. Halimbawa, sa pagpili ng Nomenclature grouping, hindi mo magagamit ang expression Kalkulahin ang Expression ("Sum(SumTurover)", "TotalTotal") > 1000. Ngunit ang ganitong expression ay maaaring gamitin sa hierarchical selection.

Kung ang rekord ng pagtatapos ay nauuna sa rekord ng pagsisimula, pagkatapos ay itinuturing na walang mga tala para sa pagkalkula ng detalyadong data at pagkalkula ng mga pinagsama-samang pag-andar.

Kapag kinakalkula ang mga expression ng interval para sa isang malaking kabuuan (ang parameter ng Pagpapangkat ay nakatakda sa GrandTotal ), itinuturing na walang mga tala para sa pagkalkula ng detalyadong data at pagkalkula ng mga pinagsama-samang function.

Tagabuo ng layout kapag bumubuo ng expression ng function Compute Expression, kung ang expression ng pag-order ay naglalaman ng mga field na hindi magagamit sa pagpapangkat, papalitan ang function Compute Expression sa WALA.

Mga pagpipilian

Uri: Linya. Ang ekspresyong susuriin.

Uri: Linya. Naglalaman ng pangalan ng pagpapangkat kung saan ang konteksto ay susuriin ang expression. Kung ginamit ang isang walang laman na string bilang pangalan ng pagpapangkat, isasagawa ang pagkalkula sa konteksto ng kasalukuyang pagpapangkat. Kung ginamit ang string na GrandTotal bilang pangalan ng pagpapangkat, isasagawa ang pagkalkula sa konteksto ng kabuuang kabuuan. Kung hindi, isasagawa ang pagkalkula sa konteksto ng pagpapangkat ng magulang na may ganoong pangalan.

Halimbawa:

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

Sa halimbawang ito, ang magiging resulta ay ang ratio ng halaga ayon sa field Sales.AmountTurnover pagpapangkat ng mga entry sa kabuuan ng parehong field sa buong layout;

Uri: Linya. Maaaring kunin ng parameter ang mga sumusunod na halaga:

· Malaking kabuuan— susuriin ang expression para sa lahat ng mga talaan ng pagpapangkat.

· Hierarchy— susuriin ang expression para sa hierarchical na entry ng magulang, kung mayroon, at para sa buong pagpapangkat, kung walang hierarchical na entry ng magulang.

· pagpapangkat— susuriin ang expression para sa kasalukuyang talaan ng pangkat ng pagpapangkat.

· GroupingNotResource— kapag kinakalkula ang isang function para sa isang talaan ng pangkat sa pamamagitan ng mga mapagkukunan, ang expression ay kakalkulahin para sa unang tala ng pangkat ng paunang pagpapangkat.

Kapag kinakalkula ang function Compute Expression() may kahulugan GroupingNotResource para sa mga tala ng pangkat na hindi pagpapangkat ayon sa mga mapagkukunan, ang function ay kinakalkula sa parehong paraan tulad ng pagkalkula kung ang halaga ng parameter ay katumbas ng halaga pagpapangkat.

Ang tagabuo ng layout ng layout ng komposisyon ng data, kapag bumubuo ng layout ng layout ng komposisyon ng data, kapag ipinapakita ang field ng mapagkukunan kung saan isinasagawa ang pagpapangkat, naglalagay ng expression sa layout na kinakalkula gamit ang function. Compute Expression() , na tumutukoy sa parameter GroupingNotResource. Para sa iba pang mga mapagkukunan na nakapangkat ayon sa mapagkukunan, inilalagay ang mga regular na expression ng mapagkukunan.

Uri: Linya. Tinutukoy kung aling record ang magsisimula ng fragment kung saan kakalkulahin ang pinagsama-samang mga function ng expression at mula sa kung aling talaan makukuha ang mga value ng mga field sa labas ng pinagsama-samang mga function. Ang halaga ay maaaring isa sa mga sumusunod:

· Una (Una)

· Huli (Huling)

· Nakaraan (Nakaraan )

· Susunod (Susunod)

· Kasalukuyan (Kasalukuyan)

· LimitingValue(BoundaryValue) LimitingValue

Uri: Linya. Isinasaad kung saang talaan ipagpatuloy ang fragment kung saan kakalkulahin ang mga pinagsama-samang function ng expression. Ang halaga ay maaaring isa sa mga sumusunod:

· Una (Una). Kailangan mong makuha ang unang tala ng pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang offset mula sa simula ng pagpapangkat. Ang resultang halaga ay dapat na isang integer na mas malaki sa zero. Halimbawa, Una(3) - pagkuha ng ikatlong tala mula sa simula ng pagpapangkat.

Kung ang unang entry ay nasa labas ng pagpapangkat, kung gayon ito ay itinuturing na walang mga entry. Halimbawa, kung mayroong 3 mga tala, at gusto mong makuha ang First(4) , kung gayon ito ay itinuturing na walang mga tala.

· Huli (Huling). Kailangan mong makuha ang pinakabagong entry sa pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang offset mula sa dulo ng pagpapangkat. Ang resultang halaga ay dapat na isang integer na mas malaki sa zero. Halimbawa, Huli(3) - kunin ang ikatlong tala mula sa dulo ng pagpapangkat.

Kung ang huling entry ay nasa labas ng pagpapangkat, kung gayon ay itinuturing na walang mga entry. Halimbawa, kung mayroong 3 mga tala, at nais mong makuha ang Huling(4) , kung gayon ito ay itinuturing na walang mga tala.

· Nakaraan (Nakaraan ). Kailangan mong makuha ang nakaraang entry sa pagpapangkat. Pagkatapos ng salita sa panaklong, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang paglipat pabalik mula sa kasalukuyang tala ng pagpapangkat. Halimbawa, Nakaraan(2) - kunin ang nakaraan mula sa nakaraang tala.

Kung ang nakaraang tala ay nasa labas ng pagpapangkat (halimbawa, ang pangalawang tala ng pagpapangkat ay nangangailangan ng Nakaraan(3) , kung gayon ang unang tala ng pagpapangkat ay makukuha.

Kapag nakuha ang nakaraang tala para sa kabuuang pagpapangkat, itinuturing na nakuha ang unang tala.

· Susunod (Susunod). Kailangan mong makuha ang susunod na entry sa pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang pasulong na paglilipat mula sa kasalukuyang tala ng pagpapangkat. Halimbawa, Next(2) - kunin ang susunod mula sa susunod na record.

Kung ang susunod na tala ay lumampas sa pagpapangkat, kung gayon ito ay itinuturing na walang mga tala. Halimbawa, kung mayroong 3 mga tala at ang ikatlong talaan ay makakakuha ng Next() , kung gayon ito ay itinuturing na walang mga tala.

Kapag ang susunod na tala ay natanggap para sa kabuuang pagpapangkat, ito ay itinuturing na walang tala.

· Kasalukuyan (Kasalukuyan). Kailangan mong makuha ang kasalukuyang entry.

Kapag nakuha para sa kabuuang pagpapangkat, ang unang tala ay kukunin.

· LimitingValue(BoundaryValue). Ang pangangailangang makuha ang rekord ayon sa tinukoy na halaga. Pagkatapos ng salita LimitingValue sa mga panaklong, kailangan mong tukuyin ang expression na may halaga kung saan mo gustong simulan ang fragment, ang unang field ng pag-order.

Ang talaan ang magiging unang tala na ang halaga ng field ng pag-order ay mas malaki kaysa o katumbas ng tinukoy na halaga. Halimbawa, kung gagamitin mo ang field na Panahon bilang field ng pag-order, at mayroon itong mga value 01/01/2010 , 02/01/2010 , 03/01/2010 , at gusto mong makuha LimitValue(DateTime(2010, 1, 15)), pagkatapos ay matatanggap ang isang talaan na may petsang 02/01/2010.

Uri: Linya. Nakalista ang mga expression na pinaghihiwalay ng kuwit na naglalarawan sa mga panuntunan sa pag-order. Kung hindi tinukoy, ang pag-order ay isinasagawa sa parehong paraan tulad ng para sa pagpapangkat kung saan sinusuri ang expression. Ang bawat expression ay maaaring sundan ng isang keyword Asc(para sa pataas na pagkakasunud-sunod), Pababa(para sa pababang pagkakasunod-sunod) at Awtomatikong pag-aayos(para sa pag-order ng mga patlang ng sanggunian sa pamamagitan ng mga patlang kung saan nais mong i-order ang bagay na tinutukoy). salita Awtomatikong pag-aayos maaaring gamitin tulad ng sa salita Asc, at sa salita Pababa.

Uri: Linya. Pareho sa parameter Pag-uuri. Ginagamit upang ayusin ang mga hierarchical na tala. Kung hindi tinukoy, ang tagabuo ng layout ay bubuo ng pag-order ayon sa pag-order na tinukoy sa parameter Pag-uuri.

Uri: Linya. Tinutukoy ang isang panuntunan upang matukoy ang nakaraan o susunod na tala kung mayroong maraming mga tala na may parehong halaga ng pag-order:

· Hiwalay ay nagpapahiwatig na ang isang pagkakasunod-sunod ng mga iniutos na talaan ay ginagamit upang matukoy ang nakaraan at susunod na mga tala. Default na halaga.

· Magkasama (Together) ay nagpapahiwatig na ang nakaraan at susunod na mga tala ay tinutukoy batay sa mga halaga ng mga expression ng pag-order.

Halimbawa, kung ang resultang sequence ay inayos ayon sa petsa:

petsa Buong pangalan Ibig sabihin
1 Enero 01, 2001

Ivanov M.

10
2 Enero 02, 2001 Petrov S. 20
3 Enero 03, 2001 Sidorov R. 30
4 Enero 04, 2001 Petrov S. 40

Hiwalay, Iyon:

§ ang dating entry sa entry 3 ay magiging entry 2.

kasalukuyang, kasalukuyan(ayon sa pagkakabanggit, ang mga parameter Magsimula At Tapusin), pagkatapos para sa record 2 ang fragment na ito ay bubuo ng isang record 2. Ang expression ay magiging katumbas ng 20.

Kung ang halaga ng parameter ay Magkasama, Iyon:

§ ang dating entry sa entry 3 ay magiging entry 1.

§ kung ang kalkuladong fragment ay tinukoy bilang kasalukuyang, kasalukuyan(ayon sa pagkakabanggit, ang mga parameter Magsimula At Tapusin), pagkatapos para sa talaan 2 ang fragment na ito ay bubuo ng mga talaan 2 at 3. Ang expression CalculateExpression("Sum(Value)", Kasalukuyan, Kasalukuyan) ay magiging katumbas ng 50.

Kapag tinukoy ang isang halaga ng parameter na katumbas ng Magkasama, sa mga parameter Magsimula At Tapusin hindi ka maaaring tumukoy ng offset para sa mga posisyon Una , Huli , Nakaraan , Susunod.

CalculateExpression("Halaga(AmountTurnover)", "Una", "Kasalukuyan")

Kung gusto mong makuha ang value ng pagpapangkat sa nakaraang linya, maaari mong gamitin ang sumusunod na expression:

CalculateExpression("Course", "Previous")

Listahan bago mga function:

ComputeExpressionGroupedArray(,) -

Ang function ay nagbabalik ng array, ang bawat elemento ay naglalaman ng resulta ng pagsusuri ng expression para sa pagpapangkat ayon sa tinukoy na field.

ComputeExpressionGroupedValueTable(,) -

Ang function ay nagbabalik ng isang talahanayan ng mga halaga, ang bawat hilera ay naglalaman ng resulta ng pagsusuri ng mga expression para sa pagpapangkat ayon sa tinukoy na field

ValueFilled() - Nagbabalik ng True kung ang value ay iba sa default na value ng ganitong uri, maliban sa NULL , maliban sa null reference, maliban sa Undefined . Ang mga halaga ng Boolean ay sinubukan laban sa NULL. Sinusuri ang mga string para sa mga hindi whitespace na character.

Format(, ) - Kunin ang na-format na string ng naipasa na halaga. Ang format na string ay itinakda alinsunod sa format na string ng 1C:Enterprise system.

Substring(, , ) - Ang function na ito ay idinisenyo upang pumili ng isang substring mula sa isang string.

Haba ng String() - Ang function ay idinisenyo upang matukoy ang haba ng isang string. Ang parameter ay isang expression ng uri ng string

Linya() - Kung ang isang array ay ipinasa bilang isang parameter, ang function ay nagbabalik ng isang string na naglalaman ng mga representasyon ng string ng lahat ng mga elemento ng array, na pinaghihiwalay ng mga character na "; ". Kung ang isang talahanayan ng mga halaga ay ipinasa bilang isang parameter, ang function ay nagbabalik ng isang string na naglalaman ng mga representasyon ng string ng lahat ng mga hilera ng talahanayan ng mga halaga, at ang mga representasyon ng cell ng bawat linya ay pinaghihiwalay ng mga character na "; ", at ang mga linya ay pinaghihiwalay ng bagong linyang karakter. Kung ang anumang elemento ay may walang laman na representasyon ng string, ang isang string ay ipinapakita sa halip na ang representasyon nito.

  • 1C-Bitrix
  • Ang isa sa pinakamahalagang bahagi ng software ng negosyo ay ang pag-uulat. Gaano kadaling i-customize ang isang umiiral na ulat sa nagbabagong pangangailangan ng negosyo (at batas) o gumawa ng bago ay maaaring nakadepende (at hindi sa matalinghagang kahulugan!) Ang kapalaran ng negosyo, ito man ay isang ulat para sa tanggapan ng buwis o isang diagram ng pag-asa ng demand para sa mga kalakal sa panahon at iba pang mga kadahilanan. Isang malakas at nababaluktot na sistema ng pag-uulat na nagbibigay-daan sa iyong madaling makuha ang tamang data mula sa system, ipakita ito sa isang maliwanag na anyo, na nagpapahintulot sa end user na muling i-configure ang karaniwang ulat upang makita ang data sa isang bagong liwanag - ito ang perpektong sistema ng negosyo ay dapat magsikap para sa.

    Sa 1C:Enterprise platform, isang mekanismo na tinatawag na Data Composition System (ACS para sa maikli) ang responsable sa pagbuo ng mga ulat. Sa artikulong ito, susubukan naming magbigay ng maikling paglalarawan ng ideya at arkitektura ng mekanismo ng ACS at ang mga kakayahan nito.


    Ang ACS ay isang mekanismo batay sa deklaratibong paglalarawan ng mga ulat. Ang ACS ay idinisenyo upang bumuo ng mga ulat at magpakita ng impormasyon na may kumplikadong istraktura. Sa pamamagitan ng paraan, bilang karagdagan sa pagbuo ng mga ulat, ang mekanismo ng ACS ay ginagamit din sa 1C:Enterprise sa isang dynamic na listahan, isang tool para sa pagpapakita ng impormasyon ng listahan na may rich functionality (pagpapakita ng mga flat at hierarchical na listahan, conditional row formatting, grouping, atbp.) .

    Medyo kasaysayan

    Sa pinakaunang bersyon ng platform ng 1C:Enterprise 8, bersyon 8.0, ang mga ulat ay ginawa tulad ng sumusunod:
    1. Ang isa o higit pang mga query ay isinulat sa 1C query language (SQL-like language, higit pa tungkol dito sa ibaba).
    2. Isinulat ang code na naglipat ng mga resulta ng mga naisagawang query sa isang spreadsheet na dokumento o chart. Ang code ay maaari ring gumawa ng trabaho na hindi maaaring gawin sa isang query - halimbawa, kinakalkula nito ang mga halaga gamit ang built-in na 1C na wika.
    Ang diskarte ay diretso, ngunit hindi ang pinaka-maginhawa - mayroong isang minimum na mga setting ng visual, ang lahat ay kailangang i-program nang kamay-sa-kamay. At isa sa mga trump card sa oras na iyon ng ganap na bagong platform ng 1C:Enterprise 8 ay ang pag-minimize ng dami ng code sa solusyon sa application na kailangang isulat nang manu-mano, lalo na, dahil sa visual na disenyo. Magiging lohikal na sundin ang parehong landas sa mekanismo ng pag-uulat. Ginawa ito sa pamamagitan ng pagbuo ng bagong mekanismo - ang Data Composition System.

    Isa sa mga ideya na naging batayan ng ACS ay ang flexibility at pag-customize ng mga ulat, na available sa developer at sa end user. Sa isip, gusto naming bigyan ang end user ng access sa parehong hanay ng mga tool sa disenyo ng ulat bilang developer. Magiging lohikal na gumawa ng isang set ng mga tool na magagamit sa lahat. Buweno, dahil ang mga tool ay nagsasangkot ng pakikilahok ng end user, nangangahulugan ito na ang paggamit ng programming sa mga ito ay dapat na alisin sa isang minimum (pinakamahusay sa lahat, ganap na tinanggal), at ang mga visual na setting ay dapat gamitin sa maximum.

    Pagbubuo ng problema

    Ang gawain bago ang pangkat ng pag-unlad ay ito - upang gumawa ng isang sistema ng pag-uulat batay hindi sa isang algorithmic (ibig sabihin, sa pamamagitan ng pagsulat ng code), ngunit sa isang deklaratibong diskarte sa paglikha ng mga ulat. At naniniwala kami na ang problema ay matagumpay na nalutas. Sa aming karanasan, humigit-kumulang 80% ng kinakailangang pag-uulat ang maaaring ipatupad gamit ang ACS nang walang isang linya ng code (maliban sa pagsusulat ng mga formula para sa mga kalkuladong field), sa karamihan - sa pamamagitan ng mga visual na setting.
    Ang pagbuo ng unang bersyon ng ACS ay tumagal ng humigit-kumulang 5 taong-taon.

    Dalawang wika

    Dalawang wika ang kasangkot sa paglikha ng mga ulat. Ang isa ay ang wika ng query na ginamit upang kunin ang data. Ang pangalawa ay ang data composition expression language, na idinisenyo upang magsulat ng mga expression na ginagamit sa iba't ibang bahagi ng system, halimbawa, sa mga setting ng komposisyon ng data, upang ilarawan ang mga custom na field expression.

    Wika ng pagtatanong

    Ang wika ng query ay batay sa SQL at madaling pinagkadalubhasaan ng mga nakakaalam ng SQL. Halimbawa ng kahilingan:

    Madaling makita ang mga analogue ng karaniwang mga seksyon ng query sa SQL - SELECT, FROM, GROUP BY, ORDER BY.

    Kasabay nito, ang wika ng query ay naglalaman ng malaking bilang ng mga extension na naglalayong ipakita ang mga detalye ng mga gawain sa pananalapi at pang-ekonomiya at sa maximum na pagbawas sa mga pagsisikap na bumuo ng mga inilapat na solusyon:

    • Nagre-refer ng mga field sa pamamagitan ng isang tuldok. Kung ang mga field ng anumang talahanayan ay may uri ng sanggunian (nag-iimbak sila ng mga link sa mga bagay ng isa pang talahanayan), maaaring sumangguni ang developer sa mga ito sa text ng query sa pamamagitan ng ".", habang ang bilang ng mga antas ng nesting ng naturang mga link ay hindi limitado ng ang system (halimbawa, Order ng Customer.Kasunduan.Organisasyon. Telepono).
    • Multidimensional at multilevel na pagbuo ng mga resulta. Ang mga kabuuan at subtotal ay nabuo na isinasaalang-alang ang pagpapangkat at hierarchy, ang mga antas ay maaaring ma-bypass sa isang arbitrary na pagkakasunud-sunod na may summing up ng mga subtotal, ang tamang pagbuo ng mga kabuuan ayon sa mga sukat ng oras ay nakasisiguro.
    • Suporta para sa mga virtual na talahanayan. Ang mga virtual na talahanayan na ibinigay ng system ay nagbibigay-daan sa iyo na makakuha ng halos handa na data para sa karamihan ng mga gawain sa application nang hindi nangangailangan na magsulat ng mga kumplikadong query. Kaya, ang isang virtual na talahanayan ay maaaring magbigay ng data sa balanse ng mga kalakal sa konteksto ng mga panahon sa isang tiyak na punto ng oras. Kasabay nito, sinusulit ng mga virtual na talahanayan ang nakaimbak na impormasyon, halimbawa, mga naunang nakalkulang kabuuan, atbp.
    • Mga pansamantalang talahanayan. Pinapayagan ka ng wika ng query na gumamit ng mga pansamantalang talahanayan sa mga query. Sa kanilang tulong, maaari mong pagbutihin ang pagganap ng query, sa ilang mga kaso bawasan ang bilang ng mga lock, at gawing mas madaling basahin ang teksto ng query.
    • mga batch request. Para sa mas maginhawang trabaho sa mga pansamantalang talahanayan, sinusuportahan ng wika ng query ang pagtatrabaho sa mga batch na query - kaya, ang paglikha ng isang pansamantalang talahanayan at ang paggamit nito ay inilalagay sa isang query. Ang batch request ay isang sequence ng mga request na pinaghihiwalay ng semicolon (";"). Ang mga kahilingan sa batch ay isa-isang isinasagawa. Ang resulta ng pagsasagawa ng isang batch query, depende sa paraan na ginamit, ay ang resulta na ibinalik ng huling query ng batch, o isang hanay ng mga resulta ng lahat ng batch na kahilingan sa pagkakasunud-sunod kung saan ang mga kahilingan sa batch ay sumusunod. .
    • Pagkuha ng reference field view. Ang bawat object table (kung saan naka-imbak ang isang direktoryo o dokumento) ay may virtual na field - "Representasyon". Ang patlang na ito ay naglalaman ng isang textual na representasyon ng bagay at ginagawang mas madali ang gawain ng reporter. Kaya, para sa isang dokumento, ang field na ito ay naglalaman ng lahat ng pangunahing impormasyon - ang pangalan ng uri ng dokumento, ang numero at petsa nito (halimbawa, "Sale 000000003 mula 07/06/2017 17:49:14"), na nagse-save sa developer mula sa pagsulat ng kalkuladong patlang.
    • at iba pa.
    Awtomatikong binabago ng query engine ang query, na isinasaalang-alang ang mga tungkulin ng user kung kanino ang query ay isinasagawa (ibig sabihin, makikita lang ng user ang data na may karapatan siyang makita) at mga functional na opsyon (ibig sabihin, alinsunod sa ang naka-configure sa application solution functionality).

    Mayroon ding mga espesyal na extension ng wika ng query para sa SKD. Ang pagpapalawak ay isinasagawa gamit ang mga espesyal na tagubilin sa syntax na nakapaloob sa mga kulot na brace at direktang inilagay sa teksto ng kahilingan. Sa tulong ng mga extension, tinutukoy ng developer kung anong mga operasyon ang magagawa ng end user sa pamamagitan ng pag-customize sa ulat.

    Halimbawa:

    • PUMILI. Inilalarawan ng pangungusap na ito ang mga field na mapipili ng user para sa output. Pagkatapos ng keyword na ito, ang mga alias ng mga field mula sa pangunahing listahan ng pagpili ng query, na magiging available para sa pagpapasadya, ay nakalista na pinaghihiwalay ng mga kuwit. Halimbawa: (SELECT Nomenclature, Warehouse)
    • SAAN. Inilalarawan ang mga field kung saan maaaring ilapat ng user ang pagpili. Gumagamit ang panukalang ito ng mga field ng talahanayan. Hindi pinapayagan ang paggamit ng mga piling field alias ng listahan. Ang bawat bahagi ng unyon ay maaaring maglaman ng sarili nitong WHERE na elemento. Mga Halimbawa: (WHERE Nomenclature.*, Warehouse ), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • at iba pa.
    Isang halimbawa ng paggamit ng mga extension:

    Wika ng Pagpapahayag ng Komposisyon ng Data

    Ang wika ng expression ng komposisyon ng data ay idinisenyo upang magsulat ng mga expression na ginamit, sa partikular, upang ilarawan ang mga custom na expression ng field. Binibigyang-daan ka ng ACS na tukuyin ang mga custom na field sa isang ulat gamit ang alinman sa iyong sariling mga expression o hanay ng mga opsyon na may mga kundisyon para sa kanilang pagpili (katulad ng CASE sa SQL). Ang mga custom na field ay kahalintulad ng mga kalkuladong field. Maaari silang itakda pareho sa configurator at sa 1C:Enterprise mode, ngunit hindi magagamit ang mga function ng mga karaniwang module sa mga custom na field expression. Samakatuwid, mas para sa user ang mga custom na field kaysa sa developer.

    Halimbawa:

    Ang proseso ng paglikha ng isang ulat sa ACS

    Kapag gumagawa ng ulat, kailangan naming gumawa ng layout na tumutukoy kung paano ipapakita ang data sa ulat. Maaari kang lumikha ng isang layout batay sa isang schema ng komposisyon ng data. Inilalarawan ng schema ng komposisyon ng data ang kakanyahan ng data na ibinibigay sa ulat (kung saan kukuha ng data at kung paano mo makokontrol ang komposisyon nito). Ang scheme ng komposisyon ng data ay ang batayan kung saan maaaring mabuo ang lahat ng uri ng mga ulat. Ang scheme ng komposisyon ng data ay maaaring maglaman ng:
    • humiling ng text na may mga tagubilin sa sistema ng komposisyon ng data;
    • paglalarawan ng ilang set ng data;
    • isang detalyadong paglalarawan ng magagamit na mga patlang;
    • paglalarawan ng mga relasyon sa pagitan ng ilang set ng data;
    • paglalarawan ng mga parameter ng pagkuha ng data;
    • paglalarawan ng mga layout ng field at pagpapangkat;
    • at iba pa.

    Halimbawa, maaari kang magdagdag ng query sa scheme ng komposisyon ng data bilang isang set ng data, at tawagan ang tagabuo ng query, na nagbibigay-daan sa iyong graphical na bumuo ng query ng arbitraryong kumplikado:

    Ang resulta ng pagpapatakbo ng tagabuo ng query ay ang text ng query (sa 1C:Enterprise query language). Maaaring manu-manong ayusin ang tekstong ito kung kinakailangan:

    Maaaring may ilang set ng data sa isang scheme ng komposisyon ng data, maaaring i-link ang mga set ng data sa isang layout sa isang arbitrary na paraan, maaaring idagdag ang mga kalkuladong field, maaaring itakda ang mga parameter ng ulat, atbp. Ito ay nagkakahalaga ng pagbanggit ng isang kawili-wiling tampok ng mekanismo ng query sa 1C: Enterprise. Ang mga query sa kalaunan ay isinalin sa isang dialect ng SQL na partikular sa DBMS kung saan direktang gumagana ang application. Sa pangkalahatan, sinusubukan naming gamitin ang mga kakayahan ng mga server ng DBMS sa maximum (nalilimitahan kami sa katotohanang ginagamit lang namin ang mga kakayahan na sabay-sabay na magagamit sa lahat ng DBMS na sinusuportahan ng 1C:Enterprise platform - MS SQL, Oracle, IBM DB2 , PostgreSQL). Kaya, sa antas ng query sa mga kalkuladong field, magagamit lang namin ang mga function na isinalin sa SQL.

    Ngunit sa antas ng scheme ng komposisyon ng data, maaari na kaming magdagdag ng mga custom na field at gumamit ng mga function sa mga ito sa built-in na 1C development language (kabilang ang mga isinulat namin), na lubos na nagpapalawak ng mga kakayahan ng mga ulat. Sa teknikal, ganito ang hitsura - lahat ng maaaring isalin sa SQL ay isinalin sa SQL, ang query ay isinasagawa sa antas ng DBMS, ang mga resulta ng query ay inilalagay sa memorya ng 1C application server, at kinakalkula ng ACS ang mga halaga. ng mga kalkuladong field para sa bawat tala, na ang mga formula ay nakasulat sa 1C na wika.


    Pagdaragdag ng Mga Custom na Field

    Maaari kang magdagdag ng anumang bilang ng mga talahanayan at chart sa ulat:


    Taga-disenyo ng Ulat


    Mag-ulat sa oras ng pagtakbo

    Sa tulong ng ACS, maaaring magdagdag ang user ng mga kumplikadong seleksyon sa ulat (na idaragdag sa query sa mga tamang lugar), kondisyonal na disenyo (nagbibigay-daan sa iyong mag-format nang iba - font, kulay, atbp. - mga field ng output depende sa kanilang mga halaga) at marami pang iba .

    Maikling ilarawan ang proseso ng pagbuo at pagbuo ng ulat tulad ng sumusunod:

    • Tinutukoy ng developer sa oras ng disenyo sa tulong ng taga-disenyo (o sa runtime sa tulong ng code) ang scheme ng layout ng data:
      • Teksto ng kahilingan/kahilingan
      • Paglalarawan ng mga kalkuladong field
      • Mga ugnayan sa pagitan ng mga query (kung mayroong higit sa isa)
      • Mga Opsyon sa Ulat
      • Mga default na setting
      • atbp.
    • Ang mga setting sa itaas ay naka-save sa layout
    • Nagbubukas ang user ng ulat
      • Posibleng gumawa ng mga karagdagang setting (halimbawa, mga pagbabago sa mga value ng parameter)
      • Pinindot ang pindutang "Bumuo".
    • Nalalapat ang mga setting ng user sa scheme ng komposisyon ng data na tinukoy ng developer.
    • Ang isang intermediate na layout ng komposisyon ng data ay nabuo, na naglalaman ng mga tagubilin kung saan kukuha ng data. Sa partikular, ang mga query na tinukoy sa layout ay naitama. Kaya, ang mga patlang na hindi ginagamit sa ulat ay tinanggal mula sa kahilingan (ginagawa ito upang mabawasan ang dami ng natanggap na data). Ang lahat ng mga patlang na ginagamit sa mga kalkuladong formula ng field ay idinaragdag sa query.
    • Ang processor ng komposisyon ng data ay kasama sa kaso. Ang processor ng layout ay nagsasagawa ng mga query, nagli-link ng mga set ng data, kinakalkula ang mga halaga ng mga kalkuladong field at mapagkukunan, nagsasagawa ng pagpapangkat. Sa madaling salita, ginagawa nito ang lahat ng mga kalkulasyon na hindi isinagawa sa antas ng DBMS.
    • Ang data output processor ay naglulunsad ng isang query para sa pagpapatupad at naglalabas ng natanggap na data sa isang spreadsheet na dokumento, tsart, atbp.


    Ang proseso ng pagbuo ng isang ulat sa pamamagitan ng mekanismo ng ACS

    Sinusubukan naming i-minimize ang dami ng data ng pag-uulat na inilipat mula sa server patungo sa application ng kliyente. Kapag nagpapakita ng data sa isang dokumento ng spreadsheet, kapag nagbubukas ng isang dokumento ng spreadsheet, inililipat lamang namin mula sa server ang mga linyang iyon na nakikita ng user sa simula ng dokumento. Habang gumagalaw ang user sa mga linya ng dokumento, dina-download ang nawawalang data mula sa server patungo sa kliyente.

    Mga setting ng user

    Ang lahat ng tool ng ACS ay available sa developer at sa end user. Ngunit ipinakita ng pagsasanay na ang end user ay madalas na natatakot sa kasaganaan ng mga kakayahan ng tool. Bukod dito, sa karamihan ng mga kaso, hindi kailangan ng end user ang lahat ng kapangyarihan ng mga setting - sapat na para sa kanya na magkaroon ng mabilis na access sa pagtatakda ng isa o dalawang mga parameter ng ulat (halimbawa, panahon at katapat). Simula sa isang partikular na bersyon ng platform, may pagkakataon ang developer ng ulat na markahan kung aling mga setting ng ulat ang available sa user. Ginagawa ito gamit ang checkbox na "Isama sa mga setting ng user." Gayundin, ang mga setting ng ulat ay mayroon na ngayong flag na "Display mode" na kumukuha ng isa sa tatlong value:
    • Mabilis na pag-access. Direktang ipapakita ang setting sa tuktok ng window ng ulat.
    • Ordinaryo. Magiging available ang setting sa pamamagitan ng button na "Mga Setting".
    • Hindi magagamit. Hindi magiging available ang setting sa end user.


    Pagtatakda ng display mode sa oras ng disenyo


    Ipakita ang setting sa Quick Access mode sa runtime (sa ilalim ng Generate button)

    Mga plano sa pagpapaunlad

    Isa sa mga priyoridad sa pagbuo ng ACS para sa amin ay ang pagpapasimple ng mga setting ng user. Ipinapakita ng aming karanasan na para sa ilang end user, ang pagtatrabaho sa mga setting ng user ay isang seryosong trabaho pa rin. Isinasaalang-alang namin ito at nagtatrabaho sa direksyong ito. Alinsunod dito, magiging mas madali para sa mga developer na magtrabaho kasama ang ACS, dahil gusto namin, tulad ng dati, na magbigay ng isang toolkit para sa pag-set up ng mga ulat para sa developer at sa end user.

    Dahil sa paparating na release ng 8.2.14, susubukan kong ilarawan ang ilan sa mga bagong feature ng system ng komposisyon ng data.

    Buksan ang scheme ng komposisyon ng data, mas mabuti sa isang panlabas na ulat, upang gawing mas madali ang pag-edit.

    Nagdaragdag kami ng set ng data ng query at isinusulat, manu-mano man o gamit ang tagabuo ng query, ang pinakasimpleng query:

    1. Mag-set up ng kahilingan sa ACS.

    2. I-set up ang mga kalkuladong field sa ACS

    3. Kino-configure namin ang layout ng data sa tab na mga setting

    4. Inilunsad namin ang 1C Enterprise 8.2.14. Binuksan namin ang ulat. Binubuo namin, tinatanggap namin.

    Paglalarawan ng mga bagong feature mismo:

    1. Ang kasalukuyang petsa()

    Ibinabalik ang petsa ng system. Kapag inilatag ang layout ng layout, sa lahat ng expression na naroroon sa layout, ang CurrentDate() function ay pinapalitan ng halaga ng kasalukuyang petsa.

    2. COMPUTE EXPRESSION()

    Syntax:

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

    Paglalarawan:

    Ang function ay idinisenyo upang suriin ang isang expression sa konteksto ng ilang pagpapangkat.

    Isinasaalang-alang ng function ang pagpili ng mga pagpapangkat, ngunit hindi isinasaalang-alang ang mga hierarchical na seleksyon.

    Hindi mailalapat ang function sa isang pagpapangkat sa pagpili ng pangkat ng pagpapangkat na iyon. Halimbawa, sa pagpili ng Nomenclature grouping, hindi mo magagamit ang expression na Calculate Expression ("Sum(SumTurover)", "TotalTotal") > 1000. Ngunit ang ganitong expression ay maaaring gamitin sa hierarchical selection.

    Kung ang rekord ng pagtatapos ay nauuna sa rekord ng pagsisimula, pagkatapos ay itinuturing na walang mga tala para sa pagkalkula ng detalyadong data at pagkalkula ng mga pinagsama-samang pag-andar.

    Kapag kinakalkula ang mga expression ng interval para sa grand total (ang parameter ng Pagpapangkat ay nakatakda sa GrandTotal), itinuturing na walang mga tala para sa pagkalkula ng detalyadong data at pagkalkula ng mga pinagsama-samang function.

    Ang tagabuo ng layout, kapag bumubuo ng expression ng Calculate Expression function, kung ang ordering expression ay naglalaman ng mga field na hindi magagamit sa pagpapangkat, papalitan ang Calculate Expression function ng NULL.

    Mga pagpipilian

    <Выражение>

    Uri: String. Ang ekspresyong susuriin.

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

    Uri: String. Naglalaman ng pangalan ng pagpapangkat kung saan ang konteksto ay susuriin ang expression. Kung ginamit ang isang walang laman na string bilang pangalan ng pagpapangkat, isasagawa ang pagkalkula sa konteksto ng kasalukuyang pagpapangkat. Kung ginamit ang string na GrandTotal bilang pangalan ng pagpapangkat, isasagawa ang pagkalkula sa konteksto ng kabuuang kabuuan. Kung hindi, isasagawa ang pagkalkula sa konteksto ng pagpapangkat ng magulang na may ganoong pangalan.

    Halimbawa:

    Sum(Sales.SumTurnover)/Calculate(“Sum(Sales.SumTurover)”, “TotalTotal”)

    Sa halimbawang ito, ang resulta ay ang ratio ng halaga para sa field na Sales.AmountVolume ng talaan ng pagpapangkat sa halaga ng parehong field sa buong layout;

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

    Uri: String. Maaaring kunin ng parameter ang mga sumusunod na halaga:

    • GeneralTotal - ang expression ay kakalkulahin para sa lahat ng mga tala ng pagpapangkat.
    • Hierarchy - susuriin ang expression para sa hierarchical na entry ng magulang, kung mayroon, at para sa buong pagpapangkat, kung walang hierarchical na entry ng magulang.
    • Pagpapangkat - susuriin ang expression para sa kasalukuyang tala ng pagpapangkat.
    • GroupingNotResource - kapag kinakalkula ang isang function para sa isang talaan ng pangkat ayon sa mga mapagkukunan, ang expression ay kakalkulahin para sa unang tala ng pangkat ng orihinal na pagpapangkat.

    Kapag kinakalkula ang function Compute Expression() na may value na GroupingNotResource para sa mga tala ng pangkat na hindi pagpapangkat ayon sa mga mapagkukunan, sinusuri ang function sa parehong paraan tulad ng pagkalkula kung ang halaga ng parameter ay katumbas ng value ng Pagpapangkat.

    Ang tagabuo ng layout ng layout ng komposisyon ng data, kapag bumubuo ng layout ng layout ng komposisyon ng data, kapag ipinapakita ang field ng mapagkukunan kung saan isinasagawa ang pagpapangkat, naglalagay ng expression sa layout na kinakalkula gamit ang function. Compute Expression(), na tumutukoy sa parameter ng GroupingNotResource. Para sa iba pang mga mapagkukunan na nakapangkat ayon sa mapagkukunan, inilalagay ang mga regular na expression ng mapagkukunan.

    <Начало>

    Uri: String. Tinutukoy kung aling record ang magsisimula ng fragment kung saan kakalkulahin ang pinagsama-samang mga function ng expression at mula sa kung aling talaan makukuha ang mga value ng mga field sa labas ng pinagsama-samang mga function. Ang halaga ay maaaring isa sa mga sumusunod:

    <Конец>

    Uri: String. Isinasaad kung saang talaan ipagpatuloy ang fragment kung saan kakalkulahin ang mga pinagsama-samang function ng expression. Ang halaga ay maaaring isa sa mga sumusunod:

    • Una (Una). Kailangan mong makuha ang unang tala ng pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang offset mula sa simula ng pagpapangkat. Ang resultang halaga ay dapat na isang integer na mas malaki sa zero. Halimbawa, Una(3) - pagkuha ng ikatlong tala mula sa simula ng pagpapangkat.

    Kung ang unang entry ay nasa labas ng pagpapangkat, kung gayon ito ay itinuturing na walang mga entry. Halimbawa, kung mayroong 3 mga tala, at gusto mong makuha ang Una(4), kung gayon ito ay itinuturing na walang mga tala.

    • Huli (Huling). Kailangan mong makuha ang pinakabagong entry sa pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang offset mula sa dulo ng pagpapangkat. Ang resultang halaga ay dapat na isang integer na mas malaki sa zero. Halimbawa, Huli(3) - Nakukuha ang ikatlong tala mula sa dulo ng pagpapangkat.

    Kung ang huling entry ay nasa labas ng pagpapangkat, kung gayon ay itinuturing na walang mga entry. Halimbawa, kung mayroong 3 mga tala, at nais mong makakuha ngLast(4), kung gayon ito ay itinuturing na walang mga tala.

    • Nakaraang. Kailangan mong makuha ang nakaraang entry sa pagpapangkat. Pagkatapos ng salita sa panaklong, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang isang paglipat pabalik mula sa kasalukuyang tala ng pagpapangkat. Halimbawa, Nakaraan(2) - kunin ang nakaraan mula sa nakaraang tala.

    Kung ang nakaraang tala ay nasa labas ng pagpapangkat (halimbawa, ang pangalawang tala ng pagpapangkat ay kailangang makakuha ng Nakaraan(3), pagkatapos ay ang unang tala ng pagpapangkat ay makukuha.

    Kapag nakuha ang nakaraang tala para sa kabuuang pagpapangkat, itinuturing na nakuha ang unang tala.

    • Susunod (Next). Kailangan mong makuha ang susunod na entry sa pagpapangkat. Pagkatapos ng salita sa mga bracket, maaari mong tukuyin ang isang expression, ang resulta nito ay gagamitin bilang pasulong na paglilipat mula sa kasalukuyang tala ng pagpapangkat. Halimbawa, Next(2) - kunin ang susunod mula sa susunod na record.

    Kung ang susunod na tala ay lumampas sa pagpapangkat, kung gayon ito ay itinuturing na walang mga tala. Halimbawa, kung mayroong 3 mga tala at ang ikatlong talaan ay makakakuha ng Susunod (), kung gayon ito ay itinuturing na walang mga tala.

    Kapag ang susunod na tala ay natanggap para sa kabuuang pagpapangkat, ito ay itinuturing na walang tala.

    • Kasalukuyan (Kasalukuyan). Kailangan mong makuha ang kasalukuyang entry.

    Kapag nakuha para sa kabuuang pagpapangkat, ang unang tala ay kukunin.

    • BoundaryValue. Ang pangangailangang makuha ang rekord ayon sa tinukoy na halaga. Pagkatapos ng salitang RestrictingValue sa mga bracket, kailangan mong tukuyin ang expression na may halaga kung saan mo gustong simulan ang fragment, ang unang field ng pag-order.

    Ang talaan ang magiging unang tala na ang halaga ng field ng pag-order ay mas malaki kaysa o katumbas ng tinukoy na halaga. Halimbawa, kung ang patlang na Panahon ay ginamit bilang field ng pag-order, at mayroon itong mga halaga 01/01/2010, 02/01/2010, 03/01/2010, at gusto mong makuha ang LimitValue(DateTime(2010). , 1, 15)), pagkatapos ay matatanggap ang isang talaan na may petsang 02/01. 2010.

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

    Uri: String. Nakalista ang mga expression na pinaghihiwalay ng kuwit na naglalarawan sa mga panuntunan sa pag-order. Kung hindi tinukoy, ang pag-order ay isinasagawa sa parehong paraan tulad ng para sa pagpapangkat kung saan sinusuri ang expression. Pagkatapos ng bawat expression, maaari mong tukuyin ang mga keyword na Asc (upang pag-uri-uriin sa pataas na pagkakasunud-sunod), Pababa (upang pag-uri-uriin sa pababang pagkakasunud-sunod), at AutoOrder (upang pag-uri-uriin ang mga na-reference na field ayon sa mga field kung saan mo gustong pag-uri-uriin ang na-refer na bagay). Ang salitang AutoOrder ay maaaring gamitin sa parehong Pataas at Pababang mga salita.

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

    Uri: String. Katulad ng pagpipiliang Pagbukud-bukurin. Ginagamit upang ayusin ang mga hierarchical na tala. Kung hindi tinukoy, ang tagabuo ng layout ay bubuo ng pag-order ayon sa pagkakasunud-sunod na tinukoy sa parameter ng Pagbukud-bukurin.

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

    Uri: String. Tinutukoy ang isang panuntunan upang matukoy ang nakaraan o susunod na tala kung mayroong maraming mga tala na may parehong halaga ng pag-order:

    • Ang hiwalay ay nangangahulugan na ang isang pagkakasunud-sunod ng mga nakaayos na tala ay ginagamit upang matukoy ang nakaraan at susunod na mga tala. Default na halaga.
    • Ang Together (Together) ay nangangahulugan na ang nakaraan at susunod na mga tala ay tinutukoy batay sa mga halaga ng mga expression ng pag-order.

    Halimbawa, kung ang resultang sequence ay inayos ayon sa petsa:

    petsa Buong pangalan Ibig sabihin
    1 Enero 01, 2001 Ivanov M. 10
    2 Enero 02, 2001 Petrov S. 20
    3 Enero 03, 2001 Sidorov R. 30
    4 Enero 04, 2001 Petrov S. 40

    Kung ang halaga ng parameter ay Hiwalay, kung gayon:

    § ang dating entry sa entry 3 ay magiging entry 2.

    § kung ang fragment ng pagkalkula ay tinukoy bilang Kasalukuyan, Kasalukuyan (ayon sa pagkakabanggit, ang mga parameter na Simula at Wakas), kung gayon para sa talaan 2 ang fragment na ito ay bubuo ng isang talaan 2. Ang expression na Kalkulahin ang Expression ("Sum (Value)", Kasalukuyan, Kasalukuyan) ay magiging katumbas ng 20.

    Kung ang halaga ng parameter ay Sama-sama, kung gayon:

    § ang dating entry sa entry 3 ay magiging entry 1.

    § kung ang fragment ng pagkalkula ay tinukoy bilang Kasalukuyan, Kasalukuyan (ayon sa pagkakabanggit, ang Start at End parameters), kung gayon para sa record 2 ang fragment na ito ay bubuo ng mga talaan 2 at 3. Expression CalculateExpression("Sum(Value)", Current, Current) ay maging katumbas ng 50.

    Kapag tinukoy ang halaga ng parameter na katumbas ng Magkasama, sa mga parameter na Start at End, hindi mo maaaring tukuyin ang isang offset para sa mga posisyon na Una, Huli, Nakaraan, Susunod.

    CalculateExpression("Halaga(AmountTurnover)", "Una", "Kasalukuyan")

    Kung gusto mong makuha ang value ng pagpapangkat sa nakaraang linya, maaari mong gamitin ang sumusunod na expression:

    CalculateExpression("Course", "Previous")

    Listahan bago mga function:

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

    Ang function ay nagbabalik ng array, ang bawat elemento ay naglalaman ng resulta ng pagsusuri ng expression para sa pagpapangkat ayon sa tinukoy na field.

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

    Ang function ay nagbabalik ng isang talahanayan ng mga halaga, ang bawat hilera ay naglalaman ng resulta ng pagsusuri ng mga expression para sa pagpapangkat ayon sa tinukoy na field

    ValueFilled(<Выражение>) – Nagbabalik ng True kung ang value ay iba sa default na value ng ibinigay na uri, maliban sa NULL, maliban sa null reference, maliban sa Undefined. Ang mga halaga ng Boolean ay sinubukan para sa NULL. Sinusuri ang mga string para sa mga hindi whitespace na character.

    Format(<Выражение>, <Форматная строка>) – Kunin ang na-format na string ng naipasa na halaga. Ang format na string ay itinakda alinsunod sa format na string ng 1C:Enterprise system.

    Substring(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) - Ang function na ito ay idinisenyo upang pumili ng isang substring mula sa isang string.

    Haba ng String(<Выражение>) – Ang function ay idinisenyo upang matukoy ang haba ng isang string. Parameter - expression ng uri ng string

    Linya(<Выражение>) – Kung ang isang array ay ipinasa bilang isang parameter, ang function ay nagbabalik ng isang string na naglalaman ng mga representasyon ng string ng lahat ng mga elemento ng array, na pinaghihiwalay ng mga character na "; “. Kung ang isang talahanayan ng mga halaga ay ipinasa bilang isang parameter, ang function ay nagbabalik ng isang string na naglalaman ng mga representasyon ng string ng lahat ng mga hilera ng talahanayan ng mga halaga, at ang mga representasyon ng cell ng bawat linya ay pinaghihiwalay ng mga character na "; “, at mga string na may bagong linyang karakter. Kung ang anumang elemento ay may walang laman na representasyon ng string, sa halip na representasyon nito, isang string ang ipinapakita<Пустое значение>.

    Kamusta mahal na mambabasa! Mayroon kaming isa pang aralin sa mga pangunahing kaalaman ng sistema ng layout. Sa nakilala mo ang mga pag-andar ng wika ng expression ng SKD, nakita ang mga tampok ng sistema ng layout, at naisip din ang mga pangunahing setting para sa mga patlang ng layout. At ngayon ay isasaalang-alang natin ang isang bagong materyal. Go!

    Mga karagdagang setting para sa mga field ng ACS.

    Kolum "uri ng halaga" nagbibigay-daan sa iyo na tukuyin ang uri ng data para sa field ng layout. Bakit tukuyin ang uri, halimbawa, para sa field na "Nomenclature", kung alam mo na kung anong uri ito? Ito ay kinakailangan kung ang layout field ay isang composite na uri. Maaari kang pumili ng isang partikular na uri, pagkatapos kapag nag-filter ayon sa field na ito, ang mga halaga ng ganitong uri ay pipiliin.

    Kolum "Mga Magagamit na Halaga" nagbibigay-daan sa iyo na tukuyin ang mga value na magagamit para sa pagpili at limitahan ang pagpili ng user sa ilang partikular na limitasyon.

    Kolum "Dekorasyon" nagbibigay-daan sa iyo na itakda ang hitsura ng field ng layout nang hindi gumagamit ng mga layout. Maaari mong tukuyin ang kulay ng font, kulay ng frame, oryentasyon ng teksto, at iba pa.

    Kolum "Mga Opsyon sa Pag-edit" nagbibigay-daan sa iyo na tukuyin kung paano i-edit ang field ng layout. Halimbawa, maaari mong tukuyin ang isang mabilis na pagpili ng mga item mula sa isang listahan sa isang seleksyon. Bilang default, minana ng field ng layout ang lahat ng opsyon sa pag-edit mula sa metadata object.

    Mga kalkuladong field

    Maaari kang lumikha ng sarili mong mga kalkuladong field sa tab na Mga nakalkulang field ng komposisyon ng data.

    Bakit kailangan natin ng mga kalkuladong field kapag maaari nating gawin ang mga ito sa antas ng query? Hindi lahat ng field ay maaaring ilarawan sa isang query. Kung kailangan mong bumuo ng isang kumplikadong field mula sa iba't ibang set ng data, halimbawa, mga uri ng query at object, kung gayon ang mga kalkuladong field ay kailangang-kailangan. Hindi ka maaaring magdagdag ng field ng komposisyon ng data kung ang data source ay isang query at autocomplete, ngunit maaari kang magdagdag ng maraming field hangga't gusto mo gamit ang mga kalkuladong field.

    Sa column ng kalkuladong field na "Expression" kailangan mong magsulat ng arbitrary na expression na gumagamit ng mga field ng komposisyon ng data, na tumutukoy sa kanilang path ("Path" column sa tab na "Data sets"). Maaari mong gamitin ang mathematical transformation function, o maaari kang sumangguni sa mga function ng mga pangkalahatang module. Halimbawa, isulat natin ang pangalan ng nakalkulang field na "Deviation" sa column na "Path to data," at ang sumusunod sa field na "Expression":

    Halaga - Presyo* Dami

    Tingnan ang isa pa, at maaari ka ring mag-download gamit ang mga function na ito.

    Sa pangkalahatan, ang mga kalkuladong field ay nakatakda sa parehong mga setting tulad ng mga patlang ng layout. Ang column lang ng Hierarchy Group ang nawawala dito. Kapag nagsusulat ng mga kalkuladong field, hindi ka maaaring sumangguni sa iba pang mga kalkuladong field.

    Paano maglipat ng mga parameter at mga seleksyon sa isang ulat na binuo sa ACS nang hindi gumagawa ng form ng ulat?

    &AtClient // Pagpasa ng mga parameter sa ulat ng ACS Pamamaraan Pagproseso ng Utos(Parameter ng Utos, Parameter ng Pagpapatupad ng Utos) Pagpili = Bagong Istraktura("Katawagan", Parameter ng Utos) ; FixedSettings = GetFixedSettings() ; FormParameters = Bagong Structure( "ShapeOnOpen, Pagpili, Variant Key, FixedSettings", Katotohanan , Pagpili, "Variant ng Sales Report", FixedSettings); OpenForm( "Report.SalesReport.Form", FormParameters); EndProcedure &AtServer Function GetFixedSettings() Sales Report = Mga Ulat. Ulat sa pagbebenta. Lumikha (); SKD = ​​Ulat sa Pagbebenta. DataCompositionScheme; Mga Setting = SKD. Mga default na setting; StartPeriod = Mga Setting. Mga ParameterData. FindParameterValue( NewDataCompositionParameter("PeriodStart") ); Simula ng period. Value = MonthStart(CurrentDate()) ; Simula ng period. Usage = true ; StartPeriod = Mga Setting. Mga ParameterData. FindParameterValue( NewDataCompositionParameter("EndPeriod" ) ); EndPeriod. Halaga = EndMonth(CurrentDate() ); EndPeriod. Usage = true ; Mga Setting ng Bumalik; EndFunctions // GetFixedSettings()

    Paano ihanay ang mga heading ng column sa gitna sa isang ulat ng SKD?

    Kailangan mong magtakda ng dalawang parameter sa field na "Disenyo" sa tab na "Mga Set ng Data":

    Pahalang na Posisyon: Gitna Vertical Posisyon: Gitna

    Gayundin sa tab na "Mga Setting" sa ibaba makikita mo ang isa pang tab: "Kondisyon na Hitsura". Doon para sa bawat pagpapangkat, parameter, atbp. maaari mong itakda ang layout na gusto mo.

    Mukhang nasabi na niya lahat! Habang naaalala mo, may pagkakataon kang magtanong, kung mayroon man. Susubukan kong sagutin. Sa hinaharap plano kong magsulat ng higit pang mga artikulo sa paksang ito, kaya huwag kalimutang mag-subscribe sa mga update ng aming site upang hindi ito makaligtaan! Gayundin, siguraduhing gumawa ng pagsusulit upang pagsama-samahin ang materyal mula sa araling ito.

    Sa dulo ng artikulo gusto kong payuhan ka nang libre mula sa Anatoly Sotnikov. Ito ay isang kurso mula sa isang bihasang programmer. Ipapakita niya sa iyo sa isang hiwalay na batayan kung paano bumuo ng mga ulat sa ACS. Kailangan mo lang makinig ng mabuti at tandaan! Makakatanggap ka ng mga sagot sa mga tanong tulad ng:
    • Paano lumikha ng isang simpleng ulat ng listahan?
    • Para saan ang Field, Path, at Title column sa tab na Fields?
    • Ano ang mga paghihigpit sa mga patlang ng layout?
    • Paano maayos na mag-set up ng mga tungkulin?
    • Ano ang mga tungkulin para sa mga patlang ng layout?
    • Saan ko mahahanap ang tab ng layout ng data sa isang query?
    • Paano i-configure ang mga parameter sa SKD?
    • Higit pang mas kawili-wili...
    Marahil ay hindi mo dapat subukang mag-surf sa Internet sa iyong sarili sa paghahanap ng kinakailangang impormasyon? Bukod dito, handa na ang lahat para magamit. Magsimula ka lang! Lahat ng mga detalye tungkol sa kung ano ang nasa libreng video tutorial