Majtas dhe djathtas bashkohen në pyetjet 1c. SHTYP sipas kërkesës

Gjuha e pyetjes është një nga mekanizmat themelorë të 1C 8.3 për zhvilluesit. Duke përdorur pyetjet, mund të rikuperoni shpejt çdo të dhënë të ruajtur në bazën e të dhënave. Sintaksa e tij është shumë e ngjashme me SQL, por ka disa dallime.

Përparësitë kryesore të gjuhës së pyetjeve 1C 8.3 (8.2) ndaj SQL:

  • mosreferencimi i fushave të referencës (duke iu referuar një ose më shumë pikave detajeve të objektit);
  • puna me rezultate është shumë e përshtatshme;
  • aftësia për të krijuar tabela virtuale;
  • kërkesa mund të shkruhet në anglisht dhe rusisht;
  • aftësia për të bllokuar të dhënat për të shmangur bllokimet.

Disavantazhet e gjuhës së pyetjes në 1C:

  • ndryshe nga SQL, në pyetjet 1C nuk lejojnë ndryshimin e të dhënave;
  • mungesa e procedurave të ruajtura;
  • pamundësia e shndërrimit të vargut në numër.

Le të hedhim një vështrim në mini-tutorialin tonë mbi konstruktet bazë të gjuhës së pyetjeve 1C.

Për shkak të faktit se pyetjet në 1C ju lejojnë vetëm të merrni të dhëna, çdo pyetje duhet të fillojë me fjalën "SELECT". Pas kësaj komande tregohen fushat nga të cilat duhet të merren të dhënat. Nëse specifikoni "*", do të zgjidhen të gjitha fushat e disponueshme. Vendi nga i cili do të përzgjidhen të dhënat (dokumentet, regjistrat, drejtoritë, etj.) tregohet pas fjalës "NGA".

Në shembullin e diskutuar më poshtë, emrat e të gjithë nomenklaturës janë zgjedhur nga direktoria "Nomenklatura". Pas fjalës "SI", tregohen pseudonimet (emrat) për tabelat dhe fushat.

ZGJIDHNI
Emri AS Emri i nomenklaturës
NGA
Drejtoria.Nomenklatura AS Nomenklatura

Pranë komandës "SELECT" mund të specifikoni fjalë kyçe:

  • TE NDRYSHME. Kërkesa do të zgjedhë vetëm rreshta që ndryshojnë në të paktën një fushë (pa dublikatë).
  • E PARË n, Ku n– numri i rreshtave nga fillimi i rezultatit që duhet të zgjidhen. Më shpesh, ky ndërtim përdoret së bashku me renditjen (ORDER BY). Për shembull, kur ju duhet të zgjidhni një numër të caktuar dokumentesh që janë të fundit sipas datës.
  • LEJOHET. Ky dizajn ju lejon të zgjidhni nga baza e të dhënave vetëm ato regjistrime që janë në dispozicion të përdoruesit aktual. Bazuar në përdorimin e kësaj fjale kyçe, përdoruesi do të marrë një mesazh gabimi kur përpiqet të kërkojë regjistrime në të cilat nuk ka qasje.

Këto fjalë kyçe mund të përdoren së bashku ose veçmas.

PËR NDRYSHIM

Ky propozim bllokon të dhënat për të parandaluar konfliktet e ndërsjella. Të dhënat e kyçura nuk do të lexohen nga një lidhje tjetër derisa transaksioni të përfundojë. Në këtë klauzolë, ju mund të specifikoni tabela specifike që duhet të kyçen. Përndryshe, të gjithë do të bllokohen. Dizajni është i rëndësishëm vetëm për mënyrën e mbylljes automatike.

Më shpesh, klauzola "PER NDRYSHIM" përdoret kur merren bilancet. Në fund të fundit, kur disa përdorues punojnë në program njëkohësisht, ndërsa njëri merr bilanc, një tjetër mund t'i ndryshojë ato. Në këtë rast, mbetja që rezulton nuk do të jetë më e saktë. Nëse bllokoni të dhënat me këtë propozim, atëherë derisa punonjësi i parë të marrë bilancin e saktë dhe të kryejë të gjitha manipulimet e nevojshme me të, punonjësi i dytë do të detyrohet të presë.

ZGJIDHNI
Marrëveshjet e ndërsjella.Punonjës,
Shlyerjet e ndërsjella Shuma e shlyerjeve të ndërsjella Bilanci
NGA
Regjistri i akumulimeve.Bashkime të ndërsjella me punonjësit Bilancet AS Shlyerje të ndërsjella
PËR NDRYSHIM

KU

Dizajni është i nevojshëm për të imponuar një lloj përzgjedhjeje në të dhënat e ngarkuara. Në disa raste të marrjes së të dhënave nga regjistrat, është më e arsyeshme të specifikohen kushtet e përzgjedhjes në parametrat e tabelave virtuale. Kur përdorni "WHERE", të gjitha të dhënat merren së pari dhe vetëm atëherë aplikohet përzgjedhja, e cila ngadalëson ndjeshëm kërkesën.

Më poshtë është një shembull i një kërkese për të marrë persona kontaktues për një pozicion specifik. Parametri i përzgjedhjes ka formatin: &ParameterName (emri i parametrit është arbitrar).

PËRZGJEDHJA (RASTI)

Dizajni ju lejon të specifikoni kushtet drejtpërdrejt në trupin e kërkesës.

Në shembullin e mëposhtëm, "Fusha Shtesë" do të përmbajë tekst në varësi të faktit nëse dokumenti është postuar apo jo:

ZGJIDHNI
PranimiT&U.Link,
ZGJEDHJA
KUR PranimiT&U.Kryhet
PASTAJ "Dokumenti është miratuar!"
TJETER "Dokumenti nuk ishte postuar..."
FUND AS Fushë shtesë
NGA
Dokument Pranimi i Mallrave dhe Shërbimeve SI T&C Marrja

BASHKOHU

Lidhjet lidhin dy tabela bazuar në një kusht specifik të marrëdhënies.

LIDHJA TË Majtas/Djathtas

Thelbi i bashkimit LEFT është që tabela e parë e specifikuar merret në tërësi dhe e dyta lidhet me të sipas kushtit të lidhjes. Nëse nuk ka regjistrime që korrespondojnë me tabelën e parë në të dytën, atëherë NULL zëvendësohet si vlera e tyre. E thënë thjesht, tabela kryesore është tabela e parë e specifikuar dhe të dhënat e tabelës së dytë (nëse ka) tashmë janë zëvendësuar për të dhënat e saj.

Për shembull, është e nevojshme të merren artikujt nga dokumentet "Pranimi i mallrave dhe shërbimeve" dhe çmimet nga regjistri i informacionit "Çmimet e artikujve". NË në këtë rast, nëse çmimi për ndonjë pozicion nuk gjendet, zëvendëso NULL në vend. Të gjithë artikujt nga dokumenti do të zgjidhen pavarësisht nëse kanë një çmim apo jo.

