Záznam na externí zdroje dat 1s 8.3. Externí zdroje dat. Karta „Data“ formuláře vlastností externího zdroje

Externí zdroje dat 1C - srovnatelně nový objekt metadata 1C 8.3 a 8.2, se kterými je možné se připojit k 1C externím zdrojům dat: SQL tabulky, Excel, Access, FoxPro (dbf), další databáze 1C, Oracle, Paradox (db) - a dokonce z nich číst jednoduché soubory txt/csv.

To dává mnoho možností pro interoperabilitu s jinými systémy. Pojďme se na to blíže podívat.

Nastavení externích zdrojů dat v 1C 8

Nastavení externích zdrojů je pro každý typ systému individuální. Ale zpravidla společnou část Nastavení jsou stejná - jde o nastavení připojovacího řetězce:

Získejte 267 videolekcí na 1C zdarma:

Pokud je připojovací řetězec zadán správně, systém vás vyzve k výběru požadované tabulky z databáze. V důsledku toho získáme hotovou tabulku, ve které můžeme zadat klíčové pole (unikátní pole) a pole prezentace (jak se záznam projeví v 1C):

Použití externích zdrojů dat v 1C 8.3

Externí zdroje dat v 1C lze použít jako jiné databázové tabulky. Platforma pro ně automaticky vygeneruje formulář, pokud není zadán. Dotazy mohou také využívat data z externích zdrojů.

Proč je tato příležitost tak zajímavá? Každý, kdo programoval v 1C a je docela obeznámen s SQL a je alespoň obecně obeznámen s architekturou a principy vývoje jiný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ě nejpohodlnější a nejpromyšlenější mechanismus 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. Jde jen o to, že do tohoto „sudu medu“ je nasypáno mnoho „mouch v masti“. Pěkně popořádku:

1) Nastavení a použití- bez „tančení s tamburínou“ to nepůjde
a) Přidat vnější zdroj data - nevypadá to nic složitého
b) zaškrtněte políčko „Vybrat ze seznamu“ - povinné - je nutné na začátku zkontrolovat funkčnost a ušetří vás zbytečných problémů
c) - nezapomeňte kliknout na "..." - připojení je ODBC. Ne OLEDB, jak jsme všichni zvyklí, ale o level níže

D) Ale 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 na vás nečeká žádná překvapení. Zvláštní doporučení, ale vyberte si nejstarší nebo nejvíce běžný řidič pokud vám nejde o rychlost a nemáte v úmyslu překročit možnosti standardu SQL92. Získáte tak lepší kompatibilitu. Například pro SQL Server 2008 nejlepší řidič bude SQL Server Native Client 11, ale doporučuji zvolit pouze SQL Server, jinak tento velmi nativní klient bude muset být nainstalován buď na server nebo na všechny klientské počítače (pokud používáte verzi souboru), a moc to nedá přínos pro jednoduché úkoly.
e) Standardní dialogová okna pro výběr serveru

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

Z) A teď to spustíš, otevřeš návrhář dotazů - hloupě vybereš 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 je to normální...
Osobně jsem použil tento kód:
Kód 1C v 8.x Parametry = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.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();
Některé kousky možná nejsou nutné, ale jde to.
Kód musíte spustit JEDNOU. Poté bude normální se připojit... mystika samozřejmě - proč to bylo nutné, není jasné...

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

3) NELZE JE POUŽÍVAT SPOLU S INTERNÍMI ZDROJI DAT
Mě osobně tato skutečnost na místě zabila.

Jak to může být... ​​na co jsme čekali a už jsme si představovali a olizovali si rty o tom, jak nyní spojíme naše data s 1C v jedné žádosti, sbalíme je - seskupíme, vložíme do sestavy, ale není tomu tak ...
Ale to samozřejmě zkušené lidi nezastaví... co vás napadlo? To je pravda - dočasné tabulky:

4) NELZE JE POUŽÍVAT SPOLU S DOČASNÝMI ​​STOLY

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

5) Lze použít pouze v připojeních ACS
Pro ty, kteří nevědí, je to v ACS na kartě „Odkazy na datové sady“. Používáte je často? Komfortní? Zřejmě nás chtějí donutit, abychom je používali častěji. Je zde pouze sloupec „Podmínka komunikace“ a „Parametr komunikace“. Ne v žádném typická konfigurace Nenašel jsem příklad jejich použití, v dokumentaci a také v Khrustalevově práci, nějak není vše transparentní. Může mi někdo vysvětlit, jak funguje "podmínka připojení". Pokud tam napíšete Source Attributes = Receiver Attributes, tak to nefunguje. Podmínku lze samozřejmě zapsat do pole „Výraz“ - ve většině případů to stačí... ale nějak to moc jednoduše nejde.

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

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Pokud DataCon > "20100101" Pak
DataCon = "20100101";
endIf;

CN = New QualifiersNumbers(15,2);
KS = NewStringQualifiers(255);

ArrayNumber = 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 = New DescriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//tabulka pro načítání dat z SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Období", DateType);

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

//Připojení k SQL
Připojovací řetězec = "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 Encryption 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(AbbrLP(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
Vrácení technických specifikací;
EndPokus;

Zatímco RecordSet.EOF = False Loop
Linka = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.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 = Nový TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Datum zahájení", Datum zahájení);
Request.SetParameter("DataCon", DateCon);
Query.Text = "VYBRAT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Umístit DataTable
|OD
| &vDataTable AS vrDataTable
| KDE
| vrDataTable.Period >= &StartDate
| A vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Nedefinováno;

Žádost = Nová žádost;
Query.TemporaryTableManager = VrTable;
Query.Text = "Zde je dotaz zahrnující tabulku proměnných";

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

EndFunction

ExternalSet = InitializeDataSource();
DataSet = new Structure();
DataSet.Insert("SQL tabulka", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decrypt 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 návrháře dotazů a dát do ACS pouze funkci DATA COMPOSITION

Ale rozhodně to nevypadá tak hezky... a pokaždé, když potřebujete napsat kód pro nahrání hodnot do tabulky a zkontrolovat, zda jste neudělali chybu ve jménu detailů... a co jsme dostali v 1C vypadá tak nějak polovičatě. Ještě jsem se nerozhodl, co je výhodně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

Proč je tato příležitost tak zajímavá? Každý, kdo programoval v 1C a je docela obeznámen s SQL a je alespoň obecně obeznámen s architekturou a principy vývoje jiný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ě nejpohodlnější a nejpromyšlenější mechanismus 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. Je to jen o tom, že do tohoto "sudu medu" je nasypáno mnoho "mouch v masti". Pěkně popořádku:

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

D) Ale 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 na vás nečeká žádná překvapení. Zvláštní doporučení, ale zvolte nejstarší nebo nejběžnější ovladač, pokud vám nejde o rychlost a nehodláte jít nad rámec možností standardu SQL92. Získáte tak lepší kompatibilitu. Například pro SQL Server 2008 bude nejlepším ovladačem 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 (pokud používáte verze souboru) a výhoda je speciální pro jednoduché, že vám nebude dávat žádné úkoly.
e) Standardní dialogová okna pro výběr serveru

a DB

f) Na otázku o uložení hesla doporučuji odpovědět „ano“, jinak nebudete moci začít podnikat.
g) Vyberte tabulku a podrobnosti... skvělá příležitost - můžete ji okamžitě přejmenovat, jak chcete (a podrobnosti také), a ve vlastnostech uvidíte názvy polí zdroje dat


h) Teď to spustíš, otevřeš návrhář dotazů - hloupě vybereš 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 běžné...
Osobně jsem použil tento kód:
Kód 1C v 8.x Parametry = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.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();
Některé kousky možná nejsou nutné, ale jde to.
Kód musíte spustit JEDNOU. Poté bude normální se připojit... mystika samozřejmě - proč to bylo nutné, není jasné...

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

