1s 8 žiadosť o dávku. Dávkové požiadavky na figuríny

Pozrime sa, ako sa zmenila (či skôr doplnila) syntax textov dopytov na jednoduchom príklade: Dokument sa spracováva Spotrebný obsahujúca v tabuľkovej časti Tovar zoznam predaného tovaru a množstvo. Pri realizácii takéhoto dokladu je potrebné zabezpečiť kontrolu záporných zostatkov uložených v akumulačnej evidencii zostatkov Zostávajúci tovar.

Konfiguračná štruktúra je znázornená na obrázku.

(16,22 kilobajtov) Počet stiahnutí: 64

Vytvorme dotaz na tabuľkovú časť dokumentu a virtuálnu tabuľku Zvyšky akumulačný register. Zoberme do úvahy možné duplicitné riadky v dokumente, aby sme to urobili, záznamy zoskupíme.

Žiadosť = Nová požiadavka;
Request.Text = "
|VYBERTE
| nomenklatúra dok.,
| SUM(Doc.Množstvo) AKO Dok._množstvo,
| MINIMUM(ISNULL(Reg.QuantityRemaining,0)) AS Reg_Quantity
|OD
| Dokument.Spotrebný materiál.Tovar AS Doc
| ĽAVÉ PRIPOJENIE
| RegisterAccumulations.RemainingProducts.Remaining() AS Reg
| BY
| Doc. Nomenclature = Reg. Nomenklatúra
| KDE
| Odkaz = &Odkaz
|SKUPINA PODĽA nomenklatúry dokumentov";

//Prejdenie registrom

EndCycle;

Koniec procedúry

Prirodzene, vyššie uvedený dotaz nie je absolútne optimálny. Pomocou vnorených dotazov ju zoptimalizujeme: Tabuľkovú časť dokladu pred napojením na tabuľku zostatkov zoskupíme, do parametrov virtuálnej tabuľky odovzdáme zoznam tovaru ako hodnotu podmienky pre výpočet zostatkov. . V dôsledku toho bude mať naša žiadosť nasledujúcu formu:

|VYBERTE
| nomenklatúra dok.,

|OD
| (VYBERTE si

| OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Odkaz = &Odkaz
| SKUPINA PODĽA nomenklatúry) AS Doc
| ĽAVÉ PRIPOJENIE
Nomenklatúra B
| (VYBERTE RÔZNE
| Nomenklatúra
| OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Link = &Link)) AS Reg
| BY

Ak by dopyt potreboval získať údaje zo zvyšku rôznych registrov, potom by sa hodnota filtra, a teda aj náš druhý vnorený dopyt, opakovala vo všetkých parametroch virtuálnych tabuliek. Prirodzene, s každým vnoreným dopytom systém opäť pristupuje k databáze na získanie údajov.

Dočasné tabuľky

Nepamätám si, z akého vydania bolo možné použiť dočasné tabuľky v dotazoch. Na to použite objekt Temporary Table Manager. Správca dočasných tabuliek v podstate popisuje priestor názvov dočasných tabuliek a je zodpovedný za ich vytváranie a ničenie v databáze.

Samotné dočasné tabuľky sú v skutočnosti fyzicky vytvorené v databáze, takže by ste s nimi mali zaobchádzať opatrne, pretože diskový subsystém je v súčasnosti najpomalšou technológiou a rýchlosť vytvárania a ničenia tabuliek od neho priamo závisí.

Prepíšme dotaz tak, aby používal dočasné tabuľky. Do dočasných tabuliek umiestnime zoskupenú tabuľkovú časť dokumentu a zoznam produktov pre filter virtuálnej tabuľky:

Postup spracovania (zlyhanie, režim)

MVT = New TemporaryTableManager;

Žiadosť = Nová požiadavka;
Request.Text = "
|VYBERTE
| Nomenklatúra, SUM(množstvo) AS množstvo
|Umiestnite DocTCH
|OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Odkaz = &Odkaz
|SKUPINA PODĽA nomenklatúry";

Žiadosť = Nová požiadavka;
Query.TemporaryTableManager = MVT;
Query.Text = "VYBERTE RÔZNE
| Nomenklatúra
|Umiestnite zoznam produktov
|OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Odkaz = &Odkaz";

Žiadosť = Nová požiadavka;
Query.TemporaryTableManager = MVT;
Request.Text = "
|VYBERTE
| nomenklatúra dok.,
| Doc.Quantity AS Doc_Quantity,
| ISNULL(Reg.QuantityRemaining,0) AS Reg_Quantity
|OD
| DocTCH AS Doc
| ĽAVÉ PRIPOJENIE
| RegisterAccumulations.Remains of Goods.Remains(,
| Nomenklatúra
| OD
| BY
| Doc. Nomenclature = Reg. Nomenklatúra“;

RequestResult = Request.Execute();
Selection = QueryResult.Select();

Zatiaľ čo Select.Next() Loop

//Kontrola záporných zostatkov

//Prejdenie registrom

EndCycle;

Koniec procedúry

Pri použití dočasných tabuliek sa príkaz použije v texte dotazu Miesto na vytvorenie novej dočasnej tabuľky systém v tomto prípade neprenesie do výsledku dotazu obsah tejto tabuľky (pozri poznámku 1 a poznámku 2 v texte vyššie), ale počet záznamov umiestnených v dočasnej tabuľke; ak želáte, nemôžete túto hodnotu prijať.

Je možné použiť aj návod Zničiť v tomto prípade sa zničí dočasná tabuľka, inak sa zničia dočasné tabuľky spolu s dočasným objektom správcu tabuliek.

V našom hlavnom dotaze som ako označenie zdroja údajov použil názvy dočasných tabuliek (musí im byť priradené synonymum, ktoré vidíme v texte). Dočasné tabuľky môžete použiť ako zdroj viackrát, čo vám pri šikovnom použití umožní skrátiť text dopytu (zlepšenie čitateľnosti zložitých dopytov) a zvýšiť rýchlosť (pri použití údajov dočasných tabuliek na viacerých miestach v dopyte) .

Dávkové požiadavky

Dávkové dotazy logicky dopĺňajú funkcionalitu dočasných tabuliek a poskytujú viac možností pri práci s dotazmi.

V dávkovom dotaze môžete skutočne opísať niekoľko dotazov, ktoré sú navzájom prepojené pomocou dočasných tabuliek a nesúvisia (je to možné, ale nie je jasné prečo?). Výsledkom je, že môžete vykonávať všetky požiadavky postupne a získať ako výsledok buď pole s výsledkami každej požiadavky, alebo výsledok poslednej. Ak chcete získať pole s výsledkami dotazu, použite metódu ExecuteBatch() objekt žiadosti a získať výsledok poslednej žiadosti RunQuery().

V texte požiadavky sú požiadavky na balík oddelené symbolom „;“ (bodkočiarka). Pre jednu dávkovú požiadavku existuje len jeden menný priestor pre virtuálne tabuľky. Použitie dočasného správcu tabuliek sa nevyžaduje, ale je možné, ak chcete preniesť dočasné tabuľky z jedného dávkového dotazu do druhého.

Prepíšme postup na používanie dávkových požiadaviek:

Postup spracovania (zlyhanie, režim)

Žiadosť = Nová požiadavka;
Request.Text = "
|VYBERTE
| Nomenklatúra, SUM(množstvo) AS množstvo
|Umiestnite DocTCH
|OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Odkaz = &Odkaz
|SKUPINA PODĽA nomenklatúry
|;
|VYBERTE RÔZNE
| Nomenklatúra
|Umiestnite zoznam produktov
|OD
| Dokument.Spotrebný materiál.Tovar
| KDE
| Odkaz = &Odkaz
|;
|VYBERTE
| nomenklatúra dok.,
| Doc.Quantity AS Doc_Quantity,
| ISNULL(Reg.QuantityRemaining,0) AS Reg_Quantity
|OD
| DocTCH AS Doc
| ĽAVÉ PRIPOJENIE
| RegisterAccumulations.Remains of Goods.Remains(,
| Nomenklatúra B(VYBERTE RÔZNE
| Nomenklatúra
| OD
| Zoznam produktov AS Zoznam produktov)) AS Reg
| BY
| Doc. Nomenclature = Reg. Nomenklatúra“;

Zatiaľ čo Select.Next() Loop

//Kontrola záporných zostatkov

//Prejdenie registrom

EndCycle;

Koniec procedúry

V skutočnosti som odstránil definíciu objektu dotazu a použitie dočasného správcu tabuliek, skombinoval som texty dotazov (všimnite si oddeľovač „;“ medzi textami). Výsledkom je, že text dopytu sa stal čitateľnejším (a pri použití nástroja na tvorbu dopytov sa čitateľnosť dopytu výrazne zvýši).

Po vykonaní dotazu do premennej ArrayResults budeme mať 3 prvky. Prvé dva budú obsahovať číslo charakterizujúce počet záznamov umiestnených v dočasných tabuľkách DocTC A Zoznam produktov a tretí bude obsahovať výber s poľami Nomenklatúra, Doc_ Množstvo a Reg_ Množstvo.

Do premennej Výsledok dotazu dostane sa len vzorka.

No, to je všetko pre dávkové požiadavky. Veľmi pohodlný mechanizmus ako z pohľadu písania dotazov, tak aj z pohľadu čítania zložitých dotazov.

Firemný blog 1C GOODWILL

Platforma 1C Enterprise vám umožňuje vykonávať niekoľko dopytov postupne naraz. V 1C sa to nazýva balík žiadostí. V rámci jedného balíka je každá požiadavka oddelená bodkočiarkou.

Na dosiahnutie postupného vykonávania dotazov v balíku sa spravidla najprv vytvoria dočasné tabuľky, potom sa vytvoria podmienky na ich zdieľanie, ako sú filtre, spojenia a spojenia. Vďaka tomu sa dosiahne konečný výsledok. Dočasné tabuľky získané ako výsledok akýchkoľvek dotazov v dávke naďalej existujú až do konca dávky ako celku alebo do vykonania dotazu, ktorý zničí dočasné tabuľky.

Okrem toho použitie dávkových dotazov a dočasných tabuliek výrazne zvyšuje čitateľnosť celého segmentu tohto kódu. Komplexné dotazy, ktoré obsahujú aj vnorené dotazy, môžu byť veľmi ťažko pochopiteľné. Ak však dlhý zložitý dotaz rozložíte na niekoľko a dokonca použijete dočasné tabuľky, nielenže to zlepší vnímanie, ale vo väčšine prípadov to povedie k zvýšeniu výkonu.

Ďalším dôležitým detailom v prospech dávkových dotazov v 1C je, že na rozdiel od vnorených dotazov môžeme samostatne získať výsledok každého dotazu v dávke.

Príklad vytvorenia balíka požiadaviek v jazyku 1C

Aby sme videli príklad vytvorenia balíka dotazov, použijeme návrhára dotazov, ktorý pre prehľadnosť zavoláme z konzoly dotazov. Okamžite teda vidíme výsledok spustenia balíka.

Vytvorme jednoduchú dávkovú požiadavku. Navrhujem okamžite vložiť text požiadavky do konzoly a potom otvoriť konštruktor a pozrieť sa, ako sa vytvára balík žiadosti. Pridajte novú požiadavku do konzoly a vložte nasledujúci text:

Samonosný. Rodič,

Samonosný. Kód,

Samonosný kód rýchleho výberu,

Samonosné. Meno,

Samonosné. Typ,

Samonosné. Podsúvahové,

Samonosné. Kvantitatívne,

Účtovná osnova Samonosné AS Samonosné

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

Samonosné typySubconto.Line Number AS Číslo riadku,

SamonosnéTypy Subconto.ViewSubconto AS TypeSubconto,

SamonosnéTypySubconto.TypeSubconto.Name AS Názov,

Samonosné typySubconto.TypeSubconto.ValueType ASValueType,

Samonosné typySubconto.OnlyTurnover AS OnlyTurnover,

SamonosnéTypySubconto.Summary AS Summative

Účtovná osnova Samonosný Typ podúčtu AS Samoúčtovníctvo Typy podúčtu

TRIEDIŤ PODĽA

Samonosné typySubconto.NumberLines

U mňa to vyzerá takto:

Teraz poďme k návrhárovi dotazov. Tu nás bude zaujímať karta „Požiadať o balík“:

Ako vidíte, máme balík dvoch žiadostí. Dvojitým kliknutím na ktorýkoľvek z nich môžete pokračovať v jeho úprave:

Kliknite na tlačidlo „OK“ a skúste zobraziť výsledok dávkovej požiadavky.

Nastavíme parameter "Účet". Z účtovej osnovy si môžete vybrať ľubovoľný účet. Ako ste už pravdepodobne uhádli, tento balík žiadostí musí získať vlastnosti účtu. Kliknite na „Spustiť“ a pozrite si výsledok:

Metódy Run() a RunBatch()

Okrem metódy Execute(), ktorá jednu po druhej vykoná všetky požiadavky v dávke a vráti výsledok poslednej požiadavky, v 1C existuje metóda ExecuteBatch(). Vráti pole vzoriek každej požiadavky v dávke. Vo vyššie uvedenom príklade je to presne táto metóda.

ArrayResults = Query.ExecuteBatch();

Selection1 = ArrayResults.Select();

Ak Select1.Next() Then

//Akcie s výberom 1

koniec Ak;

SelectionViewsSubconto = ArrayResults.Select();

Príspevok Práca s dávkovými požiadavkami v 1C 8.3 a 8.2 sa prvýkrát objavil na blogu spoločnosti 1C GOODWILL.

Jednoduché otázky

Zvážte, ako bola syntax dotazu zmenená (správnejšie, doplnená) na nasledujúcom príklade: Je zaúčtovaný doklad o spotrebnom materiáli, ktorý obsahuje v tabuľkovej časti Produkty zoznam predaných produktov a ich množstvo. Na vykonanie tohto dokladu je potrebné kontrolovať záporné zostatky evidované v evidencii akumulácie zostatkov zostatkov tovaru.

Obrázok ukazuje štruktúru konfigurácie.

Vytvorme dotaz na virtuálnu tabuľku Pozostatky registra akumulácie a tabuľkovú časť dokumentu. Aby sme zohľadnili prípadné opakovania riadkov v dokumente, záznamy zoskupíme.

Samozrejme, vyššie uvedený dotaz nie je dostatočne optimálny. Optimalizujme to pomocou vnorených dotazov: tabuľkovú časť pred napojením na tabuľku zostatkov dokladov zoskupiť, do parametrov virtuálnej tabuľky odovzdať zoznam produktových jednotiek ako podmienku výpočtu zostatkov. Výsledný dotaz bude vyzerať takto:


Ak dopyt vyžaduje získanie údajov zo zvyšku rôznych registrov, potom sa hodnota filtra a druhý poddotaz zopakujú v každom parametri virtuálnych tabuliek a systém sa spojí s infobázou, aby získal údaje s každým poddotazom.

Dočasné tabuľky

Už nejaký čas je možné v dotazoch používať dočasné tabuľky, na ktoré sa používa objekt „Správca dočasných tabuliek“. Správca dočasných tabuliek v podstate obsahuje popis priestoru názvov dočasných tabuliek a zabezpečuje ich vytváranie a odstraňovanie z databázy.

Dočasné tabuľky sú fyzicky uložené v databáze, preto by ste ich mali používať opatrne, pretože Diskový subsystém je najmenej výkonná časť technológie a rýchlosť vytvárania a odstraňovania tabuliek priamo závisí od neho.

Zmeňme dotaz tak, aby zohľadnil použitie dočasných tabuliek. Dočasné tabuľky budú obsahovať tabuľkovú časť dokumentu v zoskupenej forme a zoznam produktov na filtrovanie virtuálnych tabuliek:

Použitie dočasných tabuliek v dotaze vyžaduje použitie príkazu Place na vytvorenie novej dočasnej tabuľky a výsledkom dotazu nie je obsah tabuľky, ale počet záznamov, ktoré boli umiestnené v dočasnej tabuľke.

Okrem toho môžete použiť inštrukciu Destroy - v tomto prípade sa dočasná tabuľka vymaže, inak dočasné tabuľky zničí dočasný objekt správcu tabuliek spolu s tabuľkami.

V hlavnom dotaze boli názvy dočasných tabuliek použité ako označenie zdroja údajov (malo by im byť priradené synonymum). Dočasné tabuľky môžete použiť ako zdroj viackrát, čo pri správnom použití umožňuje skrátiť text dotazu a zvýšiť rýchlosť (pri použití dočasnej tabuľky na rôznych miestach v dotaze).

Dávkové požiadavky

Dávkové dotazy výrazne rozširujú funkčnosť dočasných tabuliek a poskytujú nové možnosti pri práci s dotazmi.

V skutočnosti môže dávkový dotaz opísať niekoľko dotazov, ktoré sú vzájomne prepojené prostredníctvom dočasných tabuliek, ako aj nezávislé. V dôsledku toho sa zdá, že vykoná všetky dotazy postupne a skončí s radom výsledkov z každého dotazu alebo výsledkom iba posledného. Pole výsledkov dotazu sa získa pomocou metódy ExecutePackage() objektu požiadavky a na získanie výsledku iba poslednej požiadavky použite metódu ExecuteQuery().

Dávkové požiadavky v texte požiadavky musia byť oddelené znakom „;“. Jedna dávková požiadavka má jeden menný priestor pre virtuálne tabuľky. Použitie dočasného správcu tabuliek nie je potrebné, ale je možné, ak potrebujete odovzdať dočasné tabuľky inému dávkovému dotazu.

Zmeňme postup s prihliadnutím na dávkové požiadavky:

V skutočnosti bola vymazaná definícia objektu dotazu a nebol použitý dočasný správca tabuliek, texty dotazov boli zlúčené. V dôsledku toho sa text žiadosti stal čitateľnejším.

Po vykonaní požiadavky bude premenná Result Array obsahovať 3 prvky. Prvé dva sú počet záznamov DocTCH a Product List umiestnených v dočasných tabuľkách, tretí bude obsahovať výber s poľami Doc_Quantity, Nomenclature a Reg_Quantity.

Premenná Výsledok dotazu obsahuje iba výber.

Dávkové dopyty sú teda veľmi pohodlným nástrojom na písanie aj čítanie zložitých dopytov.

Platforma 1C Enterprise vám umožňuje vykonávať niekoľko dopytov postupne naraz. V 1C sa to nazýva balík žiadostí. V rámci jedného balíka je každá požiadavka oddelená bodkočiarkou.

Na dosiahnutie postupného vykonávania dotazov v balíku sa spravidla najprv vytvoria dočasné tabuľky, potom sa vytvoria podmienky na ich zdieľanie, ako sú filtre, spojenia a spojenia. Vďaka tomu sa dosiahne konečný výsledok. Dočasné tabuľky získané ako výsledok akýchkoľvek dotazov v dávke naďalej existujú až do konca dávky ako celku alebo do vykonania dotazu, ktorý zničí dočasné tabuľky.

Okrem toho použitie dávkových dotazov a dočasných tabuliek výrazne zvyšuje čitateľnosť celého segmentu tohto kódu. Komplexné dotazy, ktoré obsahujú aj vnorené dotazy, môžu byť veľmi ťažko pochopiteľné. Ak však dlhý zložitý dotaz rozložíte na niekoľko a dokonca použijete dočasné tabuľky, nielenže to zlepší vnímanie, ale vo väčšine prípadov to povedie k zvýšeniu výkonu.

Ďalším dôležitým detailom v prospech dávkových dotazov v 1C je, že na rozdiel od toho môžeme samostatne získať výsledok každého dotazu v dávke.

Príklad vytvorenia balíka požiadaviek v jazyku 1C

Aby sme videli príklad vytvorenia balíka dotazov, použijeme návrhára dotazov, ktorý si pre prehľadnosť zavoláme z konzoly dotazov. Okamžite teda vidíme výsledok spustenia balíka.

Vytvorme jednoduchú dávkovú požiadavku. Navrhujem okamžite vložiť text požiadavky do súboru a potom ho otvoriť a pozrieť sa, ako sa tvorí balík žiadostí. Pridajte novú požiadavku do konzoly a vložte nasledujúci text:

Získajte 267 video lekcií na 1C zadarmo:

Samonosné. Odkaz,
Samonosný. Rodič,
Samonosný. Kód,
Samonosný kód rýchleho výberu,
Samonosné. Meno,
Samonosné. Typ,
Samonosné. Podsúvahové,
Samonosné. Kvantitatívne,
OD
Účtovná osnova Samonosné AS Samonosné
KDE
Self-supporting.Link = &Účet
;
////////////////////////////////////////////////////////////////////////////////

VYBERTE SI
Samonosné typySubconto.Line Number AS Číslo riadku,
SamonosnéTypy Subconto.ViewSubconto AS TypeSubconto,
SamonosnéTypySubconto.TypeSubconto.Name AS Názov,
Samonosné typySubconto.TypeSubconto.ValueType ASValueType,
Samonosné typySubconto.OnlyTurnover AS OnlyTurnover,
SamonosnéTypySubconto.Summary AS Summative
OD
Účtovná osnova Samonosný Typ podúčtu AS Samoúčtovníctvo Typy podúčtu
KDE
Self-supportingTypesSubaccount.Link = &Účet
TRIEDIŤ PODĽA
Samonosné typySubconto.NumberLines

U mňa to vyzerá takto:

Teraz poďme k návrhárovi dotazov. Tu nás bude zaujímať karta „Požiadať o balík“:

Ako vidíte, máme balík dvoch žiadostí. Dvojitým kliknutím na ktorýkoľvek z nich môžete pokračovať v jeho úprave:

Kliknite na tlačidlo „OK“ a skúste zobraziť výsledok dávkovej požiadavky.

Nastavíme parameter "Účet". Z účtovej osnovy si môžete vybrať ľubovoľný účet. Ako ste už pravdepodobne uhádli, tento balík žiadostí by mal dostať vlastnosti účtu. Kliknite na „Spustiť“ a pozrite si výsledok:

Metódy Run() a RunBatch()

Keď sa môj dopyt stal tak zložitým, že prekročil hranice môjho chápania, rozhodol som sa použiť dávkové dopyty.

Bol som však konfrontovaný s tým, že som o nich nič nevedel. Ukázalo sa, že všetko je veľmi jednoduché. Za 5 minút budete môcť používať dávkové dopyty. Začnite čítať.

Ako sa ukázalo, všetko je veľmi jednoduché. Stačí napísať niekoľko dopytov oddelených bodkočiarkou. Výsledok sa vráti v poslednej žiadosti.

Dávkové požiadavky sa objavili až vo verzii 8.1.11.67.4.

Tu je text žiadosti:

SELECT T1.Zn PLACE VTBpísmená FROM (SELECT "A" AS Zn COMBINE ALL SELECT "B") AS T1;

VYBERTE T1.ZN UMIESTNITE VTDIGITS Z (VYBERTE "1" AKO VN KOMBINOVAŤ VŠETKY VYBERTE "2") AKO T1;

VYBERTE TB.Zn, TC.Zn, TB.Zn+TC.Zn Z VTB Písmená AS TB, VTC čísla AS TC

Dávkové dotazy sú podporované v akejkoľvek bežnej konzole dotazov.

Obrázok ukazuje príklad vykonania požiadavky:

A teraz trochu zo skúsenosti. Prečo potrebujeme dávkové žiadosti?

Faktom je, že do dočasnej tabuľky môžete vložiť nejaký medzivýsledok, ktorý potom môže byť potrebný v niekoľkých nasledujúcich dotazoch.

Predtým, keď neexistovali žiadne dočasné tabuľky, musel byť text dopytu duplikovaný.

Môžete sa samozrejme zaobísť bez dávkového dotazu postupným vykonaním niekoľkých dotazov a manipuláciou s vnorenými tabuľkami. Ale je to pohodlnejšie s dávkovými požiadavkami. Stačí napísať dotaz a nemyslieť na umiestnenie dočasných tabuliek. Všetko sa deje samo od seba.

Okrem toho, ak sa použije systém skladania údajov (DCS), inteligentne vyberá potrebné polia a minimalizuje celý balík dopytov.

Ak žiadosti mali metódu Request.Run() potom teraz existuje metóda Request.ExecuteBatch(), ktorý vráti všetky tabuľky z balíka ako pole.

Oznámenie o dávkových požiadavkách na webovej stránke 1c je tu: http://v8.1c.ru/overview/release_8_1_11/#Functional

Životný príbeh

Dovoľte mi vysvetliť, čo ma podnietilo spustiť dávkové požiadavky.

Predstavte si teda, že existuje dokument, ktorý má tabuľkovú časť. V stĺpci" Chyba» označuje, či pri vypĺňaní dokumentu došlo k chybe. V stĺpci" TextErrors» môže byť jedna alebo viac viet s textom chýb. Typy chýb obsiahnutých vo vetách sú vopred známe.

Vložíme teda zoznam všetkých chýb do tabuľky Chybové kódy- obsahuje kód chyby a podreťazec vyhľadávania.

Pre každý riadok dostaneme jednu, dve alebo viac chýb. Pretože V jednom riadku môže byť niekoľko chýb.

Chyba ale nemusí byť rozpoznaná, t.j. vlajka" Chyba“ stojí, ale chybový text nám neposkytol kód chyby.

Urobíme ľavé spojenie, kde je kód chyby NULL, dáme kód chyby „ Iné chyby» .

Problém bol ale v tom, že tam bolo asi 200 chybových kódov, takže ľavé pripojenie fungovalo veľmi dlho. Musel som ho nahradiť vnútorným spojením, ktoré letelo. Zároveň sa však stratili riadky, pri ktorých sa nenašla chyba. Stále som nevedel prísť na to, ako tieto riadky dostať do výsledku.

Požiadavka bola napísaná na dispozičný systém, t.j. V zásade nemožno použiť žiadne tabuľky hodnôt ani dočasné tabuľky. Tu sa hodia hromadné dopyty.

Jednoducho som znova spojil všetky riadky s chybami so všetkými riadkami, pre ktoré sa našli chyby, a stále som pridal typ chyby „Iné chyby“.

mob_info