Totalet e konstruktorit të pyetjeve 1s. Projektuesi i pyetjeve të skemës së përbërjes së të dhënave

Pra, le të fillojmë me një të thjeshtë: në konfigurues, krijoni një Përpunim të Ri, emërtojeni Query Console ose Query Builder, sipas dëshirës tuaj.

Ne mund të shtojmë menjëherë një etiketë në "Të dhënat" për Parametrat e ardhshëm që na duhen, në mënyrë që në konsolën tonë të mos ekzekutojmë kërkesën më primitive, por me parametra dhe lidhje, për shembull, për punën tonë do të krijojmë një kërkesë për regjistrat periodikë. , por këtu pa specifikuar askund Parameter=&Date.

Për të krijuar tabelën tonë të Parametrave, në skedën "Data" në "seksionin Tabelor" të saj shtoni një tabelë të re, le ta quajmë atë Parametrat e pyetjes, këtu shtojmë kolonat e kësaj tabele: 1) Emri i parametrit, lloji i vargut = 25 karaktere; ParameterValue, këtu është një lloj i përbërë i të dhënave, shihni fig:

Prandaj, siç tregohet në foto - zgjidhni llojin e përbërë për kolonën ParameterValue: në menynë tip që hapet, kontrolloni kutinë "Lloji i përbërë", zgjidhni numrin, vargun (specifikoni 20 karaktere), datën, Boolean dhe vendosni shenjë më e ulët - AnyReference - do të thotë që më tej, kur specifikojmë Parametrat e kërkesës sonë, ne mund t'i referohemi çdo objekti të konfigurimit tonë, për shembull, drejtorive ose dokumenteve.

Tani duhet të krijojmë formën e Konsolës sonë të ardhshme të Query. Në përpunim, shkoni te skeda "Format" dhe shtoni një të re. Fusim këtë formular dhe tashmë ka një fushë të pakufizuar për kreativitet - ju mund t'i rregulloni dy atributet që sapo keni krijuar dhe pllakën me parametrat sipas dëshirës tuaj! Për këtë ju mund të përdorni elemente standarde të formës si Grupi ose Faqe me Faqe (nëse ju pëlqen të ktheni më shumë faqe.

Gjëja kryesore këtu është një gjë: duke zvarritur atributin "TextValues" në fushën e majtë të modifikimit të formularit - sigurohuni që të vendosni "View" = Fushën e dokumentit të tekstit në vetitë e tij. Shih figurën:

Në vetitë e atributit "QueryTable", mund të specifikoni opsionalisht - "Rrjeti i ekranit" dhe "Titujt e ekranit".

Më pas, në dritaren e duhur të redaktimit të formularit, shkoni te skeda "Komanda" dhe shtoni një buton të ri, kur të klikoni, Konsola jonë do të kryejë një veprim të caktuar. Le të krijojmë një buton "Query Constructor", mund t'i shtoni një ikonë butonit nëse dëshironi, gjëja kryesore është ta zhvendosni vetë butonin në dritaren e modifikimit të formularit të majtë - në mënyrë që ta shohim. Më pas, në formën e duhur dritarja e redaktimit, klikoni me të djathtën në butonin tonë dhe zgjidhni pronat - në vetitë, klikoni në artikullin "Veprim", do të shfaqet një dritare modale me pyetjen - ku saktësisht do të ekzekutohet kodi ynë i programit, të cilin do t'ia caktojmë butonit - zgjidhni "Për klientin".

Moduli i Formularit do të hapet me një procedurë të gatshme boshe "Kërkesë Procedure Constructor (Command)". Brenda kësaj procedure, ne do të përshkruajmë thirrjen për Query Builder standard 1c8. Është shumë e lehtë: Constructor=Ndërtues i ri i pyetjeve; Por këtu ka gracka - Query Constructor i integruar në platformë funksionon në modalitetin e përdoruesit VETËM nën një klient të trashë! Prandaj, ne do të fusim kushtin e instruksionit të paraprocesorit #Nëse, por këtu ju vendosni vetë, bazuar në platformën tuaj, ose keni forma të zakonshme, atëherë zgjidhni " Aplikim i trashë Klienti i zakonshëm"ose keni një platformë në format e menaxhuara ah, atëherë" Aplikacioni ThickClientManaged". shih fig.

Tani mbetet t'i shtojmë kësaj procedure një kusht për të shkruar tekstin e kërkesës, të cilin Ndërtuesi i pyetjeve do të gjenerojë për ne në atributin tonë të formularit "Kërkesë për tekst":

If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse;

Por ne mund të ndryshojmë manualisht diçka në tekstin e kërkesës (në modalitetin e përdoruesit - në dritaren mbështetëse "QueryText"), në mënyrë që ndryshimet tona të futen në QueryConstructor kur të thirret përsëri - le të shtojmë një kusht të thjeshtë këtu:

Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse;

Kjo është e gjitha, ne kemi lidhur Query Constructor të integruar në platformën 1c8, le të shohim punën tonë. Për ta bërë këtë, ekzekutoni 1C:Enterprise në modalitetin e klientit të trashë duke përdorur një nga metodat e mëposhtme: 1) menyja kryesore e Konfiguratorit - Debugging - StartDebugging - ThickClient; 2) ose nëse i keni këto çelësa në panelin e kontrollit në konfigurues - thjesht shtypni butonin me një rreth të verdhë me një pikë të trashë, shihni figurën:

Modaliteti i përdoruesit 1sEnterprise8 është nisur, ne gjejmë përpunimin tonë, e nisim atë, klikojmë në butonin tonë "Query Constructor" dhe shohim se si hapet konstruktori i integruar në platformë. shih fig.

Pra, Query Constructor po fillon, ne tashmë mund të fillojmë të shtojmë kërkesën tonë të ardhshme në të, por ne jemi të interesuar të shohim se si do të funksionojë kërkesa që krijuam! Dhe për këtë ne duhet të krijojmë një buton tjetër në konfigurues në modifikimin e formës së tastierës sonë, le ta quajmë "Kërkesa e ekzekutimit". Në vetitë e butonit "Ekzekutoni kërkesën", klikoni në "Veprim", menyja bie përsëri, në të cilën ne pyetemi se ku do të përpunohet kodi ynë i programit, në këtë rast, zgjidhni "Si në klient dhe në server. ", ne përsëri futemi në ModuleForms.

Në procedurën ExecuteRequest(), të cilën e kemi te klienti, do të shkruajmë një kusht nëse përdoruesi nuk e ka futur tekstin e kërkesës, por kërkon ta ekzekutojë:

If EmptyString(Object.QueryText) Pastaj report("Fut tekstin e pyetjes!"); FundNëse;

Sistemi tashmë ka krijuar automatikisht një lidhje me procedurën ExecuteRequestOnServer() për ne; - kjo është mirë, le të shkojmë te kjo procedurë, e cila ekzekutohet në server dhe të shkruajmë këtu kodin për ekzekutimin e kërkesës sonë të futur.

Këtu ka opsione: Ju mund t'i shkruani vetë të gjitha shprehjet që lidhen me ndërtimin e pyetjeve, d.m.th. manualisht, por ekziston një opsion edhe më i lehtë - brenda procedurës, kliko me të djathtën dhe zgjidhni "Query Builder me përpunimin e rezultateve, shikoni figurën" në menunë rënëse:

Nëse keni klikuar në artikullin Query Builder with Result Processing, dritarja modale "Teksti i pyetjes nuk u gjet. Krijo një të ri?" do të shfaqet, klikoni po. Duke anashkaluar rezultatin". Kjo është ajo, nuk na duhet asgjë tjetër nga ky konstruktor, klikoni në butonin "OK" - do të shfaqet një dritare modale "Nuk është zgjedhur asnjë fushë në kërkesë, klikoni "OK".

Pas kësaj, brenda procedurës sonë ExecuteRequestOnServer(), do të shfaqet boshllëku i mëposhtëm i gatshëm:

Le të kalojmë te shprehja e ndërtuar nga konstruktori:

Kërkesë.Text = "";

Kërkesë.Text =Object.QueryText;

Është kaq e thjeshtë, butoni ynë "Kryej kërkesë" në formularin e përpunimit është tashmë praktikisht funksional, deri më tani mund të përpunohet vetëm kërkesa të thjeshta pa parametra, por gjëja kryesore është se funksionon! Mbetet vetëm për të shfaqur vizualisht në "Tabela e Vlerave" mbështetëse në formularin e përpunimit - rezultatet e kërkesës sonë. Më lejoni t'ju kujtoj se atributi ynë "Tabela e Vlerave" ka llojin "Spreadsheet Document", sepse në të kundërt nuk do t'i shohim rezultatet tona në modalitetin e përdoruesit. Përdoruesi nxjerr gjithmonë të dhëna tabelare qoftë nga një Dokument Spreadsheet ose një Layout, unë me të vërtetë do të doja të isha në gjendje të shfaqja të dhëna përmes një tabele vlerash - pasi është shumë e lehtë për t'u përdorur dhe e njohur, por, për fat të keq, një tabelë i vlerave është vetëm një mjet që i nevojitet një zhvilluesi, nuk mund të shfaqësh të dhëna në ekran duke e përdorur atë ...

Le të hedhim një vështrim më të afërt se çfarë është një Dokument Spreadsheet - është si një fletë Excel - ju mund të arrini në një rekord në një qelizë specifike vetëm duke përdorur qelizat e tabelës, këtu ne i quajmë ato një zonë, por ne vetë mund të zgjedhim gamën e kësaj zonë në një qelizë specifike:

Pra, ne kuptuam se çfarë është një dokument i fletëllogaritës, përcaktuam për veten tonë se duhet të përcaktojmë të dhënat nga pyetja jonë në një qelizë specifike të këtij dokumenti të fletëllogaritës. Por le të mendojmë: cili është "RequestResult" që konstruktori gjeneroi për ne kaq shpejt? Hapja e ndihmës - Rezultati i pyetjes është një tabelë që ka vetitë përkatëse! shih fig.

Dhe nëse tani shkruajmë pas shprehjes QueryResult = Query.Execute(); (krijuar nga konstruktori) këtu është një lak kaq i thjeshtë për Koleksionet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Raporti i ciklit (Emri i kolonës. Emri); Cikli i Fundit;

Pas këtij cikli, për momentin, shikoni të gjitha shprehjet e ndërtuara automatikisht nga konstruktori. Dhe ekzekutoni 1C:Enterprise8 nën një klient të trashë. Krijoni çdo kërkesë të thjeshtë (Ju mund të përdorni Query Builder - tashmë funksionon për ne) dhe klikoni në butonin "Run Request":

Pastaj do të shihni në fund të dritares në mesazhe - që tabela QueryResult ruan emrat e fushave që sapo kemi zgjedhur duke krijuar një pyetje të thjeshtë.

Tani le të shfaqim këta emra të fushave të vuajtjeve tona në një dokument Spreadsheet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Scope(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=Emri i kolonës.Emri; Cikli i Fundit;

Për të shfaqur detajet në të dhënat e pyetjes - le të ndryshojmë madhësinë e shprehjeve të krijuara automatikisht nga konstruktori dhe të fusim saktësisht të njëjtin lak që kemi përdorur për të shfaqur emrat e kolonave brenda ciklit "SelectionDetailedRecords", vetëm tani nuk duhet të transferojmë të dhënat e Tabela "QueryResult" në tekstin e qelizës dhe të dhënat e vetë Përzgjedhjes, le të shohim në ndihmë se si mund të hyni në fushën e përzgjedhjes së detajuar të pyetjes:

SamplingDetailRecords = QueryResult.Select(); Ndërsa SelectionDetailedRecords.Next() Loop //në rreshtin e parë kemi tashmë emrat e kolonave të tabelës, kështu që ngarkojmë të dhënat poshtë rreshtit të parëDocumentLineNumber=Object.QueryTable.TableHeight+1; Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Region(DocumentRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=SelectionDetailRecords[Emri i kolonës.Emri]; Cikli i Fundit; Cikli i Fundit;

Kjo është e gjitha, ne mund të kontrollojmë, ngarkojmë ndërmarrjen nën një klient të trashë, futim një kërkesë të thjeshtë pa parametra, klikojmë në butonin "Kërkoni kërkesën", shihni figurën:

Hurrah, gjithçka funksionon!!!

Është shumë i përshtatshëm kur, kur hapim/mbyllni Konsolën tonë të Query, teksti ynë i pyetjes, me të cilin kemi punuar përpara mbylljes së konsolës, shkruhet përsëri në fushën "QueryText". Për ta bërë këtë, thjesht duhet të aktivizoni tiparin e formës = Ruaj automatikisht, shihni foton:

Gjithçka, tastiera jonë funksionon. Në mënyrë që ne të shkruajmë pyetje më komplekse me parametrat e specifikuar në to, duhet të krijojmë një buton tjetër "FindParameters", si dhe kodin për butonin "RunQuery" - kodi për butonin "FindParameters" do të ekzekutohet në klient dhe në server. Më tej, në procedurën e serverit, ne e nisim kërkesën në të njëjtën mënyrë me tekstin e kaluar në të nga dritarja "QueryText", duke përdorur shprehjen "Query.FindParameters()", gjejmë parametrat e kaluar dhe thjesht i futim në pjesa tabelare e "QueryParameters" formohet në një lak. Mos harroni t'i kaloni ato nga tabela e plotësuar e parametrave në procedurën "Ekzekutoni kërkesën" më vonë.

Ju gjithashtu mund të shtoni disa butona në konsolën tonë që do të pastrojnë dritaren e Parametrave dhe dritaren "Teksti i pyetjes" në modalitetin e përdoruesit.

Konsola jonë e pyetjeve është gati për t'u përdorur, ju dëshirojmë zgjidhje të suksesshme kreative me ndihmën e një mjeti kaq të thjeshtë dhe të fuqishëm siç është Konsola e Query!

Ky përpunim është shkruar në platformën 1s8.3 (forma të menaxhuara), ai funksionon nën një klient të trashë. Mund të shkruhet gjithashtu në platformën 1s8.2 si në format normale ashtu edhe nën ato të menaxhuara.

Në shkarkim është një mostër e Konsolës së Query që sapo krijuam.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Përmirësimi i konsolës së pyetjeve:

1) Tani Konsola jonë e bërë në shtëpi me Query Builder do të funksionojë nën çdo klient: nën klientin e trashë të formave normale dhe të menaxhuara dhe nën klientin e hollë dhe të internetit.

ps Forma dhe pamja e Query Builder-it të integruar është e ndryshme - në varësi të cilit klient e kemi lançuar Konsolën tonë. (Personalisht, formulari Query Builder nën një klient të trashë është më i njohur dhe i përshtatshëm për mua)

&AtClient Procedure Query Constructor(Command) //Thirrja e Konstruktorit standard të Query është e mundur vetëm nën një klient të trashë #If ThickClientManagedApplication ose ThickClientRegularApplication then Constructor=New Query Constructor; Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse; // #Otherwise // Report("The Query Builder mund të thirret vetëm nën një klient të trashë"); // Kthimi; //# EndIf #Else Report("Ju po ekzekutoni Query Builder nën një klient të hollë - ai ndryshon pak në formën dhe shpejtësinë e performancës!"); Constructor = New Request Constructor(); Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; AlertConstructor = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(ConstructorAlert); # EndIf EndProcedure &AtClient Procedure ExecuteAfterClosingConstructor(Rezultati, Parametrat e Konstruktorit) Eksporto //Rezultat=tekst nëse Concer mbyllej me butonin ok Object.QueryText = ShortLP(Rezultat); //punon!!! Procedura e Fundit

2) Shtoi aftësinë në Konsolën tonë të thjeshtë të Query për të futur pyetje komplekse me Tabelën e Përkohshme të kaluar te parametrat!!! Mekanizmi doli të ishte shumë i thjeshtë dhe elegant - pa përdorimin e kodit XML, siç bëjnë në tastierat profesionale.

Ju mund të shihni vetë kodin dhe procedurat për mekanizmin e transferimit në parametrat e Tabelave të Përkohshme në skedarin e dytë të bashkangjitur. Si të filloni të zhvilloni versionin tuaj të tabelave të përkohshme në parametra mund të shikoni në këtë lidhje https://forum.site/forum9/topic183700/

Tani si të përdorim Konsolën me një pyetje komplekse, kur një tabelë e përkohshme kalon në parametrat e saj. Për shembull, mund të merrni kodin e kësaj kërkese;

SELECT ExternalData.Product, ExternalData.Sasia VENDI të Dhënat e Jashtme FROM &ExternalData AS ExternalData; ///////////////////////////////////////////////////////////////////////// / //////////////////////////// SELECT ExternalData.Item, ExternalData.Quantity, ISNULL(ItemsRemainsRemains.QuantityRemains, 0) AS Field1 , ISNULL(Remains of Goods Remains. Sasia Mbetet, 0) - Të dhëna të Jashtme. Sasia AS që mbetet NGA të dhënat e jashtme AS të dhëna të jashtme LEFT JOIN Regjistri i akumulimit. Produkt

Duke ndjekur modelin dhe ngjashmërinë e kodit të kërkesës më sipër - mund të krijoni tuajin pyetje komplekse, duke pasur parasysh objektet e të dhënave tuaja.

Pra, në konstruktorin e pyetjes, ne krijuam pyetjen e mësipërme duke mbyllur Konstruktorin - teksti i pyetjes do të bjerë në fushën tonë të tastierës "Teksti i pyetjes", klikoni në butonin "Gjeni parametrat", shohim se vargu = "E jashtme Të dhënat", lloji i vlerës \u003d "Tabela e vlerave" u shfaq në tabelën e Parametrave, shih fig.

Në këtë Tabelë të Parametrave - futni parametrin Data, për shembull, datën e sotme, pastaj klikoni për të tentuar të redaktoni parametrin tonë të tabelës së përkohshme "ExternalData", klikoni në tre pika në fushën me "Tabela e vlerave" - ​​një zgjedhje llojesh do të shfaqet, klikoni rreshtin, mekanizmi ynë kthen faqen në formular për ne, ku duhet të futim manualisht këtë tabelë shumë të përkohshme.

Këtu, vini re se në këtë rast, në faqen "TempTables" në fund në fushën "Emri i tabelës së përkohshme në parametrat", do të shfaqet emri i tabelës sonë të përkohshme (ajo është kopjuar nga tabela e Parametrave).

Deri më tani, në faqen "TempTables" shohim vetëm një tabelë bosh - kjo është tabela e Llojeve të tabelës sonë të përkohshme të ardhshme. Duke përdorur butonin "Shto", do të shtojmë emrin e atributit dhe llojin e tabelës së ardhshme. . Kini kujdes - emri dhe lloji duhet të përputhen me atë që kemi specifikuar në kërkesën për &ExternalData:

