itthon / Windows oktatóanyagok / Csatlakozás külső adatforráshoz 1s 8.3. Külső adatforrások. Csatlakozási karakterlánc példa

Csatlakozás külső adatforráshoz 1s 8.3. Külső adatforrások. Csatlakozási karakterlánc példa

Miért ez a lehetőség ekkora érdeklődést vált ki? Bárki, aki már programozott 1C-ben, eléggé ismeri az SQL-t, és legalábbis általánosságban ismeri az üzleti alkalmazásokhoz szükséges egyéb technológiai platformok fejlesztésének architektúráját és elveit, határozottan megmondja, mit szeret a legjobban az 1C-ben. Természetesen a lekérdezéskészítő a legkényelmesebb és legátgondoltabb mechanizmus a relációs struktúrákból származó adatok lekérdezéséhez, amelyekkel személyesen találkoztam. És most az 1C olyan csodálatos lehetőséget adott nekünk, hogy ne csak az 1C-vel, hanem bármely más asztallal is használhassuk. Íme, csak egy csokor ebbe a "hordó mézbe" öntött "léggyenge". Minden rendben:

1) Beállítás és használat- "tamburával táncolni" nélkül nem megy
a) Add hozzá külső forrás adatok - mintha semmi bonyolult
b) jelölje be a "Kiválasztás a listából" jelölőnégyzetet - szükséges - ez szükséges a teljesítmény ellenőrzéséhez, és megóvja Önt a felesleges problémáktól
c) - ügyeljen arra, hogy nyomja meg a "..." gombot - a kapcsolat ODBC. Nem az OLEDB-t, mint azt mindannyian megszoktuk, hanem egy szinttel lejjebb

D) Légy nagyon óvatos itt.

Ez egy ODBC illesztőprogram – ha kliens-szerver verziót használ, annak a szerveren kell lennie. Ha egy rendszeren fejleszt, és működő változat másrészt (mint általában) győződjön meg róla, hogy nem tartogat meglepetéseket. Furcsa javaslat, de válassza a legrégebbi vagy legelterjedtebb illesztőprogramot, ha nem foglalkozik különösebben a sebességgel, és nem kívánja túllépni az SQL92 szabvány határait. Ez biztosítja Önnek jobb kompatibilitás. Például SQL Server 2008 esetén a legjobb sofőr lesz SQL Server Native Client 11, de azt javaslom, hogy csak az SQL Servert válasszuk, különben ezt a nagyon natív klienst kell telepíteni vagy a szerverre, vagy az összes kliens gépre (fájlverzió használata esetén), és az egyszerű feladatoknál nem sok hasznot hoz.
e) Szabványos szerverválasztó párbeszédpanelek

E) Azt javaslom, hogy a jelszó elmentésének kérdésére „igen” választ adjon, különben nem fog működni a vállalkozás elindítása.
g) Válassz egy táblázatot és részleteket... egy nagyszerű lehetőség - azonnal átnevezheted tetszés szerint (és a részleteket is), míg a tulajdonságoknál az adatforrás mezőinek nevei

H) És most fut, nyissa meg a lekérdezéstervezőt - hülye módon kiválasztja az összes rekordot a táblából és az OPA-ból - hiba. Mit kell tenni? Ha van menedzselt felületed, nézd meg a szerviz menüben, ha pedig normál...
Én személy szerint ezt a kódot használtam:
Code 1C v 8.x Paraméterek = ExternalDataSources.DAX.GetCommonConnectionParameters();
Paraméterek.AuthenticationStandard = igaz;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;ADATBÁZIS=adatbázis";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Lehet, hogy néhány darabra nincs szükség, de működik.
A kódot EGYSZER végre kell hajtani. Utána normálisan fog kapcsolódni... persze misztikum - miért volt erre szükség, nem világos...

2) Csak olvasható adatforrások- Igen, csodák nem történnek... de néha azt akarod...

