Kairė ir dešinė jungtis 1s


1C užklausų kalba yra vienas iš pagrindinių 7.7 ir 8 versijų skirtumų. Vienas iš svarbiausių dalykų mokantis 1C programavimo yra užklausos kalba. 1C 8.3 versijoje užklausos yra galingiausias ir efektyviausias įrankis duomenims gauti. Užklausos kalba leidžia patogiai gauti informaciją iš duomenų bazės.

Pati sintaksė labai primena klasikinį T-SQL, išskyrus tai, kad 1C, naudojant užklausos kalbą, duomenis galite gauti tik naudodami Select konstrukciją. Kalba taip pat palaiko sudėtingesnes konstrukcijas, pavyzdžiui, (užklausa užklausoje). 1C 8 užklausos gali būti parašytos ir kirilica, ir lotynų kalba.

Šiame straipsnyje pabandysiu pakalbėti apie pagrindinius raktinius žodžius 1C užklausos kalba:

  • pasirinkti
  • leidžiama
  • įvairių
  • išreikšti
  • Pirmas
  • pokyčiams
  • prasmė
  • vertės tipas (ir REFERENCE operatorius)
  • pasirinkimas
  • Grupuoti pagal
  • turintys
  • ISNULL
  • Taip NULL
  • jungtys - dešinė, kairė, vidinė, pilna.

Taip pat keletas mažų 1C kalbos gudrybių, kurias naudodami galite optimaliai sukurti užklausos tekstą.

Norėdami derinti užklausas 1C 8.2 sistemoje, pateikiamas specialus įrankis - užklausų konsolė. Aprašymą galite pamatyti ir atsisiųsti naudodami nuorodą -.

Pažvelkime į svarbiausius ir įdomiausius 1C užklausos kalbos operatorius.

PASIRINKTI

1C Enterprise 8 užklausos kalba bet kuri užklausa prasideda raktiniu žodžiu PASIRINKTI. 1C kalboje nėra UPDATE, DELETE, CREATE TABLE, INSERT konstrukcijų, šios manipuliacijos atliekamos objektų technologijoje. Jo tikslas yra tik skaityti duomenis.

Pavyzdžiui:

PASIRINKTI
Dabartinis katalogas.Pavadinimas
NUO
Directory.Nomenclature AS Dabartinis katalogas

Užklausa pateiks lentelę su elementų pavadinimais.

Šalia konstrukcijos PASIRINKTI galite rasti raktinių žodžių DĖL POKYČIŲ, LEIDŽIAMAS, ĮVAIRUS, PIRMAS

LEIDŽIAMAS— iš lentelės pasirenka tik tuos įrašus, į kuriuos dabartinis vartotojas turi teises.

ĮVAIRUS— reiškia, kad rezultate nebus pasikartojančių eilučių.

PASIRINKIMAS (ATVEJIS)

Labai dažnai šį dizainą programišiai neįvertina. Jo naudojimo pavyzdys:

Dabartinis katalogas.Pavadinimas,

KADA Dabartinis katalogas.Paslauga THEN

"Paslauga"

PABAIGA, KAIP PERŽIŪRĖTI Nomenklatūrą

Directory.Nomenclature AS Dabartinis katalogas

Pavyzdys pateiks teksto reikšmę lauke „Prekės tipas“ – „Produktas“ arba „Paslauga“.

KUR

1C užklausos kalbos dizainas, leidžiantis pasirinkti gautus duomenis. Atkreipkite dėmesį, kad sistema gauna visus duomenis iš serverio ir tik tada parenkama pagal šį parametrą.

PASIRINKTI
Katalogas.Vardas
NUO
Dabartinis katalogas. Nomenklatūra AS Dabartinis katalogas
WHERE CurrentDirectory.Service = TRUE

Pavyzdyje pasirenkame įrašus, kurių atributo „Paslauga“ reikšmė nustatyta į „True“. Šiame pavyzdyje galėtume išsiversti su tokia sąlyga:

"KUR YRA PASLAUGA"

Iš esmės mes pasirenkame eilutes, kuriose po raktinio žodžio esanti išraiška yra lygi „Tiesa“.

Išraiškose galite naudoti tiesiogines sąlygas:

WHERE kodas = "005215"

Sąlygose naudodami operatorių „VALUE()“, naudokite prieigą prie iš anksto nustatytų elementų ir išvardijimo 1C užklausoje:

WHERE prekės tipas = vertė (sąrašas. prekių tipai. produktas)

Laiko reikšmės gali būti nurodytos taip:

KUR gavimo data > DATETIME(2012,01,01):

Dažniausiai sąlygos nurodomos kaip parametrai, perduodami užklausai:

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

WHERE NomenclatureGroup= &NomenclatureGroup

Atributo tipui gali būti nustatyta sąlyga, jei jis yra sudėtinio tipo:

Jei reikia apriboti pasirinkimą iš reikšmių sąrašo arba masyvo, galite atlikti šiuos veiksmus:

KUR yra kaupimo registras B (atrenkamų dokumentų sąrašas).

Būklė taip pat gali būti sudėtinga, susidedanti iš kelių sąlygų:

WHERE gavimo data > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

GRUPUOTI PAGAL

1C 8.2 užklausos kalbos, naudojamos rezultatui sugrupuoti, dizainas.

Pavyzdžiui:

PASIRINKTI
Prekių ir paslaugų Prekių priėmimas,.
SUM (Prekių gavimasPaslaugų Prekės. Kiekis) AS Kiekis,
SUM (Prekių gavimasPaslaugųPrekių.Suma) AS Suma
NUO
Prekių ir paslaugų gavimo dokumentas. KAIP Prekių ir paslaugų gavimas

GRUPUOTI PAGAL
Prekių gavimasPaslaugosPrekės.Prekės

Šioje užklausoje visi kvitai bus apibendrinti pagal sumą ir kiekį pagal prekes.

Be raktinio žodžio SUMA Galite naudoti kitas agregavimo funkcijas: KIEKIS, SKIRTINGŲJŲ SKAIČIUS, MAKSIMALUS, MINIMUMAS, VIDUTINIS.

TURIMAS

Dizainas, kuris dažnai pamirštamas, bet labai svarbus ir naudingas. Tai leidžia nurodyti pasirinkimą suminės funkcijos pavidalu, to negalima padaryti projektuojant KUR.

HAVING naudojimo 1C užklausoje pavyzdys:

PASIRINKTI
Prekių ir paslaugų Prekių priėmimas,.
SUM (Prekių gavimasPaslaugų Prekės. Kiekis) AS Kiekis,
SUM (Prekių gavimasPaslaugųPrekių.Suma) AS Suma
NUO
Prekių ir paslaugų gavimo dokumentas. KAIP Prekių ir paslaugų gavimas

GRUPUOTI PAGAL
Prekių ir paslaugų Prekių priėmimas

SUM (Prekių gavimasPaslaugųPrekių.Kiekis) > 5

Taigi atrinksime prekių, kurių atkeliavo daugiau nei 5 vnt., skaičių.

REIKŠMĖ ()

Pavyzdžiui:

WHERE Bank = vertė (Katalogas.Bankai.EmptyLink)

WHERE nomenklatūros tipas = reikšmė (katalogas. nomenklatūros tipai. produktas)

WHERE elemento tipas = reikšmė (sąrašas. elementų tipai. paslauga)

TYPE užklausoje

Duomenų tipą galima patikrinti naudojant TYPE() ir VALUETYPE() funkcijas arba loginį REFERENCE operatorių.

EXPRESS ()

„Express“ operatorius 1C užklausose naudojamas duomenų tipams konvertuoti.

Sintaksė: EXPRESS(<Выражение>KAIP<Тип значения>)

Naudodami jį galite konvertuoti eilučių reikšmes į datą arba nuorodines reikšmes į eilutės duomenis ir pan.

Praktikoje neriboto ilgio laukams konvertuoti labai dažnai naudojamas Express() operatorius, nes neriboto ilgio laukų negalima pasirinkti, sugrupuoti ir pan. Jei tokie laukai nekonvertuojami, gausite klaidą Negalite lyginti neriboto ilgio laukų ir nesuderinamų tipų laukų.

PASIRINKTI
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
NUO
Informacijos registras Kontaktinė informacija KAIP Kontaktinė informacija

GRUPUOTI PAGAL
EXPRESS(ContactInfo.Representation AS ROW(150)),
Kontaktinė informacija.Objektas

ISNULL (ISNULL)

Gana naudinga 1C užklausos kalbos funkcija, kuri tikrina įrašo reikšmę ir ar ji lygi NULL, Tai leidžia jį pakeisti savo verte. Dažniausiai naudojamas gaunant virtualias likučių ir apyvartų lenteles, siekiant pasislėpti NULL ir padėkite aiškų 0 (nulis).

ISNULL(Priešmėnesiniai mokesčiai.Taikoma FSS išmoka, 0)

Tokia 1C užklausos kalbos funkcija ISNULL grąžins nulį, jei nėra reikšmės, todėl bus išvengta klaidos.

PRISIJUNK

Yra 4 jungčių tipai: KAIRĖ, TEISINGAI, PILNAS, VIDINIS.

KAIRINĖ ir DEŠINĖ PRIJUNGIMAS

Sujungimai naudojami susieti dvi lenteles pagal konkrečias sąlygas. Funkcija kada KAIRĖ PRISIJUNGTI yra tai, kad imame visą pirmąją nurodytą lentelę ir sąlyginai susiejame antrąją lentelę. Antrosios lentelės laukai, kurių negalima susieti su sąlyga, užpildomi reikšme NULL.