ZGJIDHNI
Fatura & Nomenklatura e U.
Çmimet.Çmimi
NGA
Dokument. Pranimi i Mallrave dhe Shërbimeve. Mallrat SI Marrja dhe Specifikimet
BASHKIMI I BRENDSHËM RegjistrohuInformacion.ÇmimetNomenklatura.FetëFundi AS Çmimet
Fatura e Softuerit&U.Nomenklatura = Çmimet.Nomenklatura

NË TË DREJTË çdo gjë është pikërisht e kundërta.

LIDHJE E PLOTË

Ky lloj lidhjeje ndryshon nga ato të mëparshmet në atë që si rezultat do të kthehen të gjitha të dhënat e tabelës së parë dhe të dytë. Nëse nuk gjenden regjistrime në tabelën e parë ose të dytë bazuar në kushtin e specifikuar të lidhjes, në vend të kësaj do të kthehet NULL.

Kur përdorni një lidhje të plotë në shembullin e mëparshëm, do të zgjidhen të gjithë artikujt nga dokumenti "Pranimi i mallrave dhe shërbimeve" dhe të gjitha çmimet më të fundit nga regjistri "Çmimet e artikujve". Vlerat e rekordeve të pa gjetura në tabelën e parë dhe të dytë do të jenë të barabarta me NULL.

BASHKIMI I BRENDSHËM

Dallimi midis një BASHKIMI I BRENDSHËM dhe një BASHKIMI I PLOTË është se nëse një rekord nuk gjendet në të paktën njërën nga tabelat, pyetja nuk do ta shfaqë fare atë. Si rezultat, do të zgjidhen vetëm ato artikuj nga dokumenti "Pranimi i mallrave dhe shërbimeve" për të cilët ka regjistrime në regjistrin e informacionit "Çmimet e artikujve", nëse në shembullin e mëparshëm zëvendësojmë "FULL" me "INTERNAL".

GRUP NGA

Grupimi në pyetjet 1C ju lejon të kolapsoni rreshtat e tabelës (fushat e grupimit) sipas një karakteristike të caktuar të përbashkët (fushat e grupimit). Fushat e grupimit mund të shfaqen vetëm duke përdorur funksionet e përgjithshme.

Rezultati i pyetjes së mëposhtme do të jetë një listë e llojeve të produkteve me çmime maksimale për to.

ZGJIDHNI
,
MAX (Çmimi.Çmimi) SI Çmimi
NGA

GRUP NGA
Çmimet.Nomenklatura.Lloji i Nomenklaturës

REZULTATET

Ndryshe nga grupimi, kur përdorni totalet, të gjitha regjistrimet shfaqen dhe rreshtat totale u shtohen atyre. Grupimi shfaq vetëm regjistrime të përgjithësuara.

Rezultatet mund të përmblidhen për të gjithë tabelën (duke përdorur fjalën kyçe “GJENERAL”), për disa fusha, për fusha me strukturë hierarkike (fjalë kyçe “HIERARKI”, “VETËM HIERARKI”). Gjatë përmbledhjes së rezultateve, nuk është e nevojshme të përdoren funksionet agregate.

Le të shohim një shembull të ngjashëm me shembullin e mësipërm duke përdorur grupimin. Në këtë rast, rezultati i pyetjes do të kthejë jo vetëm fushat e grupuara, por edhe regjistrime të detajuara.

ZGJIDHNI
Çmimet.Nomenklatura.Lloji i nomenklaturës AS Lloji i nomenklaturës,
Çmimet.Çmimi SI Çmimi
NGA
Regjistri i Informacionit Çmimet e Nomenklaturës Foto e Çmimeve më të fundit AS
REZULTATET
MAXIMUM (çmimi)
NGA
LlojiNomenklatura

DUKE

Ky operator është i ngjashëm me operatorin WHERE, por përdoret vetëm për funksionet agregate. Fushat e mbetura, përveç atyre të përdorura nga ky operator, duhet të grupohen. Operatori WHERE nuk është i zbatueshëm për funksionet agregate.

Në shembullin e mëposhtëm, çmimet maksimale të një artikulli zgjidhen nëse tejkalojnë 1000, të grupuara sipas llojit të artikullit.

ZGJIDHNI

MAX (Çmimi.Çmimi) SI Çmimi
NGA
Regjistri i Informacionit Çmimet e Nomenklaturës Foto e Çmimeve më të fundit AS
GRUP NGA
Çmimet.Nomenklatura.Lloji i Nomenklaturës
DUKE
MAXIMUM(Çmimet.Çmimi) > 1000

NDAJ SIPAS

Operatori ORDER BY rendit rezultatin e një pyetjeje. Për të siguruar që regjistrimet të shfaqen në një rend të qëndrueshëm, përdoret AUTO ORDER. Llojet primitive renditen sipas rregullave të zakonshme. Llojet e referencës renditen sipas GUID.

Një shembull i marrjes së një liste punonjësish të renditur sipas emrit:

ZGJIDHNI
Punonjësit.Emri AS Emri
NGA
Drejtoria.Punonjësit SI Punonjësit
NDAJ SIPAS
Emri
AUTO POROSI

Konstruksione të tjera të gjuhës së pyetjeve 1C

  • KOMBINOHET– rezultatet e dy pyetjeve në një.
  • KOMBINON GJITHÇKA– e ngjashme me COMBINE, por pa grupuar rreshta identikë.
  • TABELA E zbrazur– nganjëherë përdoret kur bashkohen pyetjet për të specifikuar një tabelë të mbivendosur bosh.
  • VENDI– krijon një tabelë të përkohshme për të optimizuar pyetjet komplekse 1C. Kërkesa të tilla quhen kërkesa grupore.

Veçoritë e gjuhës së pyetjes

  • SUBSTRING shkurton një varg nga një pozicion i caktuar në një numër të caktuar karakteresh.
  • VITI...I DYTI ju lejon të merrni vlerën e zgjedhur të një lloji numerik. Parametri i hyrjes është data.
  • FILLIMI I PERIUDHËS dhe FUNDIMI I PERIUDHËS përdoret kur punoni me datat. Lloji i periudhës (DITA, MUAJ, VIT, etj.) tregohet si një parametër shtesë.
  • ADDKDATE ju lejon të shtoni ose zbrisni një orë të caktuar të një lloji të caktuar nga një datë (SECOND, MINUTE, DAY, etj.).
  • NDRYSHON përcakton diferencën midis dy datave, duke treguar llojin e vlerës së prodhimit (DITA, VITI, MUAJ, etj.).
  • ISNULL zëvendëson vlerën që mungon me shprehjen e specifikuar.
  • PERFAQESIMI dhe PERFAQESIMI LIDHJE merrni një paraqitje të vargut të fushës së specifikuar. Zbatoni për çdo vlerë dhe vetëm vlerat e referencës, përkatësisht.
  • LLOJI, LLOJI VLERAT përdoren për të përcaktuar llojin e parametrit të hyrjes.
  • LIDHJEështë një operator logjik i krahasimit për llojin e vlerës së atributit.
  • EXPRESS përdoret për të kthyer një vlerë në llojin e dëshiruar.
  • DATA KOHA merr një vlerë të tipit "Date" nga vlerat numerike(Viti, Muaji, Dita, Ora, Minuta, Sekonda).
  • KUPTIMI në një kërkesë 1C përdoret për të treguar vlerat e paracaktuara - drejtoritë, numërimet, planet për llojet e karakteristikave. Shembull përdorimi: " Ku Individ Ligjor = Vlera (Numërim. Individ ligjor. Individual)«.

