1c vsota oblikovalca poizvedb. Oblikovalnik poizvedb sheme sestave podatkov

Torej, začnimo preprosto: v konfiguratorju ustvarite novo obdelavo, poimenujte konzolo poizvedbe ali konstruktor poizvedb, kot želite.

V "Podatke" lahko takoj dodamo ploščo za prihodnje parametre, ki jih potrebujemo, da v naši konzoli ne izvajamo najbolj primitivne zahteve, ampak s parametri in povezavami, na primer, za naše delo bomo ustvarili zahtevo za periodično registrov, vendar tukaj brez navedb parametrov = & Datum ni nikjer.

Če želite ustvariti našo tabelo parametrov, na zavihku "Podatki" v njegovem "delu tabele" dodajte novo tabelo, poimenujte jo QueryParameters, tukaj dodamo stolpce te tabele: 1) Ime parametra, vrsta niza = 25 znakov; ParameterValue, tukaj je sestavljeni podatkovni tip, glejte sliko:

Zato, kot je prikazano na sliki, izberemo sestavljeno vrsto za stolpec Vrednost parametra: v odprtem meniju vrste potrdite polje »Sestavljeni tip«, izberite številko, niz (določite 20 znakov), datum, logično vrednost in postavite najnižjo kljukico - AnyLink - to pomeni, da se lahko nadalje pri določanju parametrov naše zahteve sklicujemo na kateri koli predmet naše konfiguracije, na primer referenčne knjige ali dokumente.

Zdaj moramo ustvariti obrazec za našo prihodnjo konzolo za poizvedbe. V obdelavi pojdite na zavihek "Obrazci" in dodajte novega. Vnesemo ta obrazec in tam je že neomejeno polje za ustvarjalnost - pravkar ustvarjena dva rekvizita in ploščo lahko razporedite s parametri po želji! Če želite to narediti, lahko uporabite standardne elemente obrazca, kot je skupina ali stran s stranmi (če vam je ljubše obračanje strani.

Glavna stvar tukaj je ena stvar: tako, da povlečete atribut "TextValues" v levo polje za urejanje obrazca - v njegovih lastnostih ne pozabite nastaviti "Pogled" = Polje besedilnega dokumenta. Glejte sliko:

V lastnostih spremenljivke "QueryTable", če želite, lahko določite - "DisplayGrid" in "DisplayHeaders".

Nato v desnem oknu za urejanje obrazca pojdite na zavihek "Ukazi" in dodajte nov gumb, s klikom na katerega bo naša konzola izvedla določeno dejanje. Ustvarimo gumb "Konstruktor poizvedbe", če želite, lahko gumbu dodate ikono, glavna stvar je, da sam gumb premaknete v levo okno za urejanje obrazca, da ga vidimo. Nato v desni obliki okno za urejanje, z desno tipko miške kliknemo na naš gumb in izberemo lastnosti - v lastnostih kliknemo na postavko "Dejanje", pojavi se modalno okno z vprašanjem - kje točno se bo izvajala naša programska koda, ki jo bomo dodelili gumbu - izberite "Na odjemalcu".

Modul obrazca se odpre s pripravljeno prazno proceduro "Procedure QueryConstructor (Ukaz)". Znotraj tega postopka bomo opisali klic standardnega konstruktorja poizvedb 1c8. To je zelo enostavno: Konstruktor = Nov konstruktor poizvedbe; Toda tukaj obstajajo pasti - konstruktor poizvedb, vgrajen v platformo, deluje v uporabniškem načinu SAMO pod debelim odjemalcem! Zato bomo vstavili pogoj navodila za predprocesor # Če, vendar se tukaj odločite sami, na podlagi svoje platforme ali imate običajne obrazce, izberite " ThickClientNormalApplication"ali pa imate platformo za upravljane obrazce" ThickClientManagedApplication"glej sl.

Zdaj je treba temu postopku dodati pogoj za pisanje besedila zahteve, ki ga bo oblikovalec poizvedbe ustvaril v našem rekvizitu obrazca "Besedilo zahteve":

Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf;

Lahko pa nekaj spremenimo ročno v besedilu poizvedbe (v uporabniškem načinu - v oknu rekvizitov "QueryText"), tako da bodo naše spremembe šle v QueryConstructor, ko ga znova pokličemo - tukaj dodajte preprost pogoj:

Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf;

To je to, povezali smo konstruktor poizvedb, vgrajen v platformo 1c8, poglejmo si naše delo. Če želite to narediti, zaženite 1C: Enterprise v načinu debelega odjemalca na enega od naslednjih načinov: 1) glavni meni konfiguratorja - Odpravljanje napak - Začni odpravljanje napak - ThickClient; 2) ali če ste te tipke dali nadzorni plošči v konfiguratorju - samo pritisnite gumb z rumenim krogom z debelo piko, glejte sliko:

Zažene se uporabniški način 1cEnterprise8, najdemo našo obdelavo, jo zaženemo, kliknemo na naš gumb "Konstruktor poizvedbe" in vidimo, kako se odpre konstruktor, vgrajen v platformo. glej sl.

Torej, konstruktor poizvedb je zagnan pri nas, vanj lahko že začnemo dodajati našo prihodnjo poizvedbo, vendar nas zanima, kako bo obdelana poizvedba, ki smo jo ustvarili! In za to moramo ustvariti še en gumb v konfiguratorju pri urejanju obrazca naše konzole, poimenujmo ga "Izvedi zahtevo". Kliknite v lastnostih gumba "Izvedi zahtevo" na "Dejanje", spet se pojavi meni, v katerem nas vpraša, kje bo obdelana naša programska koda, v tem primeru izberemo "Tako na odjemalcu kot na strežniku" , spet gremo v modul obrazca.

V postopku ExecuteRequest (), ki ga imamo na odjemalcu, zapišemo pogoj, če uporabnik ni vnesel besedila zahteve, ampak zahteva, da ga izvede:

Če je EmptyString (Object.RequestText) Nato poročajte ("Vnesite besedilo vaše zahteve!"); EndIf;

Sistem je že samodejno ustvaril povezavo do postopka ExecuteRequestOnServer (); - to je dobro, pojdite na ta postopek, ki se izvaja na strežniku, in tukaj napišite izvršilno kodo naše vnesene zahteve.

Tukaj so možnosti: samostojno lahko napišete vse izraze, povezane z gradnjo poizvedb, t.j. ročno, vendar obstaja še enostavnejša možnost - znotraj postopka pritisnite desni gumb miške in v spustnem meniju izberite element "Konstruktor poizvedb z obdelavo rezultatov, glejte sl.":

Če ste kliknili na konstruktor poizvedbe z obdelavo rezultatov "element, nato modalno okno" Besedila poizvedbe ni bilo mogoče najti. Ustvarite novega?" Obhodite rezultat. "To je to, iz tega konstruktorja ne potrebujemo ničesar drugega, kliknite na gumb "V redu" - modalno okno bo izpadlo" V zahtevi ni izbranih polj, kliknite "V redu".

Po tem se bo znotraj našega postopka ExecuteRequestOnServer () pojavila naslednja že pripravljena škrbina:

Pojdimo na izraz, ki ga je zgradil konstruktor:

Request.Text = "";

Request.Text = Object.Request Bext;

Tako preprosto je, da je naš gumb "Izvedi zahtevo" na obrazcu za obdelavo že praktično delujoč, zaenkrat lahko le obdela preproste poizvedbe brez parametrov, glavna stvar pa je, da deluje! Ostaja samo, da rezultate naše zahteve vizualno prikažemo v atributu "Tabela vrednosti" na obrazcu za obdelavo. Naj vas spomnim, da ima naš atribut "Tabela vrednosti" tip "Tabularni dokument", ker sicer ne bomo videli naših rezultatov v uporabniškem načinu. Tabelarni dokument ali postavitev se vedno ukvarjata s prikazovanjem tabelarnih podatkov uporabniku, resnično bi rad, da bi lahko podatke prikazal skozi tabelo vrednosti - saj je zelo enostaven za uporabo in poznan, a na žalost tabela vrednosti je samo orodje, ki ga razvijalec potrebuje, z njim ne morete prikazati podatkov na zaslonu ...

Oglejmo si podrobneje, kaj je tabelarni dokument - je kot list Exel - do zapisa v določeni celici lahko pridete samo s pomočjo celic tabele, tukaj se imenujejo območje, vendar lahko sami izberemo obseg tega območja v eno specifično celico:

Torej smo ugotovili, kaj je dokument s preglednico, smo sami ugotovili, da moramo podatke iz naše zahteve določiti v določeni celici tega dokumenta s preglednico. Toda pomislimo: kaj je "QueryResult", ki nam ga je konstruktor tako hitro ustvaril? Odpiranje pomoči – rezultat poizvedbe je tabela, ki ima ustrezne lastnosti! glej sl.

In če zdaj zapišemo za izrazom QueryResult = Query.Run (); (ustvarjen s strani konstruktorja), je tukaj preprosta zanka za zbirke:

Za vsak ColumnName From QueryResult.Columns poročilo zanke (ColumnName.Name); Konec cikla;

Po tem ciklu za zdaj zasidrajte vse izraze, ki jih je samodejno zgradil konstruktor. In zaženite 1C: Enterprise8 pod debelim odjemalcem. Ustvarite poljubno preprosto zahtevo (uporabite lahko oblikovalec poizvedb - že deluje pri nas) in kliknite gumb "Izvedi zahtevo":

Nato boste na dnu okna v sporočilih videli - da tabela QueryResult shranjuje imena polj, ki smo jih pravkar izbrali z ustvarjanjem preproste poizvedbe.

Zdaj pa prikažimo ta imena polj našega trpljenja v dokumentu s preglednico:

Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = Ime stolpca.Ime; Konec cikla;

Za prikaz razčlenitve podatkov poizvedbe bomo ločili izraze, ki jih je samodejno ustvaril konstruktor, in znotraj iteracijske zanke "SelectDetailRecords" same poizvedbe vstavili popolnoma isto zanko, ki smo jo uporabili za prikaz imen stolpcev, samo zdaj moramo podatke iz tabele "QueryResult" prenesti v besedilo celice in podatke same izbire, poglejmo v pomoči, kako se lahko sklicujete na polje za podrobno izbiro poizvedbe:

FetchDetailedRecords = QueryResult.Select (); Medtem ko FetchDetailRecords.Next () Loop // v prvi vrstici že imamo imena stolpcev tabele, zato naložimo podatke pod prvo vrsticoRowNumberDoc = Object.QuestTable.TableTable + 1; Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [Ime stolpca.Ime]; Konec cikla; Konec cikla;

Vse, lahko preverimo, naložimo podjetje pod debel odjemalec, vnesemo preprosto poizvedbo brez parametrov, kliknemo gumb "Izvedi poizvedbo", glej sliko:

Hura, vse deluje!!!

Zelo priročno je, ko se ob odpiranju/zapiranju naše poizvedovalne konzole - spet v polju "QueryText" zapiše besedilo naše poizvedbe, s katerim smo delali pred zapiranjem ukazne mize. Če želite to narediti, morate omogočiti lastnost obrazca = Samodejno shranjevanje, glejte sliko:

To je to, naša konzola deluje. Da lahko pišemo bolj zapletene poizvedbe s parametri, ki so v njih določeni, moramo ustvariti še en gumb "FindParameters", kot tudi kodo gumba "ExecuteRequest" - koda gumba "FindParameters" se bo izvajala na odjemalcu in na strežniku. Nadalje v strežniškem postopku na enak način zaženemo zahtevo z besedilom, ki mu je posredovano iz okna "RequestText", z uporabo izraza "Request.FindParameters ()" poiščemo posredovane parametre in jih preprosto vnesemo v zanko v tabelarni del obrazca "RequestParameters". Ne pozabite jih prenesti iz izpolnjene tabele parametrov v postopek "ExecuteRequest".

V našo konzolo lahko dodate tudi nekaj gumbov, ki bodo v uporabniškem načinu počistili okno s parametri in okno z besedilom zahteve.

Naša konzola za poizvedbe je pripravljena za uporabo, želim vam uspešne ustvarjalne rešitve z uporabo tako preprostega in zmogljivega orodja, kot je konzola za poizvedbe!

Ta obdelava je napisana na platformi 1c8.3 (upravljani obrazci) in teče pod debelim odjemalcem. Lahko se piše tudi na platformi 1c8.2 tako v navadnih kot v nadzorovanih oblikah.

Prenos vsebuje vzorec konzole za poizvedbe, ki smo jo pravkar ustvarili.

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

Nadgradnja konzole za poizvedbe:

1) Zdaj bo naša konzola za poizvedbe izdelana samostojno z vgrajenim ustvarjalnikom poizvedb delovala pod katerim koli odjemalcem: pod debelim odjemalcem običajnih in upravljanih obrazcev ter pod tankim in spletnim odjemalcem.

ps Oblika in videz vgrajenega Query Builderja je različna - odvisno od tega, pod katerim odjemalcem smo zagnali našo konzolo (osebno imam raje obrazec Query Builder pod debelim odjemalcem)

& OnClient Procedure QueryConstructor (Ukaz) // klic standardnega QueryConstructorja je možen samo pod debelim odjemalcem # Če FatClientManagedApplication ali ThickClientNormalApplication Then Constructor = New QueryConstructor; Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf; // # V nasprotnem primeru // Inform ("Klicanje graditelja poizvedb je možno samo pod debelim odjemalcem"); // Vrnitev; // # EndIf # Poročilo drugače ("Ustvarjalnik poizvedb izvajate pod tankim odjemalcem - nekoliko se razlikuje po obliki in hitrosti delovanja!"); Konstruktor = Nov konstruktor poizvedbe (); Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Opozorilo konstruktorja = New AlertDescription ("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show (ConstructorAlert); #EndIf EndProcedure & OnClient Procedure ExecuteAfterClosingConstructor (Result, ConstructorParameters) Export // Rezultat = besedilo, če je bila konzola zaprta s klikom ok Object.QueryText = ShortLP (Result); //deluje!!! Konec postopka

2) V našo preprosto konzolo za poizvedbe je dodana možnost vnosa zapletenih poizvedb z začasno tabelo, posredovano v parametre !!! Mehanizem se je izkazal za zelo preprostega in elegantnega - brez uporabe kode XML, kot se to izvaja v profesionalnih konzolah.

Samo kodo in postopke za mehanizem prenosa na parametre začasnih tabel najdete v drugi priloženi datoteki. Kako sem začel razvijati svojo različico začasnih tabel v parametrih, si lahko ogledate na tej povezavi https: //forum.site/forum9/topic183700/

Zdaj, kako uporabiti konzolo za zapleteno poizvedbo, ko je začasna tabela posredovana njenim parametrom. Tukaj lahko na primer vzamete kodo te zahteve;

IZBERITE ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM & ExternalData AS ExternalData; ////////////////////////////////////////////// // //////////////////////////// IZBERI ExternalData.Product, ExternalData.Quantity, THE IS NULL (preostali predmeti Balance.Number Balance, 0) AS Polje 1, JE NULL (preostali predmeti Stanja. Stanje količine, 0) - ExternalData.Quantity AS Preostalo FROM ExternalData AS ExternalData LEFT JOIN Akumulacijski register. Izdelek

Podobno kot pri zgornji kodi zahteve - ustvarite lahko svojo zapleteno poizvedbo, ob upoštevanju vaših podatkovnih objektov.

Torej, v oblikovalniku poizvedb smo ustvarili zgornjo poizvedbo in zaprli oblikovalec - besedilo poizvedbe bo šlo v naše konzolno polje "QueryText", kliknite gumb "FindParameters", vidimo, da je vrstica = "ExternalData", ValueType = "ValuesTable" se je pojavila v tabeli s parametri, glejte sl.

V tej tabeli parametrov - vnesite parameter Datum, na primer današnji datum, nato kliknite, da poskusite urediti naš parameter začasne tabele "ExternalData", kliknite v polju s "Tabela vrednosti" za tri pike - izbira vrste, kliknite vrstico, naš mehanizem nam obrne stran na obrazcu, kjer moramo ročno vnesti to zelo začasno tabelo.

Upoštevajte, da se hkrati na strani »Urniki« na dnu v polju »Ime začasne tabele v parametrih« prikaže ime naše začasne tabele (kopirano je iz tabele Parametri).

Zaenkrat na strani "Urniki" vidimo samo eno prazno tabelo - to je tabela Type naše bodoče začasne tabele. Z gumbom "Dodaj" dodajte ime atributa in vrsto prihodnje tabele. Bodite previdni – ime in vrsta se morata ujemati s tem, kar smo navedli v zahtevi za & ExternalData:

Zdaj pritisnemo gumb "UpdateTemporaryTable" - in tukaj bomo imeli drugo tabelo - neposredno jo bomo izpolnili prek gumba "Dodaj" s podatki začasne tabele.

Vse, lahko se še enkrat preverimo, ali smo v tabelo parametrov na 1. strani obdelave vnesli primitivne podatke parametrov poizvedbe, in pritisnemo gumb "Izvedi zahtevo" - vse šteje, ustrezno izbere, z omejitvijo na podatke, posredovane v parametru naše začasne tabele

ps Če ste se zmotili pri vnašanju imen atributov in njihovih tipov (v prvo tabelo) - samo zaprite konzolo in jo znova odprite - začasna podatkovna tabela bo izbrisana - tabelo Vrste pa lahko ponovno uredite in novo podatkovna tabela ponovno ustvarjena.

To je vse, z lastnimi rokami lahko ustvarimo zelo zmogljivo delovno orodje, poleg tega je naša konzola še vedno zelo okretna v primerjavi s profesionalnimi - in to je zelo velik plus za razvijalce! In, seveda, zdaj naša konzola deluje pod katero koli stranko! Vso srečo pri vašem ustvarjalnem razvoju !!!

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

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

Nenehno delam s svojo konzolo za poizvedbe in pred kratkim sem naletel na zelo zanimivo poizvedbo, v kateri začasne tabele niso bile v prvem zahtevnem paketu, ampak v naslednjih - in tukaj se je moja konzola malo posmehovala ... Morala je narediti še ena nadgradnja.

Torej upravitelj začasnih tabel v poizvedbi ne razume vedno, da delajo z njim)) Zato morate izrecno nastaviti prav tega upravitelja začasnih tabel:

& AtServer Postopek ExecuteRequestAtServer () // upgrade2-eksplicitna definicija upravitelja TemporaryTables! ManagerBT = Nov upravitelj začasnih tabel; Zahteva = Nova zahteva; // upgrade2-eksplicitna definicija upravitelja TemporaryTables! Request.TemporaryTablesManager = VTMmanager; Request.Text = Object.Request Bext;

Ta različica konzole je v tretjem prenosu.

Torej, začnimo preprosto: v konfiguratorju ustvarite novo obdelavo, poimenujte konzolo poizvedbe ali konstruktor poizvedb, kot želite.

V "Podatke" lahko takoj dodamo ploščo za prihodnje parametre, ki jih potrebujemo, tako da v naši konzoli nimamo najbolj primitivne zahteve, ampak s parametri in povezavami, na primer, za naše delo ustvarimo zahtevo za periodični registri, vendar tukaj brez navedb parametrov = & Datum ni nikjer.

Če želite ustvariti našo tabelo parametrov, na zavihku »Podatki« v svojem »delu tabele« dodajte novo tabelo, poimenujte jo QueryParameters, tu dodamo stolpce te tabele: 1) Ime parametra, vnesite niz = 25 znakov; ParameterValue, tukaj je sestavljeni podatkovni tip, glejte sliko:

Zato, kot je prikazano na sliki, izberemo sestavljeni tip za stolpec Vrednost parametra: v odprtem meniju tipa potrdite polje »Sestavljeni tip«, izberite številko, niz (določite 20 znakov), datum, logično vrednost in vstavite najnižje potrditveno polje - AnyLink - pomeni, da se lahko nadalje pri določanju parametrov naše zahteve sklicujemo na kateri koli predmet naše konfiguracije, na primer referenčne knjige ali dokumente.

Zdaj moramo ustvariti obrazec za našo prihodnjo konzolo za poizvedbe. V obdelavi pojdite na zavihek "Obrazci" in dodajte novega. Vnesemo ta obrazec in tam je že neomejeno polje za ustvarjalnost - pravkar ustvarjena dva rekvizita in ploščo lahko razporedite s parametri po želji! Če želite to narediti, lahko uporabite standardne elemente obrazca, kot je skupina ali stran s stranmi (če vam je ljubše obračanje strani.

Glavna stvar tukaj je ena stvar: tako, da povlečete atribut "TextValues" v levo polje za urejanje obrazca - v njegovih lastnostih ne pozabite nastaviti "Pogled" = Polje besedilnega dokumenta. Glejte sliko:

V lastnostih atributa "QueryTable", če želite, lahko določite - "DisplayGrid" in "DisplayHeaders".

Nato v desnem oknu za urejanje obrazca pojdite na zavihek "Ukazi" in dodajte nov gumb, ob kliku na katerega bo naša konzola izvedla določeno dejanje. Ustvarimo gumb "Konstruktor poizvedbe", če želite, lahko gumbu dodate ikono, glavna stvar je, da sam gumb premaknete v levo okno za urejanje obrazca, da ga vidimo. Nato v desni obliki okno za urejanje, z desno tipko miške kliknemo na naš gumb in izberemo lastnosti - v lastnostih kliknemo na postavko "Dejanje", pojavi se modalno okno z vprašanjem - kje točno se bo izvajala naša programska koda, ki jo bomo dodelili gumbu - izberite "Na odjemalcu".

Modul obrazca se odpre s pripravljenim praznim postopkom »Konstruktor poizvedbe postopkov (ukaz)«. Znotraj tega postopka bomo opisali klic standardnega konstruktorja poizvedb 1c8. To je zelo enostavno: Konstruktor = Nov konstruktor poizvedbe; Toda tukaj obstajajo pasti - konstruktor poizvedb, vgrajen v platformo, deluje v uporabniškem načinu SAMO pod debelim odjemalcem! Zato bomo vstavili pogoj ukaza predprocesorja # Če, vendar se tukaj odločite sami, na podlagi vaše platforme ali imate običajne obrazce, izberite " ThickClientNormalApplication"Ali pa imate platformo za upravljane obrazce" ThickClientManagedApplication Glej sl.

Zdaj je treba temu postopku dodati pogoj za pisanje besedila zahteve, ki bo za nas oblikoval konstruktor poizvedbe našemu potrebščini obrazca »Besedilo zahteve«:

Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf;

Lahko pa nekaj spremenimo ročno v besedilu zahteve (v uporabniškem načinu - v oknu rekvizitov "RequestText"), tako da bodo naše spremembe prišle v QueryConstructor, ko ga znova pokličemo - tukaj dodajte preprost pogoj:

Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf;

To je to, povezali smo konstruktor poizvedb, vgrajen v platformo 1c8, poglejmo si naše delo. Če želite to narediti, zaženite 1C: Enterprise v načinu debelega odjemalca na enega od naslednjih načinov: 1) glavni meni konfiguratorja - Odpravljanje napak - Začni odpravljanje napak - ThickClient; 2) ali če ste te tipke dali nadzorni plošči v konfiguratorju - samo pritisnite gumb z rumenim krogom z debelo piko, glejte sliko:

Uporabniški način 1cEnterprise8 se zažene, poiščemo našo obdelavo, jo zaženemo, kliknemo na naš gumb "Konstruktor poizvedbe" in vidimo, kako se odpre konstruktor, vgrajen v platformo. glej sl.

Torej, konstruktor poizvedb je zagnan pri nas, vanj lahko že začnemo dodajati našo prihodnjo poizvedbo, vendar nas zanima, kako bo obdelana poizvedba, ki smo jo ustvarili! In za to moramo ustvariti še en gumb v konfiguratorju pri urejanju oblike naše konzole, poimenujmo ga »Izvedi zahtevo«. V lastnostih gumba »Izvedi zahtevo« kliknemo na »Dejanje«, spet se prikaže meni, v katerem nas vpraša, kje bo naša programska koda obdelana, v tem primeru izberemo »Tako na odjemalcu in na strežniku «, spet vstopimo v modul obrazca.

V postopku ExecuteRequest (), ki ga imamo na odjemalcu, zapišemo pogoj, če uporabnik ni vnesel besedila zahteve, ampak zahteva, da ga izvede:

Če je EmptyString (Object.RequestText) Nato poročajte ("Vnesite besedilo vaše zahteve!"); EndIf;

Sistem je že samodejno ustvaril povezavo do postopka ExecuteRequestOnServer (); - to je dobro, pojdite na ta postopek, ki se izvaja na strežniku, in tukaj napišite izvršilno kodo naše vnesene zahteve.