3) NE HASZNÁLJA EGYÜTT BELSŐ ADATFORRÁSOKKAL
Személy szerint ez a tény a helyszínen megölt.

Hogy van .... mire vártak és már elképzelték és nyalták, hogy most egy kérésben egyesítjük az adatainkat az 1C-vel, megfordítjuk - csoportosítjuk, beillesztjük a jelentésbe, de nem volt ott ...
De persze ez nem állítja meg a tapasztalt embereket... mi jutott eszébe? Így van - ideiglenes táblázatok:

4) NE HASZNÁLJA EGYÜTT IDEIGLENES ASZTALOKKAL

De ez már nem technológiai nehézségnek tűnik, hanem nagyon úgy néz ki, hogy mit akarnak tőlünk "hogy az élet ne tűnjön paradicsomnak" :).

5) Csak SKD csatlakozásoknál használható
Azok számára, akik nem ismerik, az ACS-ben az "Adatkészlet hivatkozások" fülön található. Milyen gyakran használod őket? Kényelmes? Nyilván rá akarnak kényszeríteni, hogy gyakrabban használjuk őket. De van egy oszlop "Link feltétele" és "Link paramétere". A használatukra semmilyen tipikus konfigurációban nem találtam példát, a dokumentációban és Khrustaleva-ban sem, valahogy nem minden átlátható. Valaki elmagyarázná nekem, hogyan működik a "linkfeltétel"? Ha odaírod, hogy a SourceAttribute = ReceiverRevision, akkor nem működik. Természetesen a "Kifejezés" mezőbe beírható a feltétel - a legtöbb esetben ez is elég... de valahogy nem túl egyszerű.

Összességében ezt a problémát korábban valahol így oldották meg:
1C kód v 8.x függvény InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ha DateCon > "20100101" Akkor
DateCon = "20100101";
EndIf;

QN = Új minősítőszám(15,2);
cs = NewStringQualifers(255);

ArrayNumber = Új tömb();
ArrayNumber.Add(Típus("Szám"));

ArrayString = Új tömb();
ArrayString.Add(Type("String"));

ArrayData = Új tömb();
ArrayDate.Add(Típus("Dátum"));

//A számviteli költséget a táblázatba fogjuk kitölteni
TypeNumber = ÚjTípusLeírás(TömbSzám,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tábla adatok betöltéséhez SQL-ből
TK = Új értéktábla();
TK.Columns.Add("NómenklatúraKód", TypeString);
TK.Columns.Add("Mennyiség", Típusszám);
TK.Columns.Add("Időszak", TípusDátum);

TK.Indexes.Add("Időszak");

// Csatlakozás SQL-hez
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;Felhasználói azonosító=sa;Pwd=;Adatforrás=;Használja az eljárást a Prepare=1-hez;Auto Translate=True;Csomagméret=4096;Munkaállomás azonosítója=;Titkosítás használata az adatokhoz, ha lehetséges a CaF=False;Reititials with columnalta;InTag=hamis;
Kapcsolat = Új COMObject("ADODB.Kapcsolat");
Parancs = Új COMObject("ADODB.Command");
RecordSet = Új COMObject("ADODB.RecordSet");
Dátum = "";
Kísérlet
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Kapcsolat;
Command.CommandText = "S_elect * a PH-tól, ahol a periódus >= "" + String(Formátum(DateStart, "DF=yyyyMMnn")) + "" és pont<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Kivétel
TK visszatérése;
A kísérlet vége;

Míg RecordSet.EOF = False Loop
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Érték;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Érték;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Érték;
RecordSet.MoveNext();
EndCycle;

Request = Új kérés();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Kezdődátum", Kezdődátum);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VÁLASZTÁS
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| FROM
| &vrDataTable AS vrDataTable
|HOL
| vrDataTable.Period >= &DateStart
| És vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = Undefined;

Request = Új kérés;
Query.TempTableManager = VrTable;
Query.Text = "Itt van egy ideiglenes táblát tartalmazó lekérdezés";

Eredmény = Request.Run();
Eredmény visszaküldése;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = New Structure();
DataSet.Insert("SQL Table", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputToReportForm,Dataset);

Valójában nem sok kódsor van, és meglehetősen szabványosak ... ebben az esetben használhatja a lekérdezéskészítő teljes funkcióját, és csak az ADATÖSSZETÉTEL függvényt adhatja meg az ACS-ben

De persze egy kicsit nem olyan szépnek tűnik ... és az értéktáblázatba való feltöltéshez minden alkalommal kódot kell írnia, és ellenőriznie kell, hogy nem hibázott-e a részletek nevében ... különben az, amit az 1C-ben kaptunk, valahogy félszegnek tűnik. Még nem döntöttem el, melyik a kényelmesebb használni. Ön dönt, és ír a döntéseiről, és arról, hogy mi késztetett arra, hogy meghozza azokat.

Az oldalról vett információ

Dolgozzon velük listákban 1C Enterprise módban.

A munkában azonban gyakran adódik olyan helyzet, amikor az adatok egy részét máshol tárolják.

  • Online áruház (általában külső MySQL/SQL adatbázisban tárolja az adatokat)
  • Egy másik alap.

Ahhoz, hogy más adatbázisokban tárolt adatokkal dolgozhasson, speciális mechanizmusokat kell kidolgoznia.

Az 1C 8.2.14-es verzióban megjelent egy új 1C külső adatforrás néven, amely nagyban megkönnyíti a programozó munkáját, mivel:

  • most már nincs szükség speciális mechanizmusok létrehozására az adatok megszerzéséhez
  • az ilyen adatokhoz lehet hozzáférni
  • az ilyen adatok az 1C listákban tekinthetők meg.
    • Külső adatforrás 1C - külső SQL adatbázis

      Tegyük fel, hogy van egy SQL adatbázisunk, amely tárolja a szükséges adatokat. Próbáljunk meg adatokat olvasni belőle az 1C külső adatforrás mechanizmussal.

      Adjunk hozzá egy külső adatforrást 1C. A konfigurátorba kell lépni, a külső adatforrások a konfigurációs ablakban, a fa legalján találhatók.

      1. Csatlakozás

      Adjunk hozzá egy új külső adatforrást 1C, nevezzük tetszőlegesen.

      Az adatbázis táblázatokból áll. Hozzá kell adnunk őket a hozzáadott külső adatforráshoz. Kattintson a jobb gombbal rá, és válassza a Táblázat hozzáadása lehetőséget.

      Az első alkalommal kérni fogja, hogy adjon meg egy kapcsolati karakterláncot. Megadható manuálisan, vagy formálható, amihez a „…” gombra kell kattintani.

      Illesztőprogramként konkrét esetünkben az "SQL Server" lehetőséget választjuk.

      Töltsük ki az SQL-hez való csatlakozás alapvető paramétereit. A szerver neve beírható vagy kiválasztható a listából.

      Az 1C csatlakozik az SQL-hez, és felkéri, hogy válasszon ki egy adott adatbázist a listából.

      Ezt követően az 1C megjeleníti az adatbázisban lévő táblák listáját és oszlopait. Ki kell jelölnie a szükséges táblákat jelölőnégyzetekkel.

      A táblázatok és oszlopok hozzáadásra kerülnek. A nevek a távoli adatbázisban meghatározottak lesznek. 1C-ben átnevezheti őket (a tulajdonságokban).

      Íme egy példa egy hozzáadott táblázatra:

      Íme egy példa egy hozzáadott oszlopra:

      Annak érdekében, hogy az 1C platform ugyanúgy működjön egy külső táblával, mint az 1C könyvtárakkal, további paraméterek adhatók meg a táblázatban:

      • A Kulcsmező tulajdonságban adja meg az egyik oszlopot, amely a sor egyedi azonosítását biztosítja; ha több sor egyediséget biztosít, akkor ez a módszer nem működik (a Code mező analógja)
      • A Nézet mező tulajdonságban adja meg az egyik oszlopot, amely röviden ábrázolja a karakterláncot (a Név mező analógja).
      • A Táblázat adattípus tulajdonságban adja meg az Objektumadatokat.

      2. Megtekintés

      A távoli adatbázishoz való kapcsolat nem jön létre automatikusan. A csatlakozáshoz ki kell választania egy tipikus menüt.

      A Standard ágban van egy speciális Külső adatforrások kezelése parancs, amely lehetővé teszi a csatlakozási paraméterek megadását (az 1C Enterprise módhoz sajátjaikat) és a csatlakozást.

      Először meg kell adnia az adatbázishoz való csatlakozás paramétereit.

      Amikor elvégezte a konfigurációt a konfigurátorban, az eredményként megmutatta a kapcsolódási karakterláncot. Újra megtekintheti, ha ismét rákattint a Táblázat hozzáadása gombra a konfigurátorban.

      Másolja ki a kapcsolati karakterláncot, és adja meg 1C Enterprise módban.

      Ezt követően létre kell hoznia a tényleges kapcsolatot.

      A kapcsolat létrejötte után lehetőség van listákkal dolgozni.

      3. Használja 1C nyelven

      A kapcsolat létrejöhet a programkódból is 1C nyelven.

      A csatlakozási paraméterek a következők szerint vannak megadva:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = igaz;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "jelszó";
      ConnectionParameters.ConnectionString = "kapcsolati karakterlánc a konfigurátorból";
      ConnectionParameters.DBMS = "MSSQLServer";

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

      Adatokat lekérdezhet az adatbázisból a szokásos módszerrel. Példa egy külső forrás lekérdezési szövegére: OurExternalSource and tablesExternalSourceTable:

      VÁLASZT
      ExternalSource Table.FieldName
      TÓL TŐL
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      1C külső adatforrás - Excel fájllal dolgozik

      Próbáljunk ki egy másik lehetőséget - egy Excel-fájllal való munkavégzést egy külső 1C adatforráson keresztül.

      Hozzunk létre egy egyszerű Excel fájlt.

      Adjunk hozzá egy külső forrást, tetszőleges néven FileExcel. Adja hozzá a "Sheet1 $" táblázatot. Amint látja, ez a munkalap neve az Excelben a „$” szimbólum hozzáadásával.

      Mint az SQL esetében, adjunk hozzá oszlopokat. Manuálisan hozzáadhatók. Fontos, hogy a hozzáadott oszlopok típusai megegyezzenek, különben később olyan hibaüzenetet kaphat, mint például az „Adattípus nem egyezik”.

      Az oszlophoz meg kell adni a nevet az 1C-ben és a nevet az adatforrásban.

      Az Excelhez van egy funkció (például "Túl kevés paraméter. 3 szükséges" hiba):

      • Ha az Excel táblázat első sora oszlopneveket tartalmaz, akkor csak meg kell adnia ennek az oszlopnak a nevét, például "Kód".
      • Ellenkező esetben meg kell adnia a teljes nevet a „Sheet1$.Code” táblanévvel, de a paraméterekhez hozzá kell adni a „HDR=NO;” értéket.

      Az Excel-fájlok csatlakozási paraméterei így néznek ki:

      • XLSX fájlok (Office 2007 és újabb verzió)
        Illesztőprogram=(Microsoft Excel illesztőprogram (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS fájlok (korábban)
        Illesztőprogram=(Microsoft Excel illesztőprogram (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Meg kell adnia a saját nevét és elérési útját a fájlhoz.

Miért olyan érdekes ez a lehetőség? Bárki, aki már programozott 1C-ben, eléggé ismeri az SQL-t, és legalábbis általánosságban ismeri az üzleti alkalmazásokhoz szükséges egyéb technológiai platformok fejlesztésének architektúráját és elveit, határozottan megmondja, mit szeret a legjobban az 1C-ben. Természetesen a lekérdezéskészítő a legkényelmesebb és legátgondoltabb mechanizmus a relációs struktúrákból származó adatok lekérdezéséhez, amelyekkel személyesen találkoztam. És most az 1C olyan csodálatos lehetőséget adott nekünk, hogy ne csak az 1C-vel, hanem bármely más asztallal is használhassuk. Íme, csak egy csokor ebbe a "hordó mézbe" öntött "léggyenge". Minden rendben:

1) Beállítás és használat- "tamburával táncolni" nélkül nem megy
a) Adjon hozzá egy külső adatforrást - úgy tűnik, semmi bonyolult
b) jelölje be a "Kiválasztás a listából" jelölőnégyzetet - szükséges - ez szükséges a teljesítmény ellenőrzéséhez, és megóvja Önt a felesleges problémáktól
c) - ügyeljen arra, hogy nyomja meg a "..." gombot - a kapcsolat ODBC. Nem az OLEDB-t, mint azt mindannyian megszoktuk, hanem egy szinttel lejjebb

D) Légy nagyon óvatos itt.

Ez egy ODBC illesztőprogram – ha kliens-szerver verziót használ, annak a szerveren kell lennie. Ha az egyik rendszeren fejleszt, és egy másikon dolgozik (mint általában), ügyeljen arra, hogy ne érjen meglepetés. Furcsa javaslat, de válassza a legrégebbi vagy legelterjedtebb illesztőprogramot, ha nem foglalkozik különösebben a sebességgel, és nem kívánja túllépni az SQL92 szabvány határait. Ez biztosítja a legjobb kompatibilitást. Például az SQL Server 2008-hoz a legjobb illesztőprogram az SQL Server Native Client 11, de azt javaslom, hogy csak az SQL Servert válasszuk, különben ezt a natív klienst kell telepíteni vagy a szerverre, vagy az összes kliensgépre (fájlverzió használata esetén), és az egyszerű feladatokhoz nem sok hasznot hoz.
e) Szabványos szerverválasztó párbeszédpanelek

és DB

f) Azt javaslom, hogy a jelszó mentésének kérdésére „igen” választ adjon, különben nem fog sikerülni a vállalkozás elindítása.
g) Válassz egy táblázatot és részleteket... nagyszerű lehetőség - azonnal átnevezheted tetszés szerint (és a részleteket is), míg a tulajdonságokban az adatforrás mezőinek nevei


h) És most fut, nyissa meg a lekérdezéstervezőt - hülyén kiválasztja az összes rekordot a táblából és az OPA-ból - hiba. Mit kell tenni? Ha van menedzselt felületed, nézd meg a szerviz menüben, ha pedig normál...
Én személy szerint ezt a kódot használtam:
Code 1C v 8.x Paraméterek = ExternalDataSources.DAX.GetCommonConnectionParameters();
Paraméterek.AuthenticationStandard = igaz;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;ADATBÁZIS=adatbázis";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Lehet, hogy néhány darabra nincs szükség, de működik.
A kódot EGYSZER végre kell hajtani. Utána normálisan fog kapcsolódni... persze misztikum - miért volt erre szükség, nem világos...

2) Csak olvasható adatforrások- Igen, csodák nem történnek... de néha azt akarod...

3) NE HASZNÁLJA EGYÜTT BELSŐ ADATFORRÁSOKKAL
Személy szerint ez a tény a helyszínen megölt.

Hogy van .... mire vártak és már elképzelték és nyalták, hogy most egy kérésben egyesítjük az adatainkat az 1C-vel, megfordítjuk - csoportosítjuk, beillesztjük a jelentésbe, de nem volt ott ...
De persze ez nem állítja meg a tapasztalt embereket... mi jutott eszébe? Így van - ideiglenes táblázatok:

4) NE HASZNÁLJA EGYÜTT IDEIGLENES ASZTALOKKAL


De ez már nem technológiai nehézségnek tűnik, hanem nagyon úgy néz ki, hogy mit akarnak tőlünk, "hogy az élet ne tűnjön paradicsomnak".

5) Csak SKD csatlakozásoknál használható
Azok számára, akik nem ismerik, az ACS-ben az "Adatkészlet hivatkozások" fülön található. Milyen gyakran használod őket? Kényelmes? Nyilván rá akarnak kényszeríteni, hogy gyakrabban használjuk őket. De van egy oszlop "Link feltétele" és "Link paramétere". A használatukra semmilyen tipikus konfigurációban nem találtam példát, a dokumentációban és Khrustaleva-ban sem, valahogy nem minden átlátható. Valaki elmagyarázná nekem, hogyan működik a "linkfeltétel"? Ha odaírod, hogy a SourceAttribute = ReceiverRevision, akkor nem működik. Természetesen a "Kifejezés" mezőbe beírható a feltétel - a legtöbb esetben ez is elég... de valahogy nem túl egyszerű.

Összességében ezt a problémát korábban valahol így oldották meg:
1C kód v 8.x függvény InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ha DateCon > "20100101" Akkor
DateCon = "20100101";
EndIf;

QN = Új minősítőszám(15,2);
cs = NewStringQualifers(255);

ArrayNumber = Új tömb();
ArrayNumber.Add(Típus("Szám"));

ArrayString = Új tömb();
ArrayString.Add(Type("String"));

ArrayData = Új tömb();
ArrayDate.Add(Típus("Dátum"));

