Externé zdroje údajov 1c 8.3 excel. Externé zdroje údajov

Vydanie 8.2.14.533 - konečne viac-menej stabilná verzia 14. vydania platformy. Nakoniec sa naskytla možnosť vyskúšať si skvelú príležitosť – „externé zdroje dát“.

Prečo? túto príležitosť vzbudzuje taký záujem? Každý, kto programoval v 1C, je celkom oboznámený s SQL a aspoň vo všeobecnosti oboznámený s architektúrou a princípmi vývoja iných technologických platforiem pre obchodné aplikácie vám s pevnou istotou povie, čo sa mu na 1C páči najviac. Samozrejme, tvorca dotazov je najpohodlnejší a najpremyslenejší mechanizmus na písanie dotazov na získavanie údajov z relačných štruktúr, s akým som sa kedy osobne stretol. A teraz nám 1C dal takú skvelú príležitosť použiť ju nielen s 1C, ale aj s akýmikoľvek inými stolmi. Tu je len kopa "muchy" naliata do tohto "sudu medu". Všetko v poriadku:

1) Nastavenie a používanie - bez "tancovania s tamburínou" to nepôjde

A) Pridajte externý zdroj dáta - ako nič zložité
b) zaškrtnite políčko "Vybrať zo zoznamu" - je to potrebné - je potrebné skontrolovať výkon na začiatku a ušetriť vás od zbytočných problémov
v)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- nezabudnite stlačiť "..." - pripojenie je ODBC. Nie OLEDB ako sme všetci zvyknutí, ale o level nižšie

A buď tu VEĽMI POZORNÝ.

Toto je ovládač ODBC - ak používate verziu klient-server, musí byť na serveri. Ak vyvíjate na jednom systéme a pracujete na inom (ako to zvyčajne býva), uistite sa, že vás nič neprekvapí. Zvláštne odporúčanie, ale vyberte si najstarší alebo najbežnejší ovládač, ak vám nezáleží na rýchlosti a nemienite ísť za hranice štandardu SQL92. To vám poskytne najlepšiu kompatibilitu. Napríklad pre SQL Server 2008 najlepší vodič bude existovať SQL Server Native Client 11, ale odporúčam zvoliť iba SQL Server, v opačnom prípade bude musieť byť tento natívny klient nainštalovaný buď na server alebo na všetky klientske počítače (ak používate verzia súboru) a odmena je špeciálna pre jednoduché úlohy on nebude.

E) Štandardné dialógové okná výberu servera

G) Vyberte si tabuľku a podrobnosti ... skvelá príležitosť - môžete si ju okamžite premenovať, ako chcete (a podrobnosti tiež), pričom vo vlastnostiach uvidíte názvy polí zdroja údajov

H) A teraz spustíš, otvoríš návrhára dotazov - hlúpo vyberieš všetky záznamy z tabuľky a OPA - chyba. Čo robiť? Ak máš spravované rozhranie, pozri sa do servisného menu a ak máš normálne...
Osobne som použil tento kód:

Parametre = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parametre.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();

Možno niektoré kúsky nie sú potrebné, ale ide to. Je potrebné spustiť kód RAZ. Potom sa to normálne spojí ... samozrejme mystika - prečo to bolo potrebné, nie je jasné ...

2) Zdroje údajov iba na čítanie
Áno, zázraky sa nedejú ... ale niekedy chcete ....

3) NEPOUŽÍVAJTE ICH SPOLU S INTERNÝMI ZDROJMI ÚDAJOV
Mňa osobne táto skutočnosť na mieste zabila.

Ako to .... čo sme čakali a už sme si predstavovali a lízli ako teraz v jednej požiadavke spojíme naše dáta s 1C, vypneme - zoskupíme, vložíme do prehľadu, ale nebolo tam...

Ale samozrejme, to nezastaví skúsených ľudí ... aká myšlienka prišla na myseľ? Správne - dočasné tabuľky:

4) NEPOUŽÍVAJTE ICH SPOLU S DOČASNÝMI ​​STOLÍKMI

Ale to už nevyzerá ako technologické ťažkosti, ale vyzerá to veľmi podobne ako to, čo chcú, aby sme urobili, „aby sa život nezdal ako raj“ (IMG :) .

5) Možno použiť len v SKD spojeniach

Pre tých, ktorí nevedia, je to v ACS na karte „Odkazy na množinu údajov“. Ako často ich používate? Pohodlne? Zrejme nás chcú prinútiť, aby sme ich používali častejšie. Ale je tam stĺpec "Podmienka prepojenia" a "Parameter odkazu". Príklad ich použitia v žiadnej typickej konfigurácii som nenašiel, v dokumentácii ani v Khrustaleve akosi nie je všetko prehľadné. Môže mi niekto vysvetliť, ako funguje "podmienka prepojenia". Ak tam napíšete SourceAttribute = ReceiverRevision, nefunguje to. Samozrejme, podmienka sa dá zapísať do políčka "Výraz" - vo väčšine prípadov to stačí ... ale nejako to nie je veľmi jednoduché.

Celkovo bol tento problém predtým vyriešený niekde takto:

Funkcia InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ak DateCon > "20100101" Potom
DateCon = "20100101";
Koniec Ak;

QN = NewQualifiersNumber(15,2);
cs = NewStringQualifiers(255);

Číslo poľa = Nové pole ();
ArrayNumber.Add(Type("Číslo"));

ArrayString = Nové pole ();
ArrayString.Add(Type("String"));

ArrayData = New Array();
ArrayDate.Add(Type("Dátum"));

//V tabuľke vyplníme účtovný náklad
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabuľka na načítanie údajov z SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Obdobie", TypeDate);

TK.Indices.Add("Obdobie");

// Pripojte sa k SQL
ConnectionString = "Poskytovateľ=SQLOLEDB.1;Pretrvávajúce informácie o zabezpečení=Pravda;ID používateľa=sa;Pwd=;Zdroj údajov=;Použiť postup na prípravu=1;Automatický preklad=True;Veľkosť paketu=4096;ID pracovnej stanice=;Použiť šifrovanie for Data=False;Značka s porovnávaním stĺpcov, keď je to možné=False;Initial Catalog=Reports“;
Connection = New COMObject("ADODB.Connection");
Príkaz = New COMObject("ADODB.Command");
RecordSet = Nový COMObject("ADODB.RecordSet");
Dátum = "";
Pokus
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Pripojenie;
Command.CommandText = "Vyberte * z PH, kde bodka >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" a obdobie RecordSet = Command.Execute();
RecordSet.MoveFirst();
Výnimka
Vrátenie TK;
Koniec pokusu;

Kým RecordSet.EOF = False Loop
Reťazec = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Požiadavka = Nová požiadavka();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Dátum začiatku", Dátum začiatku);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VYBRAŤ
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| OD
| &vrDataTable AKO vrDataTable
| KDE
| vrDataTable.Period >= &DateStart
| A vrDataTable.Period Query.Execute();
TK = nedefinované;

Žiadosť = Nová požiadavka;
Query.TempTableManager = VrTable;
Query.Text = "Tu je dotaz zahŕňajúci dočasnú tabuľku";

Vysledok = Request.Run();
Návratový výsledok;

EndFunctions

Vonkajšia množina = InitializeDataSource();
DataSet = New Structure();
DataSet.Insert("SQL tabuľka", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decrypted Data, OutputToReportForm,DataSet);

V skutočnosti nie je veľa riadkov kódu a sú celkom štandardné ... v tomto prípade môžete využiť plnú funkčnosť tvorcu dotazov a zadať iba funkciu DATA COMPOSITION v ACS

Ale, samozrejme, vyzerá to trochu nie tak krásne ... a nahrávanie do tabuľky hodnôt zakaždým, keď musíte napísať kód a skontrolovať, či ste neurobili chybu v názve podrobností ... inak to co sme dostali v 1C vyzera akosi polopate. Ešte som sa nerozhodol, čo je pohodlnejšie na použitie. Vy rozhodujete a píšete o svojich rozhodnutiach a o tom, čo vás k nim prinútilo.

[pre zobrazenie odkazu sa musíte zaregistrovať]

Od verzie 8.3.5 platforma implementuje možnosť zapisovania údajov do tabuliek externých zdrojov údajov. Článok sa zaoberá touto funkcionalitou, ktorá rozširuje existujúce možnosti integrácie konfigurácie so systémami tretích strán.

Použiteľnosť

Článok pojednáva o platforme 1C 8.3.5. Materiál je relevantný aj pre aktuálne verzie platforiem.

Zápis do externých zdrojov údajov v 1C:Enterprise 8

V platforme 8.2.14 bol pridaný strom metadát nový objekt– externé zdroje údajov. Účelom tohto mechanizmu je získať údaje z externých databáz vo vzťahu k 1C.

S vydaním nových verzií platformy sa vyvinuli externé zdroje údajov, napríklad je možné ich umiestniť do dočasných tabuliek, vykonávať spojenia s bežnými tabuľkami.

V tomto článku sa pozrieme na to, aké nástroje má vývojár na zapisovanie do externých dátových zdrojov.

Všetky akcie boli vykonané na Microsoft SQL Server 2008 R2 DBMS.

V platforme 8.3.4 bola implementovaná možnosť využívať funkcie popísané v externých zdrojoch dát.

Táto funkcia vám umožňuje spúšťať uložené procedúry na strane servera SQL a s ich pomocou pristupovať k údajom z externých zdrojov, vrátane zapisovania.

Vezmime si príklad. Vytvorme novú databázu s názvom kursy_test pomocou SQL Management Studio. Budú sa na ňom vykonávať všetky ďalšie experimenty.

V tejto databáze vytvoríme nomenklatúrnu tabuľku, na ktorú napíšeme skript s nasledujúcim obsahom:

POUŽIŤ [kursy_test]
Ísť
VYTVORIŤ TABUĽKU [ dbo ] . [nomenklatúra](
[ id ] [ int ] NOT NULL ,
[ popis ] [ nvarchar ] ( 150 ) NOT NULL ,
[ cena ] [ číselný ](15 , 2 ) NULL ,
OBMEDZENIE [ PK_id ] PRIMÁRNY KĽÚČ ([ id ])
Ísť

V dôsledku vykonania sa vytvorí tabuľka s nasledujúcou štruktúrou:

Teraz musíme vytvoriť dve uložené procedúry, ktoré budú použité na úpravu údajov.

Prvú procedúru nazvime insert_nomenklatura. Bude určený na pridanie Nový riadok k stolu. Skript na jeho vytvorenie bude vyzerať takto:

POUŽIŤ [kursy_test]
Ísť
POSTUP VYTVORENIA insert_nomenklatura
@id int,
@description nvarchar(150),
@pricenumeric (15 , 2 )
AS
ZAČAŤ
INSERT INTO [kursy_test].dbo. [ nomenklatura ] ([ id ], [ popis ] ,[ cena ])
HODNOTY (@id , @popis , @cena )
KONIEC
Ísť

Druhá procedúra s názvom update_nomenklatura aktualizuje záznam, ktorý už v tabuľke existuje. Na jeho vytvorenie bol spustený nasledujúci skript:

V prehliadači objektov vyzerajú vygenerovaná tabuľka a dve uložené procedúry takto:

Dokončili sme všetky prípravné kroky na strane Microsoft SQL Server, teraz prejdeme ku konfigurátoru 1C:Enterprise 8.

Vytvárame nový externý dátový zdroj s názvom Nomenklatura. Pri vytváraní novej tabuľky v tomto zdroji údajov špecifikujeme nasledujúce parametre na pripojenie k zdroju údajov:

Reťazec pripojenia je nasledujúci:

Driver = (SQL Server) ; Server =(local ); Databáza = cursy_test ; ID používateľa = sa ; heslo=;

Ak má používateľ sa heslo, musí byť špecifikované v parametri Password pripájacieho reťazca.

Ak sú všetky parametre pripojenia zadané správne, po kliknutí na tlačidlo OK sa otvorí okno s tabuľkami dostupnými v zdroji údajov:

V tabuľke zaškrtávame polia, ktoré nás zaujímajú. Keď stlačíte tlačidlo Pripravený tabuľka dbo_nomenklatura sa vytvorí v externom zdroji údajov Nomenklatura:

Teraz prejdeme na kartu „Funkcie“ nášho zdroja údajov.

Pomocou podobného sprievodcu pridáme dve uložené procedúry:

Dostávame ďalšie vzhľad karty „Funkcie“:

Teraz poďme programovať používateľské rozhranie pracovať s externým zdrojom údajov.

Vo forme zoznamu na paneli príkazov umiestnite tlačidlo „Pridať“ s nasledujúcim obslužným programom:

&AtClient
Postup Add().
upozornenie = nový PopisUpozornenia("OpenTableFinish", TentoObjekt);
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
výstraha, FormWindowOpenModeForm.LockAllInterface);
EndProcedure

&AtClient
Uložiť postup (príkaz)
SaveOnServer();
EndProcedure &OnServer
Postup SaveOnServer()
Ak Object.Reference.Empty() Potom
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Inak
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
Koniec Ak ;
EndProcedure

V podnikovom režime vyzerá formulár zoznamu takto:

Tvar objektu je znázornený nižšie:

Pre zväčšenie kliknite na obrázok.

Pomocou uložených procedúr sme teda implementovali zápis do externých dátových zdrojov.

V platforme 8.3.5 sa objavila nová funkcia - priame zapisovanie do externých dátových zdrojov, čím sa obchádza mechanizmus uložených procedúr diskutovaný vyššie.

Dáta je možné editovať programovo aj interaktívne. A pre náš príklad sa nemusíte uchýliť ku konfigurácii.

Na paneloch príkazov a v ponuke „Viac“ môžete vidieť štandardné tlačidlá, ako napríklad „Vytvoriť“, „Kopírovať“, „Upraviť“ atď.

Pre zväčšenie kliknite na obrázok.

A vo forme objektu sa objavili tlačidlá „Uložiť“ a „Uložiť a zavrieť“:

Ako vidíte, teraz je práca s externými zdrojmi podobná práci s adresármi, dokumentmi atď.

Zvážte, aké zmeny boli vykonané na úrovni metadát, aby bolo možné zapisovať do externých zdrojov údajov.

Do tabuľky údajov bola pridaná nová vlastnosť Iba čítanie(typ - boolean).

Ak je táto vlastnosť nastavená na hodnotu True, zapisovanie údajov do tejto tabuľky pomocou platformy nie je možné.

Pole tabuľky údajov má teraz nasledujúce vlastnosti:

  • Iba čítanie(typ - boolean) – je možné zmeniť údaje v tomto poli;
  • AllowNull(typ - boolean) - či je možné do tohto poľa uložiť hodnotu NULL.

Nehnuteľnosť Iba čítanie by mal byť nastavený na Pravda pre databázové polia s automatická zmena, automaticky generované kľúčové polia, vypočítané polia atď.

Pomocou vstavaného jazyka môžete pridávať, upravovať a odstraňovať údaje v externých zdrojoch.

Na to predmety ExternalDataSourceTableRecordSet A ExternalDataSourceTableObject boli zavedené nové metódy Napíšte () A Odstrániť ().

Zvážte príklad programového pridávania nového záznamu pre externý zdroj údajov, o ktorom sme hovorili vyššie.

&AtClient
Postup Vytvárajte programovo(príkaz)
Vytvárajte programovo na serveri();
EndProcedure &OnServer

Postup Vytvárajte programovo na serveri()
WriteObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WriteObject.id= 5 ;
WriteObject.description= „Skriňa“ ;
zapisovateľnýObjekt.cena= 5000 ;
WriteObject.Write();
EndProcedure

V module table object externého zdroja údajov môžete teraz nastaviť handlery udalosti zápisu, ako napr BeforeWrite(), Na záznam() atď.:

V tomto článku boli zvažované dve možnosti zápisu údajov do externých zdrojov údajov – použitie uložených procedúr a využitie nových mechanizmov platformy 8.3.5.

Platforma teda teraz implementuje mechanizmy pre plnú integráciu s externými aplikáciami.

Vo verzii 8.3.6 bola vyššie popísaná funkcionalita rozšírená o nové špeciálne metódy GetChangableFields() a SetChangableFields(). Pomocou nich je možné vykonať operáciu zápisu do tých polí tabuľky VIEW, ktoré sú v konfigurátore označené ako len na čítanie. Vďaka tomu bolo možné implementovať scenár, v ktorom je zápis do jednotlivých polí VID tabuľky možný len v tých prípadoch, keď je to potrebné v súlade s obchodnou logikou aplikácie.

Vo verzii 8.3.7 bol vylepšený mechanizmus, ktorý určuje, ktoré konkrétne polia tabuliek VIEW môžu obsahovať hodnoty NULL. Až do tohto bodu mohli mať všetky tabuľky VIEW túto hodnotu. Táto zmena je spôsobená zvýšením rýchlosti triedenia v dynamické zoznamy na týchto poliach.

Vo verzii 8.3.8 je konečne možné určiť, či je externý zdroj údajov v transakčnom stave. Túto funkciu poskytuje nová metóda ExternalDataSourceManager.TransactionActive()

Na záver poznamenávame, že pre externé zdroje údajov, ako je uvedené vyššie, sú opísané údajové tabuľky z klasického relačného modelu. Platforma používa inú paradigmu na prácu s údajmi, ponúka vývojárovi určitú množinu typov objektov aplikácie (referenčné knihy, dokumenty, registre atď.). To je dôvod, prečo systém pri práci s tabuľkami externých dátových zdrojov nepodporuje väčšinu funkcionality, ktorá je vlastná jeho „natívnym“ objektom. Preto sa odporúča zdržať sa vývoja nejakej obchodnej logiky, berúc do úvahy použitie tabuliek VID, ak to nesúvisí s integračnými úlohami s už existujúce systémy. Alebo, zjednodušene povedané, mali by ste sa pokúsiť vyhnúť ukladaniu údajov, ktoré sa aktívne používajú vo vašej aplikácii, v inej tabuľke. vonkajší systém ak ich tento systém nepoužíva.

V ďalšom článku sa zamyslíme nad logickým pokračovaním využívania technológie externých dátových zdrojov v systéme 1C:Enterprise.

Pracujte s nimi v zoznamoch v režime 1C Enterprise.

V práci však často nastáva situácia, keď je časť dát uložená niekde inde.

  • Internetový obchod (zvyčajne ukladá údaje do externej databázy MySQL/SQL)
  • Ďalšia základňa.

Na prácu s takými údajmi, ktoré sú uložené v iných databázach, je potrebné vyvinúť špeciálne mechanizmy.

Vo verzii 1C 8.2.14 sa objavil nový s názvom 1C externé zdroje údajov, ktoré výrazne uľahčujú prácu programátora, pretože:

  • teraz nie je potrebné vytvárať špeciálne mechanizmy na získavanie údajov
  • k takýmto údajom má prístup
  • takéto údaje je možné zobraziť v zoznamoch 1C.
    • Externý zdroj údajov 1C - vonkajšia základňa SQL

      Povedzme, že máme databázu SQL, v ktorej sú uložené údaje, ktoré potrebujeme. Skúsme z neho čítať dáta pomocou mechanizmu 1C External Data Source.

      Pridajme externý zdroj údajov 1C. Musíte prejsť do konfigurátora, externé zdroje údajov sa nachádzajú v konfiguračnom okne, úplne dole v strome.

      1. Spojenie

      Pridajme nový externý dátový zdroj 1C, nazvime ho ľubovoľne.

      Databázu tvoria tabuľky. Musíme ich pridať do pridaného externého zdroja údajov. Kliknite naň pravým tlačidlom myši a vyberte položku Pridať tabuľku.

      Prvýkrát vás vyzve na zadanie pripájacieho reťazca. Môže byť zadaný manuálne alebo vytvorený, pre ktorý musíte kliknúť na tlačidlo „…“.

      Ako ovládač v našom konkrétnom prípade vyberieme "SQL Server"

      Vyplníme základné parametre pre pripojenie k SQL. Názov servera je možné zadať alebo vybrať zo zoznamu.

      1C sa pripojí k SQL a vyzve vás na výber konkrétnej databázy zo zoznamu.

      Potom 1C zobrazí zoznam tabuliek v tejto databáze a ich stĺpcov. Musíte vybrať požadované tabuľky pomocou začiarkavacích políčok.

      Tabuľky a stĺpce budú pridané. Názvy budú také, ako sú definované vo vzdialenej databáze. V 1C ich môžete premenovať (vo vlastnostiach).

      Tu je príklad pridanej tabuľky:

      Tu je príklad pridaného stĺpca:

      Aby platforma 1C pracovala s externou tabuľkou rovnakým spôsobom ako s adresármi 1C, v tabuľke je možné zadať ďalšie parametre:

      • Vo vlastnosti Key Field zadajte jeden zo stĺpcov, ktorý bude poskytovať jedinečnú identifikáciu riadku; ak viac reťazcov poskytuje jedinečnosť, potom túto metódu nefunguje (analóg poľa Kód)
      • Vo vlastnosti poľa Zobraziť zadajte jeden zo stĺpcov, ktorý bude poskytovať stručnú reprezentáciu reťazca (analóg poľa Názov)
      • Vo vlastnosti Typ údajov tabuľky zadajte Údaje objektu.

      2. Zobraziť

      Pripojenie k vzdialenej databáze sa nevykoná automaticky. Ak sa chcete pripojiť, musíte vybrať typickú ponuku.

      V pobočke Standard sa nachádza špeciálny tím Správa externých zdrojov údajov, ktorá vám umožňuje špecifikovať parametre pripojenia (ich vlastné pre režim 1C Enterprise) a pripojiť sa.

      Najprv musíte zadať parametre pre pripojenie k databáze.

      Keď ste vykonali konfiguráciu v konfigurátore, ako výsledok vám ukázal reťazec pripojenia. Znovu si ju môžete pozrieť po opätovnom kliknutí na Pridať tabuľku v konfigurátore.

      Skopírujte reťazec pripojenia a zadajte ho v režime 1C Enterprise.

      Potom musíte vykonať skutočné pripojenie.

      Po nadviazaní spojenia je možné pracovať so zoznamami.

      3. Použitie v jazyku 1C

      Spojenie je možné vykonať aj z programového kódu v jazyku 1C.

      Parametre pripojenia sú špecifikované nasledovne:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = true;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "heslo";
      ConnectionParameters.ConnectionString = "reťazec pripojenia z konfigurátora";
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetCommonConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parameters);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameters);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Údaje z databázy môžete vyhľadávať pomocou bežného . Príklad textu dotazu pre externý zdroj OurExternalSource a tabuľkyExternalSourceTable:

      VYBRAŤ
      ExternalSource Table.FieldName
      OD
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Externý zdroj dát 1C - práca so súborom Excel

      Skúsme inú možnosť - prácu so súborom Excel cez externý zdroj údajov 1C.

      Vytvorme jednoduchý súbor Excel.

      Pridajme externý zdroj, ľubovoľne ho nazvime FileExcel. Pridajte k nej tabuľku „Sheet1 $“. Ako vidíte, toto je názov hárka v Exceli s pridaním symbolu „$“.

      Rovnako ako v prípade SQL, pridajme stĺpce. Môžu byť pridané ručne. Je dôležité zabezpečiť, aby sa typy pridaných stĺpcov zhodovali, inak sa môže neskôr zobraziť chyba ako „Nesúlad typu údajov“.

      Pre stĺpec musíte zadať názov v 1C a názov v zdroji údajov.

      Pre Excel existuje funkcia (chyba ako „Príliš málo parametrov. Vyžaduje 3“):

      • Ak prvý riadok Excelové tabuľky sa nachádzajú názvy stĺpcov, potom stačí zadať názov tohto stĺpca, napríklad „Kód“.
      • V opačnom prípade musíte zadať celý názov s názvom tabuľky „Sheet1$.Code“, ale do parametrov pridať „HDR=NO;“.

      Parametre pripojenia pre súbor programu Excel vyzerajú takto:

      • Súbory XLSX (verzia Office 2007 a vyššia)
        Vodič=( Microsoft Excel Ovládač (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS súbory (predtým)
        Driver=(Ovládač Microsoft Excel (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Musíte zadať svoj vlastný názov a cestu k súboru.

Vo verzii 8 programu 1C vývojári pridali k funkcionalite možnosť pripojiť databázy tretích strán a získavať z nich informácie priamo z konfigurátora, bez použitia COM spojení a OLE objektov. Táto funkcia je implementovaná pomocou nového objektu - "Externé zdroje údajov"

Externé zdroje údajov v 1C možno použiť rovnakým spôsobom ako zvyšok systémových tabuliek:

  1. Pri vytváraní správ a výpočtov pomocou systému skladania údajov (ACS);
  2. Na získanie odkazov na informácie uložené v zdrojoch tretích strán;
  3. Na zmenu údajov uložených v tabuľkách;
  4. Pri podávaní žiadostí.

Je dôležité vedieť, že tento mechanizmus nie je určený na prácu s inými databázami 1C, keďže samotný operačný model 1C.Enterprise neznamená rušenie údajov na úrovni fyzických tabuliek.

Vytvorenie nového zdroja

Pridanie nového externého zdroja do programu prebieha v režime "Konfigurátor". V konfiguračnom strome sa nachádza zodpovedajúca vetva (obr. 1)

Pri vytváraní nového zdroja sa budete musieť zapotiť, napriek tomu, že forma nového objektu má len štyri záložky:

  1. Základné;
  2. údaje;
  3. funkcie;
  4. práva.

Prvá záložka má len jeden zaujímavý parameter – režim ovládania zámku. Ak sa nepýtate na otázky o blokovaní údajov v transakciách, o zložitosti paralelizácie informačných tokov, môžete tento parameter ponechať v režime automatického blokovania. Tento prístup však môže viesť k nadmerným obmedzeniam (napríklad, keď namiesto jedného záznamu program uzamkne celú fyzickú tabuľku, čím zbaví ostatných používateľov možnosti s ňou pracovať).

Spravované zámky, na rozdiel od automatických, používajú transakčný mechanizmus zabudovaný v samotnom programe, a nie v DBMS, čo vám umožňuje prenášať zachytenie tabuliek do oveľa viac nízky level.

Nastavením tohto parametra na „Automaticky a spravované“ dávame systému možnosť určiť, ktorý režim sa má použiť, a to priamym odkazom na zodpovedajúcu vlastnosť každej konkrétnej tabuľky.

Karta Údaje formulára vlastností externého zdroja

Tvar záložky „Údaje“ je znázornený na obr. 2

Ryža. 2

Tu môžeme pridať externé zdrojové tabuľky a kocky. Existujú dva spôsoby pridania tabuľky:

  1. Ručne potom uvidíme formulár na pridanie tabuľky (obr. 3);

Ryža. 3

  1. Alebo vyberte zo zoznamu fyzických zdrojových tabuliek (obr. 4), v tomto prípade sa pred nami otvorí špeciálny konštruktor.

Ryža. 4

Pozrime sa bližšie na formulár na pridanie tabuľky. Vlastnosť "Name" sa používa na jedinečnú identifikáciu objektu v konfigurácii.

Porovnanie objektu metaúdajov a konečnej fyzickej tabuľky prebieha prostredníctvom vlastnosti „Názov v zdroji údajov“ umiestnenej na karte „Doplnkové“ (obr. 5).

Ryža. päť

Ďalej musíme určiť typ tabuľky, respektíve jej objektivitu. Ak údaje uložené v štruktúre možno jednoznačne identifikovať prostredníctvom ľubovoľného jedného poľa, tabuľkou môže byť tabuľka objektov. Ak je identita záznamu určená množinou kľúčových polí, tabuľka musí mať neobjektový typ.

Porovnaním takýchto tabuliek s inými objektmi metadát môžeme nakresliť nasledujúcu analógiu:

  • Tabuľky objektov sú referenčné knihy;
  • Neobjektívne sú registre informácií.

Sada kľúčových polí je definovaná v nasledujúcom parametri formulára ("Kľúčové polia"). Toto pole je povinné. Ak ho necháte prázdne, dôjde k chybe pri ukladaní konfigurácie.

Ako môžete vidieť na Obr. 5, niektoré polia a tlačidlá formulára nie sú dostupné na úpravu:

  • Výraz v zdroji údajov;
  • Typ údajov tabuľky;
  • Pole zobrazenia;
  • Zobraziť manipulátory.

Je možné ich použiť až po vyplnení polí tabuľky, definovaní ich typu a nastavení ich identifikátorov (obr. 6).

Ryža. 6

Tu by ste mali venovať pozornosť voľbe "Povoliť nulu", ak je toto políčko začiarknuté, takéto pole nie je žiaduce použiť ako kľúč.

Konštruktor tabuľky

Snáď najdôležitejším a najzaujímavejším bodom pri práci s externými zdrojmi je vytvorenie pripájacieho reťazca. Jeho konštruktor sa otvorí po kliknutí na tlačidlo s tromi bodkami vedľa parametra „Reťazec pripojenia“.

V prvom rade budeme vyzvaní, aby sme rozhodli o ovládači, ktorý sa použije na pripojenie (obr. 7)

Ryža. 7

Nesprávna definícia tohto parametra vám neumožní pripojiť sa k tretej strane informačnú základňu. Malo by sa tiež chápať, že nie všetky ovládače uvedené v rozbaľovacom zozname možno použiť na automatické generovanie reťazca pripojenia. Ak platforma vykázala chybu (obr. 8), potom bude potrebné zapísať reťazec pripojenia ručne.

Obr.8

Ryža. deväť

Samotná linka je prísne regulovaná stavba.

Príklad pripájacieho reťazca

Zvážte databázu tretej strany vytvorenú v Microsoft Access a nachádza sa v koreni mechaniky D. Na pripojenie tejto základne musíme použiť príslušný driver, no jeho výber v konštruktore riadku vedie k chybe Obr.8.

Parametre pripojenia si napíšeme sami.

Driver=(Microsoft Access Driver (*.mdb)) – takto vyzerá prvá časť riadku. IN kučeravé zátvorky definovali sme vodiča.

Pre Excel súbory bude to vyzerať takto (Ovládač Microsoft Excel (*.xls)) , pre súbory Excel vytvorené v kancelárii staršie ako 2003 bude reťazec ovládača vyzerať takto (Ovládač Microsoft Excel (*.xls, *.xlsx, *.xlsm, * .xlsb)).

Oddelením tohto parametra od nasledujúceho bodkočiarkou musíme napísať adresu nášho úložiska (v našom prípade DBQ=D:\Databáza1.mdb).

Pridaním týchto dvoch parametrov dostaneme Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, zapísaním tohto parametra získame prístup k vnútorným štruktúram tejto databázy.

Pre objekt „Externý zdroj“ nestačí len vytvoriť ho v konfigurácii, ale musí byť pripojený aj v režime „Podniky“. Môžete to urobiť z ponuky "Všetky funkcie"->Externé zdroje. Keď prvýkrát vstúpime do našej tabuľky, musíme napísať rovnaký reťazec pripojenia už v režime "Enterprise".

Prečo je táto príležitosť taká zaujímavá? Každý, kto programoval v 1C, je celkom oboznámený s SQL a aspoň vo všeobecnosti oboznámený s architektúrou a princípmi vývoja iných technologických platforiem pre obchodné aplikácie vám s pevnou istotou povie, čo sa mu na 1C páči najviac. Samozrejme, tvorca dotazov je najpohodlnejší a najpremyslenejší mechanizmus na písanie dotazov na získavanie údajov z relačných štruktúr, s akým som sa kedy osobne stretol. A teraz nám 1C dal takú skvelú príležitosť použiť ju nielen s 1C, ale aj s akýmikoľvek inými stolmi. Tu je len kopa "muchy" naliata do tohto "sudu medu". Všetko v poriadku:

1) Nastavenie a používanie- bez "tancovania s tamburínou" to nepôjde
a) Pridajte externý zdroj údajov – zdá sa, že to nie je nič zložité
b) zaškrtnite políčko "Vybrať zo zoznamu" - je to potrebné - je potrebné skontrolovať výkon na začiatku a ušetriť vás od zbytočných problémov
c) - nezabudnite stlačiť "..." - pripojenie je ODBC. Nie OLEDB ako sme všetci zvyknutí, ale o level nižšie

D) Tu buďte VEĽMI OPATRNÍ.

Toto je ovládač ODBC - ak používate verziu klient-server, musí byť na serveri. Ak vyvíjate na jednom systéme a pracujete na inom (ako to zvyčajne býva), uistite sa, že vás nič neprekvapí. Zvláštne odporúčanie, ale vyberte si najstarší alebo najbežnejší ovládač, ak vám nezáleží na rýchlosti a nemienite ísť za hranice štandardu SQL92. To vám poskytne najlepšiu kompatibilitu. Napríklad pre SQL Server 2008 by bol najlepším ovládačom SQL Server Native Client 11, ale odporúčam zvoliť iba SQL Server, inak bude potrebné tento veľmi natívny klient nainštalovať buď na server alebo na všetky klientske počítače (v prípade z používania verzie súboru) a zisk je špeciálny pre jednoduché, že vám nedá prácu.
e) Štandardné dialógové okná výberu servera

E) Odporúčam odpovedať „áno“ na otázku uloženia hesla, inak nebude fungovať začatie tohto podnikania.
g) Vyberte si tabuľku a podrobnosti... skvelá príležitosť - môžete si ju ihneď premenovať, ako chcete (a podrobnosti tiež), pričom vo vlastnostiach uvidíte názvy polí zdroja údajov

H) A teraz spustíš, otvoríš návrhára dotazov - hlúpo vyberieš všetky záznamy z tabuľky a OPA - chyba. Čo robiť? Ak máš spravované rozhranie, pozri sa do servisného menu a ak máš normálne...
Osobne som použil tento kód:
Kód 1C v 8.x Parametre = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parametre.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();
Možno niektoré kúsky nie sú potrebné, ale ide to.
Kód musíte vykonať RAZ. Potom sa to normálne spojí ... samozrejme mystika - prečo to bolo potrebné, nie je jasné ...

2) Zdroje údajov iba na čítanie- Áno, zázraky sa nedejú ... ale niekedy chcete ....

3) NEPOUŽÍVAJTE ICH SPOLU S INTERNÝMI ZDROJMI ÚDAJOV
Mňa osobne táto skutočnosť na mieste zabila.

Ako to .... čo sme čakali a už sme si predstavovali a lízli ako teraz v jednej požiadavke spojíme naše dáta s 1C, vypneme - zoskupíme, vložíme do prehľadu, ale nebolo tam...
Ale samozrejme, to nezastaví skúsených ľudí ... aká myšlienka prišla na myseľ? Správne - dočasné tabuľky:

4) NEPOUŽÍVAJTE ICH SPOLU S DOČASNÝMI ​​STOLÍKMI

Ale toto už nevyzerá ako technologické ťažkosti, ale veľmi podobne ako to, čo od nás chcú, "aby sa život nezdal ako raj" :).

5) Možno použiť len v SKD spojeniach
Pre tých, ktorí nevedia, je to v ACS na karte „Odkazy na množinu údajov“. Ako často ich používate? Pohodlne? Zrejme nás chcú prinútiť, aby sme ich používali častejšie. Ale je tam stĺpec "Podmienka prepojenia" a "Parameter odkazu". Príklad ich použitia v žiadnej typickej konfigurácii som nenašiel, v dokumentácii ani v Khrustaleve akosi nie je všetko prehľadné. Môže mi niekto vysvetliť, ako funguje "podmienka prepojenia". Ak tam napíšete SourceAttribute = ReceiverRevision, nefunguje to. Samozrejme, podmienka sa dá zapísať do políčka "Výraz" - vo väčšine prípadov to stačí ... ale nejako to nie je veľmi jednoduché.

Celkovo bol tento problém predtým vyriešený niekde takto:
Kód 1C v 8.x Funkcia InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ak DateCon > "20100101" Potom
DateCon = "20100101";
Koniec Ak;

QN = NewQualifiersNumber(15,2);
cs = NewStringQualifiers(255);

Číslo poľa = Nové pole ();
ArrayNumber.Add(Type("Číslo"));

ArrayString = Nové pole ();
ArrayString.Add(Type("String"));

ArrayData = New Array();
ArrayDate.Add(Type("Dátum"));

//V tabuľke vyplníme účtovný náklad
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabuľka na načítanie údajov z SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Obdobie", TypeDate);

TK.Indices.Add("Obdobie");

// Pripojte sa k SQL
ConnectionString = "Poskytovateľ=SQLOLEDB.1;Pretrvávajúce informácie o zabezpečení=Pravda;ID používateľa=sa;Pwd=;Zdroj údajov=;Použiť postup na prípravu=1;Automatický preklad=True;Veľkosť paketu=4096;ID pracovnej stanice=;Použiť šifrovanie for Data=False;Značka s porovnávaním stĺpcov, keď je to možné=False;Initial Catalog=Reports“;
Connection = New COMObject("ADODB.Connection");
Príkaz = New COMObject("ADODB.Command");
RecordSet = Nový COMObject("ADODB.RecordSet");
Dátum = "";
Pokus
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Pripojenie;
Command.CommandText = "S_elect * z PH kde obdobie >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" a bodka<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Výnimka
Vrátenie TK;
Koniec pokusu;

Kým RecordSet.EOF = False Loop
Reťazec = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Požiadavka = Nová požiadavka();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Dátum začiatku", Dátum začiatku);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VYBRAŤ
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| OD
| &vrDataTable AKO vrDataTable
| KDE
| vrDataTable.Period >= &DateStart
| A vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = nedefinované;

Žiadosť = Nová požiadavka;
Query.TempTableManager = VrTable;
Query.Text = "Tu je dotaz zahŕňajúci dočasnú tabuľku";

Vysledok = Request.Run();
Návratový výsledok;

EndFunctions

Vonkajšia množina = InitializeDataSource();
DataSet = New Structure();
DataSet.Insert("SQL tabuľka", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decrypted Data, OutputToReportForm,DataSet);

V skutočnosti nie je veľa riadkov kódu a sú celkom štandardné ... v tomto prípade môžete využiť plnú funkčnosť tvorcu dotazov a zadať iba funkciu DATA COMPOSITION v ACS

Ale, samozrejme, vyzerá to trochu nie tak krásne ... a nahrávanie do tabuľky hodnôt zakaždým, keď musíte napísať kód a skontrolovať, či ste neurobili chybu v názve podrobností ... inak to co sme dostali v 1C vyzera akosi polopate. Ešte som sa nerozhodol, čo je pohodlnejšie na použitie. Vy rozhodujete a píšete o svojich rozhodnutiach a o tom, čo vás k nim prinútilo.

Informácie prevzaté zo stránky