3) NELZE JE POUŽÍVAT SPOLU S INTERNÍMI ZDROJI DAT
Mě osobně tato skutečnost na místě zabila.

Jak to může být... ​​na co jsme čekali a už jsme si představovali a olizovali si rty o tom, jak nyní spojíme naše data s 1C v jedné žádosti, sbalíme je - seskupíme, vložíme do sestavy, ale není tomu tak ...
Ale to samozřejmě zkušené lidi nezastaví... co vás napadlo? To je pravda - dočasné tabulky:

4) NELZE JE POUŽÍVAT SPOLU S DOČASNÝMI ​​STOLY


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

5) Lze použít pouze v připojeních ACS
Pro ty, kteří nevědí, je to v ACS na kartě „Odkazy na datové sady“. Používáte je často? Komfortní? Zřejmě nás chtějí donutit, abychom je používali častěji. Je zde pouze sloupec „Podmínka komunikace“ a „Parametr komunikace“. Nenašel jsem příklad jejich použití v žádné standardní konfiguraci, jaksi není vše transparentní v dokumentaci a ani v Khrustalevově práci. Může mi někdo vysvětlit, jak funguje "podmínka připojení". Pokud tam napíšete Source Attributes = Receiver Attributes, tak to nefunguje. Podmínku lze samozřejmě zapsat do pole „Výraz“ - ve většině případů to stačí... ale nějak to moc jednoduše nejde.

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

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Pokud DataCon > "20100101" Pak
DataCon = "20100101";
endIf;

CN = New QualifiersNumbers(15,2);
KS = 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 = New DescriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//tabulka pro načítání dat z SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Období", DateType);

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

//Připojení k SQL
Připojovací řetězec = "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 Encryption 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(AbbrLP(ConnectionString));
Command.ActiveConnection = Připojení;
Command.CommandText = "S_elect * z PH kde období >= "" + String(Format(StartDate, "DF=yyyyMMdd")) + "" a tečka<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Výjimka
Vrácení technických specifikací;
EndPokus;

Zatímco RecordSet.EOF = False Loop
Linka = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.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 = Nový TemporaryTableManager();

Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Datum zahájení", Datum zahájení);
Request.SetParameter("DataCon", DateCon);
Query.Text = "VYBRAT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Umístit DataTable
|OD
| &vDataTable AS vrDataTable
| KDE
| vrDataTable.Period >= &StartDate
| A vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Nedefinováno;

Žádost = Nová žádost;
Query.TemporaryTableManager = VrTable;
Query.Text = "Zde je dotaz zahrnující tabulku proměnných";

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

EndFunction