Tani shtypim butonin "UpdateTemporaryTable" - dhe këtu do të shfaqet tabela e dytë - do ta plotësojmë drejtpërdrejt me të dhënat e tabelës së përkohshme përmes butonit "Shto".

Kjo është e gjitha, ne mund ta kontrollojmë veten edhe një herë nëse kemi futur të dhënat primitive të parametrave të pyetjes në tabelën e parametrave në faqen e parë të përpunimit dhe klikojmë butonin "Kërkoni kërkesën" - gjithçka llogaritet, zgjedh në përputhje me rrethanat me kufizimin në të dhënat e transmetuara në parametrin e tabelës sonë të përkohshme

ps Nëse keni bërë një gabim kur shkruani emrat e detajeve dhe llojet e tyre (në tabelën e parë) - thjesht mbyllni panelin dhe hapeni përsëri - tabela e përkohshme e të dhënave do të fshihet - dhe tabela Llojet mund të modifikohet përsëri dhe një Tabela e re e të dhënave mund të krijohet përsëri.

Kjo është e gjitha, ne mund të krijojmë një mjet pune shumë të fuqishëm me duart tona, përveç kësaj, tastiera jonë është ende shumë e shkathët në krahasim me ato profesionale - dhe ky është një plus shumë i madh për zhvilluesit! Dhe, sigurisht, tani tastiera jonë funksionon nën çdo klient! Suksese ne zhvillimet tuaja krijuese!!!

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Unë jam duke punuar vazhdimisht me Query Console, dhe së fundmi kam hasur në një kërkesë shumë interesante, në të cilën tabelat e përkohshme nuk ishin në paketën e parë të kërkesës, por në ato të tjerat - dhe këtu tabela ime ra paksa në depresion ... kisha për të bërë një përmirësim tjetër.

Pra, menaxheri i Tabelës së Përkohshme në pyetje nuk e kupton gjithmonë se ata po punojnë me të)) Prandaj, duhet të vendosni në mënyrë eksplicite këtë menaxher të Tabelës së Përkohshme:

Procedura &OnServer ExecuteQueryOnServer() //upgrade2 - përkufizim i qartë i menaxherit të Tabela e Përkohshme! VTManager=NewTempTableManager; Kërkesë = Kërkesë e re; //upgrade2 - përkufizim i qartë i menaxherit të Tabela e Përkohshme! Query.TempTableManager = VTManager; Request.Text = Object.QueryText;

Ky version i konsolës është në nisjen e tretë.

Pra, le të fillojmë me një të thjeshtë: në konfigurues, krijoni një Përpunim të Ri, emërtojeni Query Console ose Query Builder, sipas dëshirës tuaj.

Mund të shtojmë menjëherë një tabelë në "Të dhënat" për Parametrat e ardhshëm që na duhen, në mënyrë që në konsolën tonë të mos ekzekutojmë kërkesën më primitive, por me parametra dhe lidhje, për shembull, për punën tonë do të krijojmë një kërkesë për regjistrat periodikë. , por këtu pa specifikuar askund Parameter=&Date.

Për të krijuar tabelën tonë të parametrave, në skedën "Data" në "pjesën tabelare" të saj, shtoni një tabelë të re, le ta quajmë atë Parametrat e pyetjes, këtu do të shtojmë kolonat e kësaj tabele: 1) Emri i parametrit, lloji i vargut = 25. personazhe; ParameterValue, këtu është një lloj i përbërë i të dhënave, shihni fig:

Prandaj, siç tregohet në figurë, zgjidhni llojin e përbërë për kolonën ParameterValue: në menynë e llojeve që hapet, kontrolloni kutinë e kontrollit "Lloji i përbërë", zgjidhni numrin, vargun (specifikoni 20 karaktere), datën, kuptimin dhe vendosni shenjë më e ulët - AnyReference - do të thotë që më tej, kur specifikojmë Parametrat e kërkesës sonë, ne mund t'i referohemi çdo objekti të konfigurimit tonë, për shembull, drejtorive ose dokumenteve.

Tani duhet të krijojmë formën e Konsolës sonë të ardhshme të Query. Në përpunim, shkoni te skeda "Format" dhe shtoni një të re. Fusim këtë formular dhe tashmë ka një fushë të pakufizuar për kreativitet - mund t'i rregulloni dy atributet që sapo keni krijuar dhe pllakën me parametrat sipas dëshirës! Për këtë ju mund të përdorni elemente standarde të formës si Grupi ose Faqe me Faqe (nëse ju pëlqen të ktheni më shumë faqe.

Gjëja kryesore këtu është një gjë: duke zvarritur atributin "TextValues" në fushën e majtë të modifikimit të formularit, sigurohuni që të vendosni "View" = Fusha e dokumentit të tekstit në vetitë e tij. Shih figurën:

Në vetitë e atributit "Tabela e pyetjeve", mund të specifikoni opsionalisht "Rrjeti i ekranit" dhe "Titujt e ekranit".

Më pas, në dritaren e duhur të redaktimit të formularit, shkoni te skeda "Komanda" dhe shtoni një buton të ri, kur të klikoni, tastiera jonë do të kryejë një veprim të caktuar. Le të krijojmë një buton “Query Constructor”, ju mund të shtoni një ikonë në butonin nëse dëshironi, gjëja kryesore është të zhvendosni vetë butonin në dritaren e modifikimit të formularit majtas në mënyrë që ta shohim atë. Më pas, redaktimi në formën e duhur dritare, klikoni me të djathtën në butonin tonë dhe zgjidhni pronat - në pronat, klikoni në artikullin "Veprim", do të shfaqet një dritare modale me pyetjen - ku saktësisht do të ekzekutohet kodi ynë i programit, të cilin do t'i caktojmë butonit - zgjidhni "Për klientin".

Moduli i Formularit do të hapet me një procedurë të gatshme të zbrazët “Kërkesa e procedurës Konstruktori (Komanda)”. Brenda kësaj procedure, ne do të përshkruajmë thirrjen për Query Builder standard 1c8. Është shumë e lehtë: Constructor=Ndërtues i ri i pyetjeve; Por këtu ka gracka - Query Constructor i integruar në platformë funksionon në modalitetin e përdoruesit VETËM nën një klient të trashë! Prandaj, ne do të fusim kushtin e instruksionit të paraprocesorit #Nëse, por këtu ju vendosni vetë, bazuar në platformën tuaj, ose keni forma të zakonshme, atëherë zgjidhni " Aplikim i trashë Klienti i zakonshëm" ose keni një platformë në format e menaxhuara, atëherë " Aplikacioni ThickClientManaged“.shih fig.

Tani mbetet t'i shtojmë kësaj procedure një kusht për të shkruar tekstin e kërkesës, të cilin Ndërtuesi i pyetjeve do të krijojë për ne në atributin tonë të formularit "Kërkesë për tekst":

If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse;

Por ne mund të ndryshojmë manualisht diçka në tekstin e kërkesës (në modalitetin e përdoruesit - në dritaren e atributit "QueryText"), në mënyrë që ndryshimet tona të futen në QueryConstructor kur të thirret përsëri - ne shtojmë një kusht të thjeshtë këtu:

Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse;

Kjo është e gjitha, ne kemi lidhur Query Constructor të integruar në platformën 1c8, le të shohim punën tonë. Për ta bërë këtë, ekzekutoni 1C:Enterprise në modalitetin e klientit të trashë duke përdorur një nga metodat e mëposhtme: 1) menuja kryesore e Konfiguratorit - Debugging - StartDebugging - ThickClient; 2) ose nëse i keni këto çelësa në panelin e kontrollit në konfigurues - thjesht shtypni butonin me një rreth të verdhë me një pikë të trashë, shihni figurën:

Hapet modaliteti i përdoruesit 1sEnterprise8, ne gjejmë përpunimin tonë, e nisim atë, klikojmë në butonin tonë "Query Constructor" dhe shohim se si hapet konstruktori i integruar në platformë. shih fig.

Pra, Query Constructor po fillon, ne tashmë mund të fillojmë të shtojmë kërkesën tonë të ardhshme në të, por ne jemi të interesuar të shohim se si do të funksionojë kërkesa që krijuam! Dhe për këtë, ne duhet të krijojmë një buton tjetër në konfigurues në modifikimin e formës së tastierës sonë, le ta quajmë "Kërkesa e ekzekutimit". Ne klikojmë në butonin "Veprim" në vetitë e butonit "Kërkesa Ekzekutoni", menyja bie përsëri, në të cilën pyetemi se ku do të përpunohet kodi ynë i programit, në këtë rast zgjedhim "Si në klient dhe në serveri”, ne përsëri futemi në modulin e formularit.

Në procedurën ExecuteRequest(), të cilën e kemi te klienti, do të shkruajmë një kusht nëse përdoruesi nuk e ka futur tekstin e kërkesës, por kërkon ta ekzekutojë:

If EmptyString(Object.QueryText) Pastaj report("Fut tekstin e pyetjes!"); FundNëse;

Sistemi tashmë ka krijuar automatikisht një lidhje me procedurën ExecuteRequestOnServer() për ne; - kjo është mirë, le të shkojmë te kjo procedurë, e cila ekzekutohet në server dhe të shkruajmë kodin për ekzekutimin e kërkesës sonë të futur këtu.

Këtu ka opsione: Ju mund t'i shkruani vetë të gjitha shprehjet që lidhen me ndërtimin e pyetjeve, d.m.th. manualisht, por ekziston një opsion edhe më i lehtë - brenda procedurës, shtypni butonin e djathtë të miut dhe në menynë rënëse zgjidhni artikullin "Konstruktori i pyetjeve me përpunimin e rezultateve, shihni fig.":

Nëse keni klikuar në artikullin Query Builder me përpunimin e rezultateve", atëherë dritarja modale "Teksti i pyetjes nuk u gjet. Krijo një të ri?", Shtypni Po. Anashkalimi i rezultatit". Kjo është e gjitha, ne nuk kemi nevojë për asgjë tjetër nga ky konstruktor, klikoni në butonin "OK" - do të shfaqet një dritare modale "Nuk janë zgjedhur fusha në kërkesë, klikoni "OK".

Pas kësaj, brenda procedurës sonë ExecuteRequestOnServer(), do të shfaqet boshllëku i mëposhtëm i gatshëm:

Le të kalojmë te shprehja e ndërtuar nga konstruktori:

Kërkesë.Text = "";

Kërkesë.Text =Object.QueryText;

Është kaq e thjeshtë, butoni ynë "Kryer kërkesën" në formularin e përpunimit është tashmë praktikisht funksional, deri më tani mund të përpunojë vetëm kërkesa të thjeshta pa parametra, por gjëja kryesore është se funksionon! Mbetet vetëm për të shfaqur vizualisht rezultatet e kërkesës sonë në "Tabela e Vlerave" mbështetëse në formularin e përpunimit. Më lejoni t'ju kujtoj se atributi ynë "Tabela e vlerave" është i llojit "Dokumenti i fletëllogaritjes", sepse përndryshe nuk do t'i shohim rezultatet tona në modalitetin e përdoruesit. Përdoruesi angazhohet gjithmonë në nxjerrjen e të dhënave tabelare qoftë nga një dokument Spreadsheet ose një Layout, me të vërtetë do të doja të isha në gjendje të shfaqja të dhënat përmes një tabele vlerash - pasi është shumë e lehtë për t'u përdorur dhe e njohur, por, për fat të keq, një Tabela e vlerave është vetëm një mjet që i nevojitet një zhvilluesi, nuk mund të shfaqësh të dhëna në ekran duke e përdorur atë ...

Le të hedhim një vështrim më të afërt se çfarë është një Dokument Spreadsheet - është si një fletë Excel - ju mund të arrini vetëm në një rekord në një qelizë specifike duke përdorur qelizat e tabelës, këtu ne i quajmë ato një zonë, por ne vetë mund të zgjedhim gamën e kësaj zonë në një qelizë specifike:

Pra, ne kuptuam se çfarë është një dokument i fletëllogaritës, përcaktuam për veten tonë se duhet të përcaktojmë të dhënat nga pyetja jonë në një qelizë specifike të këtij dokumenti të fletëllogaritës. Por le të mendojmë: cili është "RequestResult", të cilin konstruktori e formoi kaq shpejt për ne? Hapja e ndihmës - Rezultati i pyetjes është një tabelë që ka vetitë e duhura! shih fig.

Dhe nëse tani shkruajmë pas shprehjes QueryResult = Query.Execute(); (krijuar nga konstruktori) këtu është një lak kaq i thjeshtë për Koleksionet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Raporti i ciklit (Emri i kolonës. Emri); Cikli i Fundit;

Pas këtij cikli, për momentin, shikoni të gjitha shprehjet e ndërtuara automatikisht nga konstruktori. Dhe ekzekutoni 1C:Enterprise8 nën një klient të trashë. Krijoni çdo kërkesë të thjeshtë (Ju mund të përdorni Query Builder - tashmë funksionon për ne) dhe klikoni në butonin "Run Request":

Pastaj do të shihni në fund të dritares në mesazhe - që tabela QueryResult ruan emrat e fushave që sapo kemi zgjedhur duke krijuar një pyetje të thjeshtë.

Tani le të shfaqim këta emra të fushave të vuajtjeve tona në një dokument Spreadsheet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Scope(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=Emri i kolonës.Emri; Cikli i Fundit;

Për të shfaqur detajet në të dhënat e pyetjes, le të zbërthejmë shprehjet e krijuara automatikisht nga konstruktori dhe të fusim saktësisht të njëjtin cikël që kemi përdorur për të shfaqur emrat e kolonave në tekstin e qelizës dhe brenda ciklit "SelectionDetailedRecords" të vetë pyetjen, nuk duhet të transferojmë të dhënat e tabelës "QueryResult", dhe të dhënat e vetë Përzgjedhja, le të shohim në ndihmë se si mund të hyni në fushën e përzgjedhjes së detajuar të pyetjes:

SamplingDetailRecords = QueryResult.Select(); Ndërsa SelectionDetailedRecords.Next() Loop //në rreshtin e parë kemi tashmë emrat e kolonave të tabelës, kështu që ngarkojmë të dhënat poshtë rreshtit të parëDocumentLineNumber=Object.QueryTable.TableHeight+1; Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Region(DocumentRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=SelectionDetailRecords[Emri i kolonës.Emri]; Cikli i Fundit; Cikli i Fundit;

Kjo është e gjitha, ne mund të kontrollojmë, ngarkojmë ndërmarrjen nën një klient të trashë, futim një kërkesë të thjeshtë pa parametra, klikojmë në butonin "Ekzekutoni kërkesën", shihni figurën:

Hurrah, gjithçka funksionon!!!

Është shumë i përshtatshëm kur, kur hapim / mbyllim Konsolën tonë të Query, teksti ynë i pyetjes, me të cilin kemi punuar përpara mbylljes së tastierës, shkruhet përsëri në fushën "QueryText". Për ta bërë këtë, thjesht duhet të aktivizoni tiparin e formës = Ruaj automatikisht, shihni foton:

Gjithçka, tastiera jonë funksionon. Në mënyrë që ne të shkruajmë pyetje më komplekse me parametrat e specifikuar në to, duhet të krijojmë një buton tjetër "FindParameters", si dhe kodin për butonin "RunQuery" - kodi për butonin "FindParameters" do të ekzekutohet në klient dhe në server. Më tej, në procedurën e serverit, ne e nisim kërkesën në të njëjtën mënyrë me tekstin e kaluar nga dritarja "QueryText", duke përdorur shprehjen "Query.FindParameters()" gjejmë parametrat e kaluar dhe thjesht i futim në tabelë. seksioni i formës "QueryParameters" në një lak. Mos harroni t'i transferoni ato nga tabela e plotësuar e parametrave në procedurën "Ekzekutoni kërkesën".

Ju gjithashtu mund të shtoni disa butona në konsolën tonë që do të pastrojnë dritaren e Parametrave dhe dritaren "Teksti i pyetjes" në modalitetin e përdoruesit.

Konsola jonë e pyetjeve është gati për t'u përdorur, ju dëshirojmë zgjidhje të suksesshme kreative me ndihmën e një mjeti kaq të thjeshtë dhe të fuqishëm siç është Konsola e Query!

Ky përpunim është shkruar në platformën 1s8.3 (forma të menaxhuara), ai funksionon nën një klient të trashë. Mund të shkruhet gjithashtu në platformën 1s8.2 si në format normale ashtu edhe nën ato të menaxhuara.

Në shkarkim është një mostër e Konsolës së Query që sapo krijuam.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Përmirësimi i konsolës së pyetjeve:

1) Tani Konsola jonë e bërë në shtëpi me Query Builder do të funksionojë nën çdo klient: nën klientin e trashë të formave normale dhe të menaxhuara dhe nën klientin e hollë dhe të internetit.

ps Forma dhe pamja e Query Builder-it të integruar është e ndryshme - në varësi të cilit klient e kemi lançuar Konsolën tonë.

&AtClient Procedure Query Constructor(Command) //Thirrja e Konstruktorit standard të Query është e mundur vetëm nën një klient të trashë #If ThickClientManagedApplication ose ThickClientRegularApplication then Constructor=New Query Constructor; Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse; // #Otherwise // Report("The Query Builder mund të thirret vetëm nën një klient të trashë"); // Kthimi; //# EndIf #Else Report("Ju po ekzekutoni Query Builder nën një klient të hollë - ai ndryshon pak në formën dhe shpejtësinë e performancës!"); Constructor = New Request Constructor(); Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; AlertConstructor = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(ConstructorAlert); # EndIf EndProcedure &AtClient Procedure ExecuteAfterClosingConstructor(Rezultati, Parametrat e Konstruktorit) Eksporto //Rezultat=tekst nëse Concer mbyllej me butonin ok Object.QueryText = ShortLP(Rezultat); //punon!!! Procedura e Fundit

2) Shtoi aftësinë në Konsolën tonë të thjeshtë të Query për të futur pyetje komplekse me Tabelën e Përkohshme të kaluar te parametrat!!! Mekanizmi doli të ishte shumë i thjeshtë dhe elegant - pa përdorimin e kodit XML, siç bëjnë në tastierat profesionale.

Ju mund të shihni vetë kodin dhe procedurat për mekanizmin e transferimit në parametrat e Tabelave të Përkohshme në skedarin e dytë të bashkangjitur. Si të filloni të zhvilloni versionin tuaj të tabelave të përkohshme në parametra mund të shikoni në këtë lidhje https://forum.infostart.ru/forum9/topic183700/

Tani si të përdorim Konsolën me një pyetje komplekse, kur një tabelë e përkohshme kalon në parametrat e saj. Për shembull, mund të merrni kodin e kësaj kërkese;

SELECT ExternalData.Product, ExternalData.Sasia VENDI të Dhënat e Jashtme FROM &ExternalData AS ExternalData; ///////////////////////////////////////////////////////////////////////// / //////////////////////////// SELECT ExternalData.Item, ExternalData.Quantity, ISNULL(ItemsRemainsRemains.QuantityRemains, 0) AS Field1 , ISNULL(Remains of Goods Remains. Sasia Mbetet, 0) - Të dhëna të Jashtme. Sasia AS që mbetet NGA të dhënat e jashtme AS të dhëna të jashtme LEFT JOIN Regjistri i akumulimit. Produkt

Ngjashëm me kodin e pyetjes më sipër - ju mund të krijoni pyetjen tuaj komplekse, duke marrë parasysh objektet tuaja të të dhënave.

Pra, në konstruktorin e pyetjes, ne krijuam pyetjen e mësipërme duke mbyllur Konstruktorin - teksti i pyetjes do të bjerë në fushën tonë të tastierës "Teksti i pyetjes", klikoni në butonin "Gjej parametrat", shohim se vargu = "E jashtme Të dhënat", lloji i vlerës \u003d "Tabela e vlerave" u shfaq në tabelën e Parametrave, shih fig.

Në këtë Tabelë të Parametrave - futni parametrin Data, për shembull, datën e sotme, më pas klikoni për të provuar të redaktoni parametrin tonë të përkohshëm të tabelës "ExternalData", klikoni në tre pika në fushën me "Tabela e vlerës" - do të shfaqet një zgjedhje e llojeve, klikoni rreshtin, mekanizmi ynë na kthen faqen në formular, ku duhet të futim manualisht këtë tabelë shumë të përkohshme.

Këtu, vini re se në këtë rast, në faqen "TempTables" në fund në fushën "Emri i tabelës së përkohshme në parametrat", do të shfaqet emri i tabelës sonë të përkohshme (ai është kopjuar nga tabela e Parametrave).

Deri më tani, në faqen "TempTables" shohim vetëm një tabelë boshe - kjo është tabela Llojet e tabelës sonë të përkohshme të ardhshme. Duke përdorur butonin "Shto", do të shtojmë emrin e atributit dhe llojin e tabelës së ardhshme. Kini kujdes - emri dhe lloji duhet të përputhen me atë që kemi specifikuar në kërkesën për &ExternalData:

Tani shtypim butonin "UpdateTemporaryTable" - dhe këtu do të kemi një tabelë të dytë - do ta plotësojmë drejtpërdrejt me të dhënat e tabelës së përkohshme përmes butonit "Shto".

Kjo është e gjitha, ne mund ta kontrollojmë veten edhe një herë nëse kemi futur të dhënat primitive të parametrave të pyetjes në tabelën e parametrave në faqen e parë të përpunimit dhe klikojmë butonin "Kërkoni kërkesën" - gjithçka llogaritet, zgjedh sipas kufizimit në të dhënat e transmetuara në parametrin e tabelës sonë të përkohshme

ps Nëse keni bërë një gabim kur shkruani emrat e detajeve dhe llojet e tyre (në tabelën e parë) - thjesht mbyllni panelin dhe hapeni përsëri - tabela e përkohshme e të dhënave do të fshihet - dhe tabela Llojet mund të modifikohet përsëri dhe një Tabela e re e të dhënave mund të krijohet përsëri.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kjo është e gjitha, ne mund të krijojmë një mjet pune shumë të fuqishëm me duart tona, përveç kësaj, tastiera jonë është ende shumë e shkathët në krahasim me ato profesionale - dhe ky është një plus shumë i madh për zhvilluesit! Dhe, sigurisht, tani tastiera jonë funksionon nën çdo klient! Suksese ne zhvillimet tuaja krijuese!!!

Pra, le të fillojmë me një të thjeshtë: në konfigurues, krijoni një Përpunim të Ri, emërtojeni Query Console ose Query Builder, sipas dëshirës tuaj.

Ne mund të shtojmë menjëherë një etiketë në "Të dhënat" për Parametrat e ardhshëm që na duhen, në mënyrë që në konsolën tonë të mos ekzekutojmë kërkesën më primitive, por me parametra dhe lidhje, për shembull, për punën tonë do të krijojmë një kërkesë për regjistrat periodikë. , por këtu pa specifikuar askund Parameter=&Date.

Për të krijuar tabelën tonë të Parametrave, në skedën "Data" në "seksionin Tabelor" të saj shtoni një tabelë të re, le ta quajmë atë Parametrat e pyetjes, këtu shtojmë kolonat e kësaj tabele: 1) Emri i parametrit, lloji i vargut = 25 karaktere; ParameterValue, këtu është një lloj i përbërë i të dhënave, shihni fig:

Prandaj, siç tregohet në foto - zgjidhni llojin e përbërë për kolonën ParameterValue: në menynë tip që hapet, kontrolloni kutinë "Lloji i përbërë", zgjidhni numrin, vargun (specifikoni 20 karaktere), datën, Boolean dhe vendosni shenjë më e ulët - AnyReference - do të thotë që më tej, kur specifikojmë Parametrat e kërkesës sonë, ne mund t'i referohemi çdo objekti të konfigurimit tonë, për shembull, drejtorive ose dokumenteve.

Tani duhet të krijojmë formën e Konsolës sonë të ardhshme të Query. Në përpunim, shkoni te skeda "Format" dhe shtoni një të re. Fusim këtë formular dhe tashmë ka një fushë të pakufizuar për kreativitet - ju mund t'i rregulloni dy atributet që sapo keni krijuar dhe pllakën me parametrat sipas dëshirës tuaj! Për këtë ju mund të përdorni elemente standarde të formës si Grupi ose Faqe me Faqe (nëse ju pëlqen të ktheni më shumë faqe.

Gjëja kryesore këtu është një gjë: duke zvarritur atributin "TextValues" në fushën e majtë të modifikimit të formularit - sigurohuni që të vendosni "View" = Fushën e dokumentit të tekstit në vetitë e tij. Shih figurën:

Në vetitë e atributit "QueryTable", mund të specifikoni opsionalisht - "Rrjeti i ekranit" dhe "Titujt e ekranit".

Më pas, në dritaren e duhur të redaktimit të formularit, shkoni te skeda "Komanda" dhe shtoni një buton të ri, kur të klikoni, Konsola jonë do të kryejë një veprim të caktuar. Le të krijojmë një buton "Query Constructor", mund t'i shtoni një ikonë butonit nëse dëshironi, gjëja kryesore është ta zhvendosni vetë butonin në dritaren e modifikimit të formularit të majtë - në mënyrë që ta shohim. Më pas, në formën e duhur dritarja e redaktimit, klikoni me të djathtën në butonin tonë dhe zgjidhni pronat - në vetitë, klikoni në artikullin "Veprim", do të shfaqet një dritare modale me pyetjen - ku saktësisht do të ekzekutohet kodi ynë i programit, të cilin do t'ia caktojmë butonit - zgjidhni "Për klientin".

Moduli i Formularit do të hapet me një procedurë të gatshme boshe "Kërkesë Procedure Constructor (Command)". Brenda kësaj procedure, ne do të përshkruajmë thirrjen për Query Builder standard 1c8. Është shumë e lehtë: Constructor=Ndërtues i ri i pyetjeve; Por këtu ka gracka - Query Constructor i integruar në platformë funksionon në modalitetin e përdoruesit VETËM nën një klient të trashë! Prandaj, ne do të fusim kushtin e instruksionit të paraprocesorit #Nëse, por këtu ju vendosni vetë, bazuar në platformën tuaj, ose keni forma të zakonshme, atëherë zgjidhni " Aplikim i trashë Klienti i zakonshëm"ose ju keni një platformë të formave të menaxhuara, atëherë" Aplikacioni ThickClientManaged". shih fig.

Tani mbetet t'i shtojmë kësaj procedure një kusht për të shkruar tekstin e kërkesës, të cilin Ndërtuesi i pyetjeve do të gjenerojë për ne në atributin tonë të formularit "Kërkesë për tekst":

If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse;

Por ne mund të ndryshojmë manualisht diçka në tekstin e kërkesës (në modalitetin e përdoruesit - në dritaren mbështetëse "QueryText"), në mënyrë që ndryshimet tona të futen në QueryConstructor kur të thirret përsëri - le të shtojmë një kusht të thjeshtë këtu:

Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse;

Kjo është e gjitha, ne kemi lidhur Query Constructor të integruar në platformën 1c8, le të shohim punën tonë. Për ta bërë këtë, ekzekutoni 1C:Enterprise në modalitetin e klientit të trashë duke përdorur një nga metodat e mëposhtme: 1) menyja kryesore e Konfiguratorit - Debugging - StartDebugging - ThickClient; 2) ose nëse i keni këto çelësa në panelin e kontrollit në konfigurues - thjesht shtypni butonin me një rreth të verdhë me një pikë të trashë, shihni figurën:

Modaliteti i përdoruesit 1sEnterprise8 është nisur, ne gjejmë përpunimin tonë, e nisim atë, klikojmë në butonin tonë "Query Constructor" dhe shohim se si hapet konstruktori i integruar në platformë. shih fig.

Pra, Query Constructor po fillon, ne tashmë mund të fillojmë të shtojmë kërkesën tonë të ardhshme në të, por ne jemi të interesuar të shohim se si do të funksionojë kërkesa që krijuam! Dhe për këtë ne duhet të krijojmë një buton tjetër në konfigurues në modifikimin e formës së tastierës sonë, le ta quajmë "Kërkesa e ekzekutimit". Në vetitë e butonit "Ekzekutoni kërkesën", klikoni në "Veprim", menyja bie përsëri, në të cilën ne pyetemi se ku do të përpunohet kodi ynë i programit, në këtë rast, zgjidhni "Si në klient dhe në server. ", ne përsëri futemi në ModuleForms.

Në procedurën ExecuteRequest(), të cilën e kemi te klienti, do të shkruajmë një kusht nëse përdoruesi nuk e ka futur tekstin e kërkesës, por kërkon ta ekzekutojë:

If EmptyString(Object.QueryText) Pastaj report("Fut tekstin e pyetjes!"); FundNëse;

Sistemi tashmë ka krijuar automatikisht një lidhje me procedurën ExecuteRequestOnServer() për ne; - kjo është mirë, le të shkojmë te kjo procedurë, e cila ekzekutohet në server dhe të shkruajmë këtu kodin për ekzekutimin e kërkesës sonë të futur.

Këtu ka opsione: Ju mund t'i shkruani vetë të gjitha shprehjet që lidhen me ndërtimin e pyetjeve, d.m.th. manualisht, por ekziston një opsion edhe më i lehtë - brenda procedurës, kliko me të djathtën dhe zgjidhni "Query Builder me përpunimin e rezultateve, shikoni figurën" në menunë rënëse:

Nëse keni klikuar në artikullin Query Builder with Result Processing, dritarja modale "Teksti i pyetjes nuk u gjet. Krijo një të ri?" do të shfaqet, klikoni po. Duke anashkaluar rezultatin". Kjo është ajo, nuk na duhet asgjë tjetër nga ky konstruktor, klikoni në butonin "OK" - do të shfaqet një dritare modale "Nuk është zgjedhur asnjë fushë në kërkesë, klikoni "OK".

Pas kësaj, brenda procedurës sonë ExecuteRequestOnServer(), do të shfaqet boshllëku i mëposhtëm i gatshëm:

Le të kalojmë te shprehja e ndërtuar nga konstruktori:

Kërkesë.Text = "";

Kërkesë.Text =Object.QueryText;

Gjithçka është kaq e thjeshtë, butoni ynë "Kryej kërkesë" në formularin e përpunimit është tashmë praktikisht funksional, deri më tani ai mund të përpunojë vetëm kërkesa të thjeshta pa parametra, por gjëja kryesore është se funksionon! Mbetet vetëm për të shfaqur vizualisht në "Tabela e Vlerave" mbështetëse në formularin e përpunimit - rezultatet e kërkesës sonë. Më lejoni t'ju kujtoj se atributi ynë "Tabela e Vlerave" ka llojin "Spreadsheet Document", sepse në të kundërt nuk do t'i shohim rezultatet tona në modalitetin e përdoruesit. Përdoruesi nxjerr gjithmonë të dhëna tabelare qoftë nga një Dokument Spreadsheet ose një Layout, unë me të vërtetë do të doja të isha në gjendje të shfaqja të dhëna përmes një tabele vlerash - pasi është shumë e lehtë për t'u përdorur dhe e njohur, por, për fat të keq, një tabelë i vlerave është vetëm një mjet që i nevojitet një zhvilluesi, nuk mund të shfaqësh të dhëna në ekran duke e përdorur atë ...

Le të hedhim një vështrim më të afërt se çfarë është një Dokument Spreadsheet - është si një fletë Excel - ju mund të arrini në një rekord në një qelizë specifike vetëm duke përdorur qelizat e tabelës, këtu ne i quajmë ato një zonë, por ne vetë mund të zgjedhim gamën e kësaj zonë në një qelizë specifike:

Pra, ne kuptuam se çfarë është një dokument i fletëllogaritës, përcaktuam për veten tonë se duhet të përcaktojmë të dhënat nga pyetja jonë në një qelizë specifike të këtij dokumenti të fletëllogaritës. Por le të mendojmë: cili është "RequestResult" që konstruktori gjeneroi për ne kaq shpejt? Hapja e ndihmës - Rezultati i pyetjes është një tabelë që ka vetitë përkatëse! shih fig.

Dhe nëse tani shkruajmë pas shprehjes QueryResult = Query.Execute(); (krijuar nga konstruktori) këtu është një lak kaq i thjeshtë për Koleksionet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Raporti i ciklit (Emri i kolonës. Emri); Cikli i Fundit;

Pas këtij cikli, për momentin, shikoni të gjitha shprehjet e ndërtuara automatikisht nga konstruktori. Dhe ekzekutoni 1C:Enterprise8 nën një klient të trashë. Krijoni çdo kërkesë të thjeshtë (Ju mund të përdorni Query Builder - tashmë funksionon për ne) dhe klikoni në butonin "Run Request":

Pastaj do të shihni në fund të dritares në mesazhe - që tabela QueryResult ruan emrat e fushave që sapo kemi zgjedhur duke krijuar një pyetje të thjeshtë.

Tani le të shfaqim këta emra të fushave të vuajtjeve tona në një dokument Spreadsheet:

Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Scope(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=Emri i kolonës.Emri; Cikli i Fundit;

Për të shfaqur detajet në të dhënat e pyetjes - le të ndryshojmë madhësinë e shprehjeve të krijuara automatikisht nga konstruktori dhe të fusim saktësisht të njëjtin lak që kemi përdorur për të shfaqur emrat e kolonave brenda ciklit "SelectionDetailedRecords", vetëm tani nuk duhet të transferojmë të dhënat e Tabela "QueryResult" në tekstin e qelizës dhe të dhënat e vetë Përzgjedhjes, le të shohim në ndihmë se si mund të hyni në fushën e përzgjedhjes së detajuar të pyetjes:

SamplingDetailRecords = QueryResult.Select(); Ndërsa SelectionDetailedRecords.Next() Loop //në rreshtin e parë kemi tashmë emrat e kolonave të tabelës, kështu që ngarkojmë të dhënat poshtë rreshtit të parëDocumentLineNumber=Object.QueryTable.TableHeight+1; Për çdo Emri i Kolonës Nga QueryResult.Columns Loop Cell=Object.QueryTable.Region(DocumentRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=SelectionDetailRecords[Emri i kolonës.Emri]; Cikli i Fundit; Cikli i Fundit;

Kjo është e gjitha, ne mund të kontrollojmë, ngarkojmë ndërmarrjen nën një klient të trashë, futim një kërkesë të thjeshtë pa parametra, klikojmë në butonin "Kërkoni kërkesën", shihni figurën:

Hurrah, gjithçka funksionon!!!

Është shumë i përshtatshëm kur, kur hapim/mbyllni Konsolën tonë të Query, teksti ynë i pyetjes, me të cilin kemi punuar përpara mbylljes së konsolës, shkruhet përsëri në fushën "QueryText". Për ta bërë këtë, thjesht duhet të aktivizoni tiparin e formës = Ruaj automatikisht, shihni foton:

Gjithçka, tastiera jonë funksionon. Në mënyrë që ne të shkruajmë pyetje më komplekse me parametrat e specifikuar në to, duhet të krijojmë një buton tjetër "FindParameters", si dhe kodin për butonin "RunQuery" - kodi për butonin "FindParameters" do të ekzekutohet në klient dhe në server. Më tej, në procedurën e serverit, ne e nisim kërkesën në të njëjtën mënyrë me tekstin e kaluar në të nga dritarja "QueryText", duke përdorur shprehjen "Query.FindParameters()", gjejmë parametrat e kaluar dhe thjesht i futim në pjesa tabelare e "QueryParameters" formohet në një lak. Mos harroni t'i kaloni ato nga tabela e plotësuar e parametrave në procedurën "Ekzekutoni kërkesën" më vonë.

Ju gjithashtu mund të shtoni disa butona në konsolën tonë që do të pastrojnë dritaren e Parametrave dhe dritaren "Teksti i pyetjes" në modalitetin e përdoruesit.

Konsola jonë e pyetjeve është gati për t'u përdorur, ju dëshirojmë zgjidhje të suksesshme kreative me ndihmën e një mjeti kaq të thjeshtë dhe të fuqishëm siç është Konsola e Query!

Ky përpunim është shkruar në platformën 1s8.3 (forma të menaxhuara), ai funksionon nën një klient të trashë. Mund të shkruhet gjithashtu në platformën 1s8.2 si në format normale ashtu edhe nën ato të menaxhuara.

Në shkarkim është një mostër e Konsolës së Query që sapo krijuam.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Përmirësimi i konsolës së pyetjeve:

1) Tani Konsola jonë e bërë në shtëpi me Query Builder do të funksionojë nën çdo klient: nën klientin e trashë të formave normale dhe të menaxhuara dhe nën klientin e hollë dhe të internetit.

ps Forma dhe pamja e Query Builder-it të integruar është e ndryshme - në varësi të cilit klient e kemi lançuar Konsolën tonë. (Personalisht, formulari Query Builder nën një klient të trashë është më i njohur dhe i përshtatshëm për mua)

&AtClient Procedure Query Constructor(Command) //Thirrja e Konstruktorit standard të Query është e mundur vetëm nën një klient të trashë #If ThickClientManagedApplication ose ThickClientRegularApplication then Constructor=New Query Constructor; Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; If Constructor.OpenModally()=True Pastaj Object.QueryText=Constructor.Text; FundNëse; // #Otherwise // Report("The Query Builder mund të thirret vetëm nën një klient të trashë"); // Kthimi; //# EndIf #Else Report("Ju po ekzekutoni Query Builder nën një klient të hollë - ai ndryshon pak në formën dhe shpejtësinë e performancës!"); Constructor = New Request Constructor(); Nëse Jo EmptyString(Object.QueryText) Atëherë Constructor.Text=Object.QueryText; FundNëse; AlertConstructor = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(ConstructorAlert); # EndIf EndProcedure &AtClient Procedure ExecuteAfterClosingConstructor(Rezultati, Parametrat e Konstruktorit) Eksporto //Rezultat=tekst nëse Concer mbyllej me butonin ok Object.QueryText = ShortLP(Rezultat); //punon!!! Procedura e Fundit

2) Shtoi aftësinë në Konsolën tonë të thjeshtë të Query për të futur pyetje komplekse me Tabelën e Përkohshme të kaluar te parametrat!!! Mekanizmi doli të ishte shumë i thjeshtë dhe elegant - pa përdorimin e kodit XML, siç bëjnë në tastierat profesionale.

Ju mund të shihni vetë kodin dhe procedurat për mekanizmin e transferimit në parametrat e Tabelave të Përkohshme në skedarin e dytë të bashkangjitur. Si të filloni të zhvilloni versionin tuaj të tabelave të përkohshme në parametra mund të shikoni në këtë lidhje https://forum.infostart.ru/forum9/topic183700/

Tani si të përdorim Konsolën me një pyetje komplekse, kur një tabelë e përkohshme kalon në parametrat e saj. Për shembull, mund të merrni kodin e kësaj kërkese;

SELECT ExternalData.Product, ExternalData.Sasia VENDI të Dhënat e Jashtme FROM &ExternalData AS ExternalData; ///////////////////////////////////////////////////////////////////////// / //////////////////////////// SELECT ExternalData.Item, ExternalData.Quantity, ISNULL(ItemsRemainsRemains.QuantityRemains, 0) AS Field1 , ISNULL(Remains of Goods Remains. Sasia Mbetet, 0) - Të dhëna të Jashtme. Sasia AS që mbetet NGA të dhënat e jashtme AS të dhëna të jashtme LEFT JOIN Regjistri i akumulimit. Produkt

Ngjashëm me kodin e pyetjes më sipër - ju mund të krijoni pyetjen tuaj komplekse, duke marrë parasysh objektet tuaja të të dhënave.

Pra, në konstruktorin e pyetjes, ne krijuam pyetjen e mësipërme duke mbyllur Konstruktorin - teksti i pyetjes do të bjerë në fushën tonë të tastierës "Teksti i pyetjes", klikoni në butonin "Gjeni parametrat", shohim se vargu = "E jashtme Të dhënat", lloji i vlerës \u003d "Tabela e vlerave" u shfaq në tabelën e Parametrave, shih fig.

Në këtë Tabelë të Parametrave - futni parametrin Data, për shembull, datën e sotme, pastaj klikoni për të tentuar të redaktoni parametrin tonë të tabelës së përkohshme "ExternalData", klikoni në tre pika në fushën me "Tabela e vlerave" - ​​një zgjedhje llojesh do të shfaqet, klikoni rreshtin, mekanizmi ynë kthen faqen në formular për ne, ku duhet të futim manualisht këtë tabelë shumë të përkohshme.

Këtu, vini re se në këtë rast, në faqen "TempTables" në fund në fushën "Emri i tabelës së përkohshme në parametrat", do të shfaqet emri i tabelës sonë të përkohshme (ajo është kopjuar nga tabela e Parametrave).

Deri më tani, në faqen "TempTables" shohim vetëm një tabelë bosh - kjo është tabela e Llojeve të tabelës sonë të përkohshme të ardhshme. Duke përdorur butonin "Shto", do të shtojmë emrin e atributit dhe llojin e tabelës së ardhshme. . Kini kujdes - emri dhe lloji duhet të përputhen me atë që kemi specifikuar në kërkesën për &ExternalData:

Tani shtypim butonin "UpdateTemporaryTable" - dhe këtu do të shfaqet tabela e dytë - do ta plotësojmë drejtpërdrejt me të dhënat e tabelës së përkohshme përmes butonit "Shto".

Kjo është e gjitha, ne mund ta kontrollojmë veten edhe një herë nëse kemi futur të dhënat primitive të parametrave të pyetjes në tabelën e parametrave në faqen e parë të përpunimit dhe klikojmë butonin "Kërkoni kërkesën" - gjithçka llogaritet, zgjedh në përputhje me rrethanat me kufizimin në të dhënat e transmetuara në parametrin e tabelës sonë të përkohshme

ps Nëse keni bërë një gabim kur shkruani emrat e detajeve dhe llojet e tyre (në tabelën e parë) - thjesht mbyllni panelin dhe hapeni përsëri - tabela e përkohshme e të dhënave do të fshihet - dhe tabela Llojet mund të modifikohet përsëri dhe një Tabela e re e të dhënave mund të krijohet përsëri.

Kjo është e gjitha, ne mund të krijojmë një mjet pune shumë të fuqishëm me duart tona, përveç kësaj, tastiera jonë është ende shumë e shkathët në krahasim me ato profesionale - dhe ky është një plus shumë i madh për zhvilluesit! Dhe, sigurisht, tani tastiera jonë funksionon nën çdo klient! Suksese ne zhvillimet tuaja krijuese!!!

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Unë jam duke punuar vazhdimisht me Query Console, dhe së fundmi kam hasur në një kërkesë shumë interesante, në të cilën tabelat e përkohshme nuk ishin në paketën e parë të kërkesës, por në ato të tjerat - dhe këtu tabela ime ra paksa në depresion ... kisha për të bërë një përmirësim tjetër.

Pra, menaxheri i Tabelës së Përkohshme në pyetje nuk e kupton gjithmonë se ata po punojnë me të)) Prandaj, duhet të vendosni në mënyrë eksplicite këtë menaxher të Tabelës së Përkohshme:

Procedura &OnServer ExecuteQueryOnServer() //upgrade2 - përkufizim i qartë i menaxherit të Tabela e Përkohshme! VTManager=NewTempTableManager; Kërkesë = Kërkesë e re; //upgrade2 - përkufizim i qartë i menaxherit të Tabela e Përkohshme! Query.TempTableManager = VTManager; Request.Text = Object.QueryText;

Ky version i konsolës është në nisjen e tretë.

Një nga mjetet më të fuqishme të 1C Enterprise 8, pa dyshim, është Query Builder. Konstruktori është një mjet vizual për të punuar me pyetje në gjuhën 1C. Por konstruktori ka një pengesë të madhe - nuk tregon rezultatin e ekzekutimit të pyetjes. Kjo mangësi ndihet veçanërisht nga zhvilluesit fillestarë të zgjidhjeve të aplikacioneve në platformën 1C: Enterprise 8.3 dhe 8.2.

Për më tepër, edhe programuesit me përvojë 1C shpesh përballen me një situatë ku është e nevojshme të bëhet një analizë "një herë" e të dhënave të bazës së informacionit në seksione të ndryshme, por ju nuk dëshironi të shkruani një raport të plotë për për hir të një “përfundimi të njëhershëm”.

Për të gjitha këto dhe shumë raste të tjera, kemi kënaqësinë t'ju ofrojmë përpunim të jashtëm. Konsola e pyetjeve me aftësinë për të përpunuar rezultatet për 1C 8.3 dhe 1C 8.2!


Karakteristikat kryesore të Konzollës së Query për 1C 8.3 dhe 1C 8.2:

Përpunim universal, funksionon në çdo konfigurim të platformave 1C: Enterprise 8.1 - 8.3;
- funksionon në modalitetin 1C: Enterprise;
- pyetja mund të shkruhet manualisht, ose mund të telefononi Query Builder;
- tregon rezultatin e kërkesës;
- ju mund të specifikoni parametrat e raportit direkt në Query Console;
- mund të ruajë dhe ngarkojë skedarët e kërkesave.

Për të nisur Query Console, duhet të ekzekutoni konfigurimin tuaj në modalitetin 1C: Enterprise dhe të hapni përpunimin e jashtëm të Query Console si çdo skedar tjetër i ruajtur në disk. Një përpunim i tillë do të funksionojë saktësisht në të njëjtën mënyrë sikur të ishte pjesë e zgjidhjes së aplikuar.


Përpunimi i jashtëm Query Console përsërit ndërfaqen e njohur dhe shumicën funksionalitetin paketa standarde e veglave për përpilimin e pyetjeve të sistemit 1C: Enterprise 8.3 dhe 8.2. Gjithashtu ju lejon të merrni rezultatet e pyetjeve, pyetjeve në grup dhe tabelave të përkohshme.

Konsola e pyetjeve ekzekutohet si në modalitetin klient-server dhe skedar-server të sistemit, si në klientë të trashë dhe të hollë! Console Query integron standardin Query Builder, i thirrur nëpërmjet menysë së kontekstit në fushën e tekstit të pyetjes.

E RËNDËSISHME! Projektuesi i pyetjeve në klientin e hollë nuk funksionon, ky artikull i menysë për hapjen e Dizajnuesit nuk është i disponueshëm. Në klientin e trashë, Query Builder është i disponueshëm!


Në klientin e hollë, ne mund të shkruajmë kërkesa vetëm me dorë, të gjitha funksionet e tjera funksionojnë pa ndryshime.

Aftësia për të shkruar tekstin e pyetjes "me dorë" nuk ka qenë kurrë "e tepërt", por është më e përshtatshme të përdoret ndërtuesi i pyetjeve.

Komentoni.

Fatkeqësisht, në një aplikacion të menaxhuar, nuk mund të përdorni konstruktorin e pyetjeve në përpunimin "Meet the Query". Mund ta përdorni në këtë përpunim duke shkuar te mënyrë normale, por ne nuk do ta bëjmë këtë.

Le të krijojmë përpunimin "Request Constructor" dhe ta përcaktojmë atë në nënsistemin "Raporte dhe përpunim".

Le të krijojmë një formular përpunimi dhe të shtojmë atributin e formularit "TabDoc" të llojit "Dokumenti i fletëllogaritjes", si dhe komandën "Ekzekutoni kërkesën" me veprimin "Ekzekutoni kërkesën" në të. Më pas, tërhiqni ato në formë.

Në modulin e formës, që komanda të funksionojë, shkruajmë procedurën:

&AtClient

Procedura ExecuteQuery(Command)

ExecuteRequestServer();

Procedura e Fundit

&Në server

Procedura e Fundit

Bëhemi brenda procedurës së thirrur në server dhe nga menyja e kontekstit quajmë "Konstruktorin e pyetjeve me përpunim të rezultateve" (Figura 2.65).

Figura 2.65 Konstruktori i pyetjeve me përpunim të rezultateve

Cakto llojin e përpunimit në "Output to spreadsheet document" dhe kliko ose butonin "Tjetër" ose skedën "Tabelat dhe fushat".

Në skedën "Tabelat dhe fushat" e konstruktorit, mund të shikoni tabelat ekzistuese aktualisht në sistem (ana e majtë është emërtuar "Baza e të dhënave") (Figura 2.66).

Figura 2.67 Ndërtuesi i pyetjeve

Tabelat nga të cilat do të merren të dhënat nga pyetësori transferohen në zonën "Tabelat", fushat e kërkuara nga pyetja transferohen në zonën "Fushat". Le ta bëjmë si në figurën 2.68.

Fig 2.68 Konstruktori i pyetjeve

Këtu kemi hequr fushën e paracaktuar të pamjes - "PARAQITJA (Mallrat në hyrje. Nomenklatura)"

Në çdo kohë gjatë punës me konstruktorin, mund të shikoni tekstin e kërkesës që rezulton. Për të kryer këtë detyrë, duhet të klikoni butonin "Kërkesë" që ndodhet në këndin e poshtëm të majtë të formularit të konstruktorit (Figura 2.69).

Mund ta modifikoni manualisht tekstin e kërkesës duke klikuar në butonin "Ndrysho".

Praktikoni. Ne shtypim butonin "OK" dhe kontrollojmë përpunimin tonë në modalitetin e përdoruesit. Nëse analizoni të dhënat e marra gjatë ekzekutimit të kërkesës, atëherë mund të gjeni "përsëritje" të artikujve të aksioneve (nëse nuk keni pasur sukses, atëherë mund të kopjoni dhe postoni çdo dokument "Pranimi i Mallrave").

Ne i kthehemi procedurës ExecuteRequestServer() në përpunimin e "RequestConstructor" dhe nga menyja e kontekstit thërrasim përsëri "QueryConstructor me përpunimin e rezultateve".

Nëse dëshironi të "kolapsoni" rezultatin e pyetjes, atëherë për këtë qëllim mund të përdorni skedën "Grouping" të projektuesit të pyetjes.

Gjatë përcaktimit të grupimeve, është e nevojshme t'i përmbaheni rregullit të mëposhtëm: të gjitha fushat e përzgjedhjes së pyetjes ndahen në fusha me të cilat kryhet grupimi (përmbledhje), fusha të tabelave të mbivendosura (fushat e përmbledhura në lidhje me ato me të cilat kryhet grupimi) dhe në funksionet agregate. Le të përcaktojmë grupimet (Figura 2.70).

Figura 2.70 Konstruktori i pyetjeve

Nëse të dhënat e marra nga pyetësori duhet të zgjidhen sipas ndonjë kushti, atëherë në këtë rast mund të jetë e nevojshme të përdorni skedën "Kushtet". Le të zgjedhim Mallrat hyrëse Mallrat Sasia = 10 (Figura 2.71).

Figura 2.71 Kushti i konstruktorit të pyetjes.

Kushtojini vëmendje faktit që nëse kushti përcaktohet në të njëjtën mënyrë si në figurë, atëherë pyetja nuk do të ekzekutohet.

Ka dy mënyra për të rregulluar situatën:

    Ripërcaktimi i kushtit duke kontrolluar flamurin "P ...";

    Përdorimi i aftësisë për të ndryshuar tekstin e vetë kërkesës (marrë duke klikuar në butonin "Ndrysho kërkesën").

Vetë ndryshimi manual do të konsistojë në faktin se është e nevojshme të hiqni simbolin "&" para numrit "10". Ky simbol në tekstin e kërkesës përcakton parametrat e kërkesës, në të cilat çdo vlerë duhet të shkruhet më vonë (por përpara se kërkesa të ekzekutohet). Klikoni në butonin "Kërkesë redaktimi" dhe modifikoni (Figura 2.72).

Figura 2.73 Redakto pyetjen

Në skedën "Advanced", mund të shënoni një numër flamujsh (në lidhje me fjalën kyçe "Zgjidh" të gjuhës së pyetjes) dhe të përcaktoni përbërjen e tabelave të destinuara për ndryshimin e pyetjes (Figura 2.74).

Figura 2.74 Funksionet shtesë të pyetjes

Në skedën "Bashkohet/Aliases", ju mund të ndryshoni emrat e fushave duke vendosur "Aliases", por ne nuk do ta bëjmë këtë.

Në skedën "Order", mund të përcaktoni rendin e renditjes së regjistrimeve në rezultatin e pyetjes (Figura 2.75).

Figura 2.75 Renditja e renditjes së të dhënave

Kushtojini vëmendje flamurit "Auto-Ordering", ai mund të përdoret për të renditur fushat sipas llojit të referencës.

Kur përcaktoni seksionin "Totalet", kini parasysh se të dhënat totale "shtesë" do të shfaqen si rezultat i pyetjes. Me këto hyrje, rezultati i pyetjes bëhet hierarkik (Figura 2.76).

Figura 2.76 Rezultatet e konstruktorit të pyetjeve.

Lejohen disa lloje totalesh:

    Elementet (në përzgjedhjen e rezultatit të pyetjes ka totale grupimi dhe regjistrime të detajuara);

    Hierarkia (në zgjedhjen e rezultatit të pyetjes, në rastin e përgjithshëm, ka regjistrime totale sipas hierarkisë, regjistrime totale sipas grupimit, regjistrime të detajuara);

    Vetëm hierarkia (në përzgjedhjen e rezultatit të pyetjes, në rastin e përgjithshëm, ka të dhëna totale për hierarkinë).

Pasi të klikoni në butonin "OK" të konstruktorit, do të gjenerohet një "Layout" dhe kodi i procedurës ExecuteRequestServer() do të shkruhet në modulin e formës:

&Në server

Procedura ExecuteRequestServer()

//((REQUERY_KONSTRUKTOR ME_RESULT_PROCESSING

// Ky fragment është ndërtuar nga konstruktori.

// Nëse konstruktori ripërdoret, ndryshimet manuale do të humbasin!!!

Layout = Processing.QueryConstructor.GetLayout("Layout");

Kërkesë = Kërkesë e re;

Kërkesa.Teksti =

| Pranimi i Mallrave të Mallrave Nomenklatura AS Nomenklatura,

| SHUMË (Mallrat hyrëse Mallrat. Sasia) SI sasi,

| SHUMË (Mallrat në hyrje Mallrat. Shuma) AS Shuma

| Dokumenti.Marrja e Mallrave.Mallrat

| SI Mbërritja e mallrave

| Mallrat hyrëse Mallrat Sasia > 1

|GRUPI NGA

| Pranimi i MallraveMallrat.Nomenklatura

| POROSIT NGA

| Sasi,

| Sasia e DESCENT

| SUM (Numri),

| SUM (Shuma)

| HIERARKIA e nomenklaturës”;

Rezultati = Kërkesë.Run();

AreaHeader = Layout.GetArea("Header");

AreaFooter = Layout.GetArea("Badrum");

Zona e TableHeader = Layout.GetArea("TableHeader");

AreaFooterTables = Layout.GetArea("FooterTables");

ScopeNomenclatureHierarchy = Layout.GetScope("NomenklatureHierarchy");

ScopeNomenclature = Layout.GetScope("Nomenklatura");

TabDoc.Clear();

TabDoc.Output (RegionHeader);

TabDoc.Output (TableHeader Area);

TabDoc.StartAutogroupRows();

SamplingNomenklature = Result.Select(BypassingQueryResult.By Groupings);

Ndërsa SelectionNomenclature.Next() Loop

Nëse SelectionNomenclature.RecordType() = QueryRecordType.TotalByHierarchy Pastaj

Scope = ScopeNomenclatureHierarky;

Rajoni = Nomenklatura e Rajonit;

FundNëse;

Zona.Parametrat.Fill(Nomenklatura e Zgjedhjes);

TabDoc.Output(Rajon, SelectionNomenklature.Level());

Cikli i Fundit;

TabDoc.EndAutoGroupRows();

TabDoc.Output(RegionFooterTable);

TabDoc.Output(RegionFooter);

//)) KËRKESË_KONSTRUKTORI ME_RESULT_PROCESSING



Artikuj të ngjashëm: