Bahay / Balita / Mga virtual na talahanayan ng 1c query na wika. Tab ng Query Batch

Mga virtual na talahanayan ng 1c query na wika. Tab ng Query Batch

Tawagan natin ang dialog para sa paglalagay ng mga parameter ng PriceSliceLast virtual na talahanayan at ipahiwatig na ang panahon ay ipapasa sa ReportDate na parameter. Upang gawin ito, piliin ang talahanayang ito sa listahan ng Mga Talahanayan at i-click ang pindutang Mga Pagpipilian virtual na mesa. Pagkatapos ay piliin ang mga sumusunod na field mula sa mga talahanayan:

    SprNomenclature.

    magulang,

PresyoSlice ng Latest.Price.

- Pagsali sa kaliwang mesa Sa bookmark Mga koneksyon

: sa field na Kondisyon ng Link, na ang halaga ng dimensyon ng Nomenclature ng rehistro ng impormasyon ay dapat na katumbas ng reference sa elemento ng direktoryo ng Nomenclature. At alisan din ng tsek ang All checkbox para sa register table at suriin ito para sa lookup table, at sa gayon ay itatakda ang uri ng koneksyon bilang isang kaliwang koneksyon para sa lookup table:

- Pagsali sa kaliwang mesa kanin. 13.15. Relasyon sa pagitan ng mga talahanayan sa isang query Mga tuntunin

itakda natin ang kundisyon para sa pagpili ng mga elemento mula sa direktoryo ng Nomenclature - ang mga napiling elemento ay dapat tumutugma sa uri ng nomenclature na ipinasa sa parameter ng kahilingan ng Nomenclature Type:

- Pagsali sa kaliwang mesa kanin. 13.16. Mga kondisyon para sa pagpili ng mga elemento Mga Unyon/Alyas: tukuyin ang alias ng field na Parent = Service Group, at ang field na Link = Service.

- I-click ang OK– Pagkatapos nito, kailangan mong i-edit ang scheme ng layout ng data, upang gawin ito sa tab Mga mapagkukunan , mag-click sa pindutan idagdag at pumili ng mapagkukunan -

- Pagsali sa kaliwang mesa Presyo Mga pagpipilian

itakda ang halaga ng parameter na Uri ng Nomenclature - Enumeration.Nomenclature Types.Service. Bilang karagdagan, aalisin namin ang paghihigpit sa availability para sa parameter ng ReportDate. Sa field na Uri ng parameter na ito, itakda ang komposisyon ng petsa - Petsa. Para sa parameter na Panahon, sa kabaligtaran, magtatakda kami ng paghihigpit sa availability:

kanin. 13.17. Mga Pagpipilian sa Layout Scheme

- Mga setting Pumunta tayo sa bookmark Mga Setting:

Gumawa tayo ng pagpapangkat batay sa field ng Service Group, na tumutukoy sa uri ng pagpapangkat na Hierarchy. Nang walang hierarchy - mga hindi hierarchical na tala lamang ang ipinapakita sa pagpapangkat. Hierarchy - parehong hindi hierarchical at hierarchical na mga talaan ay ipinapakita sa pagpapangkat. Hierarchy lamang - ang mga hierarchical (magulang) na talaan lamang ang ipinapakita sa pagpapangkat. Sa loob ng pangkat na ito gagawa kami ng isa pa, nang hindi tinukoy ang field ng grupo. Sa sub-tab Mga napiling field:

tukuyin ang mga patlang ng output Serbisyo at Presyo:

kanin. 13.18. Istruktura ng ulat at mga patlang Sa sub-tab Iba pa

mga setting ay gagawin namin ang mga sumusunod na hakbang:

kanin. 13.19. Mga setting para sa pagpapakita ng mga pangkalahatang kabuuan para sa pagpapangkat ng "Pangkat ng Serbisyo."

kanin. 13.20. Pagse-set up at pagpapakita ng mga kabuuan para sa isang pandaigdigang ulat

    Panghuli, isama natin ang parameter ng Report Date sa mga setting ng user at itakda ang Editing Mode nito sa Quick Access. Isara natin ang taga-disenyo ng scheme ng komposisyon ng data at sa window para sa pag-edit ng bagay na Listahan ng Mga Serbisyo, pumunta sa tab na Mga Subsystem. Sa listahan ng mga subsystem ng pagsasaayos, tandaan ang mga subsystem ng Probisyon ng Serbisyo at Accounting.

Sa 1C: Enterprise mode Ilunsad natin ang 1C:Enterprise sa debug mode at una sa lahat buksan ang periodic register Prices.

Pagkatapos ay susubukan namin ang ulat.

Gamit ang ulat na ito bilang halimbawa, pinag-aralan namin kung paano nakukuha ng sistema ng komposisyon ng data ang pinakabagong mga halaga mula sa pana-panahong rehistro ng impormasyon at kung paano ipinapakita ang mga pagpapangkat ayon sa hierarchy ng direktoryo.

Nagpasya akong gawin ang aking kontribusyon at ilarawan ang mga katangian ng wikang hindi tinalakay sa mga artikulo sa itaas. Ang artikulo ay naglalayong sa mga nagsisimulang developer.

1. "IZ" na disenyo.
Upang makakuha ng data mula sa database, hindi kinakailangan na gamitin ang "FROM" construction.
Halimbawa: Kailangan naming piliin ang lahat ng impormasyon tungkol sa mga bangko mula sa direktoryo ng mga bangko.

Kahilingan:

SELECT Directory.Banks.*

Pinipili ang lahat ng mga field mula sa direktoryo ng Banks. At katulad ng kahilingan:

PUMILI NG Mga Bangko.* MULA SA Direktoryo.Mga Bangko BILANG Mga Bangko

2. Pag-order ng data sa pamamagitan ng reference field

Sa kasong ito, para sa mga dokumento ang pag-order ay magaganap sa pagkakasunud-sunod na "Petsa->Numer", para sa mga reference na aklat sa "Main View". Kung ang pag-order ay hindi nangyari sa pamamagitan ng mga reference na field, hindi inirerekomenda ang paggamit ng "AUTO ORDER" na pagbuo.

Sa ilang mga kaso, ang pagbuo ng "AUTO ORDER" ay maaaring makapagpabagal sa proseso ng pagpili. Katulad nito, maaari kang muling magsulat nang walang awtomatikong pag-order para sa mga dokumento:

3.Pagkuha ng representasyon ng teksto ng isang uri ng sanggunian. "PRESENTASYON" na disenyo.

Kapag kailangan mong magpakita ng field ng isang uri ng sanggunian, halimbawa, ang field na "Bank", na isang link sa isang elemento ng direktoryo ng "Mga Bangko", kailangan mong maunawaan na kapag ipinakita ang field na ito, isang subquery sa Ang direktoryo ng "Mga Bangko" ay awtomatikong isasagawa upang makakuha ng view ng direktoryo. Ito ay magpapabagal sa output ng data. Upang maiwasan ito, kailangan mong gamitin ang "PRESENTATION" construction sa kahilingan upang agad na makakuha ng representasyon ng bagay at pagkatapos ay ipakita ito para sa pagtingin.

Sa sistema ng komposisyon ng data, ginagamit ang mekanismong ito bilang default, ngunit kapag lumilikha ng mga layout sa mga cell, dapat mong tukuyin ang representasyon ng patlang ng sanggunian, at, halimbawa, ilagay ang link mismo sa transcript.

4. Kundisyon para sa sampling data ayon sa isang template.

Halimbawa, kailangan mong makuha mga mobile phone mga empleyado ng uri (8 -123- 456-78-912). Upang gawin ito, kailangan mong itakda ang sumusunod na kundisyon sa kahilingan:

PUMILI Employee.Pangalan, Empleyado.Telepono BILANG Telepono MULA sa Direktoryo.Mga Empleyado BILANG Empleyado SAAN Telepono TULAD ng "_-___-___-__-__"

Ang character na "_" ay isang service character at pinapalitan ang anumang character.

5. Sabay-sabay na paggamit ng mga kabuuan at pagpapangkat.


Ang mga kabuuan ay kadalasang ginagamit kasama ng mga pagpapangkat sa kasong ito, ang mga pinagsama-samang function ay maaaring hindi tukuyin sa mga kabuuan.

SELECT Provision of Services.Organization AS Organization, Provision of Services.Nomenclature AS Nomenclature, SUM(Provision of Services.Amount of Document) AS Sum of Document FROM Document.Provision of Services AS Provision of Services GROUP BY Provision of Services.Organization, Provision of Services.Nomenclature RESULTS BY GENERAL, Organization, nomenklatura

Sa kasong ito, babalik ang query sa halos kapareho ng sumusunod na query:

SELECT Provision of Services.Organization AS Organization, Provision of Services.Nomenclature AS Nomenclature, Provision of Services.Halaga ng Dokumento BILANG Halaga ng Dokumento MULA sa Dokumento.Provision of Services AS Provision of Services RESULTS AMOUNT (Amount of Document) BY GENERAL, Organization, Nomenclature

Ang unang query lang ang magko-collapse ng mga record na may parehong nomenclature.

6. Dereferencing field.

Ang pagtukoy sa mga field sa pamamagitan ng isang tuldok ay tinatawag na reference field dereferencing operation. Halimbawa Pagbabayad.Organisasyon.Administrative Unit. Sa kasong ito, sa reference na field na "Organization" ng "Payment" na dokumento, ito ay tumutukoy sa isa pang table na "Organizations", kung saan makukuha ang value ng "Administrative Unit" attribute. Mahalagang maunawaan na kapag nag-a-access ng mga patlang sa pamamagitan ng isang tuldok, ang platform ay tahasang gumagawa ng isang subquery at sumasali sa mga talahanayang ito.

Kahilingan:

Maaaring katawanin bilang:

PUMILI Payment.Link, Payment.Organization, Payment.Organization, Organizations. AdministrativeUnit FROM Document.Payment AS Payment LEFT JOIN Directory.Organizations AS Organizations Software Payment.Organization = Organizations.Link

Kapag binabanggit ang mga reference na field ng isang pinagsama-samang uri, sinusubukan ng framework na lumikha ng mga implicit na pagsasama sa lahat ng mga talahanayan na bahagi ng uri ng field na iyon. Sa kasong ito, ang query ay hindi magiging pinakamainam Kung ito ay malinaw na kilala kung anong uri ng field ito, ito ay kinakailangan upang limitahan ang mga naturang field ayon sa uri na may isang construct EXPRESS().

Halimbawa, mayroong isang rehistro ng akumulasyon na "Mga hindi nababahaging pagbabayad", kung saan maraming mga dokumento ang maaaring kumilos bilang isang rehistro. Sa kasong ito, hindi tama na makuha ang mga halaga ng mga detalye ng registrar sa ganitong paraan:

SELECT UnallocatedPayments.Register.Date, ..... FROM RegisterAccumulation.UnallocatedPayments BILANG UnallocatedPayments

dapat mong paghigpitan ang uri ng pinagsama-samang field sa pag-log:

SELECT EXPRESS(UnallocatedPayments.Register AS Document.Payment).Petsa, ..... FROM RegisterAccumulation.UnallocatedPayments BILANG UnallocatedPayments

7. Konstruksyon "SAAN"

Sa kaliwang pagdurugtong ng dalawang talahanayan, kapag nagpataw ka ng kundisyon na "WHERE" sa kanang talahanayan, makakakuha tayo ng resulta na katulad ng resulta na may panloob na pagsasama ng mga talahanayan.

Halimbawa. Kinakailangang piliin ang lahat ng Kliyente mula sa Direktoryo ng Mga Kliyente at para sa mga kliyenteng mayroong dokumento sa pagbabayad na may halaga ng katangiang "Organisasyon" = &Organisasyon, ipakita ang dokumentong "Pagbabayad", para sa mga hindi, huwag itong ipakita.

Ang resulta ng query ay magbabalik ng mga talaan lamang para sa mga kliyenteng may bayad ayon sa organisasyon sa parameter, at magpi-filter ng iba pang mga kliyente. Samakatuwid, kailangan mo munang matanggap ang lahat ng mga pagbabayad para sa "ganyan at ganyan" na organisasyon sa isang pansamantalang talahanayan, at pagkatapos ay ikonekta ito sa direktoryo ng "Mga Kliyente" gamit ang kaliwang pagsali.

SELECT Payment.Link AS Payment, Payment.Shareholder AS Client PLACE toPayments FROM Document.Payment AS Payment WHERE Payment.Branch = &Branch; ////////////////////////////////////////////// /////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") BILANG Pagbabayad MULA SA Directory .Clients AS Ang mga Kliyente ay UMALIS sa KONEKSYON sa mga pagbabayad BILANG sa mga pagbabayad SOFTWARE Mga Kliyente. Link = sa mga pagbabayad. Kliyente

Maaari mong lampasan ang kundisyong ito sa ibang paraan. Kinakailangang magpataw ng kondisyong "WHERE" nang direkta sa relasyon sa pagitan ng dalawang talahanayan. Halimbawa:

SELECT Clients.Link, Payment.Link FROM Directory.US_Subscribers BILANG US_Subscribers LEFT CONNECTION Document.Payment BILANG Payment Software (Clients.Link = Payment.Client AT Payment.Client.Name TULAD ng "Sugar Packet") GROUP NG Clients.Link, Payment. Link

8. Sumasali sa Nested at Virtual Tables

Mga Nested Query madalas na kinakailangan upang mabawi ang data batay sa ilang kundisyon. Kung gagamitin mo ang mga ito kasabay ng iba pang mga talahanayan, maaari nitong kritikal na pabagalin ang pagpapatupad ng query.

Halimbawa, kailangan nating kunin ang Halaga ng Balanse sa kasalukuyang petsa para sa ilang kliyente.

Piliin ang UnallocatedPaymentSbalances.Customer, UnallocatedPaymentsbalances.AmountBalance mula sa (piliin ang mga kliyente.Link bilang link mula sa direktoryo.clients bilang mga kliyente kung saan ang mga kliyente.link in (& kliyente)) bilang nestedquery kaliwa sumali sa rehistro.unallocatedpayments.balances bilang hindi nagbabayad ng mga nested nyreqest.link = unallocatedpaymentsbiyments. Customer

Kapag nagsasagawa ng ganoong query, maaaring magkamali ang DBMS optimizer kapag pumipili ng plano, na hahantong sa suboptimal na pagpapatupad ng query. Kapag sumasali sa dalawang talahanayan, pipili ang DBMS optimizer ng algorithm sa pagsali sa talahanayan batay sa bilang ng mga tala sa parehong mga talahanayan. Kung mayroong nested query, napakahirap matukoy ang bilang ng mga record na ibabalik ng nested query. Samakatuwid, dapat mong palaging gumamit ng mga pansamantalang talahanayan sa halip na mga nested na query. Kaya't muli nating isulat ang kahilingan.

SELECT Clients.Link BILANG Link LUGAR tClients MULA sa Directory.Client AS Clients WHERE
Clients.Link B (&Mga Kliyente) ; ////////////////////////////////////////////// /////////////////////////// PUMILI ng tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, MULA sa tClients AS tClients LEFT SUMALI RegisterAccumulations.UnallocatedPayments.Balances (, Client SA (PUMILI ng mga tClient. Link MULA sa mga tClient)) BILANG UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

SA sa kasong ito matutukoy ng optimizer kung gaano karaming mga tala ang ginagamit ng mga pansamantalang talahanayan na tClient at makakapili ng pinakamainam na algorithm para sa pagsali sa mga talahanayan.

Mga virtual na talahanayan , nagbibigay-daan sa iyong makakuha ng halos handa na data para sa karamihan ng mga inilapat na gawain (Slice of the First, Slice of the Last, Remains, Turnovers, Remains at Turnovers) Ang pangunahing salita dito ay virtual. Ang mga talahanayan na ito ay hindi pisikal, ngunit pinagsama-sama ng system on the fly, i.e. Kapag tumatanggap ng data mula sa mga virtual na talahanayan, kinokolekta ng system ang data mula sa mga talahanayan ng panghuling rehistro, binubuo, mga pangkat at ibinibigay ito sa gumagamit.

Yung. Kapag kumokonekta sa isang virtual na talahanayan, isang koneksyon ay ginawa sa isang subquery. Sa kasong ito, ang DBMS optimizer ay maaari ding pumili ng hindi pinakamainam na plano ng koneksyon. Kung ang query ay hindi mabilis na nabuo at ang query ay gumagamit ng mga pagsali sa mga virtual na talahanayan, pagkatapos ay inirerekomenda na ilipat ang pag-access sa mga virtual na talahanayan sa isang pansamantalang talahanayan, at pagkatapos ay gumawa ng isang pagsasama sa pagitan ng dalawang pansamantalang mga talahanayan. Isulat muli natin ang nakaraang kahilingan.

SELECT Clients.Link BILANG Link LUGAR tClients MULA SA Directory.Clients BILANG Clients INDEX BY Link WHERE
Clients.Link B (&Mga Kliyente) ; ////////////////////////////////////////////// ///////////////////////////////////////////////////// PUMILI NG UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS Client PLACE mga balanse MULA sa RegisterAccumulations.UnallocatedPayments.Balances(, Client B ( PUMILI ng mga tClient. I-link MULA sa mga tClient)) BILANG Mga Hindi Nakalaang Pagbabayad; ////////////////////////////////////////////// //////////////////////////////El = tRemainings.Client

9. Sinusuri ang resulta ng kahilingan.

Maaaring walang laman ang resulta ng query;

ResRequest = Request.Execute(); Kung resQuery.Empty() Then Return; endIf;

Pamamaraan Walang laman() dapat gamitin bago ang mga pamamaraan Pumili () o I-unload(), dahil ang pagkuha ng koleksyon ay nangangailangan ng oras.

Ito ay hindi isang paghahayag sa sinuman na ito ay lubhang hindi kanais-nais na gumamit ng mga query sa isang loop. Ito ay maaaring kritikal na makaapekto sa oras ng pagpapatakbo ng isang partikular na function. Lubhang kanais-nais na matanggap ang lahat ng data sa kahilingan at pagkatapos ay iproseso ang data sa isang loop. Ngunit kung minsan may mga kaso kapag naging imposible na ilipat ang kahilingan sa labas ng loop. Sa kasong ito, para sa pag-optimize, maaari mong ilipat ang paglikha ng query sa labas ng loop, at sa loop, palitan ang mga kinakailangang parameter at isagawa ang query.

Kahilingan = Bagong Kahilingan; Query.Text = "PUMILI | Clients.Link, | Clients.Birthdate |FROM | Directory.Client AS Clients |WHERE | Clients.Link = &Client"; Para sa Bawat Hilera MULA sa TableClients Loop Query.SetParameter("Client", Client);

QueryResult = Query.Execute().Select(); EndCycle;

Ise-save nito ang system mula sa pagsusuri ng syntax sa kahilingan sa isang loop.

11. Construction "HAVING".

Isang disenyo na medyo bihira sa mga kahilingan. Binibigyang-daan kang magpataw ng mga kundisyon sa mga halaga ng pinagsama-samang mga function (SUM, MINIMUM, AVERAGE, atbp.). Halimbawa, kailangan mong piliin lamang ang mga kliyente na ang halaga ng pagbabayad noong Setyembre ay higit sa 13,000 rubles. Kung gagamitin mo ang kundisyong "WHERE", kailangan mo munang gumawa ng pansamantalang talahanayan o isang nested na query, pangkatin ang mga tala doon ayon sa halaga ng pagbabayad at pagkatapos ay ilapat ang kundisyon. Ang "HAVING" construction ay makakatulong na maiwasan ito.

