Sujungti užklausos rezultatus. Sujungti užklausos rezultatus Kaip sujungti užklausas į vieną 1c

Užklausos kalba yra vienas iš pagrindinių 1C 8.3 mechanizmų kūrėjams. Naudodami užklausas galite greitai gauti visus duomenų bazėje saugomus duomenis. Jo sintaksė labai panaši į SQL, tačiau yra tam tikrų skirtumų.

Pagrindiniai 1C 8.3 (8.2) užklausų kalbos pranašumai, palyginti su SQL:

  • atskaitos laukų nuorodų panaikinimas (vieno ar kelių taškų nukreipimas į objekto detales);
  • dirbti su rezultatais labai patogu;
  • galimybė kurti virtualias lenteles;
  • prašymas gali būti parašytas tiek anglų, tiek rusų kalbomis;
  • galimybė blokuoti duomenis, kad būtų išvengta aklavietės.

1C užklausos kalbos trūkumai:

  • skirtingai nei SQL, 1C užklausos neleidžia keisti duomenų;
  • saugomų procedūrų trūkumas;
  • negalėjimas konvertuoti eilutės į skaičių.

Pažvelkime į mūsų mini pamoką apie pagrindines 1C užklausų kalbos konstrukcijas.

Atsižvelgiant į tai, kad 1C užklausos leidžia gauti tik duomenis, bet kuri užklausa turi prasidėti žodžiu „SELECT“. Po šios komandos nurodomi laukai, iš kurių reikia gauti duomenis. Jei nurodysite „*“, bus pasirinkti visi galimi laukai. Po žodžio „NUO“ nurodoma vieta, iš kurios bus atrenkami duomenys (dokumentai, registrai, žinynai ir kt.).

Toliau aptariamame pavyzdyje visos nomenklatūros pavadinimai parenkami iš katalogo „Nomenklatūra“. Po žodžio „KAIP“ nurodomi lentelių ir laukų slapyvardžiai (pavadinimai).

PASIRINKTI
Nomenklatūra Pavadinimas AS Nomenklatūros pavadinimas
NUO
Katalogas.Nomenklatūra AS Nomenklatūra

Šalia komandos „SELECT“ galite nurodyti raktinius žodžius:

  • ĮVAIRUS. Užklausoje bus pasirinktos tik eilutės, kurios skiriasi bent vienu lauku (be dublikatų).
  • PIRMOJI n, Kur n– eilučių skaičius nuo rezultato pradžios, kurias reikia pasirinkti. Dažniausiai ši konstrukcija naudojama kartu su rūšiavimu (ORDER BY). Pavyzdžiui, kai reikia pasirinkti tam tikrą skaičių dokumentų, kurie yra naujausi pagal datą.
  • LEIDŽIAMAS. Šis dizainas leidžia iš duomenų bazės pasirinkti tik tuos įrašus, kurie yra prieinami dabartiniam vartotojui. Remiantis šio raktinio žodžio naudojimu, bandydamas pateikti užklausą dėl įrašų, prie kurių neturi prieigos, vartotojas gaus klaidos pranešimą.

Šie raktiniai žodžiai gali būti naudojami kartu arba atskirai.

DĖL POKYČIŲ

Šis pasiūlymas blokuoja duomenis, kad būtų išvengta tarpusavio konfliktų. Užrakinti duomenys nebus nuskaitomi iš kito ryšio, kol nesibaigs operacija. Šiame punkte galite nurodyti konkrečias lenteles, kurias reikia užrakinti. Priešingu atveju visi bus užblokuoti. Dizainas aktualus tik automatiniam užrakinimo režimui.

Dažniausiai, kai gaunami likučiai, naudojama sąlyga „FOR CHANGE“. Juk kai programoje vienu metu dirba keli vartotojai, o vienas gauna likučius, kitas gali juos pakeisti. Tokiu atveju gauta likutis nebebus teisinga. Jei šiuo pasiūlymu blokuosite duomenis, tol, kol pirmasis darbuotojas gaus teisingą likutį ir atliks su juo visas reikalingas manipuliacijas, antrasis darbuotojas bus priverstas laukti.

PASIRINKTI
Tarpusavio atsiskaitymai. Darbuotojas,
Tarpusavio atsiskaitymai Tarpusavio atsiskaitymų suma Likutis
NUO
Kaupimų registras Tarpusavio atsiskaitymai su darbuotojais Likutai AS Tarpusavio atsiskaitymai
DĖL POKYČIŲ

KUR