//A számviteli költséget a táblázatba fogjuk kitölteni
TypeNumber = ÚjTípusLeírás(TömbSzám,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tábla adatok betöltéséhez SQL-ből
TK = Új értéktábla();
TK.Columns.Add("NómenklatúraKód", TypeString);
TK.Columns.Add("Mennyiség", Típusszám);
TK.Columns.Add("Időszak", TípusDátum);

TK.Indexes.Add("Időszak");

// Csatlakozás SQL-hez
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;Felhasználói azonosító=sa;Pwd=;Adatforrás=;Használja az eljárást a Prepare=1-hez;Auto Translate=True;Csomagméret=4096;Munkaállomás azonosítója=;Titkosítás használata az adatokhoz, ha lehetséges a CaF=False;Reititials with columnalta;InTag=hamis;
Kapcsolat = Új COMObject("ADODB.Kapcsolat");
Parancs = Új COMObject("ADODB.Command");
RecordSet = Új COMObject("ADODB.RecordSet");
Dátum = "";
Kísérlet
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Kapcsolat;
Command.CommandText = "S_elect * a PH-ból ahol pont >= "" + String(Formátum(DátumKezdés, "DF=ééééhhnn")) + "" és pont<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Kivétel
TK visszatérése;
A kísérlet vége;

Míg RecordSet.EOF = False Loop
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Érték;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Érték;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Érték;
RecordSet.MoveNext();
EndCycle;

Request = Új kérés();
VrTable = NewTempTableManager();

Query.SetParameter("vDataTable", TK);
Query.SetParameter("Kezdődátum", Kezdődátum);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VÁLASZTÁS
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| FROM
| &vrDataTable AS vrDataTable
|HOL
| vrDataTable.Period >= &DateStart
| És vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = Undefined;

Request = Új kérés;
Query.TempTableManager = VrTable;
Query.Text = "Itt van egy ideiglenes táblát tartalmazó lekérdezés";

Eredmény = Request.Run();
Eredmény visszaküldése;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = New Structure();
DataSet.Insert("SQL Table", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputToReportForm,DataSet);

Valójában nincs sok kódsor, és meglehetősen szabványosak ... ebben az esetben használhatja a lekérdezéskészítő teljes funkcióját, és csak az ADATÖSSZETÉTEL függvényt adhatja meg az ACS-ben

De persze egy kicsit nem olyan szépnek tűnik ... és az értéktáblázatba való feltöltéshez minden alkalommal kódot kell írnia, és ellenőriznie kell, hogy nem hibázott-e a részletek nevében ... különben az, amit az 1C-ben kaptunk, valahogy félszegnek tűnik. Még nem döntöttem el, melyik a kényelmesebb használni. Ön dönt, és ír a döntéseiről, és arról, hogy mi késztetett arra, hogy meghozza azokat.
Szerző.

Az 1C program 8-as verziójában a fejlesztők hozzáadták a funkcionalitáshoz a harmadik féltől származó adatbázisok csatlakoztatásának lehetőségét, és közvetlenül a konfigurátorból információkat szerezhetnek belőlük, COM-kapcsolatok és OLE-objektumok használata nélkül. Ez a funkció egy új objektum segítségével valósul meg - "Külső adatforrások"

Az 1C külső adatforrásai ugyanúgy használhatók, mint a többi rendszertábla:

  1. Amikor jelentéseket és számításokat készít adatösszetételi rendszerrel (ACS);
  2. Harmadik féltől származó forrásokban tárolt információkra mutató hivatkozások beszerzése;
  3. A táblázatokban tárolt adatok megváltoztatása;
  4. A kérések benyújtásakor.

Fontos tudni, hogy ezt a mechanizmust nem úgy tervezték, hogy más 1C adatbázisokkal működjön, mivel maga az 1C.Enterprise működési modell nem jelent interferenciát az adatokkal a fizikai táblák szintjén.

Új forrás létrehozása

Új külső forrás hozzáadása a programhoz a "Konfigurátor" módban történik. Van egy megfelelő ág a konfigurációs fában (1. ábra)

Új forrás létrehozásakor izzadnia kell, annak ellenére, hogy az új objektum formája csak négy lappal rendelkezik:

  1. Alapvető;
  2. Adat;
  3. Funkciók;
  4. jogok.

Az első fülnek csak egy érdekes paramétere van - a zárvezérlési mód. Ha nem tesz fel kérdéseket az adatok tranzakciókban történő blokkolásával, az információáramlás párhuzamosításának bonyolultságával kapcsolatban, akkor ezt a paramétert hagyhatja automatikus blokkolási módban. Ez a megközelítés azonban túlzott korlátozásokhoz vezethet (például amikor egyetlen rekord helyett a program zárolja a teljes fizikai táblát, megfosztva a többi felhasználót attól, hogy dolgozzon vele).

A felügyelt zárak az automatikus zárolásokkal ellentétben magában a programban rejlő tranzakciós mechanizmust használják, nem pedig a DBMS-ben, ami lehetővé teszi a táblarögzítések átvitelét sokkal alacsonyabb szintre.

Ennek a paraméternek az "Automatikus és felügyelt" értékre állításával lehetőséget adunk a rendszernek arra, hogy meghatározza, melyik módot használja, közvetlenül hivatkozva az egyes táblák hasonló tulajdonságaira.

A külső forrás tulajdonságai űrlap Adatok lapja

Az „Adatok” fül formája az ábrán látható. 2

Rizs. 2

Ide külső forrástáblákat és kockákat adhatunk hozzá. Kétféleképpen adhat hozzá táblázatot:

  1. Manuálisan, majd látni fogjuk a táblázat hozzáadásának űrlapját (3. ábra);

Rizs. 3

  1. Vagy válasszunk a fizikai forrástáblák listájából (4. ábra), ilyenkor egy speciális konstruktor nyílik meg előttünk.

Rizs. 4

Nézzük meg közelebbről a táblázat hozzáadásának űrlapját. A "Name" tulajdonság egy objektum egyedi azonosítására szolgál a konfigurációban.

A metaadat-objektum és a végső fizikai tábla összehasonlítása a "Továbbiak" lapon található "Név az adatforrásban" tulajdonságon keresztül történik (5. ábra).

Rizs. 5

Ezután meg kell határoznunk a táblázat típusát, vagy inkább objektivitását. Ha a struktúrában tárolt adatok bármely mezőn keresztül egyedileg azonosíthatók, a tábla lehet objektumtábla. Ha a rekord azonosságát kulcsmezők halmaza határozza meg, akkor a táblának nem objektumtípusúnak kell lennie.

Az ilyen táblázatokat más metaadat-objektumokkal összehasonlítva a következő analógiát vonhatjuk le:

  • Az objektumtáblázatok referenciakönyvek;
  • A nem objektív információs nyilvántartások.

A kulcsmezők halmazát a következő űrlapparaméter ("Kulcsmezők") határozza meg. Ezt a mezőt kötelező kitölteni, üresen hagyva hiba lép fel a konfiguráció mentésekor.

Amint az 5. ábrán látható, egyes mezők és űrlapgombok nem szerkeszthetők:

  • Kifejezés adatforrásban;
  • Táblázat adattípusa;
  • Nézet mező;
  • Kezelők megtekintése.

Csak a táblázat mezőinek kitöltése után használhatók, megadva a típusukat és beállítva az azonosítóikat (6. ábra)

Rizs. 6

Itt érdemes figyelni a "Null engedélyezése" opcióra, ha ez a négyzet be van jelölve, egy ilyen mezőt nem kívánatos kulcsként használni.

Asztalkészítő

A külső forrásokkal való munka során talán a legfontosabb és legérdekesebb pont egy kapcsolati karakterlánc létrehozása. Konstruktora akkor nyílik meg, ha rákattint a "Connection string" paraméter melletti három ponttal ellátott gombra.

Először is meg kell határoznunk, hogy melyik illesztőprogramot használjuk a csatlakozáshoz (7. ábra)

Rizs. 7

A paraméter helytelen meghatározása nem teszi lehetővé harmadik fél információs bázisához való csatlakozást. Azt is meg kell érteni, hogy nem minden, a legördülő listában megadott illesztőprogram használható a kapcsolati karakterlánc automatikus létrehozására. Ha a platform hibát jelez (8. ábra), akkor a kapcsolati karakterláncot kézzel kell megírni.

8. ábra

Rizs. 9

Maga a vonal szigorúan szabályozott építmény.

Csatlakozási karakterlánc példa

Tekintsünk egy harmadik féltől származó, Microsoft Accessben létrehozott adatbázist, amely a D meghajtó gyökerében található. Ennek az adatbázisnak a csatlakoztatásához a megfelelő illesztőprogramot kell használnunk, de a sorkonstruktorban történő kiválasztása 8. ábra hibához vezet.

A csatlakozási paramétereket mi magunk írjuk meg.

Illesztőprogram=(Microsoft Access Driver (*.mdb)) - így néz ki a sor első része. Kapcsos zárójelben megadtuk az illesztőprogramot.

Excel fájlok esetében így fog kinézni (Microsoft Excel Driver (*.xls)) , az irodában 2003-nál régebbi Excel fájlok esetében pedig így fog kinézni az illesztőprogram karakterlánca (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)).

Ezt a paramétert pontosvesszővel elválasztva a következőtől, meg kell írnunk a tárhelyünk címét (esetünkben DBQ=D:\Database1.mdb).

Ezt a két paramétert összeadva a Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb értéket kapjuk, ezt a paramétert írva hozzáférünk ennek az adatbázisnak a belső struktúráihoz.

A "Külső forrás" objektumhoz nem elég csak a konfigurációban létrehozni, hanem "Vállalkozások" módban is csatlakoztatni kell. Ezt a "Minden funkció"->Külső források menüből teheti meg. Amikor először lépünk be a táblázatunkba, ugyanazt a kapcsolati karakterláncot kell megírnunk már "Vállalati" módban.