Externí zdroje dat 1c 8.3 excel. Externí zdroje dat

Vydání 8.2.14.533 - konečně víceméně stabilní verze 14. vydání platformy. Konečně byla šance vyzkoušet báječnou příležitost – „externí zdroje dat“.

Proč tato příležitost vzbuzuje takový zájem? Každý, kdo programoval v 1C, je docela obeznámen s SQL a alespoň obecně obeznámený s architekturou a principy vývoje dalších technologických platforem pro obchodní aplikace vám s pevnou jistotou řekne, co se mu na 1C líbí nejvíce. Tvůrce dotazů je samozřejmě tím nejpohodlnějším a nejpromyšlenějším mechanismem pro psaní dotazů pro získávání dat z relačních struktur, se kterým jsem se kdy osobně setkal. A nyní nám 1C poskytlo tak úžasnou příležitost jej použít nejen s 1C, ale také s jakýmikoli jinými tabulkami. Zde je jen hromada "mouch v masti" nalitých do tohoto "sudu medu". Vše v pořádku:

1) Nastavení a používání - bez "tančení s tamburínou" to nepůjde

A) Přidat vnější zdroj data - jako nic složitého
b) zaškrtněte políčko "Vybrat ze seznamu" - je to nutné - je nutné zkontrolovat výkon na začátku a ušetřit vás od zbytečných problémů
proti)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- nezapomeňte stisknout "..." - připojení je ODBC. Ne OLEDB, jak jsme všichni zvyklí, ale o level níže

A buď tady VELMI POZORNÝ.

Toto je ovladač ODBC - pokud používáte verzi klient-server, musí být na serveru. Pokud vyvíjíte na jednom systému a pracujete na jiném (jak tomu obvykle bývá), ujistěte se, že vás nic nepřekvapí. Zvláštní doporučení, ale zvolte nejstarší nebo nejrozšířenější ovladač, pokud vám nejde o rychlost a nehodláte jít za hranice standardu SQL92. To vám zajistí nejlepší kompatibilitu. Například pro SQL Server 2008 nejlepší řidič bude SQL Server Native Client 11, ale doporučuji zvolit pouze SQL Server, jinak bude nutné tento nativní klient nainstalovat buď na server, nebo na všechny klientské počítače (pokud používáte verze souboru), a výplata je speciální pro jednoduché úkoly nebude.

E) Standardní dialogová okna pro výběr serveru

G) Vyberte si tabulku a podrobnosti ... skvělá příležitost - můžete ji okamžitě přejmenovat, jak chcete (a podrobnosti také), přičemž ve vlastnostech uvidíte názvy polí zdroje dat

H) A teď spustíte, otevřete návrhář dotazů - hloupě vyberete všechny záznamy z tabulky a OPA - chyba. Co dělat? Pokud máte spravované rozhraní, podívejte se do servisního menu a pokud máte normální...
Osobně jsem použil tento kód:

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

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

ExternalDataSources.DAX.SetConnection();

Možná některé kousky nejsou potřeba, ale jde to. Je potřeba spustit kód JEDNOU. Poté se to normálně připojí ... mystika samozřejmě - proč to bylo nutné, není jasné ...

2) Zdroje dat pouze pro čtení
Ano, zázraky se nedějí ... ale někdy chcete ....

3) NEPOUŽÍVEJTE JE SPOLU S INTERNÍMI ZDROJI DAT
Osobně mě tato skutečnost na místě zabila.

Jak to je....na co jsme čekali a už jsme si představovali a lízli jak teď v jednom požadavku spojíme naše data s 1C, vypneme - seskupíme, vložíme do sestavy, ale nebylo tam ...

Ale samozřejmě to nezastaví zkušené lidi ... jaká myšlenka vás napadla? To je pravda - dočasné tabulky:

4) NEPOUŽÍVEJTE JE SPOLU S DOČASNÝMI ​​STOLY

Ale to už nevypadá jako technologické potíže, ale vypadá to velmi podobně jako to, co po nás chtějí, „aby se život nezdál jako ráj“ (IMG :) .

5) Lze použít pouze ve spojeních SKD

Pro ty, kteří nevědí, je to v ACS na záložce "Odkazy na datové sady". Jak často je používáte? Výhodně? Zřejmě nás chtějí donutit, abychom je používali častěji. Ale je tam sloupec "Podmínka odkazu" a "Parametr odkazu". Příklad jejich použití v žádné typické konfiguraci jsem nenašel, v dokumentaci ani v Khrustalevě nějak není vše transparentní. Může mi někdo vysvětlit, jak funguje "podmínka odkazu". Pokud tam napíšete SourceAttribute = ReceiverRevision, nefunguje to. Podmínku lze samozřejmě napsat do pole "Výraz" - ve většině případů to stačí ... ale nějak to není moc jednoduché.

Celkově byl tento problém dříve vyřešen někde takto:

Funkce InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Pokud DateCon > "20100101" Pak
DateCon = "20100101";
EndIf;

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

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

ArrayString = New Array();
ArrayString.Add(Type("String"));

ArrayData = New Array();
ArrayDate.Add(Type("Datum"));

//Účetní náklad vyplníme do tabulky
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabulka pro načtení dat z SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Období", TypeDate);

TK.Indices.Add("Období");

// Připojení k SQL
ConnectionString = "Poskytovatel=SQLOLEDB.1;Trvalé informace o zabezpečení=True;ID uživatele=sa;Pwd=;Zdroj dat=;Použít postup pro přípravu=1;Automatický překlad=True;Velikost paketu=4096;ID pracovní stanice=;Použít šifrování for Data=False;Tag s řazením sloupců, je-li to možné=False;Initial Catalog=Reports";
Connection = New COMObject("ADODB.Connection");
Příkaz = New COMObject("ADODB.Command");
RecordSet = Nový COMObject("ADODB.RecordSet");
Datum = "";
Pokus
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Připojení;
Command.CommandText = "Vyberte * z PH kde období >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" a období RecordSet = Command.Execute();
RecordSet.MoveFirst();
Výjimka
Návrat TK;
Konec pokusu;

Zatímco RecordSet.EOF = False Loop
Řetězec = 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žadavek = Nový požadavek();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VYBRAT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| OD
| &vrDataTable JAKO vrDataTable
| KDE
| vrDataTable.Period >= &DateStart
| A vrDataTable.Period Query.Execute();
TK = Nedefinováno;

Žádost = Nová žádost;
Query.TempTableManager = VrTable;
Query.Text = "Zde je dotaz zahrnující dočasnou tabulku";

Výsledek = Request.Run();
Návratový výsledek;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = Nová struktura();
DataSet.Insert("SQL tabulka", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decrypted Data, OutputToReportForm,Dataset);

Ve skutečnosti není mnoho řádků kódu a jsou docela standardní ... v tomto případě můžete využít plnou funkčnost tvůrce dotazů a zadat pouze funkci DATA COMPOSITION v ACS

Ale samozřejmě to vypadá trochu ne tak krásně ... a nahrávání do tabulky hodnot pokaždé, když musíte napsat kód a zkontrolovat, zda jste neudělali chybu ve jménu podrobností ... jinak to, co jsme dostali v 1C, vypadá tak nějak polopaticky. Ještě jsem se nerozhodl, co je pohodlnější použít. Vy rozhodujete a píšete o svých rozhodnutích a o tom, co vás k nim přimělo.

[pro zobrazení odkazu se musíte zaregistrovat]

Od verze 8.3.5 platforma implementuje schopnost zapisovat data do tabulek externích datových zdrojů. Článek se zabývá touto funkcionalitou, která rozšiřuje stávající možnosti integrace konfigurace se systémy třetích stran.

Použitelnost

Článek pojednává o platformě 1C 8.3.5. Materiál je také relevantní pro aktuální verze platforem.

Zápis do externích datových zdrojů v 1C:Enterprise 8

V platformě 8.2.14 byl přidán strom metadat nový objekt– externí zdroje dat. Účelem tohoto mechanismu je získat data z externích databází ve vztahu k 1C.

S vydáním nových verzí platformy se vyvinuly externí zdroje dat, například bylo možné je umístit do dočasných tabulek, provádět spojení s běžnými tabulkami.

V tomto článku se podíváme na to, jaké nástroje má vývojář pro zápis do externích datových zdrojů.

Všechny akce byly provedeny na Microsoft SQL Server 2008 R2 DBMS.

V platformě 8.3.4 byla implementována možnost využívat funkce popsané v externích zdrojích dat.

Tato funkce umožňuje spouštět uložené procedury na straně serveru SQL a s jejich pomocí přistupovat k datům z externích zdrojů, včetně zapisování.

Vezměme si příklad. Vytvořme novou databázi s názvem kursy_test pomocí SQL Management Studio. Budou na něm prováděny všechny další experimenty.

V této databázi vytvoříme nomenklaturní tabulku, k tomu napíšeme skript s následujícím obsahem:

USE [kursy_test]
JÍT
VYTVOŘIT TABULKU [ dbo ] . [nomenklatura](
[ id ] [ int ] NOT NULL ,
[ popis ] [ nvarchar ](150) NOT NULL,
[ cena ] [ číselný ](15, 2) NULL,
OMEZENÍ [ PK_id ] PRIMÁRNÍ KLÍČ ([ id ])
JÍT

V důsledku provedení se vytvoří tabulka s následující strukturou:

Nyní musíme vytvořit dvě uložené procedury, které budou použity k úpravě dat.

Nazvěme první proceduru insert_nomenklatura. Bude navržen tak, aby se přidal nový řádek ke stolu. Skript pro jeho vytvoření bude vypadat takto:

USE [kursy_test]
JÍT
POSTUP VYTVOŘENÍ insert_nomenklatura
@id int,
@description nvarchar(150),
@pricenumeric (15 , 2 )
TAK JAKO
ZAČÍT
INSERT INTO [kursy_test].dbo. [ nomenklatura ] ([ id ], [ popis ] ,[ cena ])
HODNOTY (@id , @popis , @cena )
KONEC
JÍT

Druhá procedura s názvem update_nomenklatura aktualizuje záznam, který již v tabulce existuje. K jeho vytvoření byl spuštěn následující skript:

V prohlížeči objektů vypadají vygenerovaná tabulka a dvě uložené procedury takto:

Dokončili jsme všechny přípravné kroky na straně Microsoft SQL Server, nyní přejdeme ke konfigurátoru 1C:Enterprise 8.

Vytváříme nový externí datový zdroj s názvem Nomenklatura. Při vytváření nové tabulky v tomto zdroji dat zadáváme následující parametry pro připojení ke zdroji dat:

Připojovací řetězec je následující:

Driver = (SQL Server) ; Server =(místní); Databáze = cursy_test ; ID uživatele = sa ; heslo=;

Pokud má uživatel sa heslo, musí být uvedeno v parametru Heslo připojovacího řetězce.

Pokud jsou všechny parametry připojení zadány správně, po kliknutí na OK se otevře okno obsahující tabulky dostupné ve zdroji dat:

V tabulce zaškrtáváme pole, která nás zajímají. Když stisknete tlačítko Připraveno tabulka dbo_nomenklatura bude vytvořena v externím zdroji dat Nomenklatura:

Nyní se přepneme na kartu „Funkce“ našeho zdroje dat.

Pomocí podobného průvodce přidáme dvě uložené procedury:

Dostáváme další vzhled karty „Funkce“:

Nyní programujeme uživatelské rozhraní pracovat s externím zdrojem dat.

Ve formě seznamu na příkazovém panelu umístěte tlačítko „Přidat“ s následujícím ovladačem:

&AtClient
Postup Add().
upozornění = nový PopisUpozornění("OpenTableFinish", ThisObject);
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
upozornění, FormWindowOpenModeForm.LockAllInterface);
EndProcedure

&AtClient
Uložení procedury (příkaz)
SaveOnServer();
EndProcedure &OnServer
Postup SaveOnServer()
Li Object.Reference.Empty() Pak
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
v opačném případě
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
EndIf;
EndProcedure

V podnikovém režimu vypadá formulář seznamu takto:

Tvar objektu je zobrazen níže:

Pro zvětšení klikněte na obrázek.

Pomocí uložených procedur jsme tedy implementovali zápis do externích datových zdrojů.

V platformě 8.3.5 se objevila nová funkce - přímý zápis do externích datových zdrojů, obcházení mechanismu uložených procedur popsaný výše.

Data lze editovat jak programově, tak interaktivně. A pro náš příklad se nemusíte uchýlit ke konfiguraci.

V příkazových lištách a v nabídce „Více“ můžete vidět standardní tlačítka, jako je „Vytvořit“, „Kopírovat“, „Upravit“ atd.

Pro zvětšení klikněte na obrázek.

A ve formě objektu se objevila tlačítka „Uložit“ a „Uložit a zavřít“:

Jak vidíte, práce s externími zdroji je nyní podobná práci s adresáři, dokumenty atd.

Zvažte, jaké změny byly provedeny na úrovni metadat, aby bylo možné zapisovat do externích zdrojů dat.

Do datové tabulky byla přidána nová vlastnost Pouze čtení(typ - boolean).

Pokud je tato vlastnost nastavena na hodnotu True, zápis dat do této tabulky pomocí platformy není možný.

Pole datové tabulky má nyní následující vlastnosti:

  • Pouze čtení(type - boolean) – je možné změnit údaje v tomto poli;
  • AllowNull(typ - boolean) - zda je možné do tohoto pole uložit hodnotu NULL.

Vlastnictví Pouze čtení by mělo být nastaveno na Skutečný pro databázová pole s automatická změna, automaticky generovaná klíčová pole, vypočítaná pole atd.

Pomocí vestavěného jazyka můžete přidávat, upravovat a odstraňovat data v externích zdrojích.

K tomu předměty ExternalDataSourceTableRecordSet A ExternalDataSourceTableObject byly zavedeny nové metody Napsat() A Vymazat().

Zvažte příklad programového přidání nového záznamu pro externí zdroj dat popsaný výše.

&AtClient
Postup Vytvářejte programově(Tým )
Vytvořte programově na serveru();
EndProcedure &OnServer

Postup Vytvořte programově na serveru()
Zapisovatelný objekt=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WriteObject.description= „Skříň“ ;
zapisovatelnýObjekt.cena= 5000 ;
WriteObject.Write();
EndProcedure

V modulu tabulkového objektu externího zdroje dat lze nyní nastavit handlery události zápisu, jako např BeforeWrite(), OnRecord() atd.:

V tomto článku byly zvažovány dvě možnosti zápisu dat do externích datových zdrojů – použití uložených procedur a využití nových mechanismů platformy 8.3.5.

Platforma tak nyní implementuje mechanismy pro plnou integraci s externími aplikacemi.

Ve verzi 8.3.6 byla výše popsaná funkčnost rozšířena o nové speciální metody GetChangableFields() a SetChangableFields(). Pomocí nich je možné provést operaci zápisu do těch polí tabulky VIEW, která jsou v konfigurátoru označena jako jen pro čtení. Díky tomu bylo možné implementovat scénář, ve kterém je zápis do jednotlivých polí VID tabulky možný pouze v těch případech, kdy je to nutné v souladu s obchodní logikou aplikace.

Ve verzi 8.3.7 byl vylepšen mechanismus, který určuje, která konkrétní pole tabulek VIEW mohou obsahovat hodnoty NULL. Až do tohoto okamžiku mohly všechny tabulky VIEW nabývat této hodnoty. Tato změna je způsobena zvýšením rychlosti třídění v dynamické seznamy na těchto polích.

Ve verzi 8.3.8 je konečně možné určit, zda je externí zdroj dat v transakčním stavu. Tuto funkci poskytuje nová metoda ExternalDataSourceManager.TransactionActive()

Na závěr poznamenáváme, že pro externí zdroje dat, jak je uvedeno výše, jsou popsány datové tabulky z klasického relačního modelu. Platforma používá jiné paradigma pro práci s daty a nabízí vývojáři určitou sadu typů aplikačních objektů (referenční knihy, dokumenty, registry atd.). Proto systém při práci s tabulkami externích datových zdrojů nepodporuje většinu funkcí, které jsou vlastní jeho „nativním“ objektům. Proto se doporučuje upustit od vývoje nějaké obchodní logiky s ohledem na použití tabulek VID, pokud to nesouvisí s integračními úkoly s již stávající systémy. Nebo, jednoduše řečeno, měli byste se pokusit vyhnout ukládání dat, která se aktivně používají ve vaší aplikaci, v nějaké jiné tabulce. externí systém pokud je tento systém nepoužívá.

V příštím článku se zamyslíme nad logickým pokračováním využití technologie externích datových zdrojů v systému 1C:Enterprise.

Pracujte s nimi v seznamech v režimu 1C Enterprise.

V práci však často nastává situace, kdy je část dat uložena někde jinde.

  • Internetový obchod (obvykle ukládá data do externí databáze MySQL/SQL)
  • Další základna.

Chcete-li pracovat s takovými daty, která jsou uložena v jiných databázích, musíte vyvinout speciální mechanismy.

Ve verzi 1C 8.2.14 se objevil nový s názvem 1C External Data Sources, který značně usnadňuje práci programátora, protože:

  • nyní již není potřeba vytvářet speciální mechanismy pro získávání dat
  • k takovým údajům má přístup
  • taková data lze zobrazit v seznamech 1C.
    • Externí zdroj dat 1C - vnější základna SQL

      Řekněme, že máme databázi SQL, která ukládá data, která potřebujeme. Zkusme z něj načíst data pomocí mechanismu 1C External Data Source.

      Přidejme externí zdroj dat 1C. Musíte jít do konfigurátoru, externí zdroje dat se nacházejí v konfiguračním okně, úplně dole ve stromu.

      1. Připojení

      Přidejme nový externí datový zdroj 1C, nazvěme jej libovolně.

      Databáze je tvořena tabulkami. Musíme je přidat do přidaného externího zdroje dat. Klikněte na něj pravým tlačítkem a vyberte Přidat tabulku.

      Poprvé vás vyzve k zadání připojovacího řetězce. Lze jej zadat ručně nebo vytvořit, pro které musíte kliknout na tlačítko „…“.

      Jako ovladač v našem konkrétním případě vybereme "SQL Server"

      Vyplníme základní parametry pro připojení k SQL. Název serveru lze zadat nebo vybrat ze seznamu.

      1C se připojí k SQL a vyzve vás k výběru konkrétní databáze ze seznamu.

      Poté 1C zobrazí seznam tabulek v této databázi a jejich sloupce. Musíte vybrat požadované tabulky pomocí zaškrtávacích políček.

      Budou přidány tabulky a sloupce. Jména budou taková, jak jsou definována ve vzdálené databázi. V 1C je můžete přejmenovat (ve vlastnostech).

      Zde je příklad přidané tabulky:

      Zde je příklad přidaného sloupce:

      Aby platforma 1C pracovala s externí tabulkou stejným způsobem jako s adresáři 1C, lze v tabulce zadat další parametry:

      • Ve vlastnosti pole klíče zadejte jeden ze sloupců, který bude poskytovat jednoznačnou identifikaci řádku; pokud více řetězců poskytuje jedinečnost, pak tudy nefunguje (analogové pole Kód)
      • Ve vlastnosti pole Zobrazit určete jeden ze sloupců, který bude poskytovat stručnou reprezentaci řetězce (analoga pole Název)
      • Ve vlastnosti datového typu tabulky zadejte Data objektu.

      2. Zobrazit

      Připojení ke vzdálené databázi se neprovádí automaticky. Chcete-li se připojit, musíte vybrat typickou nabídku.

      V pobočce Standard se nachází speciální tým Správa externích zdrojů dat, která vám umožňuje zadat parametry připojení (jejich vlastní pro režim 1C Enterprise) a připojit se.

      Nejprve je třeba zadat parametry pro připojení k databázi.

      Když jste provedli konfiguraci v konfigurátoru, zobrazilo se vám jako výsledek připojovací řetězec. Znovu jej zobrazíte kliknutím na Přidat tabulku v konfigurátoru.

      Zkopírujte připojovací řetězec a zadejte jej v režimu 1C Enterprise.

      Poté musíte provést skutečné připojení.

      Po navázání spojení je možné pracovat se seznamy.

      3. Použití v jazyce 1C

      Spojení lze provést i z programového kódu v jazyce 1C.

      Parametry připojení jsou specifikovány takto:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = true;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "heslo";
      ConnectionParameters.ConnectionString = "řetězec připojení z konfigurátoru";
      ConnectionParameters.DBMS = "MSSQLServer";

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

      Data z databáze můžete dotazovat pomocí obvyklého . Příklad textu dotazu pro externí zdroj OurExternalSource a tabulkyExternalSourceTable:

      VYBRAT
      ExternalSource Table.FieldName
      Z
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Externí zdroj dat 1C - práce se souborem Excel

      Zkusme jinou možnost – práci se souborem Excel prostřednictvím externího zdroje dat 1C.

      Vytvoříme jednoduchý soubor Excel.

      Přidáme externí zdroj, libovolně jej pojmenujeme FileExcel. Přidejte k němu tabulku "Sheet1 $". Jak vidíte, toto je název listu v aplikaci Excel s přidáním symbolu „$“.

      Stejně jako v případě SQL přidáme sloupce. Lze je přidat ručně. Je důležité zajistit, aby se typy přidaných sloupců shodovaly, jinak se může později zobrazit chyba jako „Neshoda typu dat“.

      Pro sloupec musíte zadat název v 1C a název ve zdroji dat.

      Pro Excel existuje funkce (chyba jako „Příliš málo parametrů. Vyžaduje 3“):

      • Pokud první řádek Excelové tabulky jsou umístěny názvy sloupců, pak stačí zadat název tohoto sloupce, například „Kód“.
      • V opačném případě musíte zadat celý název s názvem tabulky „Sheet1$.Code“, ale do parametrů přidat „HDR=NO;“.

      Parametry připojení pro soubor aplikace Excel vypadají takto:

      • Soubory XLSX (verze Office 2007 a novější)
        Řidič=( Microsoft Excel Ovladač (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS soubory (dříve)
        Driver=(Ovladač Microsoft Excel (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Musíte zadat svůj vlastní název a cestu k souboru.

Ve verzi 8 programu 1C přidali vývojáři k funkcionalitě možnost propojovat databáze třetích stran a získávat z nich informace přímo z konfigurátoru, bez použití COM připojení a OLE objektů. Tato funkce je implementována pomocí nového objektu - "Externí zdroje dat"

Externí zdroje dat v 1C lze použít stejným způsobem jako zbytek systémových tabulek:

  1. Při vytváření sestav a výpočtů pomocí systému skládání dat (ACS);
  2. Získání odkazů na informace uložené ve zdrojích třetích stran;
  3. Chcete-li změnit data uložená v tabulkách;
  4. Při podávání žádostí.

Je důležité vědět, že tento mechanismus není navržen pro práci s jinými databázemi 1C, protože samotný operační model 1C.Enterprise neznamená zásah do dat na úrovni fyzických tabulek.

Vytvoření nového zdroje

Přidání nového externího zdroje do programu probíhá v režimu "Konfigurátor". V konfiguračním stromu je odpovídající větev (obr. 1)

Při vytváření nového zdroje se budete muset zapotit, přestože formulář nového objektu má pouze čtyři záložky:

  1. Základní;
  2. Data;
  3. Funkce;
  4. Práva.

První záložka má pouze jeden zajímavý parametr – režim ovládání zámku. Pokud se neptáte na otázky o blokování dat v transakcích, o složitosti paralelizace informačních toků, můžete tento parametr ponechat v režimu automatického blokování. Tento přístup však může vést k přílišným omezením (např. když místo jednoho záznamu program uzamkne celou fyzickou tabulku a připraví tak ostatní uživatele o možnost s ní pracovat).

Spravované zámky, na rozdíl od automatických používají transakční mechanismus zabudovaný v samotném programu a ne v DBMS, což vám umožňuje přenášet zachycení tabulek do mnohem více nízká úroveň.

Nastavením tohoto parametru na "Automatický a spravovaný" dáváme systému možnost určit, který režim použít, a to přímo odkazem na odpovídající vlastnost každé konkrétní tabulky.

Karta Data formuláře vlastností externího zdroje

Podoba záložky „Data“ je na obr. 2

Rýže. 2

Zde můžeme přidat externí zdrojové tabulky a kostky. Tabulku lze přidat dvěma způsoby:

  1. Ručně pak uvidíme formulář pro přidání tabulky (obr. 3);

Rýže. 3

  1. Nebo vyberte ze seznamu fyzických zdrojových tabulek (obr. 4), v tomto případě se před námi otevře speciální konstruktor.

Rýže. 4

Podívejme se blíže na formulář pro přidání tabulky. Vlastnost "Name" se používá k jednoznačné identifikaci objektu v konfiguraci.

Porovnání objektu metadat a finální fyzické tabulky probíhá prostřednictvím vlastnosti „Název ve zdroji dat“ umístěné na záložce „Upřesnit“ (obr. 5).

Rýže. 5

Dále musíme určit typ tabulky, respektive její objektivitu. Pokud lze data uložená ve struktuře jednoznačně identifikovat pomocí libovolného pole, může být tabulkou tabulka objektů. Pokud je identita záznamu určena sadou klíčových polí, tabulka musí mít neobjektový typ.

Porovnáním takových tabulek s jinými objekty metadat můžeme nakreslit následující analogii:

  • Tabulky objektů jsou referenční knihy;
  • Neobjektivní jsou registry informací.

Sada klíčových polí je definována v dalším parametru formuláře ("Klíčová pole"). Toto pole je povinné. Pokud jej ponecháte prázdné, dojde k chybě při ukládání konfigurace.

Jak můžete vidět na obr. 5, některá pole a tlačítka formuláře nejsou k dispozici pro úpravy:

  • Výraz ve zdroji dat;
  • Datový typ tabulky;
  • Zobrazit pole;
  • Zobrazit ovladače.

Lze je použít až poté, co vyplníme pole tabulky, nadefinujeme jejich typ a nastavíme jejich identifikátory (obr. 6).

Rýže. 6

Zde byste měli věnovat pozornost volbě "Allow Null", pokud je toto políčko zaškrtnuté, není žádoucí používat takové pole jako klíč.

Konstruktor tabulky

Snad nejdůležitějším a nejzajímavějším bodem při práci s externími zdroji je vytvoření připojovacího řetězce. Jeho konstruktor se otevře, když kliknete na tlačítko se třemi tečkami vedle parametru "Připojovací řetězec".

Nejprve budeme požádáni o rozhodnutí o ovladači, který bude použit pro připojení (obr. 7)

Rýže. 7

Nesprávná definice tohoto parametru vám neumožní připojit se k třetí straně informační základna. Je třeba si také uvědomit, že ne všechny ovladače uvedené v rozevíracím seznamu lze použít k automatickému generování připojovacího řetězce. Pokud platforma vykázala chybu (obr. 8), bude nutné připojovací řetězec zapsat ručně.

Obr.8

Rýže. 9

Samotná linka je přísně regulovaná stavba.

Příklad připojovacího řetězce

Zvažte databázi třetí strany vytvořenou v Microsoft Access a umístěný v kořenu disku D. Pro připojení této základny musíme použít příslušný ovladač, ale jeho volba v konstruktoru řádků vede k chybě Obr.8.

Parametry připojení si napíšeme sami.

Driver=(Microsoft Access Driver (*.mdb)) – takto vypadá první část řádku. V složené závorky definovali jsme řidiče.

Pro Excel soubory bude vypadat takto (Microsoft Excel Driver (*.xls)) , pro soubory Excel vytvořené v kanceláři starší než 2003 bude řádek ovladače vypadat takto (Ovladač Microsoft Excel (*.xls, *.xlsx, *.xlsm, * .xlsb)).

Oddělením tohoto parametru od dalšího středníkem musíme napsat adresu našeho úložiště (v našem případě DBQ=D:\Database1.mdb).

Přidáním těchto dvou parametrů dostaneme Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, zapsáním tohoto parametru získáme přístup k vnitřním strukturám této databáze.

U objektu "Externí zdroj" jej nestačí pouze vytvořit v konfiguraci, musí být také připojen v režimu "Podniky". To lze provést z nabídky "Všechny funkce"->Externí zdroje. Když poprvé vstoupíme do naší tabulky, musíme napsat stejný připojovací řetězec již v režimu "Enterprise".

Proč je tato příležitost tak zajímavá? Každý, kdo programoval v 1C, je docela obeznámen s SQL a alespoň obecně obeznámený s architekturou a principy vývoje dalších technologických platforem pro obchodní aplikace vám s pevnou jistotou řekne, co se mu na 1C líbí nejvíce. Tvůrce dotazů je samozřejmě tím nejpohodlnějším a nejpromyšlenějším mechanismem pro psaní dotazů pro získávání dat z relačních struktur, se kterým jsem se kdy osobně setkal. A nyní nám 1C poskytlo tak úžasnou příležitost jej použít nejen s 1C, ale také s jakýmikoli jinými tabulkami. Zde je jen hromada "mouch v masti" nalitých do tohoto "sudu medu". Vše v pořádku:

1) Nastavení a použití- bez "tančení s tamburínou" to nepůjde
a) Přidejte externí zdroj dat – zdá se, že to není nic složitého
b) zaškrtněte políčko "Vybrat ze seznamu" - je to nutné - je nutné zkontrolovat výkon na začátku a ušetřit vás od zbytečných problémů
c) - nezapomeňte stisknout "..." - připojení je ODBC. Ne OLEDB, jak jsme všichni zvyklí, ale o level níže

D) Zde buďte VELMI OPATRNÍ.

Toto je ovladač ODBC - pokud používáte verzi klient-server, musí být na serveru. Pokud vyvíjíte na jednom systému a pracujete na jiném (jak tomu obvykle bývá), ujistěte se, že vás nic nepřekvapí. Zvláštní doporučení, ale zvolte nejstarší nebo nejrozšířenější ovladač, pokud vám nejde o rychlost a nehodláte jít za hranice standardu SQL92. To vám zajistí nejlepší kompatibilitu. Například pro SQL Server 2008 by byl nejlepší ovladač SQL Server Native Client 11, ale doporučuji zvolit pouze SQL Server, jinak bude nutné tento velmi nativní klient nainstalovat buď na server, nebo na všechny klientské počítače (v případě použití verze souboru) a zisk je zvláštní pro jednoduché, že vám nedá práci.
e) Standardní dialogová okna pro výběr serveru

E) Na otázku uložení hesla doporučuji odpovědět „ano“, jinak nebude fungovat zahájení tohoto podnikání.
g) Vyberte si tabulku a podrobnosti... skvělá příležitost - můžete si ji okamžitě přejmenovat, jak chcete (a podrobnosti také), přičemž ve vlastnostech uvidíte názvy polí zdroje dat

H) A teď spustíte, otevřete návrhář dotazů - hloupě vyberete všechny záznamy z tabulky a OPA - chyba. Co dělat? Pokud máte spravované rozhraní, podívejte se do servisního menu a pokud máte normální...
Osobně jsem použil tento kód:
Kód 1C v 8.x Parametry = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parametry.AuthenticationStandard = true;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=databáze";
Parametry.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Možná některé kousky nejsou potřeba, ale jde to.
Kód musíte provést JEDNOU. Poté se to normálně připojí ... mystika samozřejmě - proč to bylo nutné, není jasné ...

2) Zdroje dat pouze pro čtení- Ano, zázraky se nedějí ... ale někdy chcete ....

3) NEPOUŽÍVEJTE JE SPOLU S INTERNÍMI ZDROJI DAT
Osobně mě tato skutečnost na místě zabila.

Jak to je....na co jsme čekali a už jsme si představovali a lízli jak teď v jednom požadavku spojíme naše data s 1C, vypneme - seskupíme, vložíme do sestavy, ale nebylo tam ...
Ale samozřejmě to nezastaví zkušené lidi ... jaká myšlenka vás napadla? To je pravda - dočasné tabulky:

4) NEPOUŽÍVEJTE JE SPOLU S DOČASNÝMI ​​STOLY

To už ale nevypadá jako technologické potíže, ale hodně to vypadá jako to, co po nás chtějí, "aby se život nezdál jako ráj" :).

5) Lze použít pouze ve spojeních SKD
Pro ty, kteří nevědí, je to v ACS na záložce "Odkazy na datové sady". Jak často je používáte? Výhodně? Zřejmě nás chtějí donutit, abychom je používali častěji. Ale je tam sloupec "Podmínka odkazu" a "Parametr odkazu". Příklad jejich použití v žádné typické konfiguraci jsem nenašel, v dokumentaci ani v Khrustalevě nějak není vše transparentní. Může mi někdo vysvětlit, jak funguje "podmínka odkazu". Pokud tam napíšete SourceAttribute = ReceiverRevision, nefunguje to. Podmínku lze samozřejmě napsat do pole "Výraz" - ve většině případů to stačí ... ale nějak to není moc jednoduché.