Dizainas reikalingas tam, kad įkeliami duomenys būtų atrinkti. Kai kuriais atvejais, kai gaunami duomenys iš registrų, tikslingiau virtualių lentelių parametruose nurodyti atrankos sąlygas. Naudojant „WHERE“, pirmiausia išgaunami visi įrašai, o tik tada taikomas pasirinkimas, kuris gerokai sulėtina užklausą.

Žemiau pateikiamas prašymo gauti kontaktinius asmenis konkrečioms pareigoms pavyzdys. Pasirinkimo parametras yra tokio formato: &ParameterName (parametro pavadinimas yra savavališkas).

PASIRINKIMAS (ATVEJIS)

Dizainas leidžia nurodyti sąlygas tiesiogiai užklausos turinyje.

Toliau pateiktame pavyzdyje „Papildomame lauke“ bus tekstas, atsižvelgiant į tai, ar dokumentas paskelbtas, ar ne:

PASIRINKTI
Įėjimo T&U.Link,
PASIRINKIMAS
KADA PriėmimasT&U.Atlikta
TADA „Dokumentas priimtas!
KITA „Dokumentas nebuvo paskelbtas...“
END AS Papildomas laukas
NUO
Dokumentas. Prekių ir paslaugų gavimas KAIP gavimo sąlygos ir sąlygos

PRISIJUNK

Sujungia dvi lenteles pagal konkrečią ryšio sąlygą.

KAIRĖJIS/DEŠINĖJIS PRIJUNGIMAS

LEFT sujungimo esmė ta, kad pirmoji nurodyta lentelė paimama visa, o antroji su ja susieta pagal ryšio sąlygą. Jei antrojoje nėra pirmąją lentelę atitinkančių įrašų, jų reikšmės pakeičiamos NULL. Paprasčiau tariant, pagrindinė lentelė yra pirmoji nurodyta lentelė, o antrosios lentelės duomenys (jei yra) jau yra pakeisti jos duomenimis.

Pavyzdžiui, reikia gauti prekių prekes iš „Prekių ir paslaugų gavimo“ dokumentų, o kainas – iš informacinio registro „Prekių kainos“. Tokiu atveju, jei kurios nors pozicijos kainos nerasta, pakeiskite NULL. Visos prekės iš dokumento bus atrenkamos nepriklausomai nuo to, ar jos turi kainą, ar ne.

PASIRINKTI
Kvitas ir U. Nomenklatūra,
Kainos.Kaina
NUO
Dokumentas. Prekių ir paslaugų gavimas Prekės KAIP gavimas T&C
INTERNAL JOIN RegistracijaInformacija.KainosNomenklatūra.SliceLast AS Kainos
Programinės įrangos kvitas&U.Nomenklatūra = Prices.Nomenclature

DEŠINĖJE viskas yra visiškai priešingai.

PILNAS PRIJUNGIMAS

Šis ryšio tipas skiriasi nuo ankstesnių tuo, kad dėl to bus grąžinti visi tiek pirmosios, tiek antrosios lentelės įrašai. Jei pagal nurodytą susiejimo sąlygą pirmoje ar antroje lentelėje nerasta jokių įrašų, vietoj to bus grąžinta NULL.

Naudojant pilną ryšį ankstesniame pavyzdyje, bus pasirinktos visos prekių prekės iš dokumento „Prekių ir paslaugų gavimas“ ir visos naujausios kainos iš registro „Prekių kainos“. Nerasta įrašų reikšmės tiek pirmoje, tiek antroje lentelėse bus lygios NULL.

VIDINIS PRISIJUNGIMAS

Skirtumas tarp INNER JOIN ir FULL JOIN yra tas, kad jei įrašas nerastas bent vienoje iš lentelių, užklausa jo nerodys. Dėl to iš dokumento „Prekių ir paslaugų gavimas“ bus pasirinktos tik tos prekių prekės, apie kurias yra įrašai informaciniame registre „Prekių kainos“, jei ankstesniame pavyzdyje „PILNAS“ pakeisime „VIDU“.

GRUPUOTI PAGAL

Grupavimas 1C užklausose leidžia sutraukti lentelės eilutes (sugrupuoti laukus) pagal tam tikrą bendrą charakteristiką (laukų grupavimas). Grupavimo laukai gali būti rodomi tik naudojant suvestines funkcijas.

Šios užklausos rezultatas bus produktų tipų sąrašas su didžiausiomis jų kainomis.

PASIRINKTI
,
MAX(Kaina.Kaina) AS Kaina
NUO

GRUPUOTI PAGAL
Kainos.Nomenklatūra.Nomenklatūros tipas

REZULTATAI

Skirtingai nuo grupavimo, naudojant sumas, rodomi visi įrašai ir prie jų pridedamos sumos eilutės. Grupuojant rodomi tik apibendrinti įrašai.

Rezultatus galima apibendrinti visai lentelei (naudojant raktinį žodį „GENERAL“), kelių laukų, hierarchinės struktūros laukams (raktiniai žodžiai „HIERARCHIJA“, „TIK HIERARCHIJA“). Apibendrinant rezultatus nebūtina naudoti suvestinių funkcijų.

Pažiūrėkime į pavyzdį, panašų į aukščiau pateiktą pavyzdį, naudodami grupavimą. Tokiu atveju užklausos rezultatas pateiks ne tik sugrupuotus laukus, bet ir išsamius įrašus.

PASIRINKTI
Kainos. Nomenklatūra. Nomenklatūros tipas AS Nomenklatūros tipas,
Kainos.Kaina AS Kaina
NUO
Informacijos registras. Nomenklatūros kainos. Naujausių AS kainų momentinė nuotrauka
REZULTATAI
MAKSIMALUS (kaina)
BY
TipasNomenklatūra

TURIMAS

Šis operatorius yra panašus į WHERE operatorių, bet naudojamas tik suvestinėms funkcijoms. Likę laukai, išskyrus tuos, kuriuos naudoja šis operatorius, turi būti sugrupuoti. WHERE operatorius netaikomas suvestinėms funkcijoms.

Toliau pateiktame pavyzdyje maksimalios prekės kainos pasirenkamos, jei jos viršija 1000, sugrupuotos pagal prekės tipą.

PASIRINKTI

MAX(Kaina.Kaina) AS Kaina
NUO
Informacijos registras. Nomenklatūros kainos. Naujausių AS kainų momentinė nuotrauka
GRUPUOTI PAGAL
Kainos.Nomenklatūra.Nomenklatūros tipas
TURIMAS
MAKSIMALUS(Kainos.Kaina) > 1000

RŪŠIUOTI PAGAL

Operatorius ORDER BY rūšiuoja užklausos rezultatą. Siekiant užtikrinti, kad įrašai būtų rodomi nuoseklia tvarka, naudojama AUTO ORDER. Primityvūs tipai rūšiuojami pagal įprastas taisykles. Nuorodų tipai rūšiuojami pagal GUID.

Pavyzdys, kaip gauti darbuotojų sąrašą, surūšiuotą pagal pavadinimą:

PASIRINKTI
Darbuotojai.Vardas AS Vardas
NUO
Katalogas.Darbuotojai KAIP Darbuotojai
RŪŠIUOTI PAGAL
vardas
AUTOMATINIS UŽSAKYMAS

Kitos 1C užklausų kalbos konstrukcijos

  • SUJUNGTI– dviejų užklausų rezultatai į vieną.
  • VISKĄ DERINTI– panašus į COMBINE, bet negrupuojant identiškų eilučių.
  • TUŠČIAS STALAS– kartais naudojamas sujungiant užklausas, kad būtų nurodyta tuščia įdėta lentelė.
  • VIETA– sukuria laikiną lentelę sudėtingoms 1C užklausoms optimizuoti. Tokios užklausos vadinamos paketinėmis užklausomis.

Užklausos kalbos ypatybės

  • SUBSTRING sutrumpina eilutę iš nurodytos padėties iki nurodyto simbolių skaičiaus.
  • METAI...ANTRA leidžia gauti pasirinktą skaitinio tipo reikšmę. Įvesties parametras yra data.
  • LAIKOTARPIO PRADŽIA ir LAIKOTARPIO PABAIGA naudojamas dirbant su datomis. Laikotarpio tipas (DIENA, MĖNESIS, METAI ir kt.) nurodomas kaip papildomas parametras.
  • ADDKDATE leidžia iš datos pridėti arba atimti nurodytą tam tikro tipo laiką (SECOND, MINUTE, DAY ir kt.).
  • SKIRTUMAS nustato skirtumą tarp dviejų datų, nurodydamas išvesties vertės tipą (DIENA, METAI, MĖNESIS ir kt.).
  • ISNULL trūkstamą reikšmę pakeičia nurodyta išraiška.
  • ATSTOVAVIMAS ir ATSTOVAVIMO NUORODOS gauti nurodyto lauko eilutės atvaizdavimą. Taikykite atitinkamai bet kokias ir tik pamatines vertes.
  • TIPAS, TIPO VERTĖS naudojami įvesties parametro tipui nustatyti.
  • LINK yra loginis palyginimo operatorius, skirtas atributo vertės tipui.
  • EXPRESS naudojamas vertei konvertuoti į norimą tipą.
  • DATA LAIKAS iš skaitinių verčių (metai, mėnuo, diena, valanda, minutė, sekundė) gauna „datos“ tipo reikšmę.
  • PRASMĖ 1C užklausoje jis naudojamas nurodyti iš anksto nustatytas reikšmes - katalogus, sąrašus, charakteristikų tipų planus. Naudojimo pavyzdys: " Kur juridinis asmuo = vertė (išvardijimas. Juridinis asmuo. Asmuo)«.

