A lekérdezések eredményeinek egyesítése. Lekérdezés eredményeinek egyesítése Az összes adat egyesítése

Vannak helyzetek, amikor több lekérdezést kell kombinálni egy lekérdezésben, és ezen a tábla-illesztések nem tudnak segíteni. Ezt a legegyszerűbben példával lehet megmutatni.

Tegyük fel, hogy rendszerünkben az áruk vásárlásának és eladásának tényeit a Bevétel, illetve a Költség bizonylatok rögzítik. A szerződő fél lehet vevő vagy szállító. A tartozást áruszállítással lehet kiegyenlíteni:

Egy partner teljes tartozásának kiszámításához össze kell adnia az adott partnerre vonatkozó összes kiadást, és ki kell vonnia az ugyanattól a partnertől származó bevételek összegét. Ennek legegyszerűbb módja a COMBINE ALL operátor:

Kérelem.Szöveg =
"
//számítsuk ki, mennyit szállítottunk ki a vállalkozóknak
|KIVÁLASZTÁS
| Költség. Ügyfél,
|FROM
| Document.Expense AS Költség
|GROUP BY
| Költség. Ügyfél
|. ÖSSZES ÖSSZE
//számítsuk ki a szerződő felek összegét
//árut szállított nekünk
|KIVÁLASZTÁS
| Egyházközség,
//vegye az összeget negatív előjellel,
//hogy összevonva levonták a kiadás összegéből
| ÖSSZEG (-bevételi összeg)
|FROM
| Dokumentum Érkezés AS Érkezés
|GROUP BY
| Érkezés. Ügyfél";

Az első kérelemben kiszámítjuk a költségek összegét az egyes partnerek számára, a másodikban - azt az összeget, amelyért az egyes szerződő felek árut szállítottak nekünk. A második kérésben szereplő összeget mínuszjellel veszik fel, így az eredményül kapott tábla összecsukásakor azt levonják az adott partnernek küldött szállítmány összegéből. Ennek eredményeként egy ilyen táblázatot kapunk:

Nem pontosan ezt szerettük volna, de közel van. A kívánt eredmény eléréséhez nincs más hátra, mint a partnerek szerinti csoportosítás. Ehhez a lekérdezést egy ideiglenes táblába kell helyezni (az ideiglenes táblákkal való munkavégzésről itt lesz szó a tanfolyam zárt része ), majd válasszon ki és csoportosítson belőle mezőket:

Request = Új kérés;
Kérelem.Szöveg =
"VÁLASSZ
| Költség. Ügyfél,
| ÖSSZEG(Kiadás.Összeg) AS tartozás
|Place VT_Incoming Expense
|FROM
| Document.Expense AS Költség
|GROUP BY
| Költség. Ügyfél
|. ÖSSZES ÖSSZE
|KIVÁLASZTÁS
| Egyházközség,
| ÖSSZEG (-bevételi összeg)
|FROM
| Dokumentum Érkezés AS Érkezés
|GROUP BY
| Plébánia. Ügyfél
|;
|////////////////////////////////////////////////////////////////////////////////
|KIVÁLASZTÁS
| VT_Incoming Expense, szerződő fél.
| SZUM(VT_Jövedelemkiadás.Adósság) AS Adósság
|FROM
| VT_IncomingConsumption AS VT_IncomingConsumption
|GROUP BY
| VT_Incoming Expense szerződő fél";

A lekérdezések egyesítésének követelményei

Két lekérdezés összevonásakor a mezők számának azonosnak kell lennie, ha valamelyik lekérdezésből hiányoznak a mezők, akkor ezeket konstansként kell hozzáadni. Nézzük meg a fenti példát, legyen a költségbizonylaton is egy kedvezménymező, ami csökkenti a szerződő fél tartozásának összegét, de a nyugta bizonylaton nincs kedvezmény. Mi a teendő ebben az esetben? Így:

Request = Új kérés;
Kérelem.Szöveg =
"VÁLASSZ
| Költség. Ügyfél,

|FROM
| Document.Expense AS Költség
|GROUP BY
| Költség. Ügyfél
|. ÖSSZES ÖSSZE
|KIVÁLASZTÁS
| Egyházközség,
| SZUM(-bevétel.összeg),
// null mező kedvezmény hozzáadása
| 0
|FROM
| Dokumentum Érkezés AS Érkezés
|GROUP BY
| Érkezés. Ügyfél";

Már csak a kedvezményt és a csoportosítást kell levonni.

A sorrend is fontos. A mezők pontosan abban a sorrendben lesznek egyesítve, ahogyan mindkét lekérdezés KIVÁLASZTÁSI szakaszában meg vannak adva. Az előző példához képest cseréljük fel a kedvezmény és az összeg mezőket a nyugtamintában:

Request = Új kérés;
Kérelem.Szöveg =
"VÁLASSZ
| Költség. Ügyfél,
| ÖSSZEG(Kiadás.Összeg) adósságként,
| ÖSSZEG(Költség.Kedvezmény) AS Kedvezmény
|FROM
| Document.Expense AS Költség
|GROUP BY
| Költség. Ügyfél
|. ÖSSZES ÖSSZE
|KIVÁLASZTÁS
| Egyházközség,
//helyet váltani
| 0,
| ÖSSZEG (-bevételi összeg)
|FROM
| Dokumentum Érkezés AS Érkezés
|GROUP BY
| Érkezés. Ügyfél";

Jó napot, a blogoldal kedves olvasói. Ma részletesen megvitatjuk kérések kombinálása az 1C-ben. Le is töltheti a tipikus konfiguráció Kereskedelmi vállalkozás vezetése Kazahsztán számára, 1.0 kiadás.

Ha egy táblával dolgozik, akkor nincs szükség összekapcsolásra. Teljesen más a helyzet, ha több táblával dolgozol, és például az áruk vásárlásairól és eladásairól kell adatokat szerezned.

Az összevonáshoz záradékot használnak KOMBINÁL / UNION. Valójában megtörténik lekérdezési eredmények összevonása, vagyis az egyes lekérdezések egymástól függetlenül gyűjtenek adatokat, majd ezeket az eredményeket egyesítik egybe. És csak az utolsó kérésre hajtanak végre más műveleteket, például a rendelést és az összegek kiszámítását.

Ezzel szemben a lekérdezések összevonásakor az eredmények „függőleges összeragasztása” történik, vagyis az első lekérdezés eredménysorai jönnek először, majd a második.

Térjünk át a gyakorlatra:

Tétel, Mennyiség, Mennyiség KIVÁLASZTÁSA KOMBÁJN Tétel, Mennyiség, Összeg KIVÁLASZTÁSA Dokumentumból.Konsumables.Goods

A lekérdezés eredménye a következő:

Ennek eredményeként két táblát kapunk, amelyek összekapcsolódnak egymással. Nehezen látható, hol végződik a Nyugta bizonylat és hol kezdődik a Kiadás bizonylat. De teszünk valamit, hogy kitaláljuk:

SELECT Nómenklatúra, Mennyiség HOGYAN Plébánia száma, AS összeg SumPrikhod, 0 HOGYAN MennyiségFogyasztás, 0 HOGYAN SumExpenditure FROM Dokumentum.Belépés.Termékek KOMBÁJN Plébánia száma, 0 HOGYAN SumPrikhod, Mennyiség AS MennyiségFogyasztás, AS összeg SumExpenditure FROM Dokumentum.Fogyóeszközök.Áruk

Amint az a kérés szövegéből látható, minden egyes dokumentumhoz különböző álneveket állítunk be a mennyiségre és az összegre. Továbbá azon mezők helyére, ahol megkapjuk a mennyiség és a mennyiség értékeit, nullákat fogunk tenni. Erre azért van szükség, hogy az üres mennyiségek és mennyiségek helyére nullák kerüljenek.

Nómenklatúra Plébánia száma SumPrikhod MennyiségFogyasztás SumExpenditure
A4-es papír 25 14 500
Matricák 500l 8 4 880
A fájl átlátszó 5 4 100
Irodai készlet 8 8 840
Irodai készlet 1 1 105
A fájl átlátszó 1 820
Matricák 500l 1 610

Most el kell távolítanunk az ismétlődő elemeket a lekérdezés eredményéből. Két lekérdezésünk van, és ha mindegyiket külön-külön összecsukjuk, hogy kiküszöböljük az ismétlődő elemeket, akkor semmi sem fog működni. Ezért a kérelmet a következő formára redukáljuk:

VÁLASSZ
Nómenklatúra,
ÖSSZEG (Jövedelem száma) Jövedelemszámként,
SUM(SumPrikhod) AS SumPrikhod,
ÖSSZEG (Költségmennyiség) Költségmennyiségként,
SUM(SumExpense) AS SumExpense
TÓL
(
SELECT Nómenklatúra, Mennyiség HOGYAN Plébánia száma, AS összeg SumPrikhod, 0 HOGYAN MennyiségFogyasztás, 0 HOGYAN SumExpenditure FROM Dokumentum.Belépés.Termékek KOMBÁJN Tétel KIVÁLASZTÁSA, 0 HOGYAN Plébánia száma, 0 HOGYAN SumPrikhod, Mennyiség AS MennyiségFogyasztás, AS összeg SumExpenditure FROM Dokumentum.Fogyóeszközök.Áruk ) AS NestedQuery
CSOPORT Nómenklatúra szerint

Tehát azt látjuk, hogy a teljes lekérdezésünk zárójelben van, és a neve NestedQuery. Ez azért történik, hogy mindkét részlekérdezés rekordjait csoportosíthassuk, és kiküszöbölhessük az ismétlődő elemeket. Ezt a kialakítást beágyazott lekérdezésnek nevezik. A lekérdezés eredménye a következő:

Nómenklatúra Plébánia száma SumPrikhod MennyiségFogyasztás SumExpenditure
A4-es papír 25 14 500
Matricák 500l 8 4 880 1 610
Irodai készlet 5 4 100 1 1 105
A fájl átlátszó 8 8 840 1 820

Ennek eredményeként egy csoportosított táblát kapunk, amelyben a beágyazott részlekérdezések adatai érthető formába kerülnek.
Az allekérdezések száma nem haladhatja meg a 255-öt. Itt négy segédlekérdezést használtunk.

A lekérdezési nyelv az 1C 8.3 egyik alapvető mechanizmusa a fejlesztők számára. A lekérdezések segítségével gyorsan lekérheti az adatbázisban tárolt adatokat. Szintaxisa nagyon hasonlít az SQL-hez, de vannak eltérések.

Az 1C 8.3 (8.2) lekérdező nyelv fő előnyei az SQL-lel szemben:

  • hivatkozási mezők hivatkozásának megszüntetése (egy vagy több pont hivatkozása az objektum részleteire);
  • az eredményekkel dolgozni nagyon kényelmes;
  • virtuális táblák létrehozásának képessége;
  • a kérelmet angolul és oroszul is meg lehet írni;
  • az adatok blokkolásának képessége a holtpontok elkerülése érdekében.

A lekérdezési nyelv hátrányai az 1C-ben:

  • az SQL-lel ellentétben az 1C lekérdezések nem teszik lehetővé az adatok megváltoztatását;
  • a tárolt eljárások hiánya;
  • egy karakterlánc számmá alakításának lehetetlensége.

Vessünk egy pillantást az 1C lekérdezési nyelv alapvető konstrukcióiról szóló mini bemutatónkra.

Tekintettel arra, hogy az 1C-ben a lekérdezések csak adatok fogadását teszik lehetővé, minden lekérdezésnek a „SELECT” szóval kell kezdődnie. A parancs után megjelennek azok a mezők, amelyekből adatokat kell beszerezni. Ha „*”-t ad meg, az összes elérhető mező ki lesz jelölve. A „FROM” szó után megjelenik az a hely, ahonnan az adatok kiválasztásra kerülnek (dokumentumok, nyilvántartások, címtárak stb.).

Az alábbiakban tárgyalt példában a teljes nómenklatúra nevei a „Nómenklatúra” könyvtárból vannak kiválasztva. A „HOGYAN” szó után a táblázatok és mezők álnevei (nevei) láthatók.

VÁLASSZ
Nómenklatúra Név AS A nómenklatúra neve
TÓL
Directory.Nomenclature AS Nómenklatúra

A „SELECT” parancs mellett kulcsszavakat adhat meg:

  • KÜLÖNFÉLE. A lekérdezés csak azokat a sorokat jelöli ki, amelyek legalább egy mezőben különböznek egymástól (ismétlődések nélkül).
  • ELSŐ n, Hol n– az eredmény elejétől a kiválasztandó sorok száma. Leggyakrabban ezt a konstrukciót a válogatással együtt használják (ORDER BY). Például, ha bizonyos számú, dátum szerint friss dokumentumot kell kiválasztania.
  • ENGEDÉLYEZVE. Ez a kialakítás lehetővé teszi, hogy az adatbázisból csak az elérhető rekordokat válasszuk ki az aktuális felhasználónak. Ennek használatának alapjai kulcsszó A felhasználó hibaüzenetet kap, amikor olyan rekordokat próbál lekérdezni, amelyekhez nem fér hozzá.

Ezek a kulcsszavak együtt vagy külön-külön is használhatók.

VÁLTOZTANI

Ez a javaslat blokkolja az adatokat a kölcsönös konfliktusok elkerülése érdekében. A zárolt adatok nem kerülnek beolvasásra másik kapcsolatból a tranzakció befejezéséig. Ebben a záradékban megadhat bizonyos táblákat, amelyeket zárolni kell. Ellenkező esetben mindenki blokkolva lesz. A kialakítás csak az automatikus zárolási módra vonatkozik.

Leggyakrabban a „FOR CHANGE” záradékot használják egyenlegek fogadásakor. Hiszen ha több felhasználó dolgozik egyidejűleg a programban, miközben az egyik egyenleget kap, egy másik módosíthatja azokat. Ebben az esetben a kapott maradék már nem lesz helyes. Ha ezzel az ajánlattal zárolja az adatokat, addig amíg az első alkalmazott meg nem kapja a megfelelő egyenleget és mindent megtesz vele szükséges manipulációk, a második alkalmazottnak várnia kell.

VÁLASSZ
Kölcsönös elszámolások alkalmazottak,
Kölcsönös elszámolások Egyenleg
TÓL
Felhalmozások nyilvántartása Kölcsönös elszámolások az alkalmazottakkal AS Kölcsönös elszámolások
VÁLTOZTANI

AHOL

A tervezésre azért van szükség, hogy valamilyen szelekciót kényszerítsünk a feltöltött adatokra. A regiszterekből történő adatok beszerzésének egyes esetekben ésszerűbb kiválasztási feltételeket megadni a virtuális táblák paramétereiben. A "WHERE" használatakor először minden rekord lekérésre kerül, és csak ezután történik a kijelölés, ami jelentősen lelassítja a lekérdezést.

Az alábbiakban egy példa látható egy kapcsolattartó személy megszerzésére irányuló kérelemre egy adott pozícióhoz. A kiválasztási paraméter formátuma: &ParameterName (a paraméter neve tetszőleges).

KIVÁLASZTÁS (CASE)

A kialakítás lehetővé teszi, hogy a feltételeket közvetlenül a kérelem törzsében adjon meg.

Az alábbi példában a „További mező” szöveget fog tartalmazni attól függően, hogy a dokumentum feladásra került-e vagy sem:

VÁLASSZ
BelépőT&U.Link,
VÁLASZTÁS
MIKOR a felvételiT&U.Végzett
AKKOR „A dokumentumot elfogadták!”
EGYÉB „A dokumentum nem került feladásra...”
VÉGE MINT Kiegészítő mező
TÓL
Az áruk és szolgáltatások átvétele HOGYAN Átvételi feltételek

CSATLAKOZIK

Összekapcsol két táblát egy adott kapcsolati feltétel alapján.

BAL/JOBB CSATLAKOZTATÁS

A LEFT join lényege, hogy az első megadott táblát teljes egészében felvesszük, a másodikat pedig a kapcsolódási feltételnek megfelelően csatoljuk hozzá. Ha a másodikban nincsenek az első táblának megfelelő rekordok, akkor ezek értéke NULL lesz. Egyszerűen fogalmazva, a fő tábla az első megadott tábla, és a második tábla adatai (ha vannak ilyenek) már ki vannak cserélve annak adataira.

Például az árucikkeket az „Áruk és szolgáltatások átvétele” bizonylatokból, az árakat pedig a „Cikkárak” információs nyilvántartásból kell beszerezni. Ebben az esetben, ha valamelyik pozíció ára nem található, cserélje ki helyette a NULL értéket. A dokumentum összes eleme ki lesz választva, függetlenül attól, hogy van-e ára vagy sem.

VÁLASSZ
Nyugta és U. Nómenklatúra,
Árak. Ár
TÓL
Az áruk és szolgáltatások átvétele HOGYAN Átvétel és specifikációk
BELSŐ CSATLAKOZÁS RegisztrációInformation.PricesNomenclature.SliceLast AS Árak
Software Receipt&U.Nomenclature = Prices.Nomenclature

JOBBAN minden pontosan az ellenkezője.

TELJES KAPCSOLAT

Ez a kapcsolattípus abban különbözik a korábbiaktól, hogy ennek eredményeként mind az első, mind a második tábla összes rekordja visszakerül. Ha a megadott hivatkozási feltétel alapján nem található rekord az első vagy a második táblában, a rendszer NULL értéket ad vissza.

Az előző példában szereplő teljes kapcsolat használatakor az „Áruk és szolgáltatások átvétele” bizonylat összes tétele, valamint a „Cikkárak” nyilvántartásból az összes legfrissebb ár ki lesz választva. A nem található rekordok értéke mind az első, mind a második táblában NULL lesz.

BELSŐ CSATLAKOZÁS

Az INNER JOIN és a FULL JOIN között az a különbség, hogy ha egy rekord nem található legalább az egyik táblában, akkor a lekérdezés egyáltalán nem jeleníti meg. Ennek eredményeként az „Áru és szolgáltatás átvétele” bizonylatból csak azok a tételek kerülnek kiválasztásra, amelyekre a „Cikkárak” információs nyilvántartásban vannak bejegyzések, ha az előző példában a „TELJES” szót „BELSŐ”-re cseréljük.

GROUP BY

Az 1C lekérdezések csoportosítása lehetővé teszi a táblázat sorainak összecsukását (mezők csoportosítását) egy bizonyos közös jellemző szerint (mezők csoportosítása). A csoportosító mezők csak összesítő függvényekkel jeleníthetők meg.

A következő lekérdezés eredménye a terméktípusok listája lesz, a hozzájuk tartozó maximális árakkal.

VÁLASSZ
,
MAX(Ár.Ár) AS Ár
TÓL

GROUP BY
Árak.Nómenklatúra.Nómenklatúra típusa

EREDMÉNYEK

A csoportosítással ellentétben az összegek használatakor az összes rekord megjelenik, és az összesített sorok hozzáadódnak hozzájuk. A csoportosítás csak az általánosított rekordokat jeleníti meg.

Az eredmények összegezhetők a teljes táblázatra (az „Általános” kulcsszó használatával), több mezőre, hierarchikus felépítésű mezőkre (kulcsszavak „HIERARCHIA”, „CSAK HIERARCHIA”). Az eredmények összegzésekor nem szükséges aggregált függvényeket használni.

Nézzünk egy, a fenti példához hasonló példát csoportosítással. Ebben az esetben a lekérdezés eredménye nem csak csoportosított mezőket ad vissza, hanem részletes rekordokat is.

VÁLASSZ
Prices.Nomenclature.Type of Nomenclature AS A nómenklatúra típusa,
Árak.Ár AS ár
TÓL
A nómenklatúra adatainak pillanatképe
EREDMÉNYEK
MAXIMUM (ár)
ÁLTAL
TípusNómenklatúra

HAJNÁL

Ez az operátor hasonló a WHERE operátorhoz, de csak összesített függvényekhez használatos. A többi mezőt, kivéve azokat, amelyeket ez az operátor használ, csoportosítani kell. A WHERE operátor nem alkalmazható az összesített függvényekre.

Az alábbi példában egy cikk maximális árai vannak kiválasztva, ha azok meghaladják az 1000-et, cikktípus szerint csoportosítva.

VÁLASSZ

MAX(Ár.Ár) AS Ár
TÓL
A nómenklatúra adatainak pillanatképe
GROUP BY
Árak.Nómenklatúra.Nómenklatúra típusa
HAJNÁL
MAXIMUM(Árak.Ár) > 1000

MEGRENDELÉS

Az ORDER BY operátor rendezi a lekérdezés eredményét. Annak érdekében, hogy a rekordok megjelenjenek állandó jelleggel, AUTOMATIKUS RENDELÉS használatos. Primitív típusok a szokásos szabályok szerint rendezve. A referenciatípusok GUID szerint vannak rendezve.

Példa az alkalmazottak név szerint rendezett listájára:

VÁLASSZ
Alkalmazottak.Name AS Név
TÓL
Directory.Employees HOGYAN Alkalmazottak
MEGRENDELÉS
Név
AUTOMATIKUS RENDELÉS

Egyéb 1C lekérdezési nyelvi konstrukciók

  • KOMBÁJN– két lekérdezés eredménye egybe.
  • ÖSSZE MINDENT– hasonló a COMBINE-hoz, de az azonos sorok csoportosítása nélkül.
  • ÜRES ASZTAL– néha használják lekérdezések összekapcsolásakor egy üres beágyazott tábla megadására.
  • HELY– ideiglenes táblát hoz létre az összetett 1C lekérdezések optimalizálásához. Az ilyen kéréseket kötegelt kéréseknek nevezzük.

Lekérdezési nyelv jellemzői

  • SUBSTRING egy karakterláncot egy megadott pozícióból meghatározott számú karakterre csonkol.
  • ÉV...MÁSODIK lehetővé teszi egy numerikus típus kiválasztott értékének lekérését. A beviteli paraméter a dátum.
  • IDŐSZAK KEZDETE és IDŐSZAK VÉGE dátumokkal való munka során használják. Az időszak típusa (NAP, HÓNAP, ÉV stb.) kiegészítő paraméterként van feltüntetve.
  • ADDKDATE lehetővé teszi egy bizonyos típusú meghatározott időpont hozzáadását vagy kivonását egy dátumból (MÁSODPERC, PERC, NAP stb.).
  • KÜLÖNBSÉG meghatározza két dátum közötti különbséget, jelezve a kimeneti érték típusát (NAP, ÉV, HÓNAP stb.).
  • ISNULL a hiányzó értéket a megadott kifejezéssel helyettesíti.
  • KÉPVISELÉS és KÉPVISELŐLINKEK megkapja a megadott mező karakterlánc-ábrázolását. Alkalmazzon bármilyen értékre, és csak referenciaértékekre.
  • TÍPUS, TÍPUS ÉRTÉKEK a bemeneti paraméter típusának meghatározására szolgálnak.
  • LINK van logikai operátorösszehasonlítások az attribútum értéktípusához.
  • EXPRESSZérték konvertálására szolgál a kívánt típusra.
  • DATETIME„Dátum” típusú értéket kap numerikus értékekből (év, hónap, nap, óra, perc, másodperc).
  • JELENTÉS az 1C kérésben előre meghatározott értékek jelzésére szolgál - könyvtárak, felsorolások, jellemzőtípusok tervei. Használati példa: " Ahol jogi személy = érték (felsorolás. Jogi személy. Magánszemély)«.

Lekérdezéskészítő

Az 1C segítségével lekérdezések létrehozásához van egy nagyon kényelmes beépített mechanizmus - a lekérdezéstervező. A következő fő lapokat tartalmazza:

  • „Táblázatok és mezők” – tartalmazza a kiválasztandó mezőket és azok forrásait.
  • „Kapcsolatok” – a CONNECTION struktúra feltételeit írja le.
  • „Csoportosítás” – a csoportosítási struktúrák leírását és az ezek alapján összegzett mezőket tartalmazza.
  • „Feltételek” - felelős a kérelemben szereplő adatok kiválasztásáért.
  • "További" - további lehetőségek kérés, például a „SELECT” parancs kulcsszavai stb.
  • „Joins/Aliases” – a táblák összekapcsolásának lehetőségei meg vannak jelölve és az álnevek megadva (a „HOGYAN” konstrukció).
  • A „Rendelés” felelős a lekérdezések eredményének rendezéséért.
  • „Összesen” – hasonló a „Csoportosítás” laphoz, de a „TOTALS” konstrukcióhoz használatos.

Maga a kérelem szövege a bal alsó sarokban található „Kérés” gombra kattintva tekinthető meg. Ebben a formában manuálisan javítható vagy másolható.


Konzol kérése

Egy lekérdezés eredményének Vállalati módban gyors megtekintéséhez vagy az összetett lekérdezések hibakereséséhez használja a . Beleírjuk a kérés szövegét, beállítjuk a paramétereket, és megjelenítjük az eredményt.

A lekérdezési konzolt letöltheti az ITS lemezről, vagy a webhelyről.

; Beágyazott lekérdezések (fejlesztés alatt).

Áruk és szolgáltatások átvételeÉs Az áru visszaküldése a szállítónak a meghatározott időtartamra.

Új lapok: Szakszervezetek/Álnevek.

4. lecke elméleti része

Az 1C Query Builder lehetővé teszi lekérdezési kombinációk létrehozását. Segítségükkel több lekérdezésből kapott adatokat szekvenciálisan kiadhatja kapcsolatok használata nélkül. Az összevonás egyetlen feltétele, hogy minden egyes kérelemben ugyanaz a mezőkészlet.

A tervezőben lépjen a lapra Szakszervezetek/Álnevek. Lekérdezési összekapcsolások létrehozására és álnevek beállítására szolgál a lekérdezési mezők számára. Mezőálnevekre van szükség, ha nem elégedett a szabványos adatbázismezőnevekkel. Ha egy lekérdezési mező csak egy adatbázistábla mezőből áll, akkor nem szükséges álnév. Ha lekérdezési nyelvi függvényeket használt egy mező létrehozásakor, akkor egy ilyen mezőhöz álnevet kell megadni. A lekérdezéstervező szabványos álneveket hoz létre az ilyen mezőkhöz 1. mező…N. mező, ezek az álnevek lecserélhetők olyanokra, amelyek kényelmesek az Ön számára.

Nézzük a lap szakaszait Szakszervezetek/Álnevek:

  • Kérések(piros keret). Ez a szakasz egy táblázatot tartalmaz, amely az összes kombinált lekérdezést mutatja. A szakasz felett található menü segítségével újakat adhat hozzá, meglévőket másolhat, törölheti a kiválasztottakat, és módosíthatja a helyüket. Kérelem hozzáadásakor vagy másolásakor a tervező a lapra lép Táblázatok és mezők, ahol egy új lekérdezéshez adatbázistáblákat és kötelező mezőket adhatunk meg. A lekérdezések között a megjelenő lapok segítségével válthat jobb oldalon tervező, mivel új 1c kérések kerülnek hozzáadásra;

  • A táblázatban Kérések két oszlop:
    • Név. Automatikus beállítás a formátumban 1. kérés…N. kérelem;
    • Nincsenek ismétlődések. Állítsa be, hogy mikor kell kizárni az ismétlődő sorokat egy korábbi lekérdezéssel való egyesítéskor. Érdemes megjegyezni, hogy ez a jelző csak a beállított kérés és az előző kérés egyesítésekor működik.

  • Becenevek(kék keret). Ebben a részben álneveket állíthat be a lekérdezési mezőkhöz, valamint beállíthatja a mezők megfelelőségét a kombinált lekérdezésekhez, hogy a lekérdezés eredményeként egy oszlopban legyenek, és egy álnév alatt jelenjenek meg. Ha az egyesített lekérdezések mezőinek neve megegyezik, akkor a köztük lévő megfelelés automatikusan korrigálásra kerül. A mezőegyeztetés konfigurálásához meg kell találni a táblázatban a kívánt alias sort, az oszlopokban meg kell keresni a kívánt lekérdezést, és a legördülő listából ki kell választani a mezőt.

A 4. lecke gyakorlati része

Nézzük meg az óra elején adott probléma megoldását. Hadd emlékeztessem a feltételekre:

Feladat: lekérdezéssel jelölje ki az összes feladott dokumentumot Áruk és szolgáltatások átvételeÉs Az áru visszaküldése a szállítónak a meghatározott időtartamra.

  1. Hozzon létre egy új kérést;
  2. Indítsuk el a lekérdezéstervezőt;
  3. Válasszunk ki egy táblázatot Áruk és szolgáltatások átvétele a cérnából Dokumentumok;
  4. Az asztalról Áruk és szolgáltatások átvétele válasszon ki egy mezőt Link;
  5. Menjünk a lapra Feltételek;
  6. A szakaszban Mezők, nyissuk meg a fonalat Áruk és szolgáltatások átvétele a „+” gombbal;
  7. Keressük a kellékeket Dátumés húzza a feltételek szakaszba, válassza ki az összehasonlító operátort Közöttés adja meg például az időszak kezdetének és végének paramétereit Az időszak kezdeteÉs Az időszak vége;
  8. Menjünk a lapra Szakszervezetek/Álnevek.
  9. Új kérés hozzáadása, megjelölés Nincsenek ismétlődések nem kell emelni, ahogy használjuk különböző típusok dokumentumok;

  10. Az 1C Query Builder automatikusan a lapra lép Táblázatok és mezők. Az ablak jobb oldalán látni fogja, hogy a második csatlakozási kérelem aktív;


  11. Ismételjük meg a táblázat 1-7. pontját Áruk visszaküldése a szállítónak;
  12. Menjünk újra a lapra Szakszervezetek/Álnevek. Az álnevek táblázatában látható, hogy a mezők Link mindkét tábla ugyanabban a sorban van, ami azt jelenti, hogy a lekérdezés eredményeként mindkét dokumentumra mutató hivatkozások ugyanabban az oszlopban találhatók;
  13. Változtassuk meg az oszlop nevét Link-on Dokumentum(állítsa be a mező aliast). Ehhez kattintson duplán a bal egérgombbal a mező nevére. Ezután beállíthatja a nevét, írja oda Dokumentum;

  14. A kérés készen áll, kattintson az „OK” gombra a tervezőablak alján.

Ennek eredményeként egy kérést kapunk a következő szöveggel.

Ha egy táblával dolgozik, akkor nincs szükség összekapcsolásra. Teljesen más a helyzet, ha több táblával dolgozik, és például az áruk vásárlásáról és eladásáról is adatokat kell szereznie.

Az összevonáshoz záradékot használnak KOMBÁJN. Valójában az történik, hogy a lekérdezések eredményeit összevonják, vagyis minden lekérdezés egymástól függetlenül gyűjt adatokat, majd ezeket az eredményeket egyesítik. És csak az utolsó kérésre hajtanak végre egyéb műveleteket, például a rendelést és az összegek kiszámítását.

A lekérdezések összevonásakor az eredmények „függőleges összeragasztása” történik, vagyis az első lekérdezés eredménysorai jönnek először, majd a második.

Térjünk át a gyakorlatra:
Kód 1C v 8.x SELECT
Nómenklatúra,
Mennyiség,
Összeg
TÓL
Dokumentum.Belépő.Áruk

KOMBÁJN

VÁLASSZ
Nómenklatúra,
Mennyiség,
Összeg
TÓL
Dokumentum.Belépő.Áruk

A lekérdezés eredménye a következő:
Nómenklatúra Mennyiség Összeg
A4-es papír 25 14 500
Matricák 500l 8 4 880
Fájl átlátszó 5 4 100
Irodai készlet 8 8 840

Ennek eredményeként két táblát kapunk, amelyek összekapcsolódnak egymással. Nehezen látható, hol végződik a Nyugta bizonylat és hol kezdődik a Kiadás bizonylat. De teszünk valamit, hogy kitaláljuk:
Kód 1C v 8.x
VÁLASSZ
Nómenklatúra,
Mennyiség AS Kol.
Bejövő összegként,
0 AS mennyiségi költség,
0 AS ÖsszegKöltség
TÓL
Dokumentum.Belépő.Áruk

KOMBÁJN

VÁLASSZ
Nómenklatúra,
0 AS KolPrikhod,
0 AS SumPrikhod,
Mennyiség mint mennyiség Felhasználás,
Amount AS AmountExpense
TÓL
Dokumentum. Fogyóeszközök. Áruk

Amint az a kérés szövegéből látható, minden egyes dokumentumhoz különböző álneveket állítunk be a mennyiségre és az összegre. Továbbá azon mezők helyére, ahol megkapjuk a mennyiség és a mennyiség értékeit, nullákat fogunk tenni. Erre azért van szükség, hogy az üres mennyiségek és mennyiségek helyére nullák kerüljenek.

A4-es papír 25 14 500
Matricák 500l 8 4 880
Fájl átlátszó 5 4 100
Irodai készlet 8 8 840
Irodai készlet 1 1 105
Fájl átlátszó 1 820
Matricák 500l 1610

Most el kell távolítanunk az ismétlődő elemeket a lekérdezés eredményéből. Két lekérdezésünk van, és ha mindegyiket külön-külön összecsukjuk, hogy kiküszöböljük az ismétlődő elemeket, akkor nem járunk sikerrel. Ezért a kérelmet a következő formára redukáljuk:
Kód 1C v 8.x
VÁLASSZ
Nómenklatúra,
ÖSSZEG (Jövedelem száma) Jövedelemszámként,
SUM(SumPrikhod) AS SumPrikhod,
ÖSSZEG (Költségmennyiség) Költségmennyiségként,
SUM(SumExpense) AS SumExpense
TÓL

(VÁLASSZ
Nómenklatúra,
Mennyiség AS Kol.
Bejövő összegként,
0 AS mennyiségi költség,
0 AS ÖsszegKöltség
TÓL
Dokumentum.Belépő.Áruk

KOMBÁJN

VÁLASSZ
Nómenklatúra,
0 AS KolPrikhod,
0 AS SumPrikhod,
Mennyiség mint mennyiség Felhasználás,
Amount AS AmountExpense
TÓL
Document.Consumables.Goods) AS AttachedRequest

CSOPORT Nómenklatúra szerint

Tehát azt látjuk, hogy a teljes lekérdezésünk zárójelben van, és a neve NestedQuery. Ez azért történik, hogy mindkét részlekérdezés rekordjait csoportosíthassuk, és kiküszöbölhessük az ismétlődő elemeket. Ezt a kialakítást beágyazott lekérdezésnek nevezik. A lekérdezés eredménye a következő:
Nomenklatúra KolIncoming SumIncoming KolExpenditure SumExpenditure
A4-es papír 25 14 500
Matricák 500l 8 4 880 1 610
Irodai készlet 5 4 100 1 1 105
Átlátszó fájl 8 8 840 1 820

Ennek eredményeként egy csoportosított táblát kapunk, amelyben a beágyazott részlekérdezések adatai érthető formába kerülnek. Az allekérdezések száma nem haladhatja meg a 255-öt. Itt négy segédlekérdezést használtunk.

Ha csak el akarunk menni egyedi értékek csoportosítás használata nélkül rögzíti. Egy COMBINE mondatot kell írnia az ALL kulcsszó nélkül.

Az oldalról vett információ

Problémák