Celkově byl tento problém dříve vyřešen někde takto:
Kód 1C v 8.x Funkce InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Pokud DateCon > "20100101" Pak
DateCon = "20100101";
EndIf;

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

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

ArrayString = New Array();
ArrayString.Add(Type("String"));

ArrayData = New Array();
ArrayDate.Add(Type("Datum"));

//Účetní náklad vyplníme do tabulky
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabulka pro načtení dat z SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Období", TypeDate);

TK.Indices.Add("Období");

// Připojení k SQL
ConnectionString = "Poskytovatel=SQLOLEDB.1;Trvalé informace o zabezpečení=True;ID uživatele=sa;Pwd=;Zdroj dat=;Použít postup pro přípravu=1;Automatický překlad=True;Velikost paketu=4096;ID pracovní stanice=;Použít šifrování for Data=False;Tag s řazením sloupců, je-li to možné=False;Initial Catalog=Reports";
Connection = New COMObject("ADODB.Connection");
Příkaz = New COMObject("ADODB.Command");
RecordSet = Nový COMObject("ADODB.RecordSet");
Datum = "";
Pokus
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Připojení;
Command.CommandText = "S_elect * z PH kde období >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" a tečka<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Výjimka
Návrat TK;
Konec pokusu;

Zatímco RecordSet.EOF = False Loop
Řetězec = 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žadavek = Nový požadavek();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VYBRAT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| OD
| &vrDataTable JAKO vrDataTable
| KDE
| vrDataTable.Period >= &DateStart
| A vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = Nedefinováno;

Žádost = Nová žádost;
Query.TempTableManager = VrTable;
Query.Text = "Zde je dotaz zahrnující dočasnou tabulku";

Výsledek = Request.Run();
Návratový výsledek;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = Nová struktura();
DataSet.Insert("SQL tabulka", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decrypted Data, OutputToReportForm,Dataset);

Ve skutečnosti není mnoho řádků kódu a jsou docela standardní ... v tomto případě můžete využít plnou funkčnost tvůrce dotazů a zadat pouze funkci DATA COMPOSITION v ACS

Ale samozřejmě to vypadá trochu ne tak krásně ... a nahrávání do tabulky hodnot pokaždé, když musíte napsat kód a zkontrolovat, zda jste neudělali chybu ve jménu podrobností ... jinak to, co jsme dostali v 1C, vypadá tak nějak polopaticky. Ještě jsem se nerozhodl, co je pohodlnější použít. Vy rozhodujete a píšete o svých rozhodnutích a o tom, co vás k nim přimělo.

Informace převzaty z webu