Užklausų kūrimo priemonė

Norėdami sukurti užklausas su 1C, yra labai patogus integruotas mechanizmas - užklausų dizaineris. Jame yra šie pagrindiniai skirtukai:

  • "Lentelės ir laukai" - yra laukeliai, kuriuos reikia pasirinkti, ir jų šaltiniai.
  • „Ryšiai“ – aprašo CONNECTION struktūros sąlygas.
  • „Grupavimas“ – yra grupavimo struktūrų aprašymas ir pagal jas sumuojami laukai.
  • „Sąlygos“ – atsakingas už duomenų parinkimą užklausoje.
  • „Išplėstinė“ – papildomi užklausos parametrai, pvz., komandos „SELECT“ raktiniai žodžiai ir kt.
  • „Joins/Aliases“ – nurodomos lentelių sujungimo galimybės ir nurodomi slapyvardžiai (konstrukcija „HOW“).
  • „Užsakymas“ yra atsakingas už užklausų rezultatų rūšiavimą.
  • „Iš viso“ – panašus į skirtuką „Grupavimas“, bet naudojamas konstrukcijai „TOTALS“.

Pačią užklausos tekstą galima peržiūrėti paspaudus apatiniame kairiajame kampe esantį mygtuką „Prašyti“. Šioje formoje jį galima pataisyti rankiniu būdu arba nukopijuoti.


Užklausų konsolė

Norėdami greitai peržiūrėti užklausos rezultatą įmonės režimu arba derinti sudėtingas užklausas, naudokite . Jame yra užklausos tekstas, nustatomi parametrai ir rodomas rezultatas.

Užklausos konsolę galite atsisiųsti ITS diske arba per .

Jei dirbate su viena lentele, sujungimo naudoti nereikia. Visai kas kita, kai dirbama su keliomis lentelėmis ir, pavyzdžiui, reikia gauti duomenis tiek apie pirkimus, tiek apie prekių pardavimą.

Sujungti naudojama sąlyga SUJUNGTI. Iš tikrųjų atsitinka taip, kad užklausų rezultatai sujungiami, ty kiekviena užklausa renka duomenis nepriklausomai viena nuo kitos, o tada šie rezultatai sujungiami į vieną. Ir tik paskutiniu prašymu atliekamos kitos operacijos, pavyzdžiui, užsakymas ir sumų apskaičiavimas.

Sujungiant užklausas, įvyksta rezultatų „vertikalus sulipimas“, tai yra, pirmosios užklausos rezultatų eilutės yra pirmiausia, tada antroji.

Pereikime prie praktikos:
Kodas 1C v 8.x SELECT
nomenklatūra,
Kiekis,
Suma
NUO
Dokumentas.Įėjimas.Prekės

SUJUNGTI

PASIRINKTI
nomenklatūra,
Kiekis,
Suma
NUO
Dokumentas.Įėjimas.Prekės

Šios užklausos rezultatas yra toks:
Nomenklatūra Kiekis Kiekis
A4 popierius 25 14 500
Lipdukai 500l 8 4 880
Failas skaidrus 5 4 100
Biuro rinkinys 8 8 840

Dėl to gausime dvi lenteles, kurios bus sujungtos viena su kita. Sunku suprasti, kur baigiasi Kvito dokumentas ir prasideda Išlaidų dokumentas. Bet mes padarysime ką nors, kad tai išsiaiškintume:
Kodas 1C v 8.x
PASIRINKTI
nomenklatūra,
Kiekis AS Kol. Atvykimas,
Suma AS SumIncoming,
0 AS kiekio sąnaudos,
0 AS sumaIšlaidos
NUO
Dokumentas.Įėjimas.Prekės

SUJUNGTI

PASIRINKTI
nomenklatūra,
0 AS KolPrikhod,
0 AS SumPrikhod,
Kiekis AS Kiekis suvartojimas,
Suma kaip suma Išlaidos
NUO
Dokumentas. Eksploatacinės medžiagos. Prekės

Kaip matote iš užklausos teksto, kiekvienam dokumentui nustatome skirtingus kiekio ir sumos slapyvardžius. Taip pat vietoje tų laukelių, kur gausime sumos ir kiekio reikšmes, dėsime nulius. Tai būtina, kad tušti kiekiai ir sumos būtų pakeisti nuliais.