Ndërtues i pyetjeve

Për të krijuar pyetje me 1C ekziston një mekanizëm shumë i përshtatshëm i integruar - projektuesi i pyetjeve. Ai përmban skedat kryesore të mëposhtme:

  • "Tabelat dhe fushat" - përmban fushat që duhet të zgjidhen dhe burimet e tyre.
  • "Lidhjet" - përshkruan kushtet për strukturën LIDHJE.
  • "Grupimi"-përmban një përshkrim të strukturave të grupimit dhe fushave të përmbledhura bazuar në to.
  • "Kushtet" - është përgjegjës për zgjedhjen e të dhënave në kërkesë.
  • "Advanced" - parametra shtesë të pyetjes, të tilla si fjalë kyçe për komandën "SELECT", etj.
  • "Bashkime/Aliases" - tregohen mundësitë e bashkimit të tabelave dhe specifikohen pseudonimet (konstrukti "SI").
  • "Urdhri" është përgjegjës për renditjen e rezultatit të pyetjeve.
  • "Totals" - e ngjashme me skedën "Grupimi", por përdoret për konstruktin "TOTALS".

Vetë teksti i kërkesës mund të shihet duke klikuar në butonin "Kërkesë" në këndin e poshtëm të majtë. Në këtë formë, ai mund të korrigjohet me dorë ose të kopjohet.


Kërkesë konsol

Për të parë shpejt rezultatin e një pyetjeje në modalitetin "Enterprise" ose për të korrigjuar pyetjet komplekse, përdorni . Ai përmban tekstin e kërkesës, vendos parametrat dhe shfaq rezultatin.

Ju mund të shkarkoni tastierën e pyetjeve në diskun ITS ose nëpërmjet .

Kujdes! Ky është një version hyrës i mësimit, materialet e të cilit mund të jenë të paplota.

Hyni në sit si student

Identifikohu si student për të aksesuar materialet shkollore

Gjuha e pyetjes 1C 8.3 për programuesit fillestar: lidhjet

Bashkohet në pyetje

Bashkimi është një nga operacionet më të rëndësishme dhe më të nevojshme të kryera nga sistemet e menaxhimit të bazës së të dhënave relacionale.

Lidhjet janë përdorur për të vargjet e ndeshjes një tabelë në rreshtat e një tabele tjetër.

Për të kuptuar nevojën për lidhje, le të zgjidhim problemin e mëposhtëm.

Ne kemi një direktori në bazën tonë të të dhënave Klientët:

Drejtoria Ngjyrat:

Dhe një libër referimi Shoqatat:

Detyra jonë është të nxjerrim shoqatat e preferuara të klientëve bazuar në ngjyrën.

Kështu, për Natashën, bari do të jetë shoqata e saj e preferuar, pasi ngjyra e saj e preferuar është jeshile. Dhe për Pjetrin - dielli. Po lexoni një version provë të mësimit, mësimet e plota janë të disponueshme.

Për Andrey nuk ka fare lidhje të përshtatshme, pasi ngjyra e tij e preferuar është e kuqja, dhe nuk ka shoqata të kuqe në bazën e të dhënave.

Ne do ta zgjidhim problemin gradualisht.

Ne fillim ne do të pyesim të gjithë klientët dhe ngjyrat e tyre të preferuara:

Pastaj kërkojnë të gjitha shoqatat dhe ngjyrat e tyre:

Nëse përpiqemi të ekzekutojmë këtë kërkesë, do të marrim një gabim:

Arsyeja e gabimit është se fusha Emri i pranishëm në të dyja tabelat njëherësh ( Klientët Dhe Shoqatat) dhe sistemi thjesht nuk e njeh fushën nga cila tabelë do të thotë.

Për të eleminuar paqartësi të tilla gjatë marrjes së mostrave nga më shumë se një tabelë, është e zakonshme të tregohet emrat e plotë të fushave. Emri i plotë i fushës përfshin emrin e plotë të tabelës (për shembull, Drejtoria.Klientë) dhe emrin e vetë fushës (për shembull, Emri).

Pra, emri i plotë i fushës është Emri nga tavolina Klientët do Drejtoria.Klientët.Emri.

Dhe emrin e plotë të fushës Emri nga tavolina Shoqatat do Drejtoria.Asociacionet.Emri.

Lidhja e kryqëzuar

Le të rishkruajmë pyetjen e mëparshme me emrat e plotë të fushave:

Ne sapo kemi prodhuar lidhje kryq dy tavolina. Kushtojini vëmendje mënyrës se si u formua rezultati:

Bashkimi i brendshëm

Natyrisht, rezultati i një ndërlidhjeje të dy tabelave nuk është një zgjidhje për problemin tonë. Nuk na duhen të gjitha shënimet nga kryqi që bashkohen, por vetëm ato fushat e të cilëve Ngjyra e preferuar Dhe Ngjyrë kanë të njëjtin kuptim:

Për të marrë këto regjistrime, shtoni një seksion në kërkesën e mëparshme KU:

Kjo është ajo që na duhet - ne e kemi zgjidhur problemin!

Në pyetjen e fundit kemi përdorur një bashkim kryq me një kusht shtesë (në seksion KU). Po lexoni një version provë të mësimit, mësimet e plota janë të disponueshme. Një lidhje e tillë quhet e brendshme.

Ekziston një mënyrë tjetër për të shkruar të njëjtën gjë bashkim i brendshëm:

Krahasoni këtë dhe kërkesën e mëparshme. Ato janë saktësisht të njëjta nga pikëpamja e platformës, thjesht kanë sintaksë të ndryshme. Si ky, ashtu edhe pyetja e mëparshme përmbajnë një bashkim të brendshëm të tabelës Klientët me tavolinë Shoqatat sipas fushave Ngjyra e preferuar Dhe Ngjyrë përkatësisht.

Lidhja e majtë

Ju lutemi vini re se rezultati i bashkimit të brendshëm nuk përfshinte Andrey. Dhe gjithçka sepse ngjyra e tij e preferuar është e kuqja, dhe ne nuk kemi fare lidhje të kuqe në bazën tonë të të dhënave.

Rezulton se për Andrey me ngjyrën e tij të kuqe thjesht nuk kishte asnjë ndeshje nga tabela e shoqërimit.