PILIIN ang Payment.Customer, HALAGA(Payment.Amount) BILANG Halaga MULA sa Dokumento.Payment BILANG Pagbabayad SAAN BUWAN(Payment.Date) = 9 GROUP BY Payment.Customer NA MAY HALAGA(Payment.Amount) > 13000 Sa constructor, para gawin ito, pumunta lang sa tab na "Mga Kundisyon", magdagdag ng bagong kundisyon at lagyan ng check ang checkbox na "Custom". Tapos magsulat ka na lang


Halaga(Payment.Amount) > 13000

12. NULL na halaga Hindi ko ilalarawan dito ang mga prinsipyo ng three-valued logic sa database mayroong maraming mga artikulo sa paksang ito. Maikling tungkol sa kung paano NULL<>maaaring makaapekto sa resulta ng query. Ang halagang NULL ay hindi talaga isang halaga, at ang katotohanan na ang halaga ay hindi natukoy ay hindi alam. Samakatuwid, ang anumang operasyon na may NULL ay nagbabalik ng NULL, maging ito ay karagdagan, pagbabawas, paghahati o paghahambing. Ang isang NULL na halaga ay hindi maikukumpara sa isang NULL na halaga dahil hindi natin alam kung ano ang ihahambing. Yung. pareho ng mga paghahambing na ito ay: NULL = NULL, NULL

Ang NULL ay hindi True o False, ito ay hindi alam.

Para sa mga kliyenteng walang mga pagbabayad, kailangan naming ipakita ang field na "Mag-sign" na may halagang "Walang mga pagbabayad". Bukod dito, alam naming sigurado na mayroon kaming mga ganoong kliyente. At upang maipakita ang kakanyahan ng isinulat ko sa itaas, gawin natin ito sa ganitong paraan.

PILIIN ang "Walang mga pagbabayad" BILANG Katangian, NULL BILANG LUGAR ng Dokumento sa mga pagbabayad; ////////////////////////////////////////////// //////////////////////////////// Piliin ang mga kliyente.Link bilang kliyente, pagbabayad.Link kung paano ang pagbabayad ay naglalagay ng tclientpayment mula sa direktoryo.clients bilang mga kliyente na naiwan ng dokumento ng koneksyon. Payment AS Payment Software Clients.Link = Payment.Shareholder; ////////////////////////////////////////////// ////////////////////////// PILIIN ang tClientPayment.Client MULA sa tClientPayment BILANG tClientPayment INTERNAL NA SUMALI sa tPayment BILANG tBabayaran NG tClientPayment.Payment = tPayment

Bigyang-pansin ang pangalawang pansamantalang talahanayan na tClientPayment. Sa kaliwang pagsali, pipiliin ko ang lahat ng kliyente at lahat ng pagbabayad para sa mga kliyenteng ito. Para sa mga kliyenteng walang mga pagbabayad, ang field na "Pagbabayad" ay magiging NULL. Kasunod ng lohika, sa unang pansamantalang talahanayan na "tPayments" ay itinalaga ko ang 2 mga patlang, isa sa mga ito NULL, ang pangalawang linya na "Walang mga pagbabayad". Sa ikatlong talahanayan, ikinonekta ko ang mga talahanayang “tClientPayment” at “tPayment” gamit ang mga field na “Payment” at “Document” na may panloob na pagsali. Alam namin na sa unang talahanayan ang field na "Dokumento" ay NULL, at sa pangalawang talahanayan, ang mga walang bayad sa field na "Pagbabayad" ay NULL din. Ano ang babalik sa atin ng gayong koneksyon? Ngunit wala itong ibabalik. Dahil ang paghahambing na NULL = NULL ay hindi nagsusuri sa True.

Upang maibalik ng kahilingan ang inaasahang resulta, muling isulat natin ito:

PILIIN ang "Walang mga pagbabayad" BILANG Katangian, VALUE(Document.Payment.EmptyLink) BILANG LUGAR ng Dokumento sa Mga Pagbabayad; ////////////////////////////////////////////// /////////////////////////// PUMILI NG Mga Kliyente. Link BILANG Kliyente, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) PAANO Pagbabayad ILAGAY ang tClientPayment MULA sa Directory.Mga Kliyente BILANG Kliyente NANG KALIWANG KONEKSYON Dokumento.Pagbabayad BILANG Pagbabayad NG Clients.Link = Payment.Shareholder; ////////////////////////////////////////////// ////////////////////////// PILIIN ang tClientPayment.Client MULA sa tClientPayment BILANG tClientPayment INTERNAL NA SUMALI sa tPayment BILANG tBabayaran NG tClientPayment.Payment = tPayment

Ngayon, sa pangalawang pansamantalang talahanayan, ipinahiwatig namin na kung ang field na "Pagbabayad" ay NULL, kung gayon ang field na ito ay isang walang laman na link sa dokumento ng pagbabayad. Sa Unang talahanayan pinalitan din namin ang NULL ng isang walang laman na sanggunian. Ngayon ang koneksyon ay nagsasangkot ng mga non-NULL na patlang at ibabalik ng kahilingan ang inaasahang resulta.

Ang lahat ng mga kahilingan na nakapaloob sa artikulo ay sumasalamin sa mga sitwasyon na nais kong isaalang-alang at wala nang iba pa. TUNGKOL SA Maaaring hindi sila delusional o suboptimal, ang pangunahing bagay ay sinasalamin nila ang kakanyahan ng halimbawa.

13. Isang undocumented feature ng "CHOICE WHEN...THEN...END" na disenyo.

Sa kaso kung kailan kinakailangan upang ilarawan ang pagbuo ng "Mga Kundisyon" sa kahilingan, ginagamit namin ang karaniwang syntax:

SELECT SELECTION WHEN Users.Name = "Vasya Pupkin" THEN "Our favorite employee" IBA "Hindi namin alam ito" END AS Field1 FROM Directory.Users AS Users

Ngunit paano kung, halimbawa, kailangan nating makuha ang pangalan ng buwan sa isang kahilingan? Ang pagsusulat ng malaking construction sa isang kahilingan ay pangit at nakakaubos ng oras, kaya ang paraan ng pagsulat sa itaas ay makakatulong sa atin na:

SELECT MONTH(US_CalculationConsumption_TurnoverSchedule.CalculationPeriod) WHEN 1 THEN "January" WHEN 2 THEN "February" WHEN 3 THEN "March" WHEN 4 THEN "April" WHEN 5 THEN "May" WHEN WHEN WHEN "June" WHEN "June" WHEN "June" 8 TAPOS "Agosto" KUNG 9 TAPOS "September" KUNG 10 TAPOS "October" KUNG 11 TAPOS "November" KUNG 12 TAPOS ANG "Disyembre" BILANG BUWAN

Ngayon ang disenyo ay mukhang hindi gaanong masalimuot at madaling maunawaan.

14. Batch query execution.


Upang hindi dumami ang mga kahilingan, maaari kang lumikha ng isang malaking kahilingan, hatiin ito sa mga pakete at magtrabaho kasama nito.
Halimbawa, kailangan kong makuha ang mga sumusunod na field mula sa direktoryo ng "Mga User": "Petsa ng Kapanganakan" at ang mga available na tungkulin para sa bawat user. i-upload ito sa iba't ibang bahagi ng tabular sa form. Siyempre, magagawa mo ito sa isang kahilingan, pagkatapos ay kakailanganin mong umulit sa mga talaan o i-collapse ang mga ito, o magagawa mo ito:

SELECT Users.Link AS Buong Pangalan, Users.Date of Birth, Users.Role PUT vtUsers FROM Directory.Users BILANG Users; ////////////////////////////////////////////// /////////////////////////// PUMILI tueUsers.Buong pangalan, tueUsers.Petsa ng Kapanganakan MULA tueUsers BILANG tueUsers GROUP NG tueUsers.buong pangalan, tueUsers Petsa ng Kapanganakan; ////////////////////////////////////////////// ////////////////////////// PUMILI NG wUsers.Full Name, wUsers.Role MULA SA wUsers BILANG wUsers GROUP NG wUsers.Full Name, wUsers ng Kapanganakan

tPackage = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

Tulad ng nakikita natin, ang query ay maaaring isagawa sa isang batch at ang resulta ay maaaring iproseso bilang isang array. Sa ilang mga kaso ito ay napaka-maginhawa.

15. Mga kondisyon sa isang batch na kahilingan

Halimbawa, mayroon kaming isang batch na kahilingan, kung saan unang nakuha namin ang mga field: "Pangalan, Petsa ng Kapanganakan, Code" mula sa direktoryo ng "Mga Gumagamit" at nais na makakuha ng mga talaan na may mga kundisyon para sa mga field na ito mula sa direktoryo ng "Mga Indibidwal."

SELECT Users.Individual.Name AS Name, Users.Individual.Date of Birth AS Date of Birth, Users.Individual.Code AS Code PLACE vtUsers FROM Directory.Users AS Users; ////////////////////////////////////////////// ///////////////////////// PUMILI NG Mga Indibidwal BILANG Indibidwal MULA sa Direktoryo

Maaari kang magpataw ng mga kundisyon tulad nito:

WHERE Individuals.Code IN (SELECT tueUsers.Code FROM tueUsers) AT Individuals.Name IN (SELECT tueUsers.Code FROM tueUsers) AT Individuals.BirthDate IN (SELECT tueUsers.DateBirth FROM tueUsers)

At magagawa mo ito tulad nito:

WHERE (Individuals.Code, Individuals.Name, Individuals.Date of Birth) IN (SELECT tueUsers.Code, tueUsers.Name, tueUsers.Date of Birth MULA sa tueUsers)