Tukaj so možnosti: Samostojno lahko napišete vse izraze, povezane z gradnjo poizvedb, t.j. ročno, vendar obstaja še enostavnejša možnost - znotraj postopka pritisnite desni gumb miške in v spustnem meniju izberite element »Konstruktor poizvedb z obdelavo rezultatov, glejte sl.«:

Če ste kliknili na konstruktor poizvedbe z obdelavo rezultatov "postavka, nato modalno okno" Besedilo poizvedbe ni bilo mogoče najti. Ustvariti novega? " Obhod rezultata ". To je to, iz tega konstruktorja ne potrebujemo ničesar drugega, kliknite gumb "V redu" - modalno okno "V zahtevi ni bilo izbrano nobeno polje, kliknite" V redu ".

Po tem se bo znotraj našega postopka ExecuteRequestOnServer () pojavila naslednja že pripravljena škrbina:

Pojdimo na izraz, ki ga je zgradil konstruktor:

Request.Text = "";

Request.Text = Object.Request Bext;

Vse je tako preprosto, naš gumb "Izvedi zahtevo" na obrazcu za obdelavo je že praktično delujoč, zaenkrat lahko obdeluje le preproste zahteve brez parametrov, a glavno je, da deluje! Ostaja samo, da rezultate naše zahteve vizualno prikažemo v atributu "Tabela vrednosti" na obrazcu za obdelavo. Naj vas spomnim, da je naš atribut »Tabela vrednosti« tipa »Dokument tabele«, ker sicer ne bomo videli naših rezultatov v uporabniškem načinu. Tabelarni dokument ali postavitev se vedno ukvarjata s prikazovanjem tabelarnih podatkov uporabniku, resnično bi rad, da bi lahko podatke prikazal skozi tabelo vrednosti - saj je zelo enostaven za uporabo in poznan, a na žalost tabela vrednosti je samo orodje, ki ga razvijalec potrebuje, z njim ne morete prikazati podatkov na zaslonu ...

Oglejmo si podrobneje, kaj je tabelarni dokument - je kot list Exel - do zapisa v določeni celici lahko pridete samo s pomočjo celic tabele, tukaj se imenujejo območje, vendar lahko sami izberemo obseg tega območja v eno specifično celico:

Tako smo ugotovili, kaj je dokument preglednice, sami smo ugotovili, da moramo podatke iz naše zahteve določiti v določeni celici tega dokumenta s preglednico. Toda pomislimo: kaj je "QueryResult", ki nam ga je konstruktor tako hitro ustvaril? Odpiranje pomoči – rezultat poizvedbe je tabela, ki ima ustrezne lastnosti! glej sl.

In če zdaj zapišemo za izrazom QueryResult = Query.Run (); (ustvarjen s strani konstruktorja), je tukaj preprosta zanka za zbirke:

Za vsak ColumnName From QueryResult.Columns poročilo zanke (ColumnName.Name); Konec cikla;

Po tem ciklu za zdaj zasidrajte vse izraze, ki jih je samodejno zgradil konstruktor. In zaženite 1C: Enterprise8 pod debelim odjemalcem. Ustvarite poljubno preprosto poizvedbo (uporabite lahko oblikovalec poizvedb - že deluje pri nas) in kliknite gumb "Izvedi poizvedbo":

Nato boste na dnu okna v sporočilih videli - da tabela QueryResult shranjuje imena polj, ki smo jih pravkar izbrali z ustvarjanjem preproste poizvedbe.

Zdaj pa prikažimo ta imena polj našega trpljenja v dokumentu s preglednico:

Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = Ime stolpca.Ime; Konec cikla;

Za prikaz podrobnosti s podatki poizvedbe bomo ločili izraze, ki jih samodejno ustvari konstruktor, in znotraj zanke “SelectDetailedRecords” same poizvedbe vstavimo popolnoma enak cikel, ki smo ga uporabljali za prikaz imen stolpcev, le zdaj morate prenesti podatke tabele "QueryResult" v besedilo celice in podatke same izbire, poglejmo v pomoči, kako se lahko sklicujete na polje za podrobno izbiro poizvedbe:

FetchDetailedRecords = QueryResult.Select (); Medtem ko FetchDetailRecords.Next () Loop // v prvi vrstici že imamo imena stolpcev tabele, zato naložimo podatke pod prvo vrsticoRowNumberDoc = Object.QuestTable.TableTable + 1; Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [Ime stolpca.Ime]; Konec cikla; Konec cikla;

Vse, lahko preverimo, naložimo podjetje pod debel odjemalec, vnesemo preprosto poizvedbo brez parametrov, kliknemo gumb "Izvedi poizvedbo", glej sliko:

Hura, vse deluje!!!

Zelo priročno je, ko se ob odpiranju / zapiranju naše konzole za poizvedbe - spet v polju "QueryText" zapiše besedilo naše poizvedbe, s katerim smo delali pred zapiranjem konzole. Če želite to narediti, morate omogočiti lastnost obrazca = Samodejno shranjevanje, glejte sliko:

To je to, naša konzola deluje. Da lahko pišemo bolj zapletene poizvedbe s parametri, ki so v njih določeni, moramo ustvariti še en gumb "FindParameters", kot tudi kodo gumba "ExecuteRequest" - koda gumba "FindParameters" se bo izvajala na odjemalcu in na strežniku. Nadalje v strežniškem postopku na enak način zaženemo zahtevo z besedilom, ki mu je posredovano iz okna "RequestText", z izrazom "Request.FindParameters ()" najdemo posredovane parametre in jih preprosto vnesemo v zanko v tabelarni del obrazca »RequestParameters«. Ne pozabite jih prenesti iz izpolnjene tabele parametrov v postopek »ExecuteRequest«.

V našo konzolo lahko dodate tudi nekaj gumbov, ki bodo v uporabniškem načinu počistili okno s parametri in okno z besedilom zahteve.

Naša konzola za poizvedbe je pripravljena za uporabo, želim vam uspešne ustvarjalne rešitve z uporabo tako preprostega in zmogljivega orodja, kot je konzola za poizvedbe!

Ta obdelava je napisana na platformi 1c8.3 (upravljani obrazci) in teče pod debelim odjemalcem. Lahko se piše tudi na platformi 1c8.2 tako v navadnih kot v nadzorovanih oblikah.

Prenos vsebuje vzorec konzole za poizvedbe, ki smo jo pravkar ustvarili.

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

Nadgradnja konzole za poizvedbe:

1) Zdaj bo naša konzola za poizvedbe izdelana samostojno z vgrajenim ustvarjalnikom poizvedb delovala pod katerim koli odjemalcem: pod debelim odjemalcem običajnih in upravljanih obrazcev ter pod tankim in spletnim odjemalcem.

ps Oblika in videz vgrajenega Query Builderja je različna - odvisno od tega, pod katerim odjemalcem smo zagnali našo konzolo (osebno imam raje obrazec Query Builder pod debelim odjemalcem)

& OnClient Procedure QueryConstructor (Ukaz) // klic standardnega QueryConstructorja je možen samo pod debelim odjemalcem # Če FatClientManagedApplication ali ThickClientNormalApplication Then Constructor = New QueryConstructor; Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf; // # V nasprotnem primeru // Inform ("Klicanje graditelja poizvedb je možno samo pod debelim odjemalcem"); // Vrnitev; // # EndIf # Poročilo drugače ("Ustvarjalnik poizvedb izvajate pod tankim odjemalcem - nekoliko se razlikuje po obliki in hitrosti delovanja!"); Konstruktor = Nov konstruktor poizvedbe (); Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Opozorilo konstruktorja = New AlertDescription ("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show (ConstructorAlert); #EndIf EndProcedure & OnClient Procedure ExecuteAfterClosingConstructor (Result, ConstructorParameters) Export // Rezultat = besedilo, če je bila konzola zaprta s klikom ok Object.QueryText = ShortLP (Result); //deluje!!! Konec postopka

2) V našo preprosto konzolo za poizvedbe je dodana možnost vnosa zapletenih poizvedb z začasno tabelo, posredovano v parametre !!! Mehanizem se je izkazal za zelo preprostega in elegantnega - brez uporabe kode XML, kot se to izvaja v profesionalnih konzolah.

Samo kodo in postopke za mehanizem prenosa na parametre začasnih tabel najdete v drugi priloženi datoteki. Kako sem začel razvijati svojo različico začasnih tabel v parametrih, lahko najdete na tej povezavi https://forum.infostart.ru/forum9/topic183700/