ExternalSet = InitializeDataSource();
DataSet = new Structure();
DataSet.Insert("SQL tabulka", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decrypt 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 návrháře dotazů a dát do ACS pouze funkci DATA COMPOSITION

Ale rozhodně to nevypadá tak hezky... a pokaždé, když potřebujete napsat kód pro nahrání hodnot do tabulky a zkontrolovat, zda jste neudělali chybu ve jménu detailů... a co jsme dostali v 1C vypadá tak nějak polovičatě. Ještě jsem se nerozhodl, co je výhodnější použít. Vy rozhodujete a píšete o svých rozhodnutích a o tom, co vás k nim přimělo.
Autor.

Ve verzi platformy 8.3.5.1068 (a novější) bylo možné přidávat, měnit a mazat data v externích zdrojích pomocí softwaru 1C. Příklady této funkce jsou uvedeny v tomto článku.

Aby bylo možné nahrávat do externích zdrojů, přidala společnost 1C do datových tabulek a polí externích zdrojů nové vlastnosti:

  • Pro celý stůl - majetek Pouze čtení. ReadOnly = True znamená, že změna dat v této tabulce není možná;
  • Pro jednotlivá pole tabulky - vlastnosti Pouze čtení, AllowNull A Vyplnit hodnotu:
    • ReadOnly = True znamená, že změna údajů v tomto poli není možná;
    • AllowNull = True znamená, že do tohoto pole lze zapsat hodnotu NULA;
    • Vyplnit hodnotu obsahuje výchozí hodnotu tohoto pole (pokud existuje).

Vy (při ručním popisu tabulek) nebo platforma (při vytváření tabulek pomocí návrháře) můžete tyto vlastnosti používat následovně.

  • ReadOnly = True nastavit například pro pohledy, tabulky získané na základě výrazu (výsledek funkce) a podobně. Data v těchto tabulkách nelze měnit;
  • ReadOnly = True zadejte pro pole, která se nastavují automaticky ( AUTOINCREMENT), počítaná pole a podobně. Údaje v těchto polích nelze změnit;
  • AllowNull = True nastavit pro všechna pole kromě klíčových polí a těch, která jsou popsána v externím zdroji jako NENULOVÝ;
  • Vyplnit hodnotu pole by měla být nastavena v případě, kdy externí zdroj specifikuje standardní hodnotu tohoto pole (value VÝCHOZÍ).

Data v externích zdrojích můžete přidávat, měnit a odstraňovat pomocí vestavěného jazyka nebo interaktivně. Vestavěný jazyk k tomu používá následující metody správce tabulek:

  • CreateRecordSet()- pro neobjektové tabulky;
  • Nová metoda CreateObject()- pro tabulky objektů.

V souladu s tím objekty ExternalDataSourceTableRecordSet A ExternalDataSourceTableObject objevily se nové metody Napsat() A Vymazat().

Přidávání dat

Když přidáte data do externího zdroje, vytvoříte objekt (nebo sadu záznamů), nastavíte hodnoty polí a zapíšete. Existují však některé funkce, o kterých je užitečné vědět.

Pokud se například pokusíte nastavit hodnotu pole, které má ReadOnly = True, bude vyvolána chyba. A to při zápisu přímo do databáze ve výrazu VLOŽIT taková pole budou přeskočena. Zbývající pole obsahují hodnoty, které jste jim přiřadili. Proto hodnoty Nula a výchozí hodnoty musí být polím přiřazeny explicitně.

  • id(AllowNull = True);
  • název(AllowNull = True);
mFeature = ExternalDataSources.TableIm.shop_feature.CreateObject(); mCharacteristic.id = Kód; mCharacteristic.name = Jméno; mCharakteristika.Write();

Provedení výpisu Napsat() způsobí, že bude jako první zavolána obsluha události Před nahráváním, pak se provede fyzický záznam do externí zdrojové tabulky ( VLOŽIT), pak bude zavolána obsluha události Při nahrávání.

S polem klíče externí zdrojové tabulky můžete provést následující. Pokud je pole klíče měnitelné, nastavte jeho hodnotu před zápisem „ručně“. Pokud je změna pole klíče zakázána, platforma přijme klíč nezávisle VLOŽIT nebo hned poté. Pomocí této metody můžete zasahovat do tohoto procesu SetLinkNew() před fyzickým záznamem (v obsluze události Před nahráváním) nebo bezprostředně po fyzickém záznamu (v obsluze event Při nahrávání).

Změna údajů

Když se data změní, hodnoty všech polí tabulky, která mají ReadOnly = False.

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",code); mObject = mCharakteristic.GetObject(); mObject.name = Jméno; mObject.Write();

Pokud potřebujete zaznamenat pouze některá pole, můžete pomocí metod určit jejich seznam přímo z vestavěného jazyka SetWritableFields() A GetWrittenFields().

Mazání dat

Odstranění dat přímo odstraní řádek z databázové tabulky. V tomto případě se hledání odkazů na odstraňovaný objekt neprovádí. Pokud je taková funkce potřebná, můžete ji naprogramovat sami v obslužné rutině události BeforeDelete().

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",Code); mObject = mCharakteristic.GetObject(); mObject.Delete();

Transakce

Čtení dat z externích zdrojů se stejně jako dříve provádí mimo transakci a při zápisu platforma otevře implicitní transakci. Současně můžete provádět čtení i zápis v explicitních transakcích pomocí objektových metod ExternalDataSourceManager:

  • StartTransaction();
  • CommitTransaction();
  • CancelTransaction().

Zámky

  • Auto;
  • Podařilo se;
  • Automatické a řízené.

stejně jako vlastnost externí zdrojové tabulky Úroveň izolace transakcí:

Kromě toho můžete v metodě nezávisle nastavit úroveň uzamčení StartTransaction().

Do standardního článku jsem přidal příklady) Pokud budu mít více času, přidám další příklady.

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žívat stejným způsobem jako jiné tabulky v systému:

  1. Při vytváření sestav a výpočtů pomocí systému skládání dat (DCS);
  2. Získání odkazů na informace uložené ve zdrojích třetích stran;
  3. Změna dat uložených v tabulkách;
  4. Při generování požadavků.

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 budete muset tvrdě pracovat, 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 nemáte žádné dotazy ohledně blokování dat v transakcích nebo složitosti paralelizace informačních toků, můžete tuto možnost ponechat v režimu automatického blokování. Takový přístup však může vést k přílišným omezením (např. když místo samostatného 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, využívají transakční mechanismus vlastní programu samotnému, nikoli DBMS, což umožňuje přenést zachycení tabulek na mnohem nižší úroveň.

Nastavením tohoto parametru na „Automatický a spravovaný“ poskytujeme systému možnost určit, který režim použít, přímým přístupem k podobné vlastnosti pro každou konkrétní tabulku.

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. Existují dva způsoby, jak přidat tabulku:

  1. Ručně se pak před námi otevře formulář pro přidání tabulky (obr. 3);

Rýže. 3

  1. Nebo vyberte ze seznamu fyzických zdrojových tabulek (obr. 4), v takovém 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 „Name in data source“ umístěné na záložce „Advanced“ (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, tabulka může být objektová. Pokud je individualita 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 lze uvést následující analogii:

  • Tabulky objektů jsou referenční knihy;
  • Neobjektové jsou informační registry.

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é, uložení konfigurace se nezdaří.

Jak je vidět z obr. 5, některá pole a tlačítka formuláře nelze upravovat:

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

Lze je použít až poté, co vyplníme pole tabulky, nadefinujeme jejich typ a přiřadíme k nim identifikátory (obr. 6).

Rýže. 6

Zde byste měli věnovat pozornost parametru „Allow Null“, pokud je toto políčko zaškrtnuto, není vhodné používat takové pole jako klíč.

Tvůrce stolů

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, pokud 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 infobázi třetí strany. Měli byste také pochopit, ž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 vygeneruje chybu (obr. 8), bude nutné zadat připojovací řetězec ručně.

Obr.8

Rýže. 9

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

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

Uvažujme databázi třetí strany vytvořenou v Microsoft Access a umístěnou v kořenovém adresáři jednotky D. Pro připojení této databáze musíme použít příslušný ovladač, ale jeho výběr v konstruktoru řádků má za následek chybu obr. 8. Obr.

Parametry připojení si nastavíme sami.

Driver=(Microsoft Access Driver (*.mdb)) – takto vypadá první část řádku. Ve složených závorkách jsme definovali driver.

U souborů aplikace Excel bude vypadat takto (Ovladač Microsoft Excel (*.xls)), u souborů aplikace Excel vytvořených v kanceláři starší než 2003 bude řádek ovladače vypadat (Ovladač Microsoft Excel (*.xls, *.xlsx, *. xlsm, *.xlsb)).

Oddělujeme-li tento parametr od dalšího čárkou, musíme zadat adresu našeho úložiště (v našem případě DBQ=D:\Database1.mdb).

Přidáním těchto dvou parametrů získáme 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 „External Source“ jej nestačí pouze vytvořit v konfiguraci, ale musí být také připojen v režimu „Enterprise“. To lze provést z nabídky „Všechny funkce“->Externí zdroje. Když poprvé vstoupíme do naší tabulky, musíme zadat stejný připojovací řetězec v režimu „Enterprise“.