Pri vytváraní dotazov je v jazyku 1c možné získať výsledok vykonania dotazu pomocou príkazu: "Place<ИмяВременнойТаблицы>", Kde<ИмяВременнойТаблицы>- názov „dočasnej tabuľky“, ktorá je vlastnosťou objektu „Query“ a je objektom typu TemporaryTableManager, ktorý popisuje menný priestor dočasných tabuliek a zodpovedá za ich vytváranie a ničenie v databáze. Tento mechanizmus sa používa na získanie medziľahlých údajov dotazov na ďalšie použitie v iných dotazoch, čo uľahčuje ich ladenie, optimalizáciu kódu a čitateľnosť dotazov.

Povedzme, že máte dotaz s niekoľkými dočasnými tabuľkami a potrebujete odladiť obsah každej z nich. Zvyčajne sa takéto úlohy riešia pomocou konzoly dotazu, ale ak to nie je možné (napríklad sa do dotazu odovzdávajú zoznamy hodnôt, tabuľky atď.), použite metódu nižšie.

Do nášho modulu pridávame nasledujúcu funkciu (funkcia servera, ak ide o spravovanú aplikáciu):

Funkcia Údaje VT (Dotaz, Názov VT) Údaje tabuľky = Nový dotaz; DataTables. Text = "Vybrať * | Z " + NázovVT+ " |" ; ReturnTableData. Vykonať ( ). Unload() ; EndFunction

Nazvime to za textom požiadavky, napríklad:

Žiadosť = Nová požiadavka; Žiadosť. Text = "VYBERTE | TZIcelkom. Názov | MIESTO Konečné | Z |&TZIcelkom AKO TZIcelkom |; |//////////////////////////////// ////////////////////// |VYBRAŤ |* |Číslo MIESTA |OD |Adresár.Nomenklatúra AS Nomenklatúra |; ///////////////////////////////////////////VYBRAŤ |* |Z |Konečná AS Celkom |. LEFT JOIN Nom AS Nom |. BY Total.Name = Nom.Name"; Žiadosť. TemporaryTableManager = nový TemporalTableManager; Žiadosť. vykonať ( ); Tabuľka = DataVT(Dopyt, "Konečná" ) ;

Teraz premenná Tabuľka obsahuje dočasnú tabuľku Celkom, ktorú je možné zobraziť pri ladení alebo výstupe do tabuľkového dokumentu.

Život

Keď sa vykoná dotaz, platforma zničí všetky dočasné tabuľky, ktoré boli vytvorené ako súčasť jeho vykonávania. To znamená, že životnosť dočasných tabuliek vytvorených v rámci jednej požiadavky z platformy 1C:Enterprise začína od okamihu vytvorenia tabuľky v požiadavke a končí sa jej vykonaním.

V tomto prípade je možné zničiť dočasnú tabuľku programovo vykonaním inštrukcie "DESTROY" v jednom z balíkov dotazov<ИмяВременнойТаблицы>Potom platforma vykoná príkaz SQL "TRUNCATE" na zničenie dočasnej tabuľky.

Ak pri použití dočasného správcu tabuliek vývojár explicitne nezničil tabuľky (príkaz dotazu "DESTROY", resetovanie dočasného správcu tabuliek na "Undefined" alebo pomocou metódy "Close()"), platforma ich zničí. nezávisle po zničení kontextu, v rámci ktorého vznikli. Inými slovami, objekt bude zničený, keď skončí procedúra alebo funkcia, v ktorej bol vytvorený.

Vplyv na výkon

Používanie dočasných tabuliek môže výrazne znížiť zaťaženie servera SQL opätovným použitím predtým vygenerovanej vzorky z tabuľky v iných dotazoch. Samozrejme, vytváranie a ukladanie dočasných tabuliek vyžaduje ďalšie zdroje, ale v porovnaní s plytvaním zdrojmi na opakované dopyty do tabuliek je táto možnosť optimálnejšia.

Vytváranie dočasných tabuliek na základe tabuľky hodnôt môže mať negatívny vplyv na výkon, pretože prenos tabuľky hodnôt a naplnenie dočasnej tabuľky na server SQL na jej základe môže trvať dlho a spôsobiť dodatočné zaťaženie systému. Túto funkciu by ste mali používať iba vtedy, ak budúce dopyty intenzívne využívajú údaje z tabuľky hodnôt. V opačnom prípade by optimálnejším krokom bolo spracovať túto tabuľku programovo po vykonaní databázového dotazu. Presná odpoveď závisí od konkrétneho problému.

Záver

Podpora dočasných tabuliek platformou 1C:Enterprise umožňuje zapisovať do databázy optimálnejšie dotazy, pričom samotný text dotazu je tiež zjednodušený a čitateľnejší.

Najdôležitejším argumentom v prospech používania dočasných tabuliek je, že ich použitie umožňuje serveru SQL zostaviť optimálnejšie plány dotazov.

Žiadosti sú určené na extrakciu a spracovanie informácií z databázy, aby ich poskytli používateľovi v požadovanej forme. Spracovanie tu znamená zoskupovanie polí, triedenie riadkov, výpočet súčtov atď. Údaje nemôžete meniť pomocou dotazov v 1C!

Požiadavka sa vykoná podľa daných pokynov − text žiadosti. Text požiadavky je zostavený v súlade so syntaxou a pravidlami dopytovací jazyk. Dotazovací jazyk 1C:Enterprise 8 je založený na štandarde SQL, ale má určité rozdiely a rozšírenia.

Schéma práce s požiadavkou

Všeobecná schéma práce so žiadosťou pozostáva z niekoľkých po sebe nasledujúcich etáp:

  1. Vytvorenie objektu požiadavky a nastavenie textu požiadavky;
  2. Nastavenie parametrov požiadavky;
  3. Vykonanie požiadavky a získanie výsledku;
  4. Obídenie výsledku požiadavky a spracovanie prijatých údajov.

1. Objekt Žiadosť má nehnuteľnosť Text, ku ktorému je potrebné priradiť text požiadavky.

// Možnosť 1
Žiadosť = Nová požiadavka;
Žiadosť . Text =
"VYBERTE si
| Kurzy mien. Obdobie,
| Kurzy mien. Mena,
| Kurzy mien. Kurz
|OD

| KDE
;

// Možnosť 2
Žiadosť = Nová požiadavka("VYBERTE si
| Kurzy mien. Obdobie,
| Kurzy mien. Mena,
| Kurzy mien. Kurz
|OD
| Register informácií. Kurzy mien AS Kurzy mien
| KDE
| Kurzy mien.Currency = &Mena");

2. Nastavenie hodnôt parametrov sa vykonáva pomocou metódy SetParameter(< Имя>, < Значение>) . Parametre v texte požiadavky sú označené symbolom „ & “ a zvyčajne sa používajú v podmienkach výberu (sekcia WHERE) a v parametroch virtuálnej tabuľky.

Žiadosť);

3. Po priradení textu a nastavení parametrov je potrebné vykonať požiadavku a získať výsledok vykonania. Spustenie sa vykonáva metódou Execute(), ktorá vracia objekt Výsledok dotazu. Z výsledku dopytu môžete:

  • získajte výber pomocou metódy Select (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • nahrajte hodnoty do tabuľky hodnôt alebo stromu hodnôt pomocou metódy Upload (< ТипОбхода>) .

// Prijmite vzorku

Ukážka = Výsledok dotazu. Vyberte si();

// Získanie tabuľky hodnôt
RequestResult = Žiadosť. Run();
Tabuľka = Výsledok dotazu. Vyložiť();

4. Výber výsledku dotazu môžete obísť pomocou slučky:

Zbohom Sample.Next() Slučka
Správa (Výber. Kurz);
EndCycle;

Úplný príklad práce so žiadosťou môže vyzerať takto:

// Fáza 1. Vytvorenie požiadavky a nastavenie textu požiadavky
Žiadosť = Nová požiadavka;
Žiadosť . Text =
"VYBERTE si
| Kurzy mien. Obdobie,
| Kurzy mien. Mena,
| Kurzy mien. Kurz
|OD
| Register informácií. Kurzy mien AS Kurzy mien
| KDE
| Kurzy mien.Currency = &Mena";

// Fáza 2. Nastavenie parametrov
Žiadosť . SetParameter("Currency" , SelectedCurrency);

// Fáza 3. Vykonanie dotazu a získanie vzorky
RequestResult = Žiadosť. Run();
Ukážka = Výsledok dotazu. Vyberte si();

// Prechádzanie výberom
Zbohom Sample.Next() Slučka
Správa (Výber. Kurz);
EndCycle;

Zloženie textu požiadavky

Text žiadosti pozostáva z niekoľkých častí:

  1. Popis žiadosti— zoznam voliteľných polí a zdrojov údajov;
  2. Zlučovanie dopytov— výrazy „UNITE“ a „UNITE ALL“;
  3. Organizovanie výsledkov— výraz „OBJEDNÁVKA PODĽA...“;
  4. Automatická objednávka— výraz „AUTO OBJEDNÁVKA“;
  5. Popis výsledkov- výraz „VÝSLEDKY ... POD ...“.

Povinná je len prvá časť.

Dočasné tabuľky a dávkové dotazy

Dotazovací jazyk 1C podporuje použitie dočasné stoly— tabuľky získané ako výsledok vykonania dotazu a dočasne uložené.

Často sa môžete stretnúť so situáciou, keď potrebujete ako zdroj dotazu použiť nie databázové tabuľky, ale výsledok vykonania iného dotazu. Tento problém je možné vyriešiť pomocou vnorených dotazov resp dočasné stoly. Použitie dočasných tabuliek vám umožňuje zjednodušiť text zložitého dotazu jeho rozdelením na jednotlivé časti a tiež v niektorých prípadoch urýchliť vykonávanie dotazu a znížiť počet zámkov. Ak chcete pracovať s dočasnými tabuľkami, použite objekt Správca rozvrhov. Dočasná tabuľka sa vytvorí pomocou kľúčového slova PLACE, za ktorým nasleduje názov dočasnej tabuľky.

ManagerVT = New TemporaryTablesManager;
Žiadosť = Nová požiadavka;
Žiadosť . TemporaryTablesManager = VTManager;

Žiadosť . Text =
"VYBERTE si
| Currencies.Code,
| Meny.Názov
| Miesto v mene
|OD
| Directory.Currencies AS Meny";

RequestResult = Žiadosť. Vykonať();

Ak chcete použiť dočasnú tabuľku VTVcurrency v iných dotazoch, musíte týmto dotazom priradiť spoločného správcu dočasných tabuliek — VT Manager.

Dávková žiadosť je požiadavka, ktorá obsahuje niekoľko požiadaviek oddelených znakom „;“. Pri vykonávaní dávkového dotazu sa všetky dotazy, ktoré sú v ňom zahrnuté, vykonajú postupne a výsledky všetkých dočasných tabuliek sú dostupné pre všetky nasledujúce dotazy. Explicitné priradenie dočasného manažéra tabuliek k dávkovým dotazom nie je potrebné. Ak nie je priradený dočasný správca tabuliek, všetky dočasné tabuľky sa vymažú ihneď po vykonaní dotazu.

Pre dávkové dotazy je dostupná metóda ExecuteBatch(), ktorá vykoná všetky dotazy a vráti pole výsledkov. Dočasné tabuľky v dávkovom dopyte budú reprezentované tabuľkou s jedným riadkom a jedným stĺpcom „Počet“, v ktorej je uložený počet záznamov. Na ladenie dávkových požiadaviek môžete použiť metódu Vykonajte dávku S MEDZI ÚDAJMI() : Vráti skutočný obsah dočasných tabuliek, nie počet záznamov.

// Príklad práce s dávkovou požiadavkou
Žiadosť = Nová požiadavka;
Žiadosť . Text =
"VYBERTE si
| Meny.Názov
|OD
| Adresár.Currencies AS Meny
|;
|VYBERTE
| Nomenklatúra.Názov
|OD
| Adresár Nomenklatúra AS Nomenklatúra";

BatchResult = Žiadosť. ExecuteBatch();

TZMeny =PacketResult[ 0 ]. Unload();
TZNomenklatúra = Výsledok balíka[ 1 ]. Unload();

// Príklad použitia dočasných tabuliek v dávkovej požiadavke
Žiadosť = Nová požiadavka;
Žiadosť . Text =
"VYBERTE si
| Produkty
| MIESTO VTProdukty
|OD
| Adresár.Nomenklatúra AKO Produkty
| KDE
| Products.Manufacturer = &Výrobca
|;
|VYBERTE
| VTTProducts.Product,
| Odborná škola, množstvo.
| Odborná škola. Cena,
| Odborná škola.Link AS DocumentReceipts
|OD
| Produkty VT AKO Produkty VT
| ĽAVÉ PRIPOJENIE Dokument Príjem tovaru a služieb
| Softvér VTProducts.Product = PTU.Nomenklatúra"
;

Žiadosť . SetParameter( "Výrobca", Výrobca);

RequestResult = Žiadosť. Run();
Ukážka = Výsledok dotazu. Vyberte si();

Zbohom Sample.Next() Slučka

EndCycle;

Virtuálne stoly

Virtuálne stoly- ide o tabuľky, ktoré nie sú uložené v databáze, ale sú generované platformou. Vo svojom jadre sú to vnorené dotazy voči jednej alebo viacerým fyzickým tabuľkám vykonávaným platformou. Virtuálne tabuľky prijímajú informácie iba z registrov a sú určené najmä na riešenie vysoko špecializovaných problémov.

Existujú nasledujúce virtuálne tabuľky (možné parametre sú uvedené v zátvorkách):

  • Pre informačné registre:
    • SliceFirst(<Период>, <Условие>) — najskoršie záznamy k určenému dátumu;
    • SliceLast(<Период>, <Условие>) — posledné záznamy k určenému dátumu;
  • Pre akumulačné registre:
    • Zvyšky(<Период>, <Условие>) — zostatky k určenému dátumu;
    • Revolúcie (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - transakcie za obdobie;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — zostatky a obrat za obdobie;
  • Pre účtovné registre:
    • Zvyšky(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — zostatky k určenému dátumu podľa účtu, rozmerov a podúčtov;
    • Revolúcie (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — obrat za obdobie v kontexte účtov, miery, kor. účty, subkonto, kor. subconto;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — zostatky a obrat v kontexte účtov, meraní a podúčtov;
    • ObratDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — obrat za obdobie podľa účtu Dt, účtu Kt, Subconto Dt, Subconto Kt;
    • Movements Subconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — pohyby spolu s hodnotami subkonto;
  • Pre výpočtové registre:
    • základňa(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — základné údaje výpočtového registra;
    • DataGraphics(<Условие>)—grafové údaje;
    • ActualActionPeriod(<Условие>) je skutočná doba platnosti.

Pri práci s virtuálnymi tabuľkami by ste mali použiť výbery v parametroch virtuálnych tabuliek a nie v podmienke WHERE. Čas vykonania dotazu veľmi závisí od toho.

Konštruktor dotazov

Na urýchlenie zadávania textov dopytov má platforma špeciálne nástroje: Konštruktor dotazov A Konštruktor dotazov so spracovaním výsledkov. Ak chcete zavolať konštruktérov, musíte kliknúť pravým tlačidlom myši a vybrať požadovanú položku:

Konštruktory je možné vyvolať aj z hlavného menu Text.

Pomocou tvorcu dotazov môže programátor interaktívne zostaviť text dotazu. Ak to chcete urobiť, vyberte potrebné tabuľky a polia pomocou myši, vytvorte vzťahy, zoskupenia, súčty atď. Tento prístup šetrí čas a eliminuje možné chyby. Konštruktor dotazu ako výsledok svojej práce vygeneruje text dotazu.

Konštruktor dotazu so spracovaním výsledkov okrem generovania textu dotazu vytvára hotový fragment kódu na príjem a spracovanie údajov.

Objekt RequestSchema

Platforma vám umožňuje programovo vytvárať a upravovať text požiadavky pomocou objektu Žiadosť o schému. Objekt má jednu vlastnosť Dávka žiadostí, do ktorého objekt ukladá vlastnosti všetkých aktuálne upravovaných dotazov. Objekt RequestSchema podporuje nasledujúce metódy:

  • SetQueryText(< Текст>) — vyplní vlastnosť Query Packet na základe zaslaného textu požiadavky;
  • GetQueryText() - vráti text požiadavky vygenerovaný na základe vlastnosti Request Package;
  • FindParameters() - vráti parametre požiadavky.

Pozrime sa na príklad práce s objektom RequestSchema. Na programové generovanie textu požiadavky

TRIEDIŤ PODĽA
Meny.Kód

Vložený kód jazyka môže vyzerať takto:

RequestScheme = New RequestScheme;
Balíček 1 = RequestScheme. RequestBatch[ 0];
Prevádzkovateľ 1 = Balíček 1. Operátory[ 0 ];
// pridanie zdroja
RegisterTable = Operátor1. Zdroje. Pridať( "Adresár. Meny", "Meny");
// pridanie polí
FieldLink = Prevádzkovateľ1. SelectableFields. Add("Currencies.Link" , 0 );
FieldCode = Prevádzkovateľ1. SelectableFields. Add("Kód mien", 1);
// určenie aliasov polí
Balíček 1 . Stĺpce[ 0]. Alias ​​​​= "Mena" ;
Balíček 1 . Stĺpce[ 1]. Alias ​​​​= "Kód" ;
// pridanie podmienky
Prevádzkovateľ 1 . Výber. Pridať( "NIE JE vymazanie vlajky");
// pridať objednávku
Balíček 1 . Objednať. Pridať(Kód poľa);
RequestText = RequestScheme. GetQueryText();

Ahojte všetci! Alebo skôr tým, ktorí si tento blog ešte niekedy pozrú :)

Po dosť dlhej absencii kvôli práci na plný úväzok som sa konečne rozhodol napísať ďalší príspevok.

Nedávno som sa dozvedel, že niektorí ľudia nevedia, že platforma 1C 8.3 má vstavaný nástroj na ladenie dočasných tabuliek. Objavil sa relatívne nedávno, v jednom z vydaní 1C 8.3.8 - "Na získanie údajov"() aplikovaný na Správcovi dočasných tabuliek.

Medzitým tento nástroj výrazne uľahčuje schopnosť študovať problémy, napríklad pri analýze typických mechanizmov.

Všetko je celkom jednoduché.

1. Získajte dočasné tabuľky dotazov

Pri použití ladenia najprv vypočítame zoznam dočasných tabuliek Query.TemporaryTableManager.Tables. Týmto spôsobom môžeme získať zoznam tabuliek vygenerovaných vykonávaným dotazom:

2. Získajte dočasnú tabuľku na ladenie

Potom pristúpime k dočasnej tabuľke, ktorú potrebujeme na ladenie, pridaním Get(<Индекс таблицы>)

3. Údaje dostávame priamo

Použitie metódy GetData() vám umožňuje získať kolekciu výsledkov dotazu priamo pre vybratú dočasnú tabuľku.

V prípade priameho ladenia tabuľky s indexom 0 (ako viete, indexy a číslovanie v 1C začínajú od nuly), údaje sa získajú výpočtom nasledujúceho riadku:

Query.TemporaryTableManager.Tables.Get(0).GetData().Unload()

Ladenie týmto spôsobom zaberie menej času ako používanie rôznych „bariel“ 😀

To je všetko, dobrý vývoj pre vás a šťastné sviatky!

PS. A pre tých, ktorí podporujú výpočet miezd v podniku (nielen programátorov), pripomínam, že pre túto tému bol vyčlenený samostatný zdroj Pro-Zup.info.

Ak máte otázky k tejto téme, máte záujem o rozšírenie možností štandardného programu alebo máte návrhy na riešenie problémov, vitajte v zdroji https://pro-zup.info/

Mechanizmus dopytov, ktorý sa objavil vo verzii 7 programu 1C, sa stal čoraz rozšírenejším a neustále rástol na popularite s vydaním prvých verzií platformy 8. Príchod spravovaných formulárov a systémov na skladbu údajov výrazne zvýšil rozsah tohto nástroja. Pre mnohých začínajúcich programátorov je však jeho zvládnutie dosť ťažké.

Použitie objektu s názvom „Správca dočasných tabuliek“ vám umožňuje:

  • Výrazne zjednodušiť text žiadosti;
  • Rozdeľte ho na jednoduchšie bloky;
  • Zvýšte jeho čitateľnosť a štruktúru.

Pár slov o tom, ako to funguje

V zásade možno prácu dočasného manažéra tabuľky rozdeliť do štyroch fáz používania:

  1. Vytvorenie manažéra;
  2. Vyplnenie;
  3. Čítanie údajov z tabuliek;
  4. Zničiť manažéra a vyčistiť stoly.

Hovorme o každej fáze podrobnejšie.

Vytvorenie dočasného správcu tabuliek

Na definovanie tohto objektu je potrebné vykonať kód zobrazený na obr

Tu si treba uvedomiť, že definícia dočasného manažéra tabuliek je uvedená pred operátorom Execute(), inak je zaručené prerušenie vykonávania kódu chybou, ktorej informačné okno je naznačené na obr.

Obr.2

Vyplnenie manažéra

Na rovnakom obrázku 1 je riadok, ktorý prenáša výber do dočasnej tabuľky. Začína sa operátorom „Miesto“. Cieľ je názov cieľovej tabuľky.

Pomocou „Query Builder“ je možné tento riadok vytvoriť na karte „Advanced“ Obr. 3.

Obr.3

K tomu potrebujete:

  1. Nastavte prepínač „Typ dopytu“ do polohy „Vytvoriť dočasnú tabuľku“;
  2. Zadajte názov prijímača.

Ak použijete debugger na kontrolu postupnosti plnenia manažéra, zistíte, že údaje sa v ňom objavia až po vykonaní metódy požiadavky Execute().

Pomocou operátora Quantity() môžete určiť, či je manažér plný. Príklad riadku: MVT.Tables.Quantity().

Čítanie manažérskych tabuliek

Ďalším krokom je čítanie údajov z existujúcich tabuliek v inom dotaze. Je tu jeden problém: nový dotaz, ktorý sa vytvorí, nevie o existencii naplnenej tabuľky, takže sa nezobrazí v okne „Databáza“ konzoly.

Musí byť zaregistrovaný a vytvorený ručne.

Ak to chcete urobiť, na karte „Tabuľky a polia“ (obr. 4) musíte vykonať určitú postupnosť akcií:

Obr.4

  1. V ponuke okna „Tabuľky“ na tejto karte kliknite na tlačidlo „Vytvoriť dočasný popis tabuľky“;
  2. V okne, ktoré sa otvorí, musíte zadať názov poľa a jeho popis (typ poľa), ako je uvedené v existujúcej tabuľke;
  3. Potrebné polia alebo funkcie s nimi musia byť presunuté do tretieho okna karty.

Počas celej doby vykonávania sa dočasné tabuľky ukladajú do pamäte RAM počítača používateľa pri práci v režime súborov alebo upchávajú pamäť servera v režime klient-server, kým sa úplne nedokončí funkcia alebo postup, ktorý zavolal manažéra. Veľké objemy dát môžu výrazne znížiť výkon aj toho najslabšieho hardvéru.

Odstránenie tabuliek

Vo všeobecnosti skúsení špecialisti, aby príliš nezaťažovali pamäť, odporúčajú dočasné tabuľky ihneď po použití vymazať, ak sa už nebudú volať nikam inam.

Odstrániť tabuľky z manažéra je možné vykonať dvoma hlavnými spôsobmi:

  • Zadaním kľúčového slova Zničiť priamo v texte požiadavky;
  • Použitie metódy Close() aplikovanej priamo na manažéra.

V druhom prípade budú všetky tabuľky vytvorené rôznymi dotazmi násilne zničené.

Použitie prvej možnosti na vymazanie údajov možno špecifikovať explicitne napísaním riadku ako „Destroy TableName“ do textu dopytu alebo použitím karty „Advanced“ (Obr. 2) v okne „Query Designer“.

Prepnutím prepínača do polohy „Destruction“ a zadaním názvu objektu, ktorý je potrebné odstrániť, môžete túto akciu bez problémov dokončiť.

Prevod (TK) na vyžiadanie

Jedným z najbežnejších použití tohto manažéra je odovzdanie tabuľky hodnôt ako jedného zo zdrojov údajov do dotazu. Ako viete, priame použitie tejto zbierky v žiadosti v 1C nie je poskytnuté.

Ak to chcete urobiť, text požiadavky musí obsahovať riadok ako „Vybrať * Umiestniť MVT z &Tz ako kartu“. Odovzdaním existujúcej tabuľky hodnôt ako parametra „TZ“ do požiadavky získame objekt vhodný na ďalšie spracovanie v ďalších požiadavkách.

Jedinou podmienkou, ktorá bráni odovzdaniu TK ako parametra, sú implicitne deklarované typy jeho stĺpcov. To znamená, že pri vytváraní stĺpcov TK musíte vyplniť druhý parameter riadkom ako „New TypeDescription(““).

Sú situácie, keď je potrebné skombinovať viacero dotazov do jedného dotazu a spájanie tabuliek s tým nepomôže. Najjednoduchší spôsob, ako to ukázať, je na príklade.

Predpokladajme, že v našom systéme sú skutočnosti nákupu a predaja tovaru evidované dokladmi Príjem a Výdavok, resp. Protistranou môže byť buď kupujúci alebo dodávateľ. Dlh je možné započítať dodaním tovaru:

Ak chcete vypočítať celkový dlh protistrany, musíte sčítať súčet všetkých výdavkov za túto protistranu a odpočítať súčet všetkých príjmov od tej istej protistrany, najjednoduchší spôsob, ako to urobiť, je použiť operátor KOMBINOVAŤ VŠETKO:

Žiadosť.Text =
"
//vypočítajte množstvo, ktoré sme odoslali dodávateľom
|VYBERTE
| Expense. Counterparty,
|OD
| Dokument.Výdavok AKO Výdavok
|SKUPOVAŤ PODĽA
| Výdavok.Protistrana
KOMBINUJ VŠETKO
//vypočítajte množstvo protistrán
//doručil nám tovar
|VYBERTE
| Protistrana,
//vezmite sumu so záporným znamienkom,
//že pri spojení sa to odpočítalo od sumy výdavkov
| SUM(-Receipt.Amount)
|OD
| Príchod AS Príchod
|SKUPOVAŤ PODĽA
| Príchod.Protistrana";

V prvej požiadavke vypočítame výšku nákladov pre každú protistranu, v druhej - sumu, za ktorú nám každá protistrana dodala tovar. Suma v druhej požiadavke sa berie so znamienkom mínus, takže pri zbalení výslednej tabuľky sa odpočítava od sumy zásielky tejto protistrane. V dôsledku toho dostaneme tabuľku ako:

Nie je to presne to, čo sme chceli, ale je to blízko. Na dosiahnutie požadovaného výsledku zostáva už len zoskupiť podľa protistrany. Ak to chcete urobiť, dotaz musí byť umiestnený v dočasnej tabuľke (o práci s dočasnými tabuľkami sa hovorí v uzavretá časť kurzu ) a vyberte a zoskupte z neho polia:

Žiadosť = Nová požiadavka;
Žiadosť.Text =
"VYBERTE si
| Expense. Counterparty,
| SUMA(Výdavky.Suma) AKO dlh
|Umiestnite VT_Prichádzajúce výdavky
|OD
| Dokument.Výdavok AKO Výdavok
|SKUPOVAŤ PODĽA
| Výdavok.Protistrana
KOMBINUJ VŠETKO
|VYBERTE
| Protistrana,
| SUM(-Receipt.Amount)
|OD
| Príchod AS Príchod
|SKUPOVAŤ PODĽA
| Farnosť.Protistrana
|;
|////////////////////////////////////////////////////////////////////////////////
|VYBERTE
| VT_Incoming Expense, protistrana.
| SUM(VT_PríjemVýdavky.Dlh) AKO Dlh
|OD
| VT_IncomingConsumption AS VT_IncomingConsumption
|SKUPOVAŤ PODĽA
| VT_Prichádzajúce výdavky";

Požiadavky na zlučovanie dopytov

Pri kombinovaní dvoch dopytov musí byť počet polí rovnaký, ak niektorému z dopytov chýbajú polia, musia sa pridať ako konštanty. Pozrime sa na vyššie uvedený príklad, nech má aj výdavkový doklad pole skonta, ktoré znižuje výšku dlhu protistrany, ale v príjmovom doklade nie sú žiadne zľavy. Ako byť v tomto prípade? Takže:

Žiadosť = Nová požiadavka;
Žiadosť.Text =
"VYBERTE si
| Expense. Counterparty,

|OD
| Dokument.Výdavok AKO Výdavok
|SKUPOVAŤ PODĽA
| Výdavok.Protistrana
KOMBINUJ VŠETKO
|VYBERTE
| Protistrana,
| SUM(-Receipt.Amount),
//pridanie zľavy pre nulové pole
| 0
|OD
| Príchod AS Príchod
|SKUPOVAŤ PODĽA
| Príchod.Protistrana";

Ostáva už len odpočítať zľavu a skupinu.

Dôležité je aj poradie. Polia budú zlúčené presne v poradí, v akom sú uvedené v sekciách SELECT oboch dotazov. Vo vzťahu k predchádzajúcemu príkladu vymeňme polia zľavy a sumy vo vzorke účteniek:

Žiadosť = Nová požiadavka;
Žiadosť.Text =
"VYBERTE si
| Expense. Counterparty,
| AMOUNT(výdavky.suma) AKO dlh,
| SUMA(Výdavky.Zľava) AKO zľava
|OD
| Dokument.Výdavok AKO Výdavok
|SKUPOVAŤ PODĽA
| Výdavok.Protistrana
KOMBINUJ VŠETKO
|VYBERTE
| Protistrana,
//prepnúť miesta
| 0,
| SUM(-Receipt.Amount)
|OD
| Príchod AS Príchod
|SKUPOVAŤ PODĽA
| Príchod.Protistrana";


Zavrieť