A4 popierius 25 14 500
Lipdukai 500l 8 4 880
Failas skaidrus 5 4 100
Biuro rinkinys 8 8 840
Biuro rinkinys 1 1 105
Failas skaidrus 1 820
Lipdukai 500l 1610

Dabar turime pašalinti pasikartojančius elementus iš užklausos rezultato. Turime dvi užklausas ir jei kiekvieną atskirai sutrauksime, kad pašalintume pasikartojančius elementus, niekas neveiks. Todėl užklausą sumažinsime iki tokios formos:
Kodas 1C v 8.x
PASIRINKTI
nomenklatūra,
AMOUNT (pajamų skaičius) kaip pajamų skaičius,
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (išlaidų kiekis) kaip išlaidų kiekis,
SUM(SumExpense) AS SumExpense
NUO

(PASIRINKTI
nomenklatūra,
Kiekis AS Kol. Atvykimas,
Suma AS SumIncoming,
0 AS kiekio sąnaudos,
0 AS sumaIšlaidos
NUO
Dokumentas.Įėjimas.Prekės

SUJUNGTI

PASIRINKTI
nomenklatūra,
0 AS KolPrikhod,
0 AS SumPrikhod,
Kiekis AS Kiekis suvartojimas,
Suma kaip suma Išlaidos
NUO
Document.Consumables.Goods) AS AttachedRequest

GRUPĖ PAGAL nomenklatūrą

Taigi, matome, kad visa mūsų užklausa yra skliausteliuose ir pavadinta „NestedQuery“. Tai daroma tam, kad galėtume sugrupuoti abiejų antrinių užklausų įrašus ir pašalinti pasikartojančius elementus. Šis dizainas vadinamas įdėta užklausa. Šios užklausos rezultatas yra toks:
Nomenklatūra KolIncoming SumIncoming KolExpenditure SumExpenditure
A4 popierius 25 14 500
Lipdukai 500l 8 4 880 1 610
Biuro rinkinys 5 4 100 1 1 105
Failas skaidrus 8 8 840 1 820

Dėl to gauname sugrupuotą lentelę, kurioje įdėtųjų antrinių užklausų duomenys pateikiami suprantama forma. Antrinių užklausų skaičius neturi viršyti 255. Čia panaudojome keturias antrines užklausas.

Jei norime užklausoje palikti tik unikalias įrašo reikšmes, nenaudodami grupavimo. Reikia parašyti COMBINE sakinį be raktinio žodžio ALL.

Informacija paimta iš svetainės

; Įdėtos užklausos (kuriamos).

Prekių ir paslaugų gavimas Ir Prekių grąžinimas tiekėjui nurodytam laikotarpiui.

Nauji skirtukai: Sąjungos/slapyvardžiai.

4 pamokos teorinė dalis

1C Query Builder leidžia kurti užklausų derinius. Jų pagalba galite nuosekliai išvesti duomenis, gautus iš kelių užklausų, nenaudodami ryšių. Vienintelė sujungimo sąlyga yra tas pats laukų rinkinys kiekvienoje atskiroje užklausoje.

Dizainerio programoje eikite į skirtuką Sąjungos/slapyvardžiai. Jis skirtas kurti užklausų sujungimus ir nustatyti užklausos laukų slapyvardžius. Laukų slapyvardžiai reikalingi, jei nesate patenkinti standartiniais duomenų bazės laukų pavadinimais. Jei užklausos lauką sudaro tik duomenų bazės lentelės laukas, slapyvardis jam nereikalingas. Jei kurdami lauką naudojote užklausos kalbos funkcijas, tokiam laukui reikalingas slapyvardis. Užklausos kūrėjas sukuria standartinius tokių laukų slapyvardžius 1 laukas… laukasN, šiuos slapyvardžius galima pakeisti jums patogiais.