Le të rishkruajmë pyetjen në mënyrë që rezultati të përfshijë ato regjistrime nga tabela e parë për të cilat nuk u gjetën çifte nga tabela e dytë (në këtë rast Andrey):

Kjo lidhje quhet majtas bashkohu.

Rrezultati i bashkimit të majtë përfaqëson: çdo gjë të dhënat nga bashkimi i brendshëm PLUS gjithçka të dhënat nga tabela e parë, nuk përfshihet në të brendshme

Lidhja e duhur

Por le të kthehemi përsëri te bashkimi i brendshëm:

Vini re se rezultati i bashkimit të brendshëm nuk përmban lidhjen Bora e bardhë, pasi nuk kishte asnjë klient të vetëm që ngjyra e preferuar ishte e bardha.

Le ta rishkruajmë pyetjen në mënyrë që rezultati të përfshijë ato regjistrime nga tabela e dytë për të cilat nuk u gjetën çifte nga tabela e parë (në këtë rast, bora e bardhë):

Kjo lidhje quhet lidhjen e duhur.

Rezultati i bashkimit të djathtëështë: PLUS gjithçka të dhënat nga tabela e dytë, nuk përfshihet në të brendshme lidhje (për të cilën nuk u gjet asnjë çift).

Lidhje e plotë

Por çka nëse na duhet që rezultati i pyetjes të përfshihet përveç bashkimit të brendshëm Andrey Dhe borë njëkohësisht?

Për ta bërë këtë, do t'ju duhet të kombinoni rezultatet e bashkimeve majtas dhe djathtas. Ky lloj lidhjeje tashmë është shpikur dhe quhet lidhje e plotë:

Rezultati i lidhjes së plotë përfaqëson një: të gjitha regjistrimet nga bashkimi i brendshëm PLUS të gjitha rekordet nga tabela e parë që nuk janë përfshirë në të brendshme lidhje (për të cilën nuk u gjet asnjë çift) PLUS të gjitha rekordet nga tabela e dytë që nuk përfshihen në të brendshme lidhje (për të cilën nuk u gjet asnjë çift).

Pseudonimet e tabelës

Pajtohem që të gjitha pyetjet që kemi shkruar në këtë mësim duken mjaft të vështira. Kjo për faktin se jemi të detyruar të tregojmë emrat e plotë fusha për të shmangur paqartësitë.

Për të shkurtuar emrin e plotë të tabelës (për shembull, Drejtoria.Klientë) lejohet (si dhe për vetë fushat) përdorimi i pseudonimeve.

Le të rishkruajmë pyetjen e fundit në mënyrë që kur të gjenerojmë emrat e fushave të plota në vend të Drejtoria.Klientë ju mund të përdorni një pseudonim TE, dhe në vend të kësaj Drejtoria.Shoqatat- pseudonim A:

Dhe për ta bërë rezultatin e pyetjes edhe më të qartë, le të shtojmë pseudonime për fushat që kemi parë tashmë në një nga mësimet e mëparshme:

Trajtimi NULL

Shikoni më nga afër rezultatet e pyetjes së fundit (si dhe shumë të mëparshme në këtë mësim).

Cilat janë vlerat e fushës? Shoqata Dhe Ngjyra e saj për rreshtin e parë? Çfarë mund të thoni për fushat? Klienti Dhe Ngjyra e saj për rreshtin e fundit?

Ata janë të barabartë I PAVLEFSHËM, që, siç e dimë tashmë, nënkupton mungesën e ndonjë kuptimi:

Dhe që nga ajo kohë I PAVLEFSHËM nënkupton mungesën e një vlere, pastaj çdo përpjekje për të kryer ndonjë operacion me të (krahasim, shtim...) do të shkaktojë sjellje të padefinuar të bazës së të dhënave, një gabim të paparashikueshëm.

Kjo është arsyeja pse përpunimi i vlerave konsiderohet i detyrueshëm I PAVLEFSHËM sa herë që mund të lindin.

Ajo që nënkuptojmë me përpunim është se duhet të themi në kërkesën tonë se nëse njëra nga fushat është e barabartë me I PAVLEFSHËM, atëherë një vlerë tjetër duhet të zëvendësohet në këtë fushë.

Në këtë rast, për fushat Klienti Dhe Shoqata në rast zbulimi I PAVLEFSHËM ne do të zëvendësojmë vargun bosh "".

Dhe këtu janë fushat Ngjyra e saj Dhe Ngjyra e saj janë lidhje me elementet e drejtorisë Ngjyrat, prandaj, vetëm vlerat që janë referenca të llojeve të specifikuara mund të zëvendësohen në to. Çdo lloj reference (si p.sh. Drejtoria ose Dokumenti) ka një element të paracaktuar EmptyLink. Për të treguar vlerën e tij në kërkesë, ne do të përdorim funksionin KUPTIMI.

Për të përcaktuar se çfarë është në fushë I PAVLEFSHËM Ne do të përdorim një funksion tashmë të njohur për ne nga mësimet e mëparshme ISNULL:

SELECT ISNULL( K. Emri, "" ) AS Klient, ISNULL( K. Ngjyra e preferuar, VLERË (Direktori. Ngjyrat. EmptyLink) ) AS ItsColor, ISNULL( A. Emri, "" ) AS Association, ISNULL( A. Ngjyra, VLERA (Direktori. Ngjyrat. EmptyLink) ) AS është HerColor NGA Drejtoria. Klientët SI TË PLOTËSOJMË Drejtorinë e LIDHJEVE. Shoqatat AS A NGA K. Ngjyra e preferuar = A. Ngjyra

Në pamje (nga tastiera e pyetjeve) rezultati nuk ka ndryshuar. Ne ende shohim fusha boshe. Por kjo është vetëm sepse përfaqësimet e vargjeve kanë I PAVLEFSHËM dhe fushat boshe të të gjitha llojeve janë të njëjta dhe të barabarta me vargun bosh.

Në fakt, këto fusha boshe nuk ekzistojnë më I PAVLEFSHËM(pa vlere) , Tani ata kanë vlera (boshe) me të cilat mund të punoni tashmë (të kryeni operacione).

Mos harroni, një vlerë boshe dhe pa vlerë janë dy gjëra shumë të ndryshme.

Bashkimi i më shumë se dy tabelave

Ju mund të bashkoni në mënyrë sekuenciale sa më shumë tabela që dëshironi.

Supozoni se duhet të zgjidhim problemin e mëposhtëm. Po lexoni një version provë të mësimit, mësimet e plota janë të disponueshme. Nxjerr të gjitha opsionet e mundshme të klientëve dhe shoqërive të tyre të preferuara dhe produkteve të tyre të preferuara bazuar në ngjyrën e tyre të preferuar.

Për ta bërë këtë, le ta lidhim tabelën në mënyrë sekuenciale sipas ngjyrës Klientët me tavolinë Shoqatat dhe më pas (rezultati që rezulton) me tabelën Ushqimi:

Merrni testin

Filloni testin

1. Lidhjet janë përdorur për të

; Pyetjet e mbivendosura (në zhvillim).

Detyra nr. 1: përdorni një pyetje për të zgjedhur të gjitha dokumentet e postuara Shitjet e mallrave dhe shërbimeve,

Shpjegim: konfigurimet Kontabiliteti 2.0 / 3.0 Implementimi nuk ruan një lidhje me faturën e lëshuar. Lidhja midis këtyre dokumenteve është e kundërt: në faturë (në detaje Një bazë dokumentesh) ruhet një referencë për zbatimin me të cilin lidhet. Kështu, për të kuptuar se cilat zbatime nuk kanë fatura, do t'ju duhet të përdorni dy tabela në pyetje: Shitjet e mallrave dhe shërbimeve Dhe Fatura e lëshuar.

Detyra nr. 2: le të themi në bazën e të dhënave të drejtorisë Kontratat e palëve informacion shtesë të krijuar Shtyrja(Regjistri i vendndodhjes së ruajtjes informacion shtese). Përdorni një pyetje për të zgjedhur të gjitha marrëveshjet e palës tjetër të specifikuar me një vonesë nga 0 deri në 10 ditë.

Shpjegim: në këtë detyrë do të ishte e mundur të bëhej pa përdorur dy tabela, nëse jo për një kusht: zgjedhjen e kontratave me zero shtyrje. Çështja është se në regjistër informacion shtese Vlerat boshe për informacion shtesë nuk ruhen, kështu që nuk do të ketë hyrje për shtyrje zero atje. Prandaj, do t'ju duhet ta bashkëngjitni këtë regjistër në drejtori Kontratat e palëve, nëse nuk ka regjistrim me shtyrje për asnjërën nga kontratat, atëherë është zero.

Skeda të reja: Lidhjet

Mekanizma të rinj: kontrollimi i kërkesës null në 1C.

Pjesa teorike e mësimit nr.3

Nëse një pyetje 1C përdor vetëm një tabelë, atëherë të dhënat merren vetëm prej saj. Por nëse ju duhet të zgjidhni të dhëna nga tabela të shumta, atëherë duhet të vendosni marrëdhënie midis këtyre tabelave. Marrëdhëniet janë të nevojshme në mënyrë që të krahasohen rreshtat e një tabele të bazës së të dhënave me rreshtat e një tabele tjetër dhe kështu të merret, kur formohet një pyetje, një tabelë përfundimtare që do të përmbajë të dhënat e nevojshme nga të gjitha tabelat e pyetjeve.

Çdo marrëdhënie specifike është konfiguruar midis dy tabelave, njëra prej tyre quhet Majtas, të tjera E drejta. Ekzistojnë tre lloje të lidhjeve:

  • BASHKIMI I BRENDSHËM- një rekord nga tabela e majtë do të shfaqet në rezultatin e pyetjes vetëm nëse plotësohet kushti i lidhjes, një rekord nga tabela e djathtë do të shfaqet në rezultatin e pyetjes vetëm nëse plotësohet kushti i lidhjes;
  • LIDHJA E MIRË- Një rekord nga tabela e majtë do të përfshihet në rezultatin e pyetjes në çdo rast, një rekord nga tabela e djathtë do të përfshihet në përzgjedhje vetëm nëse plotësohet kushti i lidhjes. Analogu i së majtës është BASHKOHUNI DREJTË të dhënat nga tabela e djathtë përfshihen në rezultat në çdo rast, të dhënat nga tabela e majtë vetëm nëse plotësohet kushti. Zakonisht kur shkruani një pyetje përdoret Lidhja e majtë, nëse përdorni të drejtën, herën tjetër që hapni pyetjen, projektuesi i pyetjes do ta konvertojë atë në të majtën, duke ndërruar tabelat;
  • LIDHJE E PLOTË- një rekord nga tabela e majtë do të shfaqet së pari në rezultatin e pyetjes në çdo rast, pastaj vetëm nëse plotësohet kushti i lidhjes, një rekord nga tabela e djathtë do të shfaqet së pari në rezultatin e pyetjes në çdo rast, pastaj vetëm nëse kushti i lidhjes plotësohet. Në këtë rast, rreshtat e kopjuar që rezultojnë përjashtohen nga kampioni.

Në teori, bashkimi i tabelave të pyetjeve është mjaft i vështirë për t'u kuptuar për një programues të patrajnuar 1C, por kur studioni shembujt, të gjitha pikat e paqarta do të bëhen më të qarta.

Skeda Marrëdhëniet në Query Designer

Në projektuesin e pyetjeve, shkoni te skeda Lidhjet. Është një tabelë në të cilën krijohet numri i nevojshëm i lidhjeve për të gjitha çiftet e ndryshme të tabelave. Ju mund të shtoni, fshini, kopjoni dhe ndryshoni lidhjet duke përdorur butonat e vendosur sipër tabelës (ne nuk do ta analizojmë secilën në detaje).

Pasi të keni shtuar një lidhje të re, duhet të plotësoni të gjitha kolonat e tabelës. Le të shohim secilën kolonë të tabelës së lidhjes:

  • Tabela 1. Tabela e majtë e komunikimit zgjidhet në këtë kolonë. Mund të përdorni vetëm tabela të zgjedhura në skedë Tabelat dhe fushat;
  • Të gjitha. Flamuri në këtë kolonë vendoset nëse duhet të zgjidhni të gjitha të dhënat për tabelën e majtë (për Majtas ose Plot lidhjet);
  • Tabela 2. Në këtë kolonë zgjidhet tabela e duhur e lidhjes;
  • Të gjitha. Flamuri në këtë kolonë vendoset nëse duhet të zgjidhni të gjitha të dhënat për tabelën e duhur (për E drejta ose Plot lidhjet);
  • falas. Flamuri me të cilin mund të kaloni në modalitetin e redaktimit manual të gjendjes së lidhjes;
  • Gjendja e lidhjes. Një kusht në një gjuhë pyetëse, i ngjashëm me kushtet e diskutuara në . Është një shprehje që duhet të kthejë gjithmonë një nga dy vlerat: E vërtetë ose Gënjeshtra. Në mënyrë tipike, një kusht lidhjeje përbëhet nga tre pjesë:
    • Ana e majte. Zakonisht një fushë në tabelën e majtë, por mund të jetë gjithashtu një fushë në tabelën e djathtë ose një parametër (vetëm në modalitetin e redaktimit të kushteve të personalizuara);
    • Operatori i krahasimit. Si parazgjedhje, "=", "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • Pjesa e djathtë. Zakonisht një fushë në tabelën e djathtë, por mund të jetë gjithashtu një fushë në tabelën e majtë ose një parametër (vetëm në modalitetin e redaktimit të kushteve të personalizuara);

Plotësimi dhe redaktimi Kushtet e komunikimit, e ngjashme me modifikimin e një kushti të rregullt të diskutuar në mësimin e fundit, me përjashtim që si parazgjedhje, nuk specifikohet një parametër në pjesën e djathtë të kushtit, por një fushë në tabelën e duhur. Në modalitetin e lirë, është gjithashtu i disponueshëm një redaktues i shprehjes së lirë.

Pjesa praktike e mësimit nr.3

Le të shohim zgjidhjen e problemeve të dhëna në fillim të mësimit.

Detyra nr. 1

Zgjidhni të gjitha dokumentet e postuara me një pyetje Shitjet e mallrave dhe shërbimeve, për periudhën e caktuar, për të cilën nuk është krijuar faturë.

  • Le të krijojmë një kërkesë të re;
  • Le të zgjedhim tabelat Shitjet e mallrave dhe shërbimeve Dhe Fatura e lëshuar nga filli Dokumentacioni;
  • Nga tavolina Shitjet e mallrave dhe shërbimeve zgjidhni një fushë Lidhje;
  • Le të shkojmë te skeda Kushtet;
  • Në kapitull Fushat, le të hapim temën Shitjet e mallrave dhe shërbimeve duke përdorur butonin "+";
  • Le të gjejmë rekuizitat datë dhe tërhiqeni në seksionin e kushteve, zgjidhni operatorin e krahasimit Ndërmjet dhe tregoni parametrat për fillimin dhe fundin e periudhës, për shembull Fillimi i periudhës Dhe Fundi i Periudhës;
  • Nga seksioni Fushat le të tërhiqni rekuizitat Drejtuar, vendosni një flamur në vijën me kushtin falas dhe fshini pjesën shtesë të kushtit "= &Kaluar";
  • Le të shkojmë te skeda Komunikimet;
  • Le të krijojmë një lidhje të re duke përdorur butonin "Shto";
  • Në fushë Tabela 1 zgjidhni një tabelë Shitjet e mallrave dhe shërbimeve(kjo do të jetë tabela e majtë) ;
  • Për të zgjidhur saktë problemin, duhet të marrim të gjitha implementimet, t'u bashkëngjitni fatura dhe nëse fatura nuk gjendet, të shfaqim zbatimin si rezultat i kërkesës. Le ta ndajmë këtë detyrë në dy nën-detyra:
    • Le të zgjedhim të gjitha shitjet dhe, duke përdorur lidhjen, të përpiqemi të gjejmë faturën e tyre;
    • Duke përdorur kushtin, do të zgjedhim vetëm ato linja ku nuk ka faturë;
  • Nga paragrafi i mëparshëm rrjedh se duhet të përdorim Lidhja e majtë, në mënyrë që të zgjidhni të gjitha implementimet. Prandaj, le të vendosim një flamur në kolonë Të gjitha
  • Në fushë tabela 2 zgjidhni një tabelë Fatura e lëshuar(kjo do të jetë tabela e duhur);
  • Meqenëse lidhja me zbatimin ruhet në detajet e faturës D Baza e Dokumentit, në gjendjen e lidhjes zgjedhim:
    • Në anën e majtë të fushës Shitjet e mallrave dhe shërbimeve;
    • Në anën e djathtë të fushës: FaturëFatura e lëshuar.Baza e Dokumentit.
  • Konfigurimi i lidhjes ka përfunduar;

Me një bashkim majtas, nëse për një rresht të tabelës së majtë nuk ka asnjë rresht të vetëm të tabelës së djathtë që plotëson kushtet e lidhjes, të gjitha fushat e tabelës së djathtë djathtas për një rresht të caktuar të tabelës së majtë kanë vlerën I PAVLEFSHËM. Le ta përdorim këtë për të zgjedhur vetëm ato rreshta të tabelës së majtë për të cilat nuk ka faturë;

Gjuha e pyetjeve 1C ka një operator të veçantë logjik që ju lejon të kontrolloni nëse një fushë përmban një vlerë I PAVLEFSHËM, sintaksa e saj <Поле>ËSHTË NULL. Ai kthen një vlerë E vërtetë nëse fusha ka një vlerë I PAVLEFSHËM Dhe Gënjeshtra- në rastin e kundërt.

Vini re se kontrolloni vlerën e fushës nga I PAVLEFSHËMështë e mundur vetëm duke përdorur funksionin e specifikuar, ndërtimin <Поле>= NULL Ky kontroll nuk do të jetë i mundur.

  • Le të shkojmë te skeda Kushtet;
  • Tërhiqni një nga fushat e tabelës në seksionin e kushteve Fatura e lëshuar, për shembull fushë Lidhje;
  • Vendosni një flamur në rresht falas dhe shtoni operatorin pas fushës ËSHTË NULL, pasi të keni fshirë më parë pjesën e panevojshme të gjendjes;

Kërkesë = Kërkesë e re; Request.SetParameter ("StartPerid" , StartPerid); Request.SetParameter ("Fundi i periudhës", Fundi i periudhës); Kërkesë.Text = "ZGJIDH | Shitjet e Mallrave dhe Shërbimeve. Lidhje | NGA | Dokumenti. Shitjet e Mallrave dhe Shërbimeve SI Shitjet e Mallrave dhe Shërbimeve | Dokumenti i LIDHJES LEFT. Faturë e lëshuar SI Faturë e lëshuar | Shitjet e softuerit të mallrave dhe shërbimeve. Lidhje = Lëshimi i faturës. Baza e dokumentit | KU | Shitjet e Mallrave dhe Shërbimeve. Data MES & Fillimit të Periudhës Dhe & Fundit të Periudhës | Dhe Shitjet e Mallrave dhe Shërbimeve. Kryer | DHE Lëshimi i faturës. Referenca ËSHTË NULL";

Detyra nr. 2

  • Le të krijojmë një kërkesë të re;
  • Le të hapim projektuesin e pyetjeve;
  • Në skedën Tabelat dhe fushat Le të zgjedhim dy tabela: Kontratat e Kundërpalëve nga filli Drejtoritë Dhe Informacion shtese nga filli Regjistrat e Informacionit;
  • Nga tavolina Kontratat e Kundërpalëve zgjidhni një fushë Lidhje;

Sipas kushtit, rezultati i kërkesës duhet të përfshijë kontrata të vetëm një pale, vlera e të cilave do t'i kalojë kërkesës duke përdorur një parametër. Kundërpala së cilës i përket kontrata ruhet në terren Pronari drejtoria Kontratat e palëve.

  • Le të shkojmë te skeda Kushtet. Nga tavolina Kontratat e Kundërpalëve zhvendoseni fushën në seksionin e kushteve Pronari. Në anën e djathtë të kushtit, ne do të vendosim emrin e parametrit në të cilin do të transferojmë palën tjetër që na nevojitet, le ta quajmë atë Kundërpartia;
  • Ne gjithashtu do ta ndajmë detyrën e zgjedhjes së kontratave me vonesa nga 0 në 10 në dy nëndetyra:
    • Le të zgjedhim të gjitha kontratat dhe, duke përdorur lidhjet, të përpiqemi të gjejmë shtyrjet e tyre;
    • duke përdorur kushtin, do të zgjedhim vetëm kontratat me shtyrjet që na duhen;
  • Le të vendosim lidhjet ndërmjet kontratave dhe informacioneve shtesë. Le të shkojmë te skeda Lidhjet dhe të shtojmë një lidhje të re;
  • Në fushë Tabela 1 zgjidhni një tabelë Kontratat e Kundërpalëve(kjo do të jetë tabela e majtë);
  • Meqenëse na duhen të gjitha kontratat, do t'i përdorim Lidhja e majtë. Le të vendosim një flamur në kolonën Të gjitha, që i përket tabelës së majtë;
  • Në fushë tabela 2 zgjidhni një tabelë Informacion shtese(kjo do të jetë tabela e duhur);
  • Meqenëse referenca e kontratës ruhet në dimension Nje objekt regjistri i informacionit Informacion shtese, në gjendjen e lidhjes zgjedhim:
    • Në anën e majtë të fushës Kontratat e kunderpaleve.Lidhje;
    • Le të lëmë operatorin standard të krahasimit "=";
    • Në anën e djathtë të fushës: Informacion shtesë.Objekt.

Ne kemi shtuar një lidhje me të cilën do të zgjedhim të gjitha shtesë. informacion për çdo kontratë. Por pasi na duhet vetëm një shtesë. perzierje - Shtyrja, duhet të shtojmë edhe një lidhje. Në këtë rast Shtyrjaështë një pronë shtesë. Pronat shtesë janë të llojit Plani i llojeve të karakteristikave Detaje dhe informacione shtesë. Në regjistër Informacion shtese vlerë shtesë vetitë ruhen në dimension Prona. Kështu, ne duhet të shtojmë një marrëdhënie që kufizon informacionin shtesë vetëm në pronën Deferral.

  • Le të shtojmë një lidhje të re;
  • Në fushë Tabela 1 zgjidhni një tabelë Kontratat e Kundërpalëve;
  • Është e rëndësishme të dini se nëse keni lidhje të shumta në të njëjtën palë tabela, atëherë duhet të përdorni të njëjtin lloj bashkimi për to. Në rastin tonë, kjo është Lidhja e majtë. Prandaj, le të vendosim një flamur në kolonë Të gjitha, që ka të bëjë me tabelën e majtë;
  • Në fushë tabela 2 zgjidhni një tabelë Informacion shtese;
  • Në kushtin e relacionit nuk do të kemi nevojë të përdorim fushën e tabelës së majtë, përkundrazi do të vendosim një kusht në dimension Prona, duke e barazuar atë me shtesë. prone Shtyrja, e cila do t'i kalohet kërkesës duke përdorur parametrin;
  • Le të vendosim flamurin falas në kuptim E vërtetë dhe shkruani manualisht tekstin e gjendjes vijuese: “Informacion Shtesë. Pronë = &PropertyDelay”;

  • Konfigurimi i lidhjes ka përfunduar;

Tani mbetet vetëm vendosja e një kushti për masën e shtyrjes. Meqenëse ne përdorim intervalin nga 0 në 10, do të jetë e nevojshme të përdorim operatorin e krahasimit ndërmjet. Meqenëse prapambetja zero nuk ruhet në informacione shtesë, kur lidhet në këtë rast, të gjitha fushat e regjistrit do të kthejnë vlerën I PAVLEFSHËM. Për të zëvendësuar vlerën në një gjendje I PAVLEFSHËM në 0, ne do të përdorim funksionin e gjuhës së pyetjes ISNULL(<Выражение1>, <Выражение2>) . Funksioni kthehet Shprehja 1, nëse nuk është e barabartë I PAVLEFSHËM Dhe Shprehja 2 ndryshe.

  • Le të shkojmë te skeda Kushtet pyetni projektuesin dhe shtoni një kusht të ri;
  • Le të vendosim një flamur në të falas dhe shkoni te redaktori i shprehjes së lirë;
  • Në seksionin e funksioneve të gjuhës së pyetjes do të zgjerojmë degën Funksionet -> Funksionet e tjera;
  • Le të tërhiqni një funksion në seksionin e shprehjeve ISNULL;
  • Pas konstruksionit që rezulton, ne do të fusim operatorin e krahasimit Between dhe do të vendosim intervalin: 0 dhe 10;
  • Klikoni OK, kushti është gati;

Gjëja e fundit që duhet të bëni është të shfaqni vlerën e shtyrjes në fushat e kërkesës. Në mënyrë që në vend të I PAVLEFSHËM u shfaq vlera 0, ne përdorim gjithashtu redaktorin e shprehjes së lirë dhe funksionin ISNULL.

  • Le të shkojmë te skeda Tabelat dhe fushat dhe shtoni një fushë të re;
  • Në redaktuesin e shprehjes së lirë që hapet, zgjidhni funksionin ISNULL;
  • Në vend të Shprehjes 1, futni fushën AdditionalInformation.Value dhe në vend të Shprehjes 2, futni 0;
  • Klikoni OK, fusha është gati;

Si rezultat, ne do të marrim një kërkesë me tekstin e mëposhtëm:

Kërkesë = Kërkesë e re; Query.SetParameter ("PropertyDelay", PropertyProperty); Request.SetParameter ("Llogaria", Llogaria); Query.Text = "ZGJIDH | Marrëveshjet e kundërpalës. Lidhje, | ISNULL(Informacion Shtesë. Vlera, 0) AS Fusha1 | NGA | Drejtoria. Marrëveshjet e palëve AS Marrëveshjet e kundërpalës | Regjistrohu i informacionit të bashkuar. Lidhja = Informacion shtesë. Objekti | DHE (Informacion Shtesë. Pronë = &PropertyDelay) | KU |Marrëveshjet e kundërpalës. Pronari = &Kundërpala | DHE ISNULL(Informacion Shtesë. Vlera, 0) MES 0 DHE 10";

Lexoni gjithashtu artikuj rreth gjuhës së pyetjeve 1C 8.

Kur duam të shohim të dhëna nga disa tabela në të njëjtën kohë, d.m.th. për të mbledhur disa tabela në një, lind koncepti i lidhjes së tabelave dhe marrëdhënieve ndërmjet tyre. Ekzistojnë katër lloje të lidhjeve:

  • majtas;
  • drejtë,
  • e brendshme;
  • i plotë.

Ne do të shikojmë çdo lloj duke përdorur një shembull abstrakt. Ka 2 tabela, në të parën ruajmë informacion përshkrues për artikullin, në të dytën për bilancet e tij:

Për të marrë një nga këto tabela, duhet të tregojmë në mënyrë të qartë se cilat fusha do të lidhim, me çfarë kushti dhe lloji. Tani do të bëhet më e qartë.

Lidhja e majtë

Duke përdorur një bashkim majtas, i themi sistemit se si rezultat duam të shohim të gjitha regjistrimet nga tabela e majtë dhe të dhënat nga e djathta që plotësojnë kushtin e lidhjes. Supozoni se lidhim tabelat nga fusha e produktit me kushtin e barabartë, atëherë do të marrim një tabelë si:

Kërkesa.Teksti =
"ZGJIDH
| Nomenklatura.Produkti,
| Nomenklatura.Ngjyra ASNgjyraNomenklatura,
| Mbetet.Ngjyra AS Ngjyra Mbetet,
| Bilancet.Sasia
|NGA

";

Nuk kishte përputhje për karrigen nga tabela e mbetjeve, kështu që fushat u mbushën me vlera NULL, të cilat duhet të përpunohen nga funksioni ISNULL, shih 1C 8 Funksionet e gjuhës së pyetjes.

Lidhja e majtë funksionon përafërsisht si një lak brenda një cikli - merr regjistrimin e parë nga tabela e majtë dhe kalon nëpër të gjitha rekordet nga tabela e djathtë për të siguruar që kushti i lidhjes është i kënaqur. Pastaj rekordi i dytë merret nga tabela e majtë, e kështu me radhë. Nëse papritmas disa rekorde nga tabela e djathtë plotësojnë kushtin e lidhjes, atëherë në tabelën që rezulton do të shtohen disa rreshta (sipas numrit të lidhjeve të suksesshme) Siç mund ta shohim, tabela që rezulton nuk është informative, të dhënat nuk reflektojnë thelbi i vërtetë, kështu që është më mirë t'i lidhni këto tabela me dy fusha: Produkti dhe Ngjyra, vetëm këtë herë do të trajtojmë NULL-të:

Kërkesa.Teksti =
"ZGJIDH
| Nomenklatura.Produkti,
| Nomenklatura.Ngjyra,
| ISNULL (E mbetur. Sasia, 0) AS Sasia
|NGA
| Nomenklatura AS Nomenklatura
| LEFT JOIN Mbetjet AS Mbetjet
| Nomenklatura e softuerit.Produkti = Mbetet.Produkti

Lidhja e duhur

Lidhja e duhur në thelb nuk është e ndryshme nga e majta. Nëse ndërroni tabelat, bashkimi i djathtë do të kthehet në një bashkim majtas; për më tepër, kur përdorni konstruktorin, vetë sistemi i konverton të gjitha bashkimet e djathta në lidhjet e majta.

Bashkimi i brendshëm

Duke përdorur një bashkim të brendshëm, ne i themi sistemit se si rezultat duam të shohim vetëm ato regjistrime që plotësojnë kushtin e lidhjes si nga tabela e djathtë ashtu edhe nga e majta. Kështu, numri i regjistrimeve rezultuese do të jetë më i vogël ose i barabartë me numrin e rekordeve të tabelës më të shkurtër që merr pjesë në bashkim. Le të aplikojmë një bashkim të brendshëm në fushat Produkt dhe Ngjyra të tabelave tona:

Kërkesa.Teksti =
"ZGJIDH
| Nomenklatura.Produkti,
| Nomenklatura.Ngjyra,
| Mbetjet.Sasia AS Sasi
|NGA
| Nomenklatura AS Nomenklatura
| BASHKIMI I BRENDSHËM Mbetjet AS mbetje
| Nomenklatura e softuerit.Produkti = Mbetet.Produkti
| Dhe Nomenclature.Color = Remaining.Color";

Lidhje e plotë

Një bashkim i plotë do të rezultojë në të gjitha regjistrimet nga të dy tabelat, ato rekorde që plotësojnë kushtin e lidhjes do të lidhen, ato rekorde që nuk plotësojnë kushtin e lidhjes do të përfundojnë përsëri në rezultatin e pyetjes, por me disa fusha NULL. I plotë është si lidhjet majtas dhe djathtas në një.

Mund të ketë shumë probleme në këtë temë, le të përpiqemi të zgjidhim një prej tyre. Organizata jonë është një tregtar i 2 fabrikave të mobiljeve: "Zarya" dhe "Rassvet". Asortimenti me koston e secilës prej fabrikave ruhet në tabela të ndryshme. Është e nevojshme të krijohet një listë e vetme çmimesh dhe të përfshihen produktet me çmimin minimal:

Le të aplikojmë një bashkim të plotë me një përzgjedhje të të gjitha fushave, ne do të lidhemi sipas produktit:

Kërkesa.Teksti =
"ZGJIDH
| NomenklaturaZarya.Produkti AS ProduktZarya,
| NomenklaturaZarya.Çmimi SI ÇmimiZarya,
| Nomenklatura Rassvet Produkt AS Produkt Rassvet,
| NomenklaturaRassvet.Çmimi AS ÇmimiRassvet
|NGA

Kjo nuk është saktësisht ajo që na nevojitet, le të kombinojmë fushën e produktit në një dhe të përpunojmë NULL-të:

Kërkesa.Teksti =
"ZGJIDH
//ndërtimi ISNULL u diskutua në seksionin e funksioneve të gjuhës së pyetjes
//nëse çmimi nuk është i përcaktuar, atëherë inicializoni atë
//pse 1000000 shih shpjegimin më poshtë
| ISNULL(NomenklaturaZarya.Çmimi, 1000000) AS PriceZarya,
| ISNULL(NomenklaturaRassvet.Çmimi, 1000000) AS PriceRassvet
|NGA
| NomenklaturaZarya AS NomenklaturaZarya
| LIDHJA E PLOTË NomenklaturaAgimi AS NomenklaturaAgimi
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

E tëra që mbetet është të zgjedhësh çmimin minimal. Teksti përfundimtar i kërkesës do të duket si ky:

Kërkesa.Teksti =
"ZGJIDH
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS Produkt,
| ZGJEDHJA
| KUR KA ISNULL (NomenklaturaZarya.Çmimi, 1000000) > ISNULL(NomenklaturaRassvet.Çmimi, 1000000)
| PASTAJ ISNULL (NomenklaturaRassvet.Çmimi, 1000000)
| ELSE ISNULL (NomenklaturaZarya.Çmimi, 1000000)
| FUNDON SI ÇMIMI
|NGA
| NomenklaturaZarya AS NomenklaturaZarya
| LIDHJA E PLOTË NomenklaturaAgimi AS NomenklaturaAgimi
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

Nëse çmimi nuk është i përcaktuar (NULL), atëherë duhet të inicializohet me ndonjë vlerë, përndryshe operacioni i krahasimit për më shumë/më pak do të dështojë me një gabim. Ne e inicializojmë çmimin me një sasi joreale të madhe që të “humbet” në operacionin e krahasimit, sepse sipas kushteve të problemit zgjedhim çmimin më të ulët.

← Funksionet e gjuhës së pyetjeve 1C 8 | Bashkohet në pyetjet 1C 8 →

Ndani me miqtë ose kurseni për veten tuaj:

Po ngarkohet...