Kairiojo prisijungimo 1C užklausoje pavyzdys:

Grąžins visą lentelę ir užpildys lauką „Bankas“ tik tose vietose, kur tenkinama sąlyga „Counterparties.Name = Banks.Name“. Jei sąlyga neįvykdyta, laukas Bankas bus nustatytas į NULL.

RIGHT JOIN 1C 8.3 kalba absoliučiai panašus KAIRĖS jungtis, išskyrus vieną skirtumą: in PRIJUNGIMO TEISĖ„Pagrindinė“ lentelė yra antra, o ne pirmoji.

PILNAS PRIJUNGIMAS

PILNAS PRIJUNGIMAS skiriasi nuo kairės ir dešinės tuo, kad rodo visus įrašus iš dviejų lentelių ir jungia tik tuos, kuriuos gali sujungti pagal sąlygą.

Pavyzdžiui:

PILNAS PRIJUNGIMAS
Katalogas.Bankai KAIP Bankai

BY

Užklausos kalba abi lenteles pateiks visiškai, tik jei bus įvykdyta sąlyga Sujungti įrašus. Skirtingai nuo kairiojo / dešiniojo sujungimo, NULL gali būti rodomas dviejuose laukuose.

VIDINIS PRISIJUNGIMAS

VIDINIS PRISIJUNGIMAS skiriasi nuo pilno tuo, kad rodo tik tuos įrašus, kuriuos būtų galima prijungti pagal tam tikrą sąlygą.

Pavyzdžiui:

NUO
Katalogas Counterparties AS Klientai

VIDINIS PRISIJUNGIMAS
Katalogas.Bankai KAIP Bankai

BY
Klientai.Vardas = Bankai.Vardas

Ši užklausa pateiks tik tas eilutes, kuriose bankas ir sandorio šalis turi tą patį pavadinimą.

Išvada

Tai tik maža 1C 8 užklausos kalbos sintaksės dalis. Ateityje pabandysiu išsamiau apsvarstyti kai kuriuos dalykus, parodyti ir dar daugiau!

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

Užduotis Nr. 1: naudokite užklausą, kad pasirinktumėte visus paskelbtus dokumentus Prekių ir paslaugų pardavimas,

Paaiškinimas: konfigūracijos Apskaita 2.0 / 3.0 Diegimas nesaugo nuorodos į išrašytą sąskaitą faktūrą. Ryšys tarp šių dokumentų yra atvirkštinis: sąskaitoje faktūroje (detalėje Dokumentų bazė) saugoma nuoroda į įgyvendinimą, su kuriuo ji susijusi. Taigi, norėdami suprasti, kurie diegimai neturi sąskaitų faktūrų, užklausoje turėsite naudoti dvi lenteles: Prekių ir paslaugų pardavimas Ir Išrašyta sąskaita faktūra.

Užduotis Nr. 2: tarkime, katalogo duomenų bazėje Sandorio šalių sutartys sukurta papildoma informacija Atidėjimas(saugyklos vietų registras Papildoma informacija). Naudodami užklausą pasirinkite visas nurodytos sandorio šalies sutartis su vėlavimu nuo 0 iki 10 dienų.

Paaiškinimas: šioje užduotyje būtų galima apsieiti nenaudojant dviejų lentelių, jei ne viena sąlyga: sutarčių pasirinkimas su nuliniu atidėjimu. Esmė ta, kad registre Papildoma informacija Tuščios papildomos informacijos reikšmės nesaugomos, todėl ten nebus nulinio atidėjimo įrašų. Todėl šį registrą turėsite pridėti prie katalogo Sandorio šalių sutartys, jei nėra įrašo su atidėjimu nė vienai iš sutarčių, tai yra nulis.

Nauji skirtukai: Jungtys

Nauji mechanizmai: 1C užklausos nulio tikrinimas.

3 pamokos teorinė dalis

Jei 1C užklausa naudoja tik vieną lentelę, tada duomenys paimami tik iš jos. Bet jei jums reikia pasirinkti duomenis iš kelių lentelių, turėtumėte nustatyti ryšius tarp šių lentelių. Ryšiai būtini norint palyginti vienos duomenų bazės lentelės eilutes su kitos lentelės eilutėmis ir taip formuojant užklausą gauti galutinę lentelę, kurioje bus reikalingi duomenys iš visų užklausų lentelių.

Kiekvienas konkretus ryšys yra sukonfigūruotas tarp dviejų lentelių, viena iš jų vadinama Kairė, kita Teisingai. Yra trijų tipų jungtys:

  • VIDINIS PRISIJUNGIMAS- įrašas iš kairiosios lentelės užklausos rezultate atsiras tik tuo atveju, jei bus įvykdyta prisijungimo sąlyga, įrašas iš dešinės lentelės atsiras užklausos rezultate tik tuo atveju, jei bus įvykdyta prisijungimo sąlyga;
  • KAIRIS RYŠYS- įrašas iš kairiosios lentelės bet kuriuo atveju bus įtrauktas į užklausos rezultatą, įrašas iš dešinės lentelės bus įtrauktas į pasirinkimą tik tuo atveju, jei bus įvykdyta prisijungimo sąlyga. Kairiojo analogas yra TEISINGAI PRISIJUNK, Dešiniosios lentelės duomenys bet kuriuo atveju įtraukiami į rezultatą, kairiosios lentelės duomenys tik tuo atveju, jei tenkinama sąlyga. Paprastai rašant užklausą jis naudojamas Kairė jungtis, jei naudosite tinkamą, kitą kartą atidarius užklausą, užklausos kūrėjas konvertuos ją į kairiąją, sukeisdamas lenteles;
  • PILNAS PRIJUNGIMAS- užklausos rezultate bet kuriuo atveju pirmiausia atsiras įrašas iš kairės lentelės, tada tik tuo atveju, jei įvykdoma ryšio sąlyga, užklausos rezultate bet kuriuo atveju pirmiausia atsiras įrašas iš dešinės lentelės, tada tik tuo atveju, jei prisijungimo sąlyga yra patenkintas. Tokiu atveju gautos pasikartojančios eilutės neįtraukiamos į imtį.

Teoriškai užklausų lentelių sujungimas nemokytam 1C programuotojui yra gana sunkiai suprantamas, tačiau studijuojant pavyzdžius visi neaiškūs punktai taps aiškesni.

Užklausų kūrimo priemonės skirtukas Ryšiai

Užklausos rengyklėje eikite į skirtuką Jungtys. Tai lentelė, kurioje sukuriamas reikiamas jungčių skaičius visoms skirtingoms lentelių poroms. Galite pridėti, ištrinti, kopijuoti ir keisti ryšius naudodami virš lentelės esančius mygtukus (kiekvieno detaliau neanalizuosime).

Pridėję naują ryšį, turite užpildyti visus lentelės stulpelius. Pažvelkime į kiekvieną jungčių lentelės stulpelį:

  • 1 lentelė. Šiame stulpelyje pasirenkama kairioji prijungimo lentelė. Galite naudoti tik skirtuke pasirinktas lenteles Lentelės ir laukai;
  • Visi. Vėliava šiame stulpelyje dedama, jei reikia pasirinkti visus kairiosios lentelės duomenis (skirta Kairė arba Pilnas jungtys);
  • Lentelė 2. Šiame stulpelyje pasirenkama dešiniojo ryšio lentelė;
  • Visi. Vėliava šiame stulpelyje dedama, jei reikia pasirinkti visus tinkamos lentelės duomenis (skirta Teisingai arba Pilnas jungtys);
  • Laisvas. Vėliava, su kuria galite persijungti į rankinio ryšio sąlygos redagavimo režimą;
  • Prisijungimo sąlyga. Sąlyga užklausos kalba, panaši į sąlygas, aptartas . Tai išraiška, kuri visada turi grąžinti vieną iš dviejų reikšmių: Tiesa arba Melas. Paprastai nuorodos sąlyga susideda iš trijų dalių:
    • Kairė pusė. Paprastai laukas kairėje lentelėje, bet gali būti ir dešiniosios lentelės laukas arba parametras (tik pasirinktinės sąlygos redagavimo režimu);
    • Palyginimo operatorius. Pagal numatytuosius nustatymus "=", "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • Dešinė dalis. Paprastai laukas dešinėje lentelėje, bet gali būti ir kairiosios lentelės laukas arba parametras (tik pasirinktinės sąlygos redagavimo režimu);

Pildymas ir redagavimas Bendravimo sąlygos, panašiai kaip įprastos sąlygos, aptartos paskutinėje pamokoje, redagavimas, išskyrus tai, kad pagal numatytuosius nustatymus dešinėje sąlygos dalyje nustatomas ne parametras, o laukas dešinėje lentelėje. Laisvu režimu taip pat yra laisvos išraiškos rengyklė.

3 pamokos praktinė dalis

Pažiūrėkime į pamokos pradžioje pateiktų problemų sprendimą.

Užduotis Nr.1

Pasirinkite visus paskelbtus dokumentus su užklausa Prekių ir paslaugų pardavimas, nurodytam laikotarpiui, kuriam sąskaita faktūra nesurašyta.

  • Sukurkime naują užklausą;
  • Išsirinkime lenteles Prekių ir paslaugų pardavimas Ir Išrašyta sąskaita faktūra nuo sriegio Dokumentacija;
  • Nuo stalo Prekių ir paslaugų pardavimas pasirinkite lauką Nuoroda;
  • Eikime į skirtuką Sąlygos;
  • Skyriuje Laukai, atidarykime temą Prekių ir paslaugų pardavimas naudojant mygtuką „+“;
  • 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;
  • Iš skyriaus Laukai tempkime rekvizitus Atlikta, įdėkite vėliavėlę į eilutę su sąlyga Laisvas ir ištrinkite papildomą sąlygos „= &Patvirtinta“ dalį;
  • Eikime į skirtuką Ryšiai;
  • Sukurkime naują ryšį naudodami mygtuką „Pridėti“;
  • Lauke 1 lentelė pasirinkite lentelę Prekių ir paslaugų pardavimas(tai bus kairioji lentelė) ;
  • Norėdami teisingai išspręsti problemą, turime gauti visus diegimus, pridėti prie jų sąskaitas faktūras, o jei sąskaitos faktūros nerandame, parodyti įgyvendinimą kaip užklausos rezultatą. Padalinkime šią užduotį į dvi dalis:
    • Išsirinkime visus pardavimus ir naudodamiesi ryšiu pabandykime surasti jų sąskaitą faktūrą;
    • Naudodami sąlygą pasirinksime tik tas eilutes, kuriose nėra sąskaitos faktūros;
  • Iš ankstesnės pastraipos matyti, kad turime naudoti Kairė jungtis, kad pasirinktumėte visus diegimus. Todėl į stulpelį įdėkime vėliavėlę Visi
  • Lauke 2 lentelė pasirinkite lentelę Išrašyta sąskaita faktūra(tai bus tinkama lentelė);
  • Kadangi nuoroda į diegimą yra saugoma sąskaitos faktūros detalėse D Dokumentų bazė, ryšio sąlygoje pasirenkame:
    • Kairėje lauko pusėje Prekių ir paslaugų pardavimas Nuoroda;
    • Dešinėje lauko pusėje: InvoiceInvoiceIssued.DocumentBase.
  • Ryšio sąranka baigta;

Kai kairiojo sujungimo atveju, jei kairiosios lentelės eilutėje nėra nė vienos dešiniosios lentelės eilutės, kuri tenkintų ryšio sąlygas, visi dešiniosios dešiniosios lentelės laukai tam tikroje kairiosios lentelės eilutėje turi reikšmę NULL. Naudokime tai norėdami pasirinkti tik tas kairiosios lentelės eilutes, kurioms nėra sąskaitos faktūros;

1C užklausos kalba turi specialų loginį operatorių, leidžiantį patikrinti, ar lauke yra reikšmė NULL, jo sintaksė <Поле>YRA NULL. Tai grąžina vertę Tiesa jei laukas turi reikšmę NULL Ir Melas- priešingu atveju.

Atminkite, kad patikrinkite lauko reikšmę NULL galima tik naudojant nurodytą funkciją, konstrukciją <Поле>= NULLŠis patikrinimas nebus įmanomas.

  • Eikime į skirtuką Sąlygos;
  • Vilkite vieną iš lentelės laukų į sąlygų skyrių Išrašyta sąskaita faktūra, pavyzdžiui, laukas Nuoroda;
  • Nustatykite vėliavėlę eilutėje Laisvas ir po lauko pridėkite operatorių YRA NULL, prieš tai ištrynę nereikalingą sąlygos dalį;

Užklausa = nauja užklausa; Request.SetParameter("StartPerid" , StartPerid); Request.SetParameter("Laikotarpio pabaiga", Laikotarpio pabaiga); Request.Text = "SELECT | Prekių ir paslaugų pardavimas. Nuoroda | NUO = Išrašytas dokumentas |. TARPTAUTINIS prekių ir paslaugų pardavimas |. Prekių ir paslaugų pardavimas |.

2 užduotis

  • Sukurkime naują užklausą;
  • Paleiskite užklausų kūrimo priemonę;
  • Skirtuke Lentelės ir laukai Pažymime dvi lenteles: Sandorio šalių sutartys nuo sriegio Katalogai Ir Papildoma informacija nuo sriegio Informaciniai registrai;
  • Nuo stalo Sandorio šalių sutartys pasirinkite lauką Nuoroda;

Pagal sąlygą į užklausos rezultatą turi būti įtrauktos tik vienos sandorio šalies sutartys, kurių vertė bus perduodama užklausai naudojant parametrą. Lauke saugoma sandorio šalis, kuriai priklauso sutartis Savininkas katalogas Sandorio šalių sutartys.

  • Eikime į skirtuką Sąlygos. Nuo stalo Sandorio šalių sutartys perkelkite lauką į sąlygų skyrių Savininkas. Dešinėje sąlygos pusėje nustatysime parametro pavadinimą, kuriam perduosime mums reikalingą sandorio šalį, pavadinkime jį Sandorio šalis;
  • Taip pat sutarčių su vėlavimu nuo 0 iki 10 atrankos užduotį suskirstysime į dvi dalis:
    • Atrinkime visas sutartis ir naudodamiesi ryšiais pabandykime surasti jų atidėjimus;
    • naudodamiesi sąlyga parinksime tik sutartis su mums reikalingais atidėjimais;
  • Nustatykime ryšius tarp sutarčių ir papildomos informacijos. Eikime į skirtuką Ryšiai ir pridėkite naują ryšį;
  • Lauke 1 lentelė pasirinkite lentelę Sandorio šalių sutartys(tai bus kairioji lentelė);
  • Kadangi mums reikia visų sutarčių, tai naudosimės Kairė jungtis.Į stulpelį Visi, kuris priklauso kairiajai lentelei, įdėkime vėliavėlę;
  • Lauke 2 lentelė pasirinkite lentelę Papildoma informacija(tai bus tinkama lentelė);
  • Kadangi nuoroda į sutartį yra saugoma matmenyje Objektas informacijos registras Papildoma informacija, ryšio sąlygoje pasirenkame:
    • Kairėje lauko pusėje Rangovų sutartys Nuoroda;
    • Palikime standartinį palyginimo operatorių "=";
    • Dešinėje lauko pusėje: Papildoma informacija.Object.

Pridėjome nuorodą, su kuria pasirinksime visus papildomus. informacija apie kiekvieną sutartį. Bet kadangi mums reikia tik vieno papildomo. maišymas - Atidėjimas, turime pridėti dar vieną ryšį. Tokiu atveju Atidėjimas yra papildoma nuosavybė. Papildomos savybės yra tipo Charakteristikos tipų planas Papildoma informacija ir informacija. Registre Papildoma informacija papildomos vertės savybės yra saugomos matmenyje Nuosavybė. Taigi, turime pridėti ryšį, kuris apriboja papildomą informaciją tik ypatybei Deferral.

  • Pridėkime naują ryšį;
  • Lauke 1 lentelė pasirinkite lentelę Sandorio šalių sutartys;
  • Svarbu žinoti, kad jei turite kelis ryšius toje pačioje lentelių poroje, turite naudoti tą patį sujungimo tipą. Mūsų atveju tai yra Kairė jungtis. Todėl į stulpelį įdėkime vėliavėlę Visi, susijęs su kairiąja lentele;
  • Lauke 2 lentelė pasirinkite lentelę Papildoma informacija;
  • Santykio sąlygoje mums nereikės naudoti kairiojo lentelės lauko, vietoj to nustatysime sąlygą dimensijai Nuosavybė, prilyginant jį papildomam. nuosavybė Atidėjimas, kuris bus perduotas užklausai naudojant parametrą;
  • Pakelkime vėliavą Laisvas prasme Tiesa ir rankiniu būdu parašykite šios sąlygos tekstą: „Papildoma informacija.Property = &PropertyDelay“;

  • Ryšio sąranka baigta;

Dabar belieka tik nustatyti sąlygą dėl atidėjimo dydžio. Kadangi naudojame intervalą nuo 0 iki 10, reikės naudoti palyginimo operatorių Between. Kadangi nulinis atsitraukimas nėra saugomas papildomoje informacijoje, tokiu atveju prisijungus visi registro laukai grąžins reikšmę NULL. Norėdami pakeisti vertę sąlygoje NULL iki 0, naudosime užklausos kalbos funkciją ISNULL(<Выражение1>, <Выражение2>) . Funkcija grįžta Išraiška1, jei jis nelygus NULL Ir Išraiška2 kitaip.

  • Eikime į skirtuką Sąlygos užklausa dizaineris ir pridėti naują sąlygą;
  • Pakelkime jame vėliavą Laisvas ir eikite į laisvos saviraiškos redaktorių;
  • Užklausos kalbos funkcijų skiltyje išplėsime šaką Funkcijos -> Kitos funkcijos;
  • Nuvilkime funkciją į išraiškų skyrių ISNULL;
  • Po gautos konstrukcijos įvesime palyginimo operatorių Between ir nustatysime intervalą: 0 ir 10;
  • Spustelėkite Gerai, sąlyga paruošta;

Paskutinis dalykas, kurį turite padaryti, yra užklausos laukuose parodyti atidėjimo reikšmę. Tam, kad vietoj NULL buvo rodoma reikšmė 0, taip pat naudojame laisvosios išraiškos rengyklę ir funkciją ISNULL.

  • Eikime į skirtuką Lentelės ir laukai ir pridėti naują lauką;
  • Atsidariusiame laisvosios išraiškos rengyklėje pasirinkite funkciją ISNULL;
  • Vietoj 1 išraiškos įterpkite lauką AdditionalInformation.Value, o vietoj 2 išraiškos įterpkite 0;
  • Spustelėkite Gerai, laukas paruoštas;

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

Užklausa = nauja užklausa; Query.SetParameter("PropertyDelay", PropertyProperty); Request.SetParameter("Paskyra", Paskyra); Query.Text = "SELECT | Sandorio susitarimai. Nuoroda, | ISNULL(Papildoma informacija. Reikšmė, 0) AS 1 laukas | FROM | Katalogas. Sandorio šalių sutartys AS Sandorio šalių sutartys | LEFT JOIN Informacija Registras. Papildoma informacija | AS Papildoma informacija | APIE sandorio šalių sutartis . Nuoroda = Papildoma informacija. |

Taip pat skaitykite straipsnius apie 1C 8 užklausų kalbą.

Kai norime matyti duomenis iš kelių lentelių vienu metu, t.y. surinkti kelias lenteles į vieną, iškyla lentelių sujungimo ir ryšių tarp jų samprata. Yra keturių tipų jungtys:

  • kairėje;
  • teisingai,
  • vidinis;
  • užbaigti.

Apžvelgsime kiekvieną tipą naudodami abstraktų pavyzdį. Yra 2 lentelės, pirmoje saugome aprašomąją informaciją apie prekę, antroje apie jos likučius:

Norėdami gauti vieną iš šių lentelių, turime aiškiai nurodyti, kuriuos laukus sujungsime, kokia sąlyga ir tipas. Dabar tai taps aiškiau.

Kairė jungtis

Naudodami kairįjį sujungimą, pasakome sistemai, kad dėl to norime matyti visus įrašus iš kairės lentelės ir įrašus iš dešinės, kurie atitinka ryšio sąlygą. Tarkime, kad sujungsime lenteles pagal produkto lauką su vienoda sąlyga, tada gausime tokią lentelę:

Prašymas.Tekstas =
"PASIRINKITE
| Nomenklatūra. Produktas,
| Nomenklatūra. Color AS Spalvų nomenklatūra,
| Remains.Color AS ColorRemains,
| Likutai.Kiekis
|NUO

";

Kėdės atitikmenų iš likučių lentelės nebuvo, todėl laukai buvo užpildyti NULL reikšmėmis, kurias turi apdoroti funkcija ISNULL, žr. 1C 8 Užklausos kalbos funkcijos.

Kairysis sujungimas veikia maždaug kaip ciklas cikle – jis paima pirmąjį įrašą iš kairiosios lentelės ir eina per visus įrašus iš dešiniosios lentelės, kad užtikrintų, jog ryšio sąlyga yra įvykdyta. Tada iš kairės lentelės paimamas antras įrašas ir t.t. Jei staiga keli įrašai iš dešinės lentelės tenkina ryšio sąlygą, tada į gautą lentelę bus įtrauktos kelios eilutės (pagal sėkmingų prisijungimų skaičių, gauta lentelė nėra informatyvi, duomenys neatspindi). tikroji esmė, todėl šias lenteles geriau susieti dviem laukais: Produktas ir spalva, tik šį kartą tvarkysime NULL:

Prašymas.Tekstas =
"PASIRINKITE
| Nomenklatūra. Produktas,
| Nomenklatūra. Spalva,
| ISNULL(likęs.Kiekis, 0) AS Kiekis
|NUO
| Nomenklatūra AS Nomenklatūra
| KAIRĖ PRISIJUNGTI Likusiai kaip likučiai
| Programinės įrangos nomenklatūra.Produktas = Likęs.Produktas

Teisingas ryšys

Dešinysis ryšys iš esmės nesiskiria nuo kairiojo. Jei sukeičiate lenteles, dešinysis sujungimas virs kairiuoju, be to, naudojant konstruktorių, sistema pati konvertuoja visus dešiniuosius sujungimus į kairiuosius.

Vidinis sujungimas

Naudodami vidinį sujungimą, pasakome sistemai, kad dėl to norime matyti tik tuos įrašus, kurie tenkina ryšio sąlygą tiek iš dešinės, tiek iš kairės lentelės. Taigi gautų įrašų skaičius bus mažesnis arba lygus trumpiausios sujungime dalyvaujančios lentelės įrašų skaičiui. Taikykime vidinį sujungimą mūsų lentelių laukuose Produktas ir Spalva:

Prašymas.Tekstas =
"PASIRINKITE
| Nomenklatūra. Produktas,
| Nomenklatūra. Spalva,
| Likučiai.Kiekis AS Kiekis
|NUO
| Nomenklatūra AS Nomenklatūra
| VIDINIS PRIJUNGIMAS Likučiai kaip likučiai
| Programinės įrangos nomenklatūra.Produktas = Likęs.Produktas
| Ir Nomenklatūra.Spalva = Likęs.Spalva";

Pilnas ryšys

Visiškai sujungus bus visi įrašai iš abiejų lentelių, tie įrašai, kurie atitinka ryšio sąlygą, bus prijungti, tie įrašai, kurie neatitinka ryšio sąlygos, vis tiek atsidurs užklausos rezultate, bet su kai kuriais NULL laukais. „Complete“ yra tarsi kairės ir dešinės jungtys viename.

Šia tema gali kilti daug problemų, pabandykime vieną iš jų išspręsti. Mūsų organizacija prekiauja 2 baldų gamyklomis: „Zarya“ ir „Rassvet“. Asortimentas su kiekvienos gamyklos kaina yra saugomas skirtingose ​​​​lentelėse. Būtina sudaryti vieną kainoraštį ir įtraukti į jį produktus už mažiausią kainą:

Taikykime pilną sujungimą su visų laukų pasirinkimu, sujungsime pagal produktą:

Prašymas.Tekstas =
"PASIRINKITE
| NomenklatūraZarya.Product AS ProductZarya,
| NomenklatūraZarya.Price AS PriceZarya,
| Nomenklatūra Rassvet Produktas AS Produktas Rassvet,
| NomenklatūraRassvet.Price AS PriceRassvet
|NUO

Tai nėra būtent tai, ko mums reikia, sujungkime produkto lauką į vieną ir apdorokime NULL:

Prašymas.Tekstas =
"PASIRINKITE
//ISNULL konstrukcija buvo aptarta užklausos kalbos funkcijų skyriuje
//jei kaina neapibrėžta, inicijuokite ją
//kodėl 1000000 žr. paaiškinimą žemiau
| ISNULL(NomenklatūraZarya.Price, 1000000) AS PriceZarya,
| ISNULL(NomenclatureRassvet.Price, 1000000) AS PriceRassvet
|NUO
| NomenklatūraZarya AS NomenklatūraZarya
| VISAS PRIJUNGIMAS NomenklatūraDawn AS NomenklatūraDawn
| Programinės įrangos nomenklatūraZarya.Product = NomenclatureDawn.Product";

Belieka pasirinkti minimalią kainą. Galutinis užklausos tekstas atrodys taip:

Prašymas.Tekstas =
"PASIRINKITE
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS produktas,
| PASIRINKIMAS
| KAI YRA ISNULL(NomenklatūraZarya.Kaina, 1000000) > ISNULL(Nomenklatūra Rassvet.Price, 1000000)
| THEN ISNULL (NomenclatureRassvet.Price, 1000000)
| ELSE ISNULL (nomenklatūraZarya.Kaina, 1000000)
| PABAIGA KAIP KAINA
|NUO
| NomenklatūraZarya AS NomenklatūraZarya
| VISAS PRIJUNGIMAS NomenklatūraDawn AS NomenklatūraDawn
| Programinės įrangos nomenklatūraZarya.Product = NomenclatureDawn.Product";

Jei kaina neapibrėžta (NULL), tada ją reikia inicijuoti tam tikra reikšme, kitaip palyginimo operacija už daugiau/mažiau žlugs su klaida. Kainą inicijuojame su nerealiai didele suma, kad ji „pralaimėtų“ palyginimo operacijoje, nes pagal problemos sąlygas parenkame mažiausią kainą.

← 1C užklausos kalbos funkcijos 8 | Prisijungia prie 1C 8 užklausų →

Redaktoriaus pasirinkimas
Kuo paskolos sutartis skiriasi nuo paskolos ar kredito sutarties ir kaip teisingai įforminti pinigų išdavimą darbuotojui programoje...

Prekių ataskaita programoje 1C Accounting 8.3 Prekės ataskaita programoje 1C Accounting 8.3 yra vieningos formos TORG-29,...

Šiame straipsnyje noriu apsvarstyti gyventojų pajamų mokesčio apskaičiavimo ir išskaičiavimo 1C 8.3 aspektus, taip pat 2-NDFL formų ataskaitų rengimą ir...

Ką daryti, jei apskaitoje padarytas klaidingas įrašas? Norėdami tai padaryti, galite naudoti specialius tokių įrašų taisymo būdus.
Yra bent 5 priežastys, kodėl atsisakoma įsigyti ir naudoti padirbtą programinę įrangą verslui. Tai yra: Neekonominė rizika:...
Kaip programoje surinkti ir išardyti prekes naudojant Prekybos valdymo pavyzdį? Būna, kad reikia...
Šiame straipsnyje noriu apsvarstyti gyventojų pajamų mokesčio apskaičiavimo ir išskaičiavimo 1C 8.3 aspektus, taip pat 2-NDFL formų ataskaitų rengimą ir...
1C užklausų kalba yra vienas iš pagrindinių 7.7 ir 8 versijų skirtumų. Vienas iš svarbiausių dalykų mokantis 1C programavimo yra...
KUDIR yra pajamų ir išlaidų knyga, kurią turi tvarkyti visos organizacijos ir individualūs verslininkai (Rusijos Federacijos mokesčių kodekso 346.24 straipsnis). Patvirtinti knygą su mokesčiu...