Pažvelkime į skirtuko skyrius Sąjungos/slapyvardžiai:

  • Prašymai(raudonas rėmelis). Šioje skiltyje yra lentelė, kurioje rodomos visos kombinuotos užklausos. Naudodami virš šios skilties esantį meniu galite pridėti naujų, kopijuoti esamas, ištrinti pasirinktas ir pakeisti jų vietas. Pridėdamas arba kopijuodamas užklausą, dizaineris pereina į skirtuką Lentelės ir laukai, kur galite nurodyti duomenų bazės lenteles ir būtinus laukus naujai užklausai. Galite perjungti užklausas naudodami skirtukus, kurie bus rodomi dešinėje dizainerio pusėje, kai bus pridėtos naujos 1c užklausos;

  • Lentelėje Prašymai du stulpeliai:
    • vardas. Automatiškai nustatyti formatą 1 užklausa... Prašymas N;
    • Jokių dublikatų. Nustatykite, kada reikia išskirti pasikartojančias eilutes sujungiant su ankstesne užklausa. Verta paminėti, kad ši žyma veiks tik sujungiant užklausą, kurioje ji nustatyta, su ankstesne užklausa.

  • Slapyvardžiai(mėlynas rėmelis). Šiame skyriuje galite nustatyti užklausos laukų slapyvardžius, taip pat nustatyti kombinuotų užklausų laukų atitiktį, kad dėl užklausos jie būtų tame pačiame stulpelyje ir būtų rodomi po vienu slapyvardžiu. Jei sujungtose užklausose laukai pavadinti vienodai, tada jų atitikimas koreguojamas automatiškai. Norint sukonfigūruoti laukų atitikimą, reikia lentelėje rasti eilutę su norimu slapyvardžiu, stulpeliuose rasti reikiamą užklausą ir išskleidžiamajame sąraše pasirinkti lauką.

4 pamokos praktinė dalis

Pažiūrėkime į pamokos pradžioje pateiktą problemos sprendimą. Priminsiu sąlygas:

Užduotis: naudokite užklausą, kad pasirinktumėte visus paskelbtus dokumentus Prekių ir paslaugų gavimas Ir Prekių grąžinimas tiekėjui nurodytam laikotarpiui.

  1. Sukurkime naują užklausą;
  2. Paleiskite užklausų dizainerį;
  3. Išsirinkime lentelę Prekių ir paslaugų gavimas nuo sriegio Dokumentacija;
  4. Nuo stalo Prekių ir paslaugų gavimas pasirinkite lauką Nuoroda;
  5. Eikime į skirtuką Sąlygos;
  6. Skyriuje Laukai, atidarykime temą Prekių ir paslaugų gavimas naudojant mygtuką „+“;
  7. Susiraskime rekvizitus data ir vilkite jį į sąlygų skyrių, pasirinkite palyginimo operatorių Tarp ir nurodykite, pavyzdžiui, laikotarpio pradžios ir pabaigos parametrus Laikotarpio pradžia Ir Laikotarpio pabaiga;
  8. Eikime į skirtuką Sąjungos/slapyvardžiai.
  9. Pridėkite naują užklausą, pažymėkite Jokių dublikatų jo kelti nereikia, nes naudojame įvairių tipų dokumentus;

  10. „1C Query Builder“ automatiškai pateks į skirtuką Lentelės ir laukai. Dešinėje lango pusėje pamatysite, kad aktyvi antroji prisijungimo užklausa;


  11. Pakartokime lentelės 1-7 taškus Prekių grąžinimas tiekėjui;
  12. Vėl eikime į skirtuką Sąjungos/slapyvardžiai. Pseudonimų lentelėje galite matyti, kad laukai Nuoroda abi lentelės yra toje pačioje eilutėje, o tai reiškia, kad nuorodos į abu dokumentus bus rastos tame pačiame stulpelyje dėl užklausos;
  13. Pakeiskime stulpelio pavadinimą iš Nuorodaįjungta dokumentas(nustatykite lauko slapyvardį). Norėdami tai padaryti, dukart spustelėkite kairįjį pelės mygtuką ant lauko pavadinimo. Po to galite nustatyti savo vardą, parašykite jį ten dokumentas;

  14. Užklausa paruošta, dizainerio lango apačioje spustelėkite mygtuką „Gerai“.

Dėl to gausime užklausą su tokiu tekstu.

Yra situacijų, kai reikia sujungti kelias užklausas vienoje užklausoje, o lentelių sujungimai negali padėti. Lengviausias būdas tai parodyti yra pavyzdžiu.

Tarkime, mūsų sistemoje prekių pirkimo ir pardavimo faktai užfiksuoti atitinkamai dokumentais Pajamos ir Išlaidos. Kita sandorio šalis gali būti pirkėjas arba tiekėjas. Skola gali būti padengta prekių pristatymu:

Norėdami apskaičiuoti visą kitos sandorio šalies skolą, turite pridėti visų šios sandorio šalies išlaidų sumą ir atimti visų tos pačios sandorio šalies įplaukų sumą; lengviausias būdas tai padaryti yra naudojant operatorių COMBINE ALL:

Užklausa.Tekstas =
"
//apskaičiuokite sumą, kurią išsiuntėme rangovams
|PASIRINKITE
| Išlaidos. Sandorio šalis,
|NUO
| Document.Expense AS Išlaidos
|GRUPĖ BY
| Išlaidos.Darbo šalis
| SUJUNGTI VISKAS
//apskaičiuokite sandorio šalių sumą
//pristatė mums prekes
|PASIRINKITE
| Parapija. Sandorio šalis,
//paimkite sumą su neigiamu ženklu,
//kad sujungus buvo išskaičiuota iš išlaidų sumos
| AMOUNT (-kvito suma)
|NUO
| Dokumentas Atvykimas AS Atvykimas
|GRUPĖ BY
| Atvykimas.Darbo šalis“;

Pirmoje užklausoje apskaičiuojame išlaidų sumą kiekvienai sandorio šaliai, antroje - sumą, už kurią kiekviena sandorio šalis mums tiekė prekes. Suma antroje užklausoje paimama su minuso ženklu, kad sutraukus gautą lentelę ji būtų atimama iš siuntos šiai sandorio šaliai sumos. Dėl to gauname tokią lentelę:

Tai ne visai tai, ko norėjome, bet arti. Norint pasiekti reikiamą rezultatą, belieka sugrupuoti pagal sandorio šalis. Norėdami tai padaryti, užklausa turi būti patalpinta į laikiną lentelę (darbas su laikinomis lentelėmis aptariamas uždara kurso dalis ) ir pasirinkite bei sugrupuokite laukus iš jo:

Užklausa = nauja užklausa;
Užklausa.Tekstas =
"PASIRINKITE
| Išlaidos. Sandorio šalis,
| SUMA(Išlaidos.Suma) AS skola
|Vieta VT_Incoming Expense
|NUO
| Document.Expense AS Išlaidos
|GRUPĖ BY
| Išlaidos.Darbo šalis
| SUJUNGTI VISKAS
|PASIRINKITE
| Parapija. Sandorio šalis,
| AMOUNT (-kvito suma)
|NUO
| Dokumentas Atvykimas AS Atvykimas
|GRUPĖ BY
| Parapija.Darbo šalis
|;
|////////////////////////////////////////////////////////////////////////////////
|PASIRINKITE
| VT_Incoming Expense. Sandorio šalis,
| SUM(VT_IncomeExpenditure. Debt) AS skola
|NUO
| VT_IncomingConsumption AS VT_IncomingConsumption
|GRUPĖ BY
| VT_Incoming Expense. Sandorio šalis";

Užklausų sujungimo reikalavimai

Sujungiant dvi užklausas, laukų skaičius turi būti vienodas, jei kurioje nors užklausoje laukų trūksta, jie turi būti pridedami kaip konstantos. Pažiūrėkime į aukščiau pateiktą pavyzdį, tegul išlaidų dokumente yra ir nuolaidos laukas, kuris sumažina sandorio šalies skolos sumą, tačiau kvito dokumente nuolaidų nėra. Kaip tokiu atveju būti? Taigi:

Užklausa = nauja užklausa;
Užklausa.Tekstas =
"PASIRINKITE
| Išlaidos. Sandorio šalis,

|NUO
| Document.Expense AS Išlaidos
|GRUPĖ BY
| Išlaidos.Darbo šalis
| SUJUNGTI VISKAS
|PASIRINKITE
| Parapija. Sandorio šalis,
| SUM(-Kvitas.Suma),
//pridėkite nulinio lauko nuolaidą
| 0
|NUO
| Dokumentas Atvykimas AS Atvykimas
|GRUPĖ BY
| Atvykimas.Darbo šalis“;

Belieka atimti nuolaidą ir grupę.

Tvarka taip pat svarbi. Laukai bus sujungti tiksliai tokia tvarka, kokia jie nurodyti abiejų užklausų skiltyse SELECT. Kalbant apie ankstesnį pavyzdį, sukeiskime nuolaidos ir sumos laukus kvitų pavyzdyje:

Užklausa = nauja užklausa;
Užklausa.Tekstas =
"PASIRINKITE
| Išlaidos. Sandorio šalis,
| AMOUNT(išlaidos.suma) kaip skola,
| AMOUNT(Expense.Discount) AS Nuolaida
|NUO
| Document.Expense AS Išlaidos
|GRUPĖ BY
| Išlaidos.Darbo šalis
| SUJUNGTI VISKAS
|PASIRINKITE
| Parapija. Sandorio šalis,
//pakeisti vietomis
| 0,
| AMOUNT (-kvito suma)
|NUO
| Dokumentas Atvykimas AS Atvykimas
|GRUPĖ BY
| Atvykimas.Darbo šalis“;

Laba diena, mieli tinklaraščio svetainės skaitytojai. Šiandien mes išsamiai aptarsime užklausų derinimas 1C. Taip pat galite atsisiųsti standartinės konfigūracijos Prekybos įmonių valdymo Kazachstanui 1.0 leidimą.

Jei dirbate su viena lentele, sujungimo naudoti nereikia. Visai kas kita, kai dirbama su keliomis lentelėmis ir, pavyzdžiui, reikia gauti duomenis apie prekių pirkimus ir pardavimus.

Sujungti naudojama sąlyga SUJUNGTI / SĄJUNGOS. Iš tikrųjų vyksta užklausos rezultatų sujungimas, tai yra, kiekviena užklausa renka duomenis nepriklausomai viena nuo kitos, o tada šie rezultatai sujungiami į vieną. Ir tik paskutiniu prašymu atliekamos kitos operacijos, pavyzdžiui, užsakymas ir sumų apskaičiavimas.

Priešingai, sujungiant užklausas, rezultatai „sulipdomi“ vertikaliai, tai yra, pirmosios užklausos rezultatų eilutės yra iš pradžių, o paskui – antrosios.

Pereikime prie praktikos:

PASIRINKITE prekę, kiekį, kiekį SUJUNGTI PASIRINKITE prekę, kiekį, sumą IŠ dokumento. Eksploatacinės medžiagos. Prekės

Šios užklausos rezultatas yra toks:

Dėl to gausime dvi lenteles, kurios bus sujungtos viena su kita. Sunku suprasti, kur baigiasi Kvito dokumentas ir prasideda Išlaidų dokumentas. Bet mes padarysime ką nors, kad tai išsiaiškintume:

PASIRINKTI Nomenklatūrą, Kiekis KAIP Parapijos numeris, Kiekis AS SumPrikhod, 0 KAIP KiekisVartojimas, 0 KAIP Išlaidų suma IŠ Dokumentas.Priėmimas.Produktai SUJUNGTI Parapijos numeris, 0 KAIP SumPrikhod, Kiekis AS KiekisVartojimas, Kiekis AS Išlaidų suma IŠ Dokumento. Eksploatacinės medžiagos. Prekės

Kaip matote iš užklausos teksto, kiekvienam dokumentui nustatome skirtingus kiekio ir sumos slapyvardžius. Taip pat vietoje tų laukelių, kur gausime sumos ir kiekio reikšmes, dėsime nulius. Tai būtina, kad tušti kiekiai ir sumos būtų pakeisti nuliais.

Nomenklatūra Parapijos numeris SumPrikhod KiekisVartojimas Išlaidų suma
A4 popierius 25 14 500
Lipdukai 500l 8 4 880
Failas skaidrus 5 4 100
Biuro komplektas 8 8 840
Biuro komplektas 1 1 105
Failas skaidrus 1 820
Lipdukai 500l 1 610

Dabar turime pašalinti pasikartojančius elementus iš užklausos rezultato. Turime dvi užklausas ir jei kiekvieną atskirai sutrauksime, kad pašalintume pasikartojančius elementus, niekas neveiks. Todėl užklausą sumažinsime iki tokios formos:

PASIRINKTI
nomenklatūra,
AMOUNT (pajamų skaičius) kaip pajamų skaičius,
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (išlaidų kiekis) kaip išlaidų kiekis,
SUM(SumExpense) AS SumExpense
NUO
(
PASIRINKTI Nomenklatūrą, Kiekis KAIP Parapijos numeris, Kiekis AS SumPrikhod, 0 KAIP KiekisVartojimas, 0 KAIP Išlaidų suma IŠ Dokumentas.Priėmimas.Produktai SUJUNGTI PASIRINKITE elementą, 0 KAIP Parapijos numeris, 0 KAIP SumPrikhod, Kiekis AS KiekisVartojimas, Kiekis AS Išlaidų suma IŠ Dokumento. Eksploatacinės medžiagos. Prekės ) AS „NestedQuery“.
GRUPĖ PAGAL nomenklatūrą

Taigi, matome, kad visa mūsų užklausa yra skliausteliuose ir pavadinta „NestedQuery“. Tai daroma tam, kad galėtume sugrupuoti abiejų antrinių užklausų įrašus ir pašalinti pasikartojančius elementus. Šis dizainas vadinamas įdėta užklausa. Šios užklausos rezultatas yra toks:

Nomenklatūra Parapijos numeris SumPrikhod KiekisVartojimas Išlaidų suma
A4 popierius 25 14 500
Lipdukai 500l 8 4 880 1 610
Biuro komplektas 5 4 100 1 1 105
Failas skaidrus 8 8 840 1 820

Dėl to gauname sugrupuotą lentelę, kurioje įdėtųjų antrinių užklausų duomenys pateikiami suprantama forma.
Papildomų užklausų skaičius neturi viršyti 255. Čia naudojome keturias antrines užklausas.