Zdaj, kako uporabiti konzolo za zapleteno poizvedbo, ko je začasna tabela posredovana njenim parametrom. Tukaj lahko na primer vzamete kodo te zahteve;

IZBERITE ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM & ExternalData AS ExternalData; ////////////////////////////////////////////// // //////////////////////////// IZBERI ExternalData.Product, ExternalData.Quantity, THE IS NULL (preostali predmeti Balance.Number Balance, 0) AS Polje 1, JE NULL (preostali predmeti Stanja. Stanje količine, 0) - ExternalData.Quantity AS Preostalo FROM ExternalData AS ExternalData LEFT JOIN Akumulacijski register. Izdelek

Podobno kot pri zgornji kodi poizvedbe - lahko ustvarite lastno kompleksno poizvedbo ob upoštevanju vaših podatkovnih objektov.

Torej, v oblikovalniku poizvedb smo ustvarili zgornjo poizvedbo in zaprli konstruktor - besedilo poizvedbe bo šlo v naše konzolno polje "QueryText", kliknite gumb "FindParameters", vidimo, da je vrstica = "ExternalData", ValueType = "ValuesTable" se je pojavila v tabeli parametrov, glejte sl.

V to tabelo parametrov - vnesite parameter Datum, na primer današnji datum, nato kliknite, da poskusite urediti naš parameter začasne tabele "ExternalData", kliknite v polju s "Tabela vrednosti" za tri pike - izbira med vrste, kliknite vrstico, naš mehanizem nam obrne stran na obrazcu, kjer moramo ročno vnesti to zelo začasno tabelo.

Upoštevajte, da se hkrati na strani »Začasne tabele« na dnu v polju »Ime začasne tabele v parametrih« prikaže ime naše začasne tabele (kopirano je iz tabele parametrov) .

Zaenkrat na strani "Urniki" vidimo samo eno prazno tabelo - to je tabela Type naše bodoče začasne tabele. Z gumbom "Dodaj" dodajte ime atributa in vrsto prihodnje tabele. Bodite previdni – ime in vrsta se morata ujemati s tem, kar smo navedli v zahtevi za & ExternalData:

Zdaj pritisnemo gumb "UpdateTemporaryTable" - in tukaj bomo imeli drugo tabelo - vanjo bomo neposredno vnesli podatke začasne tabele prek gumba "Dodaj".

Vse, še enkrat se lahko preverimo, ali smo v tabelo parametrov na 1. strani obdelave vnesli primitivne podatke parametrov poizvedbe in kliknemo gumb "Izvedi zahtevo" - vse šteje, ustrezno izbere, z omejitvijo o podatkih, posredovanih v parametru naše začasne tabele

ps Če ste se zmotili pri vnašanju imen atributov in njihovih tipov (v prvo tabelo) - samo zaprite konzolo in jo znova odprite - začasna podatkovna tabela bo izbrisana - tabelo Vrste pa lahko ponovno uredite in novo podatkovna tabela ponovno ustvarjena.

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

To je vse, z lastnimi rokami lahko ustvarimo zelo zmogljivo delovno orodje, poleg tega je naša konzola še vedno zelo okretna v primerjavi s profesionalnimi - in to je zelo velik plus za razvijalce! In, seveda, zdaj naša konzola deluje pod katero koli stranko! Vso srečo pri vašem ustvarjalnem razvoju !!!

Torej, začnimo preprosto: v konfiguratorju ustvarite novo obdelavo, poimenujte konzolo poizvedbe ali konstruktor poizvedb, kot želite.

V "Podatke" lahko takoj dodamo ploščo za prihodnje parametre, ki jih potrebujemo, da v naši konzoli ne izvajamo najbolj primitivne zahteve, ampak s parametri in povezavami, na primer, za naše delo bomo ustvarili zahtevo za periodično registrov, vendar tukaj brez navedb parametrov = & Datum ni nikjer.

Če želite ustvariti našo tabelo parametrov, na zavihku "Podatki" v njegovem "delu tabele" dodajte novo tabelo, poimenujte jo QueryParameters, tukaj dodamo stolpce te tabele: 1) Ime parametra, vrsta niza = 25 znakov; ParameterValue, tukaj je sestavljeni podatkovni tip, glejte sliko:

Zato, kot je prikazano na sliki, izberemo sestavljeno vrsto za stolpec Vrednost parametra: v odprtem meniju vrste potrdite polje »Sestavljeni tip«, izberite številko, niz (določite 20 znakov), datum, logično vrednost in postavite najnižjo kljukico - AnyLink - to pomeni, da se lahko nadalje pri določanju parametrov naše zahteve sklicujemo na kateri koli predmet naše konfiguracije, na primer referenčne knjige ali dokumente.

Zdaj moramo ustvariti obrazec za našo prihodnjo konzolo za poizvedbe. V obdelavi pojdite na zavihek "Obrazci" in dodajte novega. Vnesemo ta obrazec in tam je že neomejeno polje za ustvarjalnost - pravkar ustvarjena dva rekvizita in ploščo lahko razporedite s parametri po želji! Če želite to narediti, lahko uporabite standardne elemente obrazca, kot je skupina ali stran s stranmi (če vam je ljubše obračanje strani.

Glavna stvar tukaj je ena stvar: tako, da povlečete atribut "TextValues" v levo polje za urejanje obrazca - v njegovih lastnostih ne pozabite nastaviti "Pogled" = Polje besedilnega dokumenta. Glejte sliko:

V lastnostih spremenljivke "QueryTable", če želite, lahko določite - "DisplayGrid" in "DisplayHeaders".

Nato v desnem oknu za urejanje obrazca pojdite na zavihek "Ukazi" in dodajte nov gumb, s klikom na katerega bo naša konzola izvedla določeno dejanje. Ustvarimo gumb "Konstruktor poizvedbe", če želite, lahko gumbu dodate ikono, glavna stvar je, da sam gumb premaknete v levo okno za urejanje obrazca, da ga vidimo. Nato v desni obliki okno za urejanje, z desno tipko miške kliknemo na naš gumb in izberemo lastnosti - v lastnostih kliknemo na postavko "Dejanje", pojavi se modalno okno z vprašanjem - kje točno se bo izvajala naša programska koda, ki jo bomo dodelili gumbu - izberite "Na odjemalcu".

Modul obrazca se odpre s pripravljeno prazno proceduro "Procedure QueryConstructor (Ukaz)". Znotraj tega postopka bomo opisali klic standardnega konstruktorja poizvedb 1c8. To je zelo enostavno: Konstruktor = Nov konstruktor poizvedbe; Toda tukaj obstajajo pasti - konstruktor poizvedb, vgrajen v platformo, deluje v uporabniškem načinu SAMO pod debelim odjemalcem! Zato bomo vstavili pogoj navodila za predprocesor # Če, vendar se tukaj odločite sami, na podlagi svoje platforme ali imate običajne obrazce, izberite " ThickClientNormalApplication"ali pa imate platformo za upravljane obrazce" ThickClientManagedApplication"glej sl.

Zdaj je treba temu postopku dodati pogoj za pisanje besedila zahteve, ki ga bo oblikovalec poizvedbe ustvaril v našem rekvizitu obrazca "Besedilo zahteve":

Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf;

Lahko pa nekaj spremenimo ročno v besedilu poizvedbe (v uporabniškem načinu - v oknu rekvizitov "QueryText"), tako da bodo naše spremembe šle v QueryConstructor, ko ga znova pokličemo - tukaj dodajte preprost pogoj:

Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf;

To je to, povezali smo konstruktor poizvedb, vgrajen v platformo 1c8, poglejmo si naše delo. Če želite to narediti, zaženite 1C: Enterprise v načinu debelega odjemalca na enega od naslednjih načinov: 1) glavni meni konfiguratorja - Odpravljanje napak - Začni odpravljanje napak - ThickClient; 2) ali če ste te tipke dali nadzorni plošči v konfiguratorju - samo pritisnite gumb z rumenim krogom z debelo piko, glejte sliko:

Zažene se uporabniški način 1cEnterprise8, najdemo našo obdelavo, jo zaženemo, kliknemo na naš gumb "Konstruktor poizvedbe" in vidimo, kako se odpre konstruktor, vgrajen v platformo. glej sl.

Torej, konstruktor poizvedb je zagnan pri nas, vanj lahko že začnemo dodajati našo prihodnjo poizvedbo, vendar nas zanima, kako bo obdelana poizvedba, ki smo jo ustvarili! In za to moramo ustvariti še en gumb v konfiguratorju pri urejanju obrazca naše konzole, poimenujmo ga "Izvedi zahtevo". Kliknite v lastnostih gumba "Izvedi zahtevo" na "Dejanje", spet se pojavi meni, v katerem nas vpraša, kje bo obdelana naša programska koda, v tem primeru izberemo "Tako na odjemalcu kot na strežniku" , spet gremo v modul obrazca.

V postopku ExecuteRequest (), ki ga imamo na odjemalcu, zapišemo pogoj, če uporabnik ni vnesel besedila zahteve, ampak zahteva, da ga izvede:

Če je EmptyString (Object.RequestText) Nato poročajte ("Vnesite besedilo vaše zahteve!"); EndIf;

Sistem je že samodejno ustvaril povezavo do postopka ExecuteRequestOnServer (); - to je dobro, pojdite na ta postopek, ki se izvaja na strežniku, in tukaj napišite izvršilno kodo naše vnesene zahteve.

Tukaj so možnosti: samostojno lahko napišete vse izraze, povezane z gradnjo poizvedb, t.j. ročno, vendar obstaja še enostavnejša možnost - znotraj postopka pritisnite desni gumb miške in v spustnem meniju izberite element "Konstruktor poizvedb z obdelavo rezultatov, glejte sl.":

Če ste kliknili na konstruktor poizvedbe z obdelavo rezultatov "element, nato modalno okno" Besedila poizvedbe ni bilo mogoče najti. Ustvarite novega?" Obhodite rezultat. "To je to, iz tega konstruktorja ne potrebujemo ničesar drugega, kliknite na gumb "V redu" - modalno okno bo izpadlo" V zahtevi ni izbranih polj, kliknite "V redu".

Po tem se bo znotraj našega postopka ExecuteRequestOnServer () pojavila naslednja že pripravljena škrbina:

Pojdimo na izraz, ki ga je zgradil konstruktor:

Request.Text = "";

Request.Text = Object.Request Bext;

Vse je tako preprosto, naš gumb "Izvedi zahtevo" na obrazcu za obdelavo je že praktično delujoč, zaenkrat lahko obdeluje le preproste zahteve brez parametrov, a glavno je, da deluje! Ostaja samo, da rezultate naše zahteve vizualno prikažemo v atributu "Tabela vrednosti" na obrazcu za obdelavo. Naj vas spomnim, da ima naš atribut "Tabela vrednosti" tip "Tabularni dokument", ker sicer ne bomo videli naših rezultatov v uporabniškem načinu. Tabelarni dokument ali postavitev se vedno ukvarjata s prikazovanjem tabelarnih podatkov uporabniku, resnično bi rad, da bi lahko podatke prikazal skozi tabelo vrednosti - saj je zelo enostaven za uporabo in poznan, a na žalost tabela vrednosti je samo orodje, ki ga razvijalec potrebuje, z njim ne morete prikazati podatkov na zaslonu ...

Oglejmo si podrobneje, kaj je tabelarni dokument - je kot list Exel - do zapisa v določeni celici lahko pridete samo s pomočjo celic tabele, tukaj se imenujejo območje, vendar lahko sami izberemo obseg tega območja v eno specifično celico:

Tako smo ugotovili, kaj je dokument preglednice, sami smo ugotovili, da moramo podatke iz naše zahteve določiti v določeni celici tega dokumenta s preglednico. Toda pomislimo: kaj je "QueryResult", ki nam ga je konstruktor tako hitro ustvaril? Odpiranje pomoči – rezultat poizvedbe je tabela, ki ima ustrezne lastnosti! glej sl.

In če zdaj zapišemo za izrazom QueryResult = Query.Run (); (ustvarjen s strani konstruktorja), je tukaj preprosta zanka za zbirke:

Za vsak ColumnName From QueryResult.Columns poročilo zanke (ColumnName.Name); Konec cikla;

Po tem ciklu za zdaj zasidrajte vse izraze, ki jih je samodejno zgradil konstruktor. In zaženite 1C: Enterprise8 pod debelim odjemalcem. Ustvarite poljubno preprosto zahtevo (uporabite lahko oblikovalec poizvedb - že deluje pri nas) in kliknite gumb "Izvedi zahtevo":

Nato boste na dnu okna v sporočilih videli - da tabela QueryResult shranjuje imena polj, ki smo jih pravkar izbrali z ustvarjanjem preproste poizvedbe.

Zdaj pa prikažimo ta imena polj našega trpljenja v dokumentu s preglednico:

Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = Ime stolpca.Ime; Konec cikla;

Za prikaz razčlenitve podatkov poizvedbe bomo ločili izraze, ki jih je samodejno ustvaril konstruktor, in znotraj iteracijske zanke "SelectDetailRecords" same poizvedbe vstavili popolnoma isto zanko, ki smo jo uporabili za prikaz imen stolpcev, samo zdaj moramo podatke iz tabele "QueryResult" prenesti v besedilo celice in podatke same izbire, poglejmo v pomoči, kako se lahko sklicujete na polje za podrobno izbiro poizvedbe:

FetchDetailedRecords = QueryResult.Select (); Medtem ko FetchDetailRecords.Next () Loop // v prvi vrstici že imamo imena stolpcev tabele, zato naložimo podatke pod prvo vrsticoRowNumberDoc = Object.QuestTable.TableTable + 1; Za vsak ColumnName From QueryResult.Columns Cell zanke = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [Ime stolpca.Ime]; Konec cikla; Konec cikla;

Vse, lahko preverimo, naložimo podjetje pod debel odjemalec, vnesemo preprosto poizvedbo brez parametrov, kliknemo gumb "Izvedi poizvedbo", glej sliko:

Hura, vse deluje!!!

Zelo priročno je, ko se ob odpiranju/zapiranju naše poizvedovalne konzole - spet v polju "QueryText" zapiše besedilo naše poizvedbe, s katerim smo delali pred zapiranjem ukazne mize. Če želite to narediti, morate omogočiti lastnost obrazca = Samodejno shranjevanje, glejte sliko:

To je to, naša konzola deluje. Da lahko pišemo bolj zapletene poizvedbe s parametri, ki so v njih določeni, moramo ustvariti še en gumb "FindParameters", kot tudi kodo gumba "ExecuteRequest" - koda gumba "FindParameters" se bo izvajala na odjemalcu in na strežniku. Nadalje v strežniškem postopku na enak način zaženemo zahtevo z besedilom, ki mu je posredovano iz okna "RequestText", z uporabo izraza "Request.FindParameters ()" poiščemo posredovane parametre in jih preprosto vnesemo v zanko v tabelarni del obrazca "RequestParameters". Ne pozabite jih prenesti iz izpolnjene tabele parametrov v postopek "ExecuteRequest".

V našo konzolo lahko dodate tudi nekaj gumbov, ki bodo v uporabniškem načinu počistili okno s parametri in okno z besedilom zahteve.

Naša konzola za poizvedbe je pripravljena za uporabo, želim vam uspešne ustvarjalne rešitve z uporabo tako preprostega in zmogljivega orodja, kot je konzola za poizvedbe!

Ta obdelava je napisana na platformi 1c8.3 (upravljani obrazci) in teče pod debelim odjemalcem. Lahko se piše tudi na platformi 1c8.2 tako v navadnih kot v nadzorovanih oblikah.

Prenos vsebuje vzorec konzole za poizvedbe, ki smo jo pravkar ustvarili.

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

Nadgradnja konzole za poizvedbe:

1) Zdaj bo naša konzola za poizvedbe izdelana samostojno z vgrajenim ustvarjalnikom poizvedb delovala pod katerim koli odjemalcem: pod debelim odjemalcem običajnih in upravljanih obrazcev ter pod tankim in spletnim odjemalcem.

ps Oblika in videz vgrajenega Query Builderja je različna - odvisno od tega, pod katerim odjemalcem smo zagnali našo konzolo (osebno imam raje obrazec Query Builder pod debelim odjemalcem)

& OnClient Procedure QueryConstructor (Ukaz) // klic standardnega QueryConstructorja je možen samo pod debelim odjemalcem # Če FatClientManagedApplication ali ThickClientNormalApplication Then Constructor = New QueryConstructor; Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Če je Constructor.OpenModal () = True, potem je Object.InquiryText = Constructor.Text; EndIf; // # V nasprotnem primeru // Inform ("Klicanje graditelja poizvedb je možno samo pod debelim odjemalcem"); // Vrnitev; // # EndIf # Poročilo drugače ("Ustvarjalnik poizvedb izvajate pod tankim odjemalcem - nekoliko se razlikuje po obliki in hitrosti delovanja!"); Konstruktor = Nov konstruktor poizvedbe (); Če ni EmptyString (Object.RequestText), potem Constructor.Text = Object.RequestText; EndIf; Opozorilo konstruktorja = New AlertDescription ("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show (ConstructorAlert); #EndIf EndProcedure & OnClient Procedure ExecuteAfterClosingConstructor (Result, ConstructorParameters) Export // Rezultat = besedilo, če je bila konzola zaprta s klikom ok Object.QueryText = ShortLP (Result); //deluje!!! Konec postopka

2) V našo preprosto konzolo za poizvedbe je dodana možnost vnosa zapletenih poizvedb z začasno tabelo, posredovano v parametre !!! Mehanizem se je izkazal za zelo preprostega in elegantnega - brez uporabe kode XML, kot se to izvaja v profesionalnih konzolah.

Samo kodo in postopke za mehanizem prenosa na parametre začasnih tabel najdete v drugi priloženi datoteki. Kako sem začel razvijati svojo različico začasnih tabel v parametrih, lahko najdete na tej povezavi https://forum.infostart.ru/forum9/topic183700/

Zdaj, kako uporabiti konzolo za zapleteno poizvedbo, ko je začasna tabela posredovana njenim parametrom. Tukaj lahko na primer vzamete kodo te zahteve;

IZBERITE ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM & ExternalData AS ExternalData; ////////////////////////////////////////////// // //////////////////////////// IZBERI ExternalData.Product, ExternalData.Quantity, THE IS NULL (preostali predmeti Balance.Number Balance, 0) AS Polje 1, JE NULL (preostali predmeti Stanja. Stanje količine, 0) - ExternalData.Quantity AS Preostalo FROM ExternalData AS ExternalData LEFT JOIN Akumulacijski register. Izdelek

Podobno kot pri zgornji kodi poizvedbe - lahko ustvarite svojo kompleksno poizvedbo, pri čemer upoštevate svoje podatkovne objekte.

Torej, v oblikovalniku poizvedb smo ustvarili zgornjo poizvedbo in zaprli oblikovalec - besedilo poizvedbe bo šlo v naše konzolno polje "QueryText", kliknite gumb "FindParameters", vidimo, da je vrstica = "ExternalData", ValueType = "ValuesTable" se je pojavila v tabeli s parametri, glejte sl.

V tej tabeli parametrov - vnesite parameter Datum, na primer današnji datum, nato kliknite, da poskusite urediti naš parameter začasne tabele "ExternalData", kliknite v polju s "Tabela vrednosti" za tri pike - izbira vrste, kliknite vrstico, naš mehanizem nam obrne stran na obrazcu, kjer moramo ročno vnesti to zelo začasno tabelo.

Upoštevajte, da se hkrati na strani »Urniki« na dnu v polju »Ime začasne tabele v parametrih« prikaže ime naše začasne tabele (kopirano je iz tabele Parametri).

Zaenkrat na strani "Urniki" vidimo samo eno prazno tabelo - to je tabela Type naše bodoče začasne tabele. Z gumbom "Dodaj" dodajte ime atributa in vrsto prihodnje tabele. Bodite previdni – ime in vrsta se morata ujemati s tem, kar smo navedli v zahtevi za & ExternalData:

Zdaj pritisnemo gumb "UpdateTemporaryTable" - in tukaj bomo imeli drugo tabelo - neposredno jo bomo izpolnili prek gumba "Dodaj" s podatki začasne tabele.

Vse, lahko se še enkrat preverimo, ali smo v tabelo parametrov na 1. strani obdelave vnesli primitivne podatke parametrov poizvedbe, in pritisnemo gumb "Izvedi zahtevo" - vse šteje, ustrezno izbere, z omejitvijo na podatke, posredovane v parametru naše začasne tabele

ps Če ste se zmotili pri vnašanju imen atributov in njihovih tipov (v prvo tabelo) - samo zaprite konzolo in jo znova odprite - začasna podatkovna tabela bo izbrisana - tabelo Vrste pa lahko ponovno uredite in novo podatkovna tabela ponovno ustvarjena.

To je vse, z lastnimi rokami lahko ustvarimo zelo zmogljivo delovno orodje, poleg tega je naša konzola še vedno zelo okretna v primerjavi s profesionalnimi - in to je zelo velik plus za razvijalce! In, seveda, zdaj naša konzola deluje pod katero koli stranko! Vso srečo pri vašem ustvarjalnem razvoju !!!

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

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

Nenehno delam s svojo konzolo za poizvedbe in pred kratkim sem naletel na zelo zanimivo poizvedbo, v kateri začasne tabele niso bile v prvem zahtevnem paketu, ampak v naslednjih - in tukaj se je moja konzola malo posmehovala ... Morala je narediti še ena nadgradnja.

Torej upravitelj začasnih tabel v poizvedbi ne razume vedno, da delajo z njim)) Zato morate izrecno nastaviti prav tega upravitelja začasnih tabel:

& AtServer Postopek ExecuteRequestAtServer () // upgrade2-eksplicitna definicija upravitelja TemporaryTables! ManagerBT = Nov upravitelj začasnih tabel; Zahteva = Nova zahteva; // upgrade2-eksplicitna definicija upravitelja TemporaryTables! Request.TemporaryTablesManager = VTMmanager; Request.Text = Object.Request Bext;

Ta različica konzole je v tretjem prenosu.

Eno najmočnejših orodij 1C Enterprise 8 je nedvomno Query Builder. Konstruktor je vizualno orodje za delo s poizvedbami v jeziku 1C. Toda konstruktor ima eno veliko pomanjkljivost - ne prikaže rezultatov poizvedb. Ta pomanjkljivost posebej občutijo začetniki razvijalci uporabnih rešitev na platformi 1C: Enterprise 8.3 in 8.2.

Poleg tega se tudi izkušeni programerji 1C pogosto soočajo s situacijo, ko je treba narediti "enkratno" analizo podatkov baze podatkov v različnih razdelkih, vendar ne želim napisati popolnega poročila zaradi takšen "enkratni sklep".

Za vse te in številne druge primere vam z veseljem ponudimo zunanjo obdelavo Konzola za poizvedbe z možnostjo obdelave rezultatov za 1C 8.3 in 1C 8.2!


Ključne značilnosti konzole za poizvedbe za 1C 8.3 in 1C 8.2:

Univerzalna obdelava, deluje na kateri koli konfiguraciji platform 1C: Enterprise 8.1 - 8.3;
- deluje v načinu 1C: Enterprise;
- zahtevo lahko napišete ročno ali pa pokličete konstruktor poizvedb;
- prikaže rezultat poizvedbe;
- lahko določite parametre poročila neposredno v konzoli za poizvedbe;
- zna shraniti in naložiti datoteke zahtevkov.

Če želite zagnati konzolo za poizvedbe, morate zagnati svojo konfiguracijo v načinu 1C: Enterprise in odpreti zunanjo obdelavo konzole za poizvedbe kot katero koli drugo datoteko, shranjeno na disku. Takšna obdelava bo delovala na enak način, kot če bi bila del aplikacijske rešitve.


Zunanja obdelava Poizvedbena konzola ponavlja znani vmesnik in večino funkcionalnost standardni komplet orodij za pripravo poizvedb 1C: Enterprise 8.3 in 8.2. Omogoča vam tudi pridobivanje rezultatov poizvedb, paketnih poizvedb in začasnih tabel.

Poizvedbena konzola se izvaja tako v načinu odjemalec-strežnik kot datotečni strežnik v sistemu, tako pod debelim kot pod tankim odjemalcem! Konzola poizvedb ima integriran standardni konstruktor poizvedb, ki ga lahko pokličete prek kontekstnega menija v polju z besedilom poizvedbe.

POMEMBNO! Konstruktor poizvedb ne deluje v tankem odjemalcu, ta element menija za odpiranje konstruktorja ni na voljo. V debelem odjemalcu je na voljo Builder poizvedb!


V tankem odjemalcu lahko zahteve pišemo le ročno, vse ostale funkcije delujejo brez sprememb.

Možnost pisanja besedila poizvedbe "ročno" nikoli ni bila "odveč", vendar je bolj priročno uporabiti oblikovalec poizvedb.

Komentar.