Bukod dito, ito ay kinakailangan upang mapanatili ang kaayusan.

16. Pagtawag sa tagabuo ng query para sa "kondisyon" sa isang batch na kahilingan

Kapag kinakailangan na magpataw ng isang kondisyon, tulad ng sa halimbawa sa itaas, maaari mong kalimutan kung paano ito o ang field na iyon ay tinatawag sa virtual na talahanayan.
Halimbawa, kailangan mong magpataw ng kundisyon sa field na "Petsa ng Kapanganakan", at sa virtual na talahanayan ang patlang na ito ay tinatawag na "Petsa ng Kapanganakan ng Debtor", at kung nakalimutan mo ang pangalan, kakailanganin mong lumabas sa pag-edit ng kundisyon nang hindi pag-save at tingnan ang pangalan ng field. Upang maiwasan ito, maaari mong gamitin ang sumusunod na pamamaraan.

Kinakailangang maglagay ng mga bracket pagkatapos ng Construction "B" at mag-iwan ng bakanteng espasyo (espasyo) sa pagitan ng mga bracket, piliin ang puwang na ito at tawagan ang tagabuo ng query. Ang taga-disenyo ay magkakaroon ng access sa lahat ng mga talahanayan ng batch query. Gumagana ang pamamaraan sa parehong mga virtual na talahanayan ng rehistro at sa tab na "Mga Kundisyon". Sa huling kaso, kailangan mong suriin ang kahon na "P (arbitrary na kondisyon)" at ipasok ang mode ng pag-edit na "F4".

Ang mga query ay madalas na ginawa sa mabilisang at ang mga ito ay nagsisilbi lamang upang ilarawan ang "mga diskarte" na aking isinasaalang-alang.

Nais kong tingnan ang paggamit ng mga index sa mga query, ngunit ito ay isang napakalawak na paksa. Ilalagay ko ito sa isang hiwalay na artikulo, o idagdag dito mamaya.

upd1. Puntos 11,12
upd2. Puntos 13,14,15,16

Literatura na ginamit:
Wika ng query "1C:Enterprise 8" - E.Yu. Khrustaleva
Propesyonal na pag-unlad sa 1C:Enterprise 8 system."

Ang query language sa 1C 8 ay isang pinasimple na analogue ng kilalang "structured programming language" (tulad ng mas madalas na tawag dito, SQL). Ngunit sa 1C ito ay ginagamit lamang para sa pagbabasa ng data; modelo ng bagay datos.

Ang isa pang kawili-wiling pagkakaiba ay ang Russian syntax. Bagama't sa katunayan maaari mong gamitin ang mga konstruksiyon sa wikang Ingles.

Halimbawa ng kahilingan:

PUMILI
Mga Bangko. Pangalan,
Banks.CorrAccount
MULA SA
Direktoryo.Mga Bangko PAANO Mga Bangko

Ang kahilingang ito ay magbibigay-daan sa amin na makakita ng impormasyon tungkol sa pangalan at correspondent account ng lahat ng mga bangkong umiiral sa database.

Ang wika ng query ay ang pinakasimpleng at mabisang paraan pagkuha ng impormasyon. Tulad ng makikita mula sa halimbawa sa itaas, sa wika ng query kailangan mong gumamit ng mga pangalan ng metadata (ito ay isang listahan ng mga object ng system na bumubuo sa pagsasaayos, ibig sabihin, mga direktoryo, dokumento, rehistro, atbp.).

Paglalarawan ng mga konstruksyon ng wika ng query

Istraktura ng query

Upang makakuha ng data, sapat na gamitin ang mga konstruksyon na "PUMILI" at "MULA". Ang pinakasimpleng kahilingan ganito ang hitsura:

SELECT * FROM Directories.Nomenclature

Kung saan ang ibig sabihin ng “*” ay pagpili sa lahat ng field ng table, at Directories.Nomenclature – ang pangalan ng table sa database.

Tingnan natin ang isang mas kumplikado at pangkalahatang halimbawa:

PUMILI
<ИмяПоля1>PAANO<ПредставлениеПоля1>,
kabuuan(<ИмяПоля2>) PAANO<ПредставлениеПоля2>
MULA SA
<ИмяТаблицы1>PAANO<ПредставлениеТаблицы1>
<ТипСоединения>COMPOUND<ИмяТаблицы2>PAANO<ПредставлениеТаблицы2>
NG<УсловиеСоединениеТаблиц>

SAAN
<УсловиеОтбораДанных>

GRUPO NI
<ИмяПоля1>

ORDER NI
<ИмяПоля1>

RESULTA
<ИмяПоля2>
NG
<ИмяПоля1>

Sa query na ito, pipiliin namin ang data ng mga field na "FieldName1" at "FieldName1" mula sa mga table na "TableName1" at "TableName", nagtatalaga ng mga kasingkahulugan sa mga field gamit ang operator na "HOW", at ikinonekta ang mga ito ayon sa isang partikular na kundisyon " Kondisyon ng TableConnection".

Mula sa natanggap na data, pipili lang kami ng data na nakakatugon sa kundisyon mula sa “WHERE” “Data Selection Condition”. "Pangalan ng Field1" at ang huling field na "Pangalan ng Field2".

Ang huling hakbang ay ang pag-uri-uriin ang kahilingan gamit ang ORDER BY construct.

Mga pangkalahatang disenyo

Tingnan natin ang mga pangkalahatang istruktura ng 1C 8.2 na wika ng query.

UNAn

Sa pamamagitan ng paggamit ng operator na ito maaari kang makakuha ng n bilang ng mga unang tala. Ang pagkakasunud-sunod ng mga tala ay tinutukoy ng pagkakasunud-sunod sa query.

PUMILI MUNA 100
Mga Bangko. Pangalan,
Mga Bangko Code AS BIC
MULA SA
Direktoryo.Mga Bangko PAANO Mga Bangko
ORDER NI
Mga Bangko.Pangalan

Matatanggap ng kahilingan ang unang 100 entry ng direktoryo ng "Mga Bangko", na pinagsunod-sunod ayon sa alpabeto.

PINAYAGAN

Ang disenyo na ito ay may kaugnayan para sa pagtatrabaho sa mekanismo. Ang kakanyahan ng mekanismo ay upang paghigpitan ang pagbabasa (at iba pang mga aksyon) sa mga gumagamit para sa mga partikular na tala sa isang talahanayan ng database, at hindi ang talahanayan sa kabuuan.

Kung sinubukan ng isang user na gumamit ng query para magbasa ng mga record na hindi available sa kanya, makakatanggap siya ng mensahe ng error. Upang maiwasan ito, dapat mong gamitin ang "PINAGPAHAYAG" na konstruksyon, ibig sabihin, babasahin lamang ng kahilingan ang mga talaan na pinapayagan dito.

PUMILI PALIT
Imbakan ng Karagdagang Impormasyon
MULA SA
Directory.Repository ng Karagdagang Impormasyon

IBA'T IBA

Ang paggamit ng "DIFFERENT" ay mapipigilan ang mga duplicate na linya sa pagpasok sa resulta ng 1C query. Ang ibig sabihin ng pagdoble ay tumutugma ang lahat ng field ng kahilingan.

PUMILI MUNA 100
Mga Bangko. Pangalan,
Mga Bangko Code AS BIC
MULA SA
Direktoryo.Mga Bangko PAANO Mga Bangko

EmptyTable

Ang konstruksiyon na ito ay bihirang ginagamit upang pagsamahin ang mga query. Kapag sumali, maaaring kailanganin mong tumukoy ng walang laman na nested table sa isa sa mga table. Ang operator na "EmptyTable" ay tama para dito.

Halimbawa mula sa 1C 8 tulong:

PUMILI Link.Number, EMPTY TABLE.(No., Item, Dami) BILANG Komposisyon
MULA sa Document.Expense Invoice
PAGSAMAHIN ANG LAHAT
PUMILI ng Link.Number, Mga Nilalaman.(LineNumber, Produkto, Dami)
MULA sa Document.Invoice Document.Invoice.Composition.*

ISNULL

Isang napaka-kapaki-pakinabang na tampok na nagbibigay-daan sa iyo upang maiwasan ang maraming mga pagkakamali. Mayroong NULL() na nagpapahintulot sa iyo na palitan NULL na halaga sa kung ano ang kailangan. Madalas na ginagamit sa pagsuri para sa pagkakaroon ng isang halaga sa mga pinagsamang talahanayan, halimbawa:

PUMILI
Link ng Nomenclature,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
MULA SA


Maaaring gamitin sa iba pang mga paraan. Halimbawa, kung para sa bawat hilera ay hindi alam kung saang talahanayan umiiral ang halaga:

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

Ang HOW ay isang operator na nagpapahintulot sa amin na magtalaga ng isang pangalan (kasingkahulugan) sa isang talahanayan o field. Nakita namin ang isang halimbawa ng paggamit sa itaas.

Ang mga constructions na ito ay halos magkapareho - pinapayagan ka nitong makakuha ng isang string na representasyon ng nais na halaga. Ang pagkakaiba lang ay ang REPRESENTATION ay nagko-convert ng anumang mga halaga sa isang uri ng string, habang ang REPRESENTATIONREF ay nagko-convert lamang ng mga reference na halaga. REFERENCE REPRESENTATION ay inirerekomenda na gamitin sa data composition system query para sa optimization, maliban kung, siyempre, ang reference data field ay binalak na gamitin sa mga seleksyon.

PUMILI
View(Link), //string, halimbawa "Advance report No. 123 na may petsang 10/10/2015
View(DeletionMark) AS DeleteMarkText, //string, “Yes” o “No”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True or False
MULA SA
Dokumento.Paunang Ulat

Ipahayag

Pinapayagan ka ng Express na i-convert ang mga halaga ng field sa nais na uri ng data. Maaari mong i-convert ang isang halaga sa alinman sa isang primitive na uri o isang uri ng sanggunian.

Ginagamit ang Express para sa isang uri ng sanggunian upang paghigpitan ang hinihiling na mga uri ng data sa mga field ng isang kumplikadong uri, na kadalasang ginagamit upang i-optimize ang pagganap ng system. Halimbawa:

EXPRESS (Table of Costs. Subconto1 AS Directory. Items of Costs) Uri ng Aktibidad para sa Tax Accounting of Costs

Para sa mga primitive na uri, ang function na ito ay kadalasang ginagamit upang limitahan ang bilang ng mga character sa mga field na walang limitasyong haba (ang mga nasabing field ay hindi maihahambing sa). Para maiwasan ang pagkakamali" Di-wastong mga parameter sa pagpapatakbo ng paghahambing. Hindi mo maaaring ihambing ang mga patlang
walang limitasyong haba at mga field ng hindi magkatugmang uri
", kailangan mong ipahayag ang mga field tulad ng sumusunod:

EXPRESS(Komento BILANG Linya(150))

DIFFERENCEDATE

Kumuha ng 267 video lesson sa 1C nang libre:

Isang halimbawa ng paggamit ng IS NULL sa isang kahilingan sa 1C:

PUMILI * MULA
Ref
LEFT CONNECTION RegisterAccumulations.ProductsIn Warehouses.Remaining BILANG Natitirang Produkto
Software NomenclatureRef.Link = Nabentang GoodsCommitteesRemains.Nomenclature
KUNG SAAN HINDI Natitirang Mga Kalakal

Ang uri ng data sa isang query ay maaaring matukoy sa pamamagitan ng paggamit ng TYPE() at VALUETYPE() function, o sa pamamagitan ng paggamit ng logical REFERENCE operator. Ang dalawang pag-andar ay magkatulad.

Mga paunang natukoy na halaga

Bilang karagdagan sa paggamit ng mga naipasa na parameter sa mga query sa 1C query language, maaari kang gumamit ng mga paunang natukoy na halaga o . Halimbawa, ang mga paglilipat, mga paunang natukoy na direktoryo, mga chart ng mga account, at iba pa Para dito, ginagamit ang "Value()".

Halimbawa ng paggamit:

WHERE Nomenclature.Uri ng Nomenclature = Value(Directory.Uri ng Nomenclature.Product)

WHERE Counterparties.Uri ng Contact Information = Value(Enumeration.Uri ng Contact Information.Phone)

WHERE Account Balances.Accounting Account = Value(Chart of Accounts.Profit.ProfitsLoss)

Mga koneksyon

Mayroong 4 na uri ng koneksyon: KALIWA, TAMA, KUMPLETO, INTERNAL.

KALIWA at KANAN NA KONEKSIYON

Ang mga pagsali ay ginagamit upang iugnay ang dalawang talahanayan batay sa isang partikular na kundisyon. Tampok kung kailan INIWANG SUMALI ay kinuha namin ang unang tinukoy na talahanayan sa kabuuan nito at may kondisyong itali ang pangalawang talahanayan. Ang mga patlang ng pangalawang talahanayan na hindi maaaring itali ng kundisyon ay puno ng halaga Hindi ko ilalarawan dito ang mga prinsipyo ng three-valued logic sa database mayroong maraming mga artikulo sa paksang ito. Maikling tungkol sa kung paano.

Halimbawa:

Ibabalik nito ang buong table ng Counterparties at punan ang field na "Bank" sa mga lugar lamang kung saan matutugunan ang kundisyon na "Counterparties.Name = Banks.Name". Kung ang kundisyon ay hindi natugunan, ang Bank field ay itatakda sa Hindi ko ilalarawan dito ang mga prinsipyo ng three-valued logic sa database mayroong maraming mga artikulo sa paksang ito. Maikling tungkol sa kung paano.

RIGHT JOIN sa 1C na wika ganap na katulad KALIWA koneksyon, maliban sa isang pagkakaiba - sa KARAPATAN NG KONEKSIYON Ang "pangunahing" talahanayan ay ang pangalawa, hindi ang una.

FULL CONNECTION

FULL CONNECTION naiiba mula sa kaliwa at kanan dahil ipinapakita nito ang lahat ng mga talaan mula sa dalawang talahanayan at ikinokonekta lamang ang mga maaari nitong kumonekta sa pamamagitan ng kundisyon.

Halimbawa:

MULA SA

FULL CONNECTION
Direktoryo.Mga Bangko PAANO Mga Bangko

NG

Ang wika ng query ay ganap na ibabalik ang parehong mga talahanayan kung ang kundisyon na sumali sa mga tala ay natugunan. Hindi tulad ng kaliwa/kanang pagsali, posibleng lumabas ang NULL sa dalawang field.

INNER JOIN

INNER JOIN naiiba sa buo dahil ipinapakita lamang nito ang mga talaan na maaaring ikonekta ayon sa isang partikular na kondisyon.

Halimbawa:

MULA SA
Direktoryo

INNER JOIN
Direktoryo.Mga Bangko PAANO Mga Bangko

NG
Clients.Name = Banks.Name

Ang query na ito ay magbabalik lamang ng mga row kung saan ang bangko at katapat ay may parehong pangalan.

Mga asosasyon

Ang JOIN at JOIN ALL construct ay pinagsasama ang dalawang resulta sa isa. Yung. ang resulta ng pagsasagawa ng dalawa ay "pagsasama-sama" sa isa, karaniwan.

Iyon ay, ang sistema ay gumagana nang eksakto kapareho ng mga regular, para lamang sa isang pansamantalang talahanayan.

Paano gamitin ang INDEX BY

Gayunpaman, ang isang punto ay dapat isaalang-alang. Ang pagbuo ng isang index sa isang pansamantalang talahanayan ay nangangailangan din ng oras upang makumpleto. Samakatuwid, ipinapayong gamitin lamang ang konstruksyon na " " kung alam na tiyak na magkakaroon ng higit sa 1-2 mga tala sa pansamantalang talahanayan. Kung hindi, ang epekto ay maaaring maging kabaligtaran - ang pagganap ng mga na-index na mga patlang ay hindi nagbabayad para sa oras na kinakailangan upang mabuo ang index.

PUMILI
Mga rate ng pera Pinakabagong cross-section Currency AS Currency,
Mga rate ng pera Pinakabagong cross-section.
PUT Mga Rate ng Pera
MULA SA
Rehistro ng Impormasyon.Mga Rate ng Pera.Huling Slice(&Panahon,) BILANG Mga Rate ng CurrencyLast Slice
INDEX NI
Pera
;
PUMILI
PricesNomenclature.Nomenclature,
PricesNomenclatures.Price,
PricesNomenclatures.Currency,
Rate ng pera. Rate
MULA SA
Rehistro ng Impormasyon. Mga Presyo ng Nomenclature. Huling Slice(&Panahon,
Nomenclature B (&Nomenclature) AT PriceType = &PriceType) BILANG PriceNomenclature
LEFT SUMALI Mga Rate ng Pera BILANG Mga Rate ng Pera
Software PricesNomenclatures.Currency = Mga Rate ng Currency.Currency

Pagpapangkat

Binibigyang-daan ka ng 1C query language na gumamit ng mga espesyal na pinagsama-samang function kapag pinapangkat ang mga resulta ng query. Magagamit din ang pagpapangkat nang walang pinagsama-samang mga function para "tanggalin" ang mga duplicate.

Ang mga sumusunod na function ay umiiral:

Halaga, Dami, Bilang ng iba't ibang, Maximum, Minimum, Average.

Halimbawa #1:

PUMILI
Mga Pagbebenta ng Mga Kalakal at Mga Serbisyong Pangngalan,
SUM(Sales of GoodsServicesGoods.Quantity) BILANG Dami,
SUM(Sales of GoodsServicesGoods.Amount) BILANG Halaga
MULA SA

GROUP BY
Pagbebenta ng Mga Kalakal at Serbisyong Katawagan

Natatanggap ng query ang lahat ng linya na may mga kalakal at ibubuod ang mga ito ayon sa dami at mga halaga ayon sa item.

Halimbawa Blg. 2

PUMILI
Banks. Code,
DAMI(IBANG Bangko.Link) BILANG Bilang ng mga Duplicate
MULA SA
Direktoryo.Mga Bangko PAANO Mga Bangko
GROUP BY
Banks.Code

Ang halimbawang ito ay magpapakita ng isang listahan ng mga BIC sa direktoryo ng "Mga Bangko" at ipapakita kung gaano karaming mga duplicate ang umiiral para sa bawat isa sa kanila.

Mga resulta

Ang mga resulta ay isang paraan upang makakuha ng data mula sa isang system na may hierarchical na istraktura. Maaaring gamitin ang pinagsama-samang mga function para sa mga field ng buod, tulad ng para sa mga pagpapangkat.

Ang isa sa pinakasikat na paraan para magamit ang mga resulta sa pagsasanay ay ang batch write-off ng mga produkto.

PUMILI




MULA SA
Dokumento
ORDER NI

RESULTA
SUM(Dami),
SUM(Sum)
NG
Nomenclature

Ang resulta ng query ay ang sumusunod na hierarchical:

Pangkalahatang resulta

Kung kailangan mong makakuha ng mga kabuuan para sa lahat ng "mga kabuuan", gamitin ang operator na "PANGKALAHATANG".

PUMILI
Mga Pagbebenta ng Mga Kalakal at Serbisyong Katawagan AS Nomenclature,
Mga Pagbebenta ng Mga Kalakal at Serbisyo ng Link AS Document,
Benta ng Mga Kalakal at Serbisyong Dami AS Dami,
Pagbebenta ng Mga Kalakal at Serbisyong Halaga BILANG Halaga
MULA SA
Dokumento
ORDER NI
Link ng Mga Produkto at Serbisyo
RESULTA
SUM(Dami),
SUM(Sum)
NG
PANGKALAHATANG,
Nomenclature

Bilang resulta ng pagsasagawa ng kahilingan, nakukuha namin ang sumusunod na resulta:

Kung saan ang 1 antas ng pagpapangkat ay ang pagsasama-sama ng lahat ng kinakailangang field.

Nag-aayos

Ang ORDER BY operator ay ginagamit upang ayusin ang resulta ng isang query.

Ang pag-uuri para sa mga primitive na uri (string, numero, boolean) ay sumusunod sa karaniwang mga panuntunan. Para sa mga field ng uri ng reference, ang pag-uuri ay nangyayari sa pamamagitan ng panloob na representasyon ng link (ang natatanging identifier), sa halip na sa pamamagitan ng code o sa pamamagitan ng representasyon ng reference.

PUMILI

MULA SA
Directory.Nomenclature AS Nomenclature
ORDER NI
Pangalan

Ang kahilingan ay magpapakita ng isang listahan ng mga pangalan sa direktoryo ng nomenclature, na pinagsunod-sunod ayon sa alpabeto.

Auto-order

Ang resulta ng isang query na walang pag-uuri ay isang magulo na ipinakita na hanay ng mga hilera. Ang mga developer ng 1C platform ay hindi ginagarantiya na ang mga hilera ay magiging output sa parehong pagkakasunud-sunod kapag nagsasagawa ng magkatulad na mga query.

Kung kailangan mong ipakita ang mga talaan ng talahanayan sa pare-parehong pagkakasunud-sunod, dapat mong gamitin ang Auto-Order construct.

PUMILI
Nomenclature.Pangalan AS Pangalan
MULA SA
Directory.Nomenclature AS Nomenclature
AUTO ORDER

Mga virtual na talahanayan

Ang mga virtual na talahanayan sa 1C ay isang natatanging tampok ng 1C na wika ng query na hindi matatagpuan sa iba pang katulad na mga syntax. Ang isang virtual na talahanayan ay isang mabilis na paraan upang makakuha ng impormasyon ng profile mula sa mga rehistro.

Ang bawat uri ng rehistro ay may sariling hanay ng mga virtual na talahanayan, na maaaring mag-iba depende sa mga setting ng rehistro.

  • hiwa ng una;
  • putol ng huli.
  • mga tira;
  • mga rebolusyon;
  • balanse at turnover.
  • mga paggalaw mula sa subconto;
  • mga rebolusyon;
  • bilis Dt Kt;
  • mga tira;
  • balanse at turnover
  • subconto.
  • base;
  • data ng graph;
  • aktwal na panahon ng bisa.

Para sa developer ng solusyon, ang data ay kinuha mula sa isang (virtual) na talahanayan, ngunit sa katunayan ang 1C platform ay tumatagal mula sa maraming mga talahanayan, na binabago ang mga ito sa kinakailangang form.

PUMILI
Mga Produkto sa Warehouses Remains and Turnover, Nomenclature.
ProductsIn WarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsIn WarehousesRemainsAndTurnover.QuantityTurnover,
GoodsIn WarehousesRemainsAndTurnover.Dami Papasok,
Mga Produkto Sa Mga WarehouseNananatiliAt Paglipat.Dami ng Pagkonsumo,
ProductsIn WarehousesRemainingsAndTurnover.QuantityFinalRemaining
MULA SA
RegisterAccumulations.GoodsIn Warehouses.RemainsAndTurnover BILANG GoodsIn WarehousesRemainsAndTurnover

Binibigyang-daan ka ng query na ito na mabilis na makuha ang isang malaking halaga ng data.

Mga Opsyon sa Virtual Table

Ang isang napakahalagang aspeto ng pagtatrabaho sa mga virtual na talahanayan ay ang paggamit ng mga parameter. Ang mga virtual na parameter ng talahanayan ay mga espesyal na parameter para sa pagpili at pagsasaayos.

Para sa mga naturang talahanayan, itinuturing na hindi tama ang paggamit ng seleksyon sa "WHERE" construction. Bilang karagdagan sa katotohanan na ang query ay nagiging suboptimal, posible na makatanggap ng maling data.

Isang halimbawa ng paggamit ng mga parameter na ito:

Register of Accumulations sa mga Warehouses at Turnovers (& Simula ng Period, & End of the Period, Month, Movements and Borders of the Period, Nomenclature = & Required Nomenclature)

Algorithm para sa mga virtual na talahanayan

Halimbawa, ang pinakaginagamit na virtual na talahanayan ng uri ng "Nananatili" ay nag-iimbak ng data mula sa dalawang pisikal na talahanayan - mga balanse at paggalaw.

Kapag gumagamit ng virtual na talahanayan, ginagawa ng system ang mga sumusunod na manipulasyon:

  1. Nakukuha namin ang pinakamalapit na kinakalkula na halaga sa mga tuntunin ng petsa at mga sukat sa talahanayan ng mga kabuuan.
  2. "Idinaragdag" namin ang halaga mula sa talahanayan ng paggalaw sa halaga mula sa talahanayan ng mga kabuuan.


ganyan mga simpleng hakbang maaaring makabuluhang mapabuti ang pagganap ng system sa kabuuan.

Gamit ang Query Builder

Tagabuo ng Query– isang tool na binuo sa 1C Enterprise system na lubos na nagpapadali sa pagbuo ng mga query sa database.

Ang tagabuo ng query ay may medyo simple, madaling gamitin na interface. Gayunpaman, tingnan natin ang paggamit ng query constructor nang mas detalyado.

Ang query text constructor ay inilunsad mula sa context menu (kanang mouse button) sa nais na lugar sa program code.

Paglalarawan ng 1C request constructor

Tingnan natin ang bawat tab ng taga-disenyo nang mas detalyado. Ang pagbubukod ay ang tab na Tagabuo, na isang paksa para sa isa pang talakayan.

Tab na Mga Table at Field

Tinutukoy ng tab na ito ang data source at mga field na kailangang ipakita sa ulat. Sa esensya, ang mga constructions SELECT.. FROM ay inilarawan dito.

Ang pinagmulan ay maaaring isang pisikal na talahanayan ng database, isang virtual na talahanayan ng rehistro, mga pansamantalang talahanayan, mga nested na query, atbp.

Sa menu ng konteksto ng mga virtual na talahanayan, maaari kang magtakda ng mga parameter ng virtual na talahanayan:

Tab ng mga koneksyon

Ang tab ay ginagamit upang ilarawan ang mga koneksyon ng ilang mga talahanayan at lumilikha ng mga konstruksyon na may salitang CONNECTION.

Tab ng pagpapangkat

Sa tab na ito, binibigyang-daan ka ng system na ipangkat at ibuod ang mga kinakailangang field ng resulta ng talahanayan. Inilalarawan ang paggamit ng mga construction GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF DIFFERENT.

Tab ng mga kundisyon

Responsable para sa lahat ng lumalabas sa text ng kahilingan pagkatapos ng konstruksyon na WHERE, ibig sabihin, para sa lahat ng kundisyong ipinataw sa natanggap na data.

Advanced na tab

Tab Bukod pa rito puno ng lahat ng uri ng mga parameter na napakahalaga. Tingnan natin ang bawat isa sa mga katangian.

Pagpapangkat Pagpili ng mga talaan:

  • Unang N– isang parameter na nagbabalik lamang ng N record sa query (ang FIRST operator)
  • Walang mga duplicate– tinitiyak ang pagiging natatangi ng mga natanggap na tala (IBA'T IBANG operator)
  • Pinayagan– nagpapahintulot sa iyo na piliin lamang ang mga talaan na pinapayagan ka ng system na piliin na isinasaalang-alang (PINAGPAHAYAG na pagtatayo)

Pagpapangkat Uri ng kahilingan tinutukoy kung anong uri ng query ang magiging: pagkuha ng data, paggawa ng pansamantalang talahanayan, o pagsira ng pansamantalang talahanayan.

Sa ibaba ay may bandila I-lock ang natanggap na data para sa pagbabago sa ibang pagkakataon. Binibigyang-daan ka nitong paganahin ang kakayahang magtakda ng pag-lock ng data, na nagsisiguro sa kaligtasan ng data mula sa sandaling ito ay basahin hanggang sa ito ay mabago (may kaugnayan lamang para sa Awtomatikong mode interlocks, disenyo PARA MAGBAGO).

Tab na Mga Pagsasama/Alyas

Sa tab na ito ng query designer, maaari mong itakda ang kakayahang sumali sa iba't ibang mga talahanayan at alias (ang HOW construct). Ang mga talahanayan ay ipinahiwatig sa kaliwang bahagi. Kung itatakda mo ang mga flag sa tapat ng talahanayan, ang UNITE construction ang gagamitin, kung hindi - UNITE ALL (mga pagkakaiba sa pagitan ng dalawang pamamaraan). Sa kanang bahagi, ang mga sulat ng mga patlang sa iba't ibang mga talahanayan ay ipinahiwatig kung ang sulat ay hindi tinukoy, ang query ay magbabalik ng NULL.

Tab ng order

Tinutukoy nito ang pagkakasunud-sunod kung saan ang mga halaga ay pinagsunod-sunod (ORDER BY) - pababang (DESC) o pataas (ASC).

Mayroon ding isang kawili-wiling bandila - Auto-order(sa kahilingan - AUTO ORDERING). Bilang default, ang 1C system ay nagpapakita ng data sa isang "magulong" pagkakasunud-sunod. Kung itatakda mo ang flag na ito, pag-uuri-uriin ng system ang data ayon sa panloob na data.

Tab ng Query Batch

Sa tab na taga-disenyo ng query, maaari kang lumikha ng mga bago at gamitin din ito bilang isang nabigasyon. Sa text ng kahilingan, ang mga packet ay pinaghihiwalay ng simbolo na ";" (kuwit).

Button na "Query" sa taga-disenyo ng query

Sa ibabang kaliwang sulok ng taga-disenyo ng kahilingan mayroong isang pindutan ng Kahilingan, kung saan maaari mong tingnan ang teksto ng kahilingan anumang oras:

Sa window na ito, maaari kang gumawa ng mga pagsasaayos sa kahilingan at isagawa ito.


Gamit ang Query Console

Ang Query Console ay isang simple at maginhawang paraan upang i-debug ang mga kumplikadong query at mabilis na makakuha ng impormasyon. Sa artikulong ito, susubukan kong ilarawan kung paano gamitin ang Query Console at magbigay ng link para i-download ang Query Console.

Tingnan natin ang tool na ito.

I-download ang 1C query console

Una sa lahat, upang magsimulang magtrabaho kasama ang query console, kailangan mong i-download ito mula sa kung saan. Ang mga paggamot ay karaniwang nahahati sa dalawang uri - kinokontrol na mga form at regular (o kung minsan ay tinatawag na 8.1 at 8.2/8.3).

Sinubukan kong pagsamahin ang dalawang view na ito sa isang pagproseso - bubukas ang nais na form sa nais na operating mode (sa pinamamahalaang mode, gumagana lamang ang console sa makapal na mode).

Paglalarawan ng 1C query console

Simulan natin ang pagtingin sa query console na may paglalarawan ng pangunahing panel ng pagpoproseso:

Sa header ng query console, makikita mo ang oras ng pagpapatupad ng huling query na may katumpakan ng millisecond, nagbibigay-daan ito sa iyo na ihambing ang iba't ibang mga disenyo sa mga tuntunin ng pagganap.

Ang unang pangkat ng mga pindutan sa command bar ay responsable para sa pag-save ng mga kasalukuyang query sa isang panlabas na file. Ito ay napaka-maginhawa; maaari kang bumalik sa pagsulat ng isang kumplikadong kahilingan. O, halimbawa, mag-imbak ng listahan ng mga tipikal na halimbawa ng ilang partikular na disenyo.

Sa kaliwa, sa field na "Kahilingan", maaari kang lumikha ng mga bagong kahilingan at i-save ang mga ito sa isang istraktura ng puno. Ang pangalawang pangkat ng mga pindutan ay responsable para sa pamamahala ng listahan ng mga kahilingan. Gamit ito maaari kang lumikha, kopyahin, tanggalin, ilipat ang isang kahilingan.

  • Ipatupadkahilingan– simpleng pagpapatupad at mga resulta
  • Ipatupad ang package– nagbibigay-daan sa iyong tingnan ang lahat ng mga intermediate na query sa isang batch ng mga query
  • Pagtingin sa mga pansamantalang talahanayan– nagbibigay-daan sa iyong makita ang mga resulta na ibinabalik ng mga pansamantalang query sa isang talahanayan

Mga parameter ng kahilingan:

Binibigyang-daan kang itakda ang kasalukuyang mga parameter para sa kahilingan.

Sa window ng mga parameter ng query, ang mga sumusunod ay kawili-wili:

  • Pindutan Kunin mula sa kahilingan awtomatikong hinahanap ang lahat ng mga parameter sa kahilingan para sa kaginhawahan ng developer.
  • Bandila Mga karaniwang parameter para sa lahat ng kahilingan– kapag naka-install, ang pagproseso nito ay hindi na-clear ang mga parameter kapag lumilipat mula sa kahilingan sa kahilingan sa pangkalahatang listahan ng mga kahilingan.

Magtakda ng parameter na may listahan ng mga value Ito ay napaka-simple, kapag pumipili ng isang halaga ng parameter, mag-click sa pindutan ng malinaw na halaga (krus), ipo-prompt ka ng system na piliin ang uri ng data, kung saan kailangan mong piliin ang "Listahan ng Halaga":

Gayundin sa tuktok na panel mayroong isang pindutan para sa pagtawag sa mga setting ng query console:

Dito maaari mong tukuyin ang mga parameter para sa autosaving query at query execution parameters.

Ang teksto ng kahilingan ay ipinasok sa field ng kahilingan sa console. Magagawa ito sa pamamagitan lamang ng pag-type ng query test o sa pamamagitan ng pagtawag sa isang espesyal na tool - ang query designer.

Ang 1C 8 request constructor ay tinawag mula sa menu ng konteksto(kanang pindutan ng mouse) kapag nag-click sa input field:

Gayundin sa menu na ito ay may mga ganoon kapaki-pakinabang na mga tampok, tulad ng pag-clear o pagdaragdag ng mga line break (“|”) sa kahilingan, o pagkuha ng request code sa maginhawang form na ito:

Kahilingan = Bagong Kahilingan;
Request.Text = ”
|PUMILI
| Currencies.Link
|MULA
| Directory.Currencies AS Currencies”;
RequestResult = Request.Execute();

Ang mas mababang field ng query console ay nagpapakita ng query result field, kaya naman ang pagproseso na ito ay ginawa:



Gayundin, ang query console, bilang karagdagan sa listahan, ay maaaring magpakita ng data sa anyo ng isang puno - para sa mga query na naglalaman ng mga kabuuan.

Pag-optimize ng query

Ang isa sa pinakamahalagang punto sa pagtaas ng produktibidad ng 1C enterprise 8.3 ay pag-optimizemga kahilingan. Napakahalaga din ng puntong ito kapag pagpasa sa sertipikasyon. Sa ibaba ay pag-uusapan natin ang mga karaniwang dahilan para sa hindi pinakamainam na pagganap mga query at paraan ng pag-optimize.

Mga pagpipilian sa isang virtual na talahanayan gamit ang WHERE construct

Kinakailangang maglapat ng mga filter sa mga detalye ng virtual na talahanayan sa pamamagitan lamang ng mga parameter ng VT. Sa anumang pagkakataon dapat mong gamitin ang WHERE construct para sa pagpili sa isang virtual na talahanayan ito ay isang malaking pagkakamali mula sa isang punto ng pag-optimize. Sa kaso ng pagpili gamit ang WHERE, sa katunayan, matatanggap ng system ang LAHAT ng mga tala at pagkatapos ay piliin lamang ang mga kinakailangan.

TAMA:

PUMILI

MULA SA
Rehistro ng Mga Pag-aayos sa Mga Kalahok ng Mga Organisasyon (.
,
Organisasyon = &Organisasyon
AT Indibidwal = &Indibidwal) PAANO Binabalanse ang Mutual settlements sa Mga Kalahok ng Organisasyon

MALI:

PUMILI
Mutual settlements sa Mga Kalahok ng Mga Balanse sa Mga Organisasyon
MULA SA
Register of Accumulations sa Mutual Settlements with Participants of Organizations Balances (,) HOW Mutual settlements with Participants of Organizations Balances
SAAN
Mutual settlements sa Mga Kalahok ng Mga Balanse ng Organisasyon = & Organisasyon
AT Mutual na pakikipag-ayos sa Mga Kalahok ng Mga Balanse sa Organisasyon = &Indibidwal

Pagkuha ng halaga ng isang field ng isang kumplikadong uri gamit ang isang tuldok

Kapag tumatanggap ng data ng isang kumplikadong uri sa isang query sa pamamagitan ng isang tuldok, ang system ay kumokonekta sa kaliwang pagsasama nang eksakto sa maraming mga talahanayan hangga't mayroong mga uri na posible sa larangan ng kumplikadong uri.

Halimbawa, lubos na hindi kanais-nais para sa pag-optimize upang ma-access ang field ng rehistro ng talaan - registrar. Ang registrar ay may isang pinagsama-samang uri ng data, bukod sa kung saan ay ang lahat ng posibleng mga uri ng dokumento na maaaring magsulat ng data sa rehistro.

MALI:

PUMILI
Record Set.Recorder.Date,
RecordSet.Dami
MULA SA
RegisterAccumulations.ProductsOrganizations AS Set of Records

Iyon ay, sa katunayan, ang naturang query ay hindi maa-access ang isang talahanayan, ngunit 22 na mga talahanayan ng database (ang rehistrong ito ay may 21 mga uri ng registrar).

TAMA:

PUMILI
PAGPILI
WHEN ProductsOrg.Registrar LINK Document.Benta ng Mga Produkto at Serbisyo
THEN EXPRESS(ProductsOrg.Registrar AS Document.Sales of GoodsServices).Petsa
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Petsa
WAKAS BILANG PETSA,
ProductsOrg.Dami
MULA SA
RegisterAccumulations.GoodsOrganizations AS GoodsOrganization

O ang pangalawang opsyon ay ang magdagdag ng naturang impormasyon sa mga detalye, halimbawa, sa aming kaso, pagdaragdag ng petsa.

TAMA:

PUMILI
ProductsOrganizations.Date,
ProductsOrganizations.Dami
MULA SA
Register of Accumulations ng mga Goods of Organizations AS Goods of Organizations

Mga subquery sa kondisyon ng pagsali

Para sa pag-optimize, hindi katanggap-tanggap na gumamit ng mga subquery sa mga kondisyon ng pagsali; ito ay makabuluhang nagpapabagal sa query. Maipapayo na gumamit ng VT sa mga ganitong kaso. Upang kumonekta, kailangan mong gumamit lamang ng mga metadata at VT na bagay, na dati nang na-index ang mga ito sa pamamagitan ng mga field ng koneksyon.

MALI:

PUMILI…

UMALIS SA SUMALI (
PUMILI MULA SA RegisterInformation.Limits
SAAN…
GRUPO NI...
) NG…

TAMA:

PUMILI…
Ilagay ang mga Limitasyon
MULA sa Information Register.Limits
SAAN…
GRUPO NI...
INDEX NI...;

PUMILI…
MULA sa Dokumento
LEFT JOIN Limits
NG …;

Pagsali sa Mga Tala gamit ang Virtual Tables

May mga sitwasyon kung kailan, kapag kumokonekta sa isang virtual na talahanayan sa iba, ang system ay hindi gumagana nang mahusay. Sa kasong ito, upang ma-optimize ang pagganap ng query, maaari mong subukang ilagay ang virtual na talahanayan sa isang pansamantalang isa, nang hindi nakakalimutang i-index ang mga pinagsamang field sa pansamantalang query sa talahanayan. Ito ay dahil sa ang katunayan na ang mga VT ay madalas na nakapaloob sa ilang mga pisikal na talahanayan ng DBMS bilang isang resulta, ang isang subquery ay pinagsama-sama upang piliin ang mga ito, at ang problema ay naging katulad sa nakaraang punto.

Paggamit ng mga seleksyon batay sa mga hindi naka-index na field

Isa sa mga pinakakaraniwang pagkakamali kapag nagsusulat ng mga query ay gumagamit ng mga kundisyon sa mga hindi na-index na field, sumasalungat ito mga panuntunan sa pag-optimize ng query. Ang DBMS ay hindi makakapagsagawa ng isang query nang mahusay kung ang query ay may kasamang pagpili sa mga hindi na-index na mga patlang. Kung kukuha ka ng pansamantalang talahanayan, kailangan mo ring i-index ang mga field ng koneksyon.

Dapat mayroong angkop na index para sa bawat kundisyon. Ang isang angkop na index ay isa na nakakatugon sa mga sumusunod na kinakailangan:

  1. Ang index ay naglalaman ng lahat ng mga patlang na nakalista sa kundisyon.
  2. Ang mga field na ito ay nasa pinakasimula ng index.
  3. Ang mga pagpipiliang ito ay magkakasunod, iyon ay, ang mga halaga na hindi kasama sa kondisyon ng query ay hindi "nakakabit" sa pagitan nila.

Kung hindi pipiliin ng DBMS ang mga tamang index, ma-scan ang buong talahanayan - magkakaroon ito ng napaka-negatibong epekto sa pagganap at maaaring humantong sa matagal na pagharang sa buong hanay ng mga tala.

Paggamit ng Lohikal O sa Kundisyon

Iyon lang, saklaw ng artikulong ito ang mga pangunahing aspeto ng pag-optimize ng query na dapat malaman ng bawat eksperto sa 1C.

Isang napakakapaki-pakinabang na libreng kurso sa video sa pagbuo at pag-optimize ng query, Lubos kong inirerekumenda para sa mga nagsisimula at higit pa!

Kapag nag-aayos ng mga sample sa mga totoong problema, sa karamihan ng mga kaso, ang pagpili ng data ay inayos alinsunod sa ilang pamantayan.

Sa kaso kapag ang pagpili ay ginawa mula sa isang tunay na talahanayan, walang mga paghihirap na lumitaw. Ang data ay pinoproseso nang walang kabuluhan:

Sa kaso kapag ang pinagmulan sa query ay isang virtual na talahanayan, ang sitwasyon ay nagiging mas kumplikado.

Binibigyang-daan ka ng wika ng query na magpataw ng kundisyon sa isang seleksyon mula sa mga virtual na talahanayan sa dalawang paraan: sa sugnay na WHERE at paggamit ng mga parameter ng virtual na talahanayan. Ang parehong mga pamamaraan ay hahantong sa parehong resulta (maliban sa ilang partikular na kaso), ngunit, gayunpaman, malayo ang mga ito sa katumbas.

Alam na natin na ang mga virtual na talahanayan ay tinatawag na virtual dahil wala sila sa database. Ang mga ito ay nabuo lamang sa sandaling ang isang kahilingan ay ginawa sa kanila. Sa kabila nito, maginhawa para sa amin (iyon ay, ang mga sumulat ng query) na isaalang-alang ang mga virtual na talahanayan bilang mga tunay. Ano ang mangyayari sa 1C Enterprise 8 system kapag na-access pa rin ng query na pinagsama-sama namin ang virtual na talahanayan?

Sa unang hakbang, bubuo ang system ng isang virtual na talahanayan. Sa ikalawang hakbang, pipiliin ang mga talaan mula sa resultang talahanayan na tumutugon sa kundisyong tinukoy sa sugnay na WHERE:


Malinaw na nakikita na ang panghuling sample ay hindi isasama ang lahat ng mga tala mula sa virtual na talahanayan (at, samakatuwid, mula sa database), ngunit ang mga lamang na nakakatugon sa ibinigay na kondisyon. At ang natitirang mga tala ay hindi isasama sa resulta.

Kaya, ang sistema ay hindi lamang walang silbi na gawain, ngunit dobleng walang silbi na gawain! Una, gagastusin ang mga mapagkukunan sa pagbuo ng isang virtual na talahanayan batay sa hindi kinakailangang data (sa figure na sila ay minarkahan bilang "mga lugar ng data A at B"), at pagkatapos ay gagawin ang trabaho upang i-filter ang data na ito mula sa huling resulta.

Posible bang kaagad, sa yugto ng pagbuo ng isang virtual na talahanayan, ihinto ang paggamit ng hindi kinakailangang data? Posible pala. Ito ay eksakto kung ano ang idinisenyo ng mga virtual na parameter ng talahanayan:


Sa pamamagitan ng pag-parameter ng isang virtual na talahanayan, agad naming nililimitahan ang dami ng data na ipoproseso ng query.

Ano ang pagkakaiba sa pagitan ng mga halaga ng parameter ng virtual na talahanayan na "Paraan ng Pagdaragdag"?
Kapag ang Paraan ng Pagdaragdag ay nakatakda sa "mga paggalaw", ang mga panahong iyon lamang kung saan nagkaroon ng mga paggalaw ang ibabalik. Kapag ang "Mga Paggalaw at Hangganan ng Panahon" ay itinakda, pagkatapos ay 2 talaan ang idaragdag sa mga paggalaw sa itaas: mga paggalaw sa simula at katapusan ng panahon na tinukoy sa mga parameter ng VT. Ang field na "Registrar" ay walang laman para sa 2 record na ito.

Kapag nag-aayos ng mga sample sa mga totoong problema, sa karamihan ng mga kaso, ang pagpili ng data ay inayos alinsunod sa ilang pamantayan.

Sa kaso kapag ang pagpili ay ginawa mula sa isang tunay na talahanayan, walang mga paghihirap na lumitaw. Ang data ay pinoproseso nang walang kabuluhan:

Sa kaso kapag ang pinagmulan sa query ay isang virtual na talahanayan, ang sitwasyon ay nagiging mas kumplikado.


Binibigyang-daan ka ng wika ng query na magpataw ng kundisyon sa isang seleksyon mula sa mga virtual na talahanayan sa dalawang paraan: sa sugnay na WHERE at paggamit ng mga parameter ng virtual na talahanayan. Ang parehong mga pamamaraan ay hahantong sa parehong resulta (maliban sa ilang partikular na kaso), ngunit, gayunpaman, malayo ang mga ito sa katumbas.

Alam na natin na ang mga virtual na talahanayan ay tinatawag na virtual dahil wala sila sa database. Ang mga ito ay nabuo lamang sa sandaling ang isang kahilingan ay ginawa sa kanila. Sa kabila nito, maginhawa para sa amin (iyon ay, ang mga sumulat ng query) na isaalang-alang ang mga virtual na talahanayan bilang mga tunay. Ano ang mangyayari sa 1C Enterprise 8 system kapag na-access pa rin ng query na pinagsama-sama namin ang virtual na talahanayan?

Sa unang hakbang, bubuo ang system ng isang virtual na talahanayan. Sa ikalawang hakbang, pipiliin ang mga talaan mula sa resultang talahanayan na tumutugon sa kundisyong tinukoy sa sugnay na WHERE:
Malinaw na nakikita na ang panghuling sample ay hindi isasama ang lahat ng mga tala mula sa virtual na talahanayan (at, samakatuwid, mula sa database), ngunit ang mga lamang na nakakatugon sa ibinigay na kondisyon. At ang natitirang mga tala ay hindi isasama sa resulta.

Kaya, ang sistema ay hindi lamang walang silbi na gawain, ngunit dobleng walang silbi na gawain! Una, gagastusin ang mga mapagkukunan sa pagbuo ng isang virtual na talahanayan batay sa hindi kinakailangang data (sa figure na sila ay minarkahan bilang "mga lugar ng data A at B"), at pagkatapos ay gagawin ang trabaho upang i-filter ang data na ito mula sa huling resulta.

Posible bang kaagad, sa yugto ng pagbuo ng isang virtual na talahanayan, ihinto ang paggamit ng hindi kinakailangang data? Posible pala. Ito ay eksakto kung ano ang idinisenyo ng mga virtual na parameter ng talahanayan:

Sa pamamagitan ng pag-parameter ng isang virtual na talahanayan, agad naming nililimitahan ang dami ng data na ipoproseso ng query.

Ano ang pagkakaiba sa pagitan ng mga halaga ng parameter ng virtual na talahanayan na "Paraan ng Pagdaragdag"?
Kapag ang Paraan ng Pagdaragdag ay nakatakda sa "mga paggalaw", ang mga panahon lamang kung saan nagkaroon ng mga paggalaw ang ibabalik. Kapag ang "Mga Paggalaw at Hangganan ng Panahon" ay itinakda, pagkatapos ay 2 talaan ang idaragdag sa mga paggalaw sa itaas: mga paggalaw sa simula at pagtatapos ng panahon na tinukoy sa mga parameter ng VT. Ang field na "Registrar" ay walang laman para sa 2 record na ito.

Ang impormasyon na kinuha mula sa site