Na žalost v upravljani aplikaciji ne morete uporabiti konstruktorja poizvedbe pri obdelavi poizvedbe AcquaintanceWith. Pri tej obdelavi ga lahko uporabite tako, da obiščete normalen način, vendar tega ne bomo storili.

Ustvarimo obdelavo QueryConstructor in jo definiramo v podsistemu ReportsAndProcessing.

Ustvarimo obrazec za obdelavo in dodamo atribut obrazca "TabDok" tipa "Tabularni dokument" ter ukaz "Izvedi zahtevo" z dejanjem "Izvedi zahtevo". Nato jih povlecite na obrazec.

V modulu obrazca, da ukaz deluje, napišemo postopek:

& OnClient

Zahteva za izvedbo postopka (ukaz)

RunRequestServer ();

Konec postopka

&Na strežniku

Konec postopka

Postanemo znotraj procedure, ki jo kliče na strežniku in iz kontekstnega menija pokličemo "Konstruktor poizvedbe z obdelavo rezultata" (slika 2.65).

Slika 2.65 Konstruktor poizvedb z obdelavo rezultatov

Nastavite vrsto obdelave "Izhod v dokument s preglednico" in kliknite gumb "Naprej" ali zavihek "Tabele in polja".

Na zavihku "Tabele in polja" oblikovalca si lahko ogledate trenutno obstoječe tabele v sistemu (levi del z naslovom "Baza podatkov") (slika 2.66).

Slika 2.67 Konstruktor poizvedbe

Tabele, iz katerih bodo podatki pridobljeni s poizvedbo, se prenesejo v področje "Tabele", polja, ki jih zahteva poizvedba, pa se prenesejo v področje "Polja". Naredimo to kot na sliki 2.68.

Slika 2.68 Konstruktor poizvedb

Tukaj smo odstranili privzeto polje pogleda - "PREZENTACIJA (Prejem blaga.Nomenklatura)"

Kadar koli pri delu s konstruktorjem si lahko ogledate prejeto besedilo zahteve. Za dokončanje te naloge morate klikniti gumb "Zahtevaj", ki se nahaja v spodnjem levem kotu oblikovalskega obrazca (slika 2.69).

Besedilo zahteve lahko ročno uredite s klikom na gumb "Uredi".

Vadite. Pritisnemo gumb "V redu" in preverimo našo obdelavo v uporabniškem načinu. Če analizirate podatke, pridobljene med izvedbo zahteve, potem lahko najdete "ponovitve" nomenklaturnih postavk (če vam ni uspelo, lahko kopirate in objavite kateri koli dokument "Prejem blaga").

Vrnemo se na postopek ExecuteRequestServer () v obdelavi QueryConstructor in iz kontekstnega menija znova pokličemo konstruktor poizvedbe z obdelavo rezultatov.

Če morate "strniti" rezultat poizvedbe, lahko v ta namen uporabite zavihek "Združevanje v skupine" oblikovalca poizvedb.

Pri definiranju združevanja se je treba držati naslednjega pravila: vsa polja za izbiro poizvedbe so razdeljena na polja, s katerimi se izvaja združevanje (zlaganje), polja ugnezdenih tabel (povzeta polja glede na tista, s katerimi se izvaja združevanje) in na agregatne funkcije... Določimo skupine (slika 2.70).

Slika 2.70 Konstruktor poizvedb

Če je treba podatke, ki jih prejme zahteva, izbrati v skladu z nekim pogojem, bo v tem primeru morda treba uporabiti zavihek »Pogoji«. Izberemo Vhod blaga Količina = 10 (slika 2.71).

Slika 2.71 Stanje konstruktorja poizvedbe.

Bodite pozorni na dejstvo, da če je pogoj definiran na enak način kot na sliki, potem zahteva ne bo izvedena.

Stanje lahko odpravite na dva načina:

    Ponovno definiranje pogoja s preverjanjem zastave "P ...";

    Izkoriščanje možnosti spreminjanja besedila same zahteve (dobljene s klikom na gumb "Uredi zahtevo").

Sama ročna sprememba bo sestavljena iz dejstva, da je treba odstraniti simbol "&" pred številko "10". Ta simbol v besedilu zahteve opredeljuje parametre zahteve, v katere je treba v prihodnosti (vendar pred izvedbo zahteve) zapisati vse vrednosti. Kliknite na gumb "EditRequest" in uredite (slika 2.72).

Slika 2.73 Urejanje poizvedbe

Na zavihku »Dodatno« lahko označite številne zastavice (v zvezi s ključno besedo »Izberi« poizvedbenega jezika) in določite sestavo tabel, namenjenih spreminjanju poizvedbe (slika 2.74).

Slika 2.74 Dodatne funkcije poizvedbe

Na zavihku "Zveze / vzdevki" lahko spremenite imena polj tako, da navedete "Vzdevki", vendar tega ne bomo storili.

Na zavihku »Vrst« lahko določite vrstni red razvrščanja zapisov v rezultatu poizvedbe (slika 2.75).

Slika 2.75 Vrstni red zapisov

Bodite pozorni na zastavico "Samodejno naročanje", z njo lahko naročite po poljih vrste reference.

Ko definirate razdelek »Vsote«, bodite pripravljeni na to, da se bodo kot rezultat poizvedbe pojavili »dodatni« zapisi o vsoti. Skupaj s temi zapisi postane rezultat poizvedbe hierarhičen (slika 2.76).

Slika 2.76 Rezultati konstruktorja poizvedb.

Določite lahko več vrst seštevkov:

    Elementi (v izboru rezultatov poizvedbe so združeni vsoti in podrobni zapisi);

    Hierarhija (pri izboru rezultatov poizvedbe so v splošnem primeru zapisi seštevkov po hierarhiji, skupni zapisi po skupinah, podrobni zapisi);

    Samo hierarhija (pri izbiri rezultata poizvedbe so v splošnem primeru vsote za hierarhijo).

Po kliku na gumb "V redu" konstruktorja bo ustvarjena "Postavitev" in koda za postopek ExecuteRequestServer () bo zapisana v modul obrazca:

&Na strežniku

Postopek ExecuteRequestServer ()

// ((REQUEST_CONSTRUCTOR_With_RESULT_PROCESSING

// Ta fragment je zgradil konstruktor.

// Če znova uporabite konstruktor, bodo ročno narejene spremembe izgubljene !!!

Layout = Processing.RequestConstructor.Get Layout ("Postavitev");

Zahteva = Nova zahteva;

Zahteva.Besedilo =

| Prejem blagaNomenklatura AS Nomenklatura,

| ZNESEK (Prejem blagaBlago. Količina) AS količina,

| AMOUNT (Prejem blaga.Znesek blaga) AS Znesek

| Dokument. Vhodno blago. Blago

| KAKO ARTIKLI IZDELKI

| Prihod blagaBlago.Količina> 1

| NALOŽI

| Prihod blaga Izdelki.Nomenklatura

| NAROČI PO

| količina,

| Znesek IZGUBE

| SUM (količina),

| SUM (Znesek)

| Nomenklatura HIERARHIJA";

Rezultat = Query.Run ();

AreaHeader = Layout.GetArea ("Naslov");

AreaFooter = Layout.GetArea ("Noga");

AreaTableHead = Layout.GetArea ("TableHead");

TableFoot Area = Layout.GetArea ("Noga tabele");

ScopeNomenclatureHierarchy = Layout.GetScope ("NomenclatureHierarchy");

ScopeNomenclature = Layout.GetScope ("Nomenklatura");

TabDoc.Počisti ();

TabDoc.Display (ScopeHeader);

TabDoc.Display (ScopeTablesHap);

TabDoc.StartAutoGroupLines ();

SelectNomenclature = Result.Choose (Obhodi rezultatov poizvedbe.On Groupings);

Medtem ko SampleNomenclature.Next () Cycle

IfSetupNomenclature.RecordType () = QueryRecordType.Total By Hierarchy Potem

Obseg = ScopeNomenclatureHierarchy;

Obseg = Nomenklatura obsega;

EndIf;

Region.Parameters.Fill (Nomenklatura izbora);

TabDoc.Display (Obseg, SelectionNomenclature.Level ());

Konec cikla;

TabDoc.FinishAutoGroupLines ();

TabDoc.Display (AreaFooterTables);

TabDok.Display (območje klet);

//)) REQUEST_CONSTRUCTOR_With_RESULT_PROCESSING



Povezani članki: