Välised andmeallikad 1c 8.3 excel. Välised andmeallikad

Väljalase 8.2.14.533 – lõpuks enam-vähem stabiilne versioon platvormi 14. väljalasest. Lõpuks avanes võimalus proovida imelist võimalust – "väliseid andmeallikaid".

Miks seda võimalust tekitab sellist huvi? Iga inimene, kes on 1C-s programmeerinud, on SQL-iga üsna tuttav ja vähemalt üldiselt kursis teiste ärirakenduste tehnoloogiliste platvormide arhitektuuri ja põhimõtetega, ütleb teile kindlalt, mis talle 1C-s kõige rohkem meeldib. Muidugi on päringukoostaja kõige mugavam ja läbimõeldum mehhanism päringute kirjutamiseks relatsioonistruktuuridest andmete saamiseks, millega ma isiklikult olen kohtunud. Ja nüüd on 1C andnud meile nii suurepärase võimaluse kasutada seda mitte ainult 1C-ga, vaid ka kõigi teiste tabelitega. Siin on vaid hunnik "kärbse sisse" valatud sellesse "meetünni". Kõik korras:

1) Seadistamine ja kasutamine - ilma "tamburiiniga tantsimiseta" see ei tööta

A) Lisa väline allikas andmed - nagu pole midagi keerulist
b) märkige ruut "Vali loendist" - see on vajalik - see on vajalik toimivuse kontrollimiseks alguses ja säästa teid tarbetutest probleemidest
v)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- vajutage kindlasti "..." - ühendus on ODBC. Mitte OLEDB nagu me kõik oleme harjunud, vaid ühe taseme võrra madalamal

Ja ole siin VÄGA TÄHELEPANU.

See on ODBC draiver – kui kasutate klient-serveri versiooni, peab see serveris olema. Kui arendate ühte süsteemi ja töötate teise kallal (nagu tavaliselt), veenduge, et teid ei ootaks üllatused. Kummaline soovitus, aga vali vanim või levinum draiver, kui kiiruse pärast eriti muret ei tee ja sa ei kavatse SQL92 standardi piire ületada. See tagab teile parima ühilduvuse. Näiteks SQL Server 2008 jaoks parim juht seal on SQL Server Native Client 11, kuid soovitan valida ainult SQL Server, vastasel juhul tuleb see native klient installida kas serverisse või kõikidesse kliendi masinatesse (kui kasutate faili versioon) ja väljamakse on eriline lihtsad ülesanded ta ei tee seda.

E) Standardsed serveri valimise dialoogiaknad

G) Valige tabel ja üksikasjad ... suurepärane võimalus - saate selle kohe vastavalt oma soovile ümber nimetada (ja ka üksikasjad), samas kui atribuutides näete andmeallika väljade nimesid

Z) Ja nüüd jooksete, avage päringukujundaja - valite rumalalt tabelist kõik kirjed ja OPA - viga. Mida teha? Kui teil on hallatud liides, vaadake teenindusmenüüst ja kui teil on tavaline...
Mina isiklikult kasutasin seda koodi:

Parameetrid = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = tõene;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;ANDMEBAAS=andmebaas";
Parameters.DBMS = "MSSQLServer";

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

Välised andmeallikad.DAX.SetConnection();

Võib-olla pole mõnda tükki vaja, kuid see töötab. Vaja koodi käivitada ÜKS KORD. Pärast seda ühendab see normaalselt ... müstika muidugi - miks see vajalik oli, pole selge ...

2) Kirjutuskaitstud andmeallikad
Jah, imesid ei juhtu ... aga mõnikord tahad ....

3) ÄRGE KASUTAGE NEID KOOS SISEMISE ANDMEALLIKAGA
Isiklikult tappis see fakt mind kohapeal.

Kuidas on .... mida oleme oodanud ja juba ette kujutanud ja lakkunud, kuidas me nüüd ühes päringus ühendame oma andmed 1C-ga, lülitame selle välja - grupeerime, sisestame aruandesse, kuid see ei olnud seal...

Aga loomulikult ei peata see kogenud inimesi... mis mõte pähe tuli? Täpselt nii – ajutised tabelid:

4) ÄRGE KASUTAGE NEID KOOS AJUTISTE LAUDADEGA

Kuid see ei tundu enam tehnoloogiliste raskustena, vaid väga sarnane sellele, mida nad tahavad, et me teeksime "et elu ei tunduks paradiisina" (IMG :) .

5) Saab kasutada ainult SKD ühendustes

Neile, kes ei tea, on see ACS-is vahekaardil "Andmekogumi lingid". Kui tihti te neid kasutate? Mugavalt? Ilmselt tahetakse meid sundida neid sagedamini kasutama. Kuid seal on veerg "Lingi tingimus" ja "Lingi parameeter". Ma ei leidnud näidet nende kasutamise kohta üheski tüüpilises konfiguratsioonis, dokumentatsioonis ja ka Khrustalevas, millegipärast pole kõik läbipaistev. Kas keegi oskab mulle selgitada, kuidas "lingi tingimus" töötab. Kui kirjutate sinna SourceAttribute = ReceiverRevision, siis see ei tööta. Muidugi võib tingimuse kirjutada väljale "Avaldis" - enamikul juhtudel piisab sellest ... aga millegipärast pole see väga lihtne.

Kokkuvõttes lahendati see probleem varem kuskil järgmiselt:

Funktsioon InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Kui DateCon > "20100101", siis
DateCon = "20100101";
EndIf;

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

ArrayNumber = Uus massiiv();
ArrayNumber.Add(Tüüp("Arv"));

ArrayString = Uus massiiv();
ArrayString.Add(Type("String"));

ArrayData = Uus massiiv();
ArrayDate.Add(Type("Kuupäev"));

//Arvestusliku kulu täidame tabelisse
TüübiNumber = UusTüübiKirjeldus(massiiviarv,KN);
StringType = NewTypeDescription(ArrayString, CS);
TüüpKuupäev = NewTypeDescription(ArrayDate);

//tabel andmete laadimiseks SQL-ist
TK = Uus väärtustabel();
TK.Columns.Add("Nomenklatuurikood", TypeString);
TK.Columns.Add("Kogus", Tüübinumber);
TK.Columns.Add("Periood", TüüpKuupäev);

TK.Indeksid.Add("Periood");

// Ühendage SQL-iga
ConnectionString = "Pakkuja=SQLOLEDB.1;Püsi turvateave=True;Kasutaja ID=sa;Pwd=;Andmeallikas=;Kasutage ettevalmistamise protseduuri=1;Automaattõlge=True;Paki suurus=4096;Tööjaama ID=;Kasuta krüptimist for Data=False;Silt veergude võrdlemisega, kui võimalik=False;Esialgne kataloog=Aruanded";
Ühendus = Uus COMObject("ADODB.Ühendus");
Käsk = Uus COMObject("ADODB.Käsk");
RecordSet = Uus COMObject("ADODB.RecordSet");
Kuupäev = "";
Katse
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Ühendus;
Command.CommandText = "Valige * PH-st, kus punkt >= "" + String(Format(DateStart, "DF=yyyyKKdd")) + "" ja punkt RecordSet = Command.Execute();
RecordSet.MoveFirst();
Erand
TK tagastamine;
Katse lõpp;

Kuigi RecordSet.EOF = valesilmus
String = TK.Lisa();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Nimi).Väärtus;
Rida.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Nimi).Väärtus;
RecordSet.MoveNext();
EndCycle;

Request = Uus taotlus();
VrTabel = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Alguskuupäev", Alguskuupäev);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VALI
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT Andmetabel
| ALT
| &vrDataTable AS vrDataTable
|KUS
| vrDataTable.Period >= &DateStart
| Ja vrDataTable.Period Query.Execute();
TK = Undefined;

Taotlus = uus taotlus;
Query.TempTableManager = VrTabel;
Query.Text = "Siin on päring, mis hõlmab ajutist tabelit";

Tulemus = Request.Run();
Tagastamise tulemus;

Lõppfunktsioonid

OuterSet = InitializeDataSource();
DataSet = Uus struktuur();
DataSet.Insert("SQL-tabel", väline komplekt);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputTo ReportForm, DataSet);

Tegelikult pole palju koodiridu ja need on üsna standardsed ... sel juhul saate kasutada päringukoostaja kõiki funktsioone ja anda ACS-is ainult funktsiooni DATA COMPOSITION

Kuid loomulikult näeb see välja veidi mitte nii ilus ... ja väärtuste tabelisse üleslaadimisel peate iga kord kirjutama koodi ja kontrollima, kas tegite üksikasjade nimes vea ... muidu tundub see, mis meile 1C-s anti, kuidagi poolik. Ma pole veel otsustanud, kumba on mugavam kasutada. Teie otsustate ja kirjutate oma otsustest ja sellest, mis ajendas teid neid tegema.

[lingi vaatamiseks peate registreeruma]

Alates versioonist 8.3.5 rakendab platvorm võimalust kirjutada andmeid väliste andmeallikate tabelitesse. Artiklis käsitletakse seda funktsiooni, mis laiendab olemasolevaid võimalusi konfiguratsiooni integreerimiseks kolmandate osapoolte süsteemidega.

Kohaldatavus

Artiklis käsitletakse platvormi 1C 8.3.5. Materjal on asjakohane ka praeguste platvormiväljaannete jaoks.

Välistesse andmeallikatesse kirjutamine rakenduses 1C:Enterprise 8

Platvormil 8.2.14 lisati metaandmete puu uus objekt– välised andmeallikad. Selle mehhanismi eesmärk on saada andmeid välistest andmebaasidest seoses 1C-ga.

Platvormi uute väljalasete ilmumisega on arenenud välised andmeallikad, näiteks on saanud võimalikuks paigutada neid ajutistesse tabelitesse, teostada liitumisi tavaliste tabelitega.

Selles artiklis vaatleme, millised tööriistad on arendajal välistele andmeallikatele kirjutamiseks.

Kõik toimingud viidi läbi Microsoft SQL Server 2008 R2 DBMS-is.

Platvormis 8.3.4 realiseeriti välistes andmeallikates kirjeldatud funktsioonide kasutamise võimalus.

See funktsioon võimaldab teil käivitada SQL Serveri poolel salvestatud protseduure ja nende abiga pääseda juurde andmetele välistest allikatest, sealhulgas kirjutamiseks.

Võtame näite. Loome SQL Management Studio abil uue andmebaasi nimega kursy_test. Kõik edasised katsed tehakse sellega.

Selles andmebaasis loome nomenklatuuritabeli, mille jaoks kirjutame järgmise sisuga skripti:

KASUTAGE [kursy_test]
MINNA
LOO TABEL [dbo]. [nomenklatuur](
[ id ] [ int ] EI NULL ,
[kirjeldus ] [nvarchar](150) NOT NULL,
[ hind ] [ numbriline ](15 , 2 ) NULL ,
PIIRANG [ PK_id ] PRIMARY KEY ([ id ])
MINNA

Täitmise tulemusena luuakse järgmise struktuuriga tabel:

Nüüd peame looma kaks salvestatud protseduuri, mida kasutatakse andmete muutmiseks.

Nimetagem esimest protseduuri insert_nomenklatura. See on mõeldud lisamiseks uus rida lauale. Selle loomise skript näeb välja järgmine:

KASUTAGE [kursy_test]
MINNA
LOO PROTSEDUURI insert_nomenklatura
@id int ,
@description nvarchar(150),
@pricenumeric (15 , 2 )
AS
ALUSTA
INSERT INTO [kursy_test].dbo. [ nomenklatuur ] ([ id ], [ kirjeldus ] , [ hind ])
VÄÄRTUSED (@id , @description , @price )
LÕPP
MINNA

Teine protseduur nimega update_nomenklatura värskendab tabelis juba olemasolevat kirjet. Selle loomiseks käivitati järgmine skript:

Objektibrauseris näevad loodud tabel ja kaks salvestatud protseduuri välja järgmised:

Oleme Microsoft SQL Serveri poolel kõik ettevalmistavad sammud lõpetanud, nüüd läheme 1C:Enterprise 8 konfiguraatorisse.

Loome uue välise andmeallika nimega Nomenklatuur. Selles andmeallikas uue tabeli loomisel määrame andmeallikaga ühenduse loomiseks järgmised parameetrid:

Ühendusstring on järgmine:

Draiver = (SQL Server) ; Server =(kohalik ); Andmebaas = cursy_test ; Kasutaja ID = sa ; parool=;

Kui sa kasutajal on parool, tuleb see määrata ühenduse stringi parameetris Parool.

Kui kõik ühenduse parameetrid on õigesti määratud, avaneb klõpsamisel OK aken, mis sisaldab andmeallikas saadaolevaid tabeleid:

Märgime tabelis linnukesega meid huvitavad väljad. Kui vajutate nuppu Valmis tabel dbo_nomenklatura luuakse Nomenklatura välises andmeallikas:

Nüüd lülitume oma andmeallika vahekaardile „Funktsioonid”.

Sarnase viisardi abil lisame kaks salvestatud protseduuri:

Saame järgmise välimus vahekaardid "Funktsioonid":

Nüüd programmeerime kasutajaliides välise andmeallikaga töötamiseks.

Asetage käsupaneeli loendi kujul nupp "Lisa" järgmise töötlejaga:

&AtClient
Add() protseduur
hoiatus = uus Kirjeldus Alerts("OpenTableFinish", ThisObject );
OpenForm (
"ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm"
, , , , , ,
hoiatus, FormWindowOpenModeForm.LockAllInterface);
Lõppprotseduur

&AtClient
Salvestamise protseduur (käsk)
SaveOnServer();
EndProcedure &OnServer
Menetlus SaveOnServer()
Kui Objekt.Viide.Tühi() Siis
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Muidu
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
EndIf ;
Lõppprotseduur

Ettevõtterežiimis näeb loendivorm välja järgmine:

Objekti kuju on näidatud allpool:

Suurendamiseks klõpsake pildil.

Seega oleme salvestatud protseduure kasutades realiseerinud kirjutamise välistesse andmeallikatesse.

Platvormil 8.3.5 on ilmunud uus funktsioon - kirjutamine otse välistesse andmeallikatesse, minnes ülalpool käsitletud salvestatud protseduuride mehhanismist mööda.

Andmeid saab redigeerida nii programmiliselt kui ka interaktiivselt. Ja meie näite puhul ei pea te konfiguratsiooni kasutama.

Käsuribadel ja menüüs "Veel" näete standardseid nuppe, nagu "Loo", "Kopeeri", "Muuda" jne.

Suurendamiseks klõpsake pildil.

Ja objekti kujul ilmusid nupud “Salvesta” ja “Salvesta ja sulge”:

Nagu näete, on praegu väliste allikatega töötamine sarnane kataloogide, dokumentide jms tööga.

Mõelge, milliseid muudatusi on tehtud metaandmete tasemel, et oleks võimalik kirjutada välistesse andmeallikatesse.

Andmetabelisse on lisatud uus atribuut Ainult lugemine(tüüp – tõeväärtus).

Kui selle atribuudi väärtuseks on määratud Tõene, ei ole platvormi abil sellesse tabelisse andmete kirjutamine võimalik.

Andmetabeli väljal on nüüd järgmised atribuudid.

  • Ainult lugemine(tüüp - Boolean) – kas sellel väljal on võimalik andmeid muuta;
  • AllowNull(tüüp - Boolean) - kas sellele väljale on võimalik salvestada NULL väärtust.

Kinnisvara Ainult lugemine tuleks seadistada Tõsi andmebaasi väljade jaoks koos automaatne muutus, automaatselt genereeritud võtmeväljad, arvutatud väljad jne.

Saate lisada, muuta ja kustutada andmeid välistes allikates, kasutades sisseehitatud keelt.

Selleks objektid ExternalDataSourceTableRecordSet ja ExternalDataSourceTableObject kasutusele on võetud uued meetodid Kirjuta () ja Kustuta().

Mõelge ülalkirjeldatud välise andmeallika uue kirje programmilise lisamise näitele.

&AtClient
Menetlus Loo programmiliselt(meeskond)
Looge programmiliselt serveris();
EndProcedure &OnServer

Menetlus Looge programmiliselt serveris()
Kirjutatav objekt=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WritableObject.description= “Kapp” ;
writableObject.price= 5000 ;
WritableObject.Write();
Lõppprotseduur

Välise andmeallika tabeliobjekti moodulis saate nüüd määrata sündmuste kirjutamise töötlejad, nt Enne kirjutamist(), OnRecord() jne.:

Käesolevas artiklis käsitleti kahte võimalust andmete kirjutamiseks välistesse andmeallikatesse – kasutades salvestatud protseduure ja kasutades 8.3.5 platvormi uusi mehhanisme.

Seega rakendab platvorm nüüd mehhanisme täielikuks integreerimiseks väliste rakendustega.

Versioonis 8.3.6 on ülalkirjeldatud funktsioone uuega laiendatud spetsiaalsed meetodid GetChangableFields() ja SetChangableFields(). Nende abil on võimalik teha kirjutamisoperatsioon VIEW tabeli nendele väljadele, mis on konfiguraatoris märgitud kirjutuskaitstuks. Tänu sellele sai võimalikuks stsenaariumi rakendamine, kus VID-tabeli üksikutele väljadele kirjutamine on võimalik ainult neil juhtudel, kui see on rakenduse äriloogika kohaselt vajalik.

Versioonis 8.3.7 on täiustatud mehhanismi, mis määrab, millised konkreetsed VIEW tabelite väljad võivad sisaldada NULL väärtusi. Kuni selle hetkeni võisid kõik VIEW tabelid võtta selle väärtuse. See muutus on tingitud sortimise kiiruse suurenemisest dünaamilised loendid nendel põldudel.

Versioonis 8.3.8 on lõpuks võimalik kindlaks teha, kas väline andmeallikas on tehinguolekus. Seda funktsiooni pakub uus meetod ExternalDataSourceManager.TransactionActive()

Kokkuvõtteks märgime, et väliste andmeallikate jaoks, nagu ülal näidatud, kirjeldatakse klassikalise relatsioonimudeli andmetabeleid. Platvorm kasutab andmetega töötamiseks teistsugust paradigmat, pakkudes arendajale teatud tüüpi rakendusobjekte (teatmeteosed, dokumendid, registrid jne). Sellepärast ei toeta süsteem väliste andmeallikate tabelitega töötades enamikku funktsioonidest, mis on omased selle "natiivsetele" objektidele. Seetõttu on soovitatav hoiduda mingisuguse äriloogika väljatöötamisest, võttes arvesse VID-tabelite kasutamist, kui see ei ole seotud juba integreerimisülesannetega olemasolevad süsteemid. Lihtsamalt öeldes peaksite püüdma vältida teie rakenduses aktiivselt kasutatavate andmete salvestamist mõnda teise tabelisse. väline süsteem kui see süsteem neid ei kasuta.

Järgmises artiklis käsitleme väliste andmeallikate tehnoloogia kasutamise loogilist jätkamist süsteemis 1C: Enterprise.

Töötage nendega loendites režiimis 1C Enterprise.

Töös tekib aga sageli olukord, kus osa andmetest on kusagil mujal hoiul.

  • Veebipood (salvestab tavaliselt andmeid välisesse MySQL/SQL-i andmebaasi)
  • Teine alus.

Selliste andmetega töötamiseks, mis on salvestatud teistesse andmebaasidesse, peate välja töötama spetsiaalsed mehhanismid.

Versioonis 1C 8.2.14 ilmus uus nimega 1C välised andmeallikad, mis hõlbustab oluliselt programmeerija tööd, kuna:

  • nüüd pole andmete hankimiseks vaja luua spetsiaalseid mehhanisme
  • sellistele andmetele pääseb juurde
  • selliseid andmeid saab vaadata 1C loendites.
    • Väline andmeallikas 1C - väline alus SQL

      Oletame, et meil on SQL-i andmebaas, mis salvestab meile vajalikud andmed. Proovime sealt andmeid lugeda, kasutades 1C välise andmeallika mehhanismi.

      Lisame välise andmeallika 1C. Peate minema konfiguraatorisse, välised andmeallikad asuvad konfiguratsiooniaknas, puu allosas.

      1. Ühendus

      Lisame uue välise andmeallika 1C, nimetame seda meelevaldselt.

      Andmebaas koosneb tabelitest. Peame need lisama lisatud välise andmeallika sisse. Paremklõpsake sellel ja valige Lisa tabel.

      Esimest korda palub see teil sisestada ühendusstring. Selle saab sisestada käsitsi või moodustada, selleks peate klõpsama nuppu “…”.

      Meie konkreetsel juhul valime draiverina "SQL Server"

      Täidame SQL-iga ühenduse loomise põhiparameetrid. Serveri nime saab sisestada või valida loendist.

      1C loob ühenduse SQL-iga ja palub teil valida loendist konkreetne andmebaas.

      Pärast seda kuvab 1C selles andmebaasis olevate tabelite ja nende veergude loendi. Peate valima vajalikud tabelid koos märkeruutudega.

      Tabelid ja veerud lisatakse. Nimed on sellised, nagu need on määratletud kaugandmebaasis. 1C-s saate need ümber nimetada (atribuutides).

      Siin on näide lisatud tabelist:

      Siin on näide lisatud veerust:

      Selleks, et 1C platvorm töötaks välise tabeliga samamoodi nagu 1C kataloogidega, saab tabelis määrata täiendavaid parameetreid:

      • Määrake atribuudis Key Field üks veergudest, mis annab rea kordumatu identifitseerimise; kui unikaalsust pakuvad mitu stringi, siis nii ei tööta (välja Kood analoog)
      • Välja atribuudis Vaade määrake üks veergudest, mis esitab stringi lühikirjelduse (välja Nimi analoog)
      • Atribuudis Tabeli andmetüüp määrake Objekti andmed.

      2. Vaata

      Ühendust kaugandmebaasiga ei looda automaatselt. Ühenduse loomiseks peate valima tüüpilise menüü.

      Filiaalis asub Standard eriline meeskond Väliste andmeallikate haldamine, mis võimaldab määrata ühenduse parameetrid (1C Enterprise režiimi jaoks omad) ja luua ühenduse.

      Kõigepealt peate määrama andmebaasiga ühenduse loomise parameetrid.

      Kui tegite konfiguraatoris konfiguratsiooni, näitas see teile ühenduse stringi. Näete seda uuesti, kui klõpsate konfiguraatoris uuesti nuppu Lisa tabel.

      Kopeerige ühenduse string ja määrake see režiimis 1C Enterprise.

      Pärast seda peate looma tegeliku ühenduse.

      Pärast ühenduse loomist on võimalik töötada loenditega.

      3. Kasutage 1C keeles

      Ühenduse saab luua ka 1C keeles olevast programmikoodist.

      Ühenduse parameetrid on määratud järgmiselt:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = tõene;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "parool";
      ConnectionParameters.ConnectionString = "ühendusstring konfiguraatorist";
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetCommonConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(Kasutajanimi(), Parameetrid);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameters);
      Välisedandmeallikad.AllikaNimiConfigurator.SetConnection();

      Andmepäringuid saab andmebaasist tavapärast meetodi abil. Näide päringu tekstist välise allika OurExternalSource ja tablesExternalSourceTable jaoks:

      VALI
      Välise allika tabel. Väljanimi
      FROM
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Väline andmeallikas 1C - Exceli failiga töötamine

      Proovime teist võimalust - Exceli failiga töötamist välise 1C andmeallika kaudu.

      Loome lihtsa Exceli faili.

      Lisame välise allika, paneme sellele meelevaldselt nimeks FileExcel. Lisage sellele tabel "Sheet1 $". Nagu näete, on see Exceli lehe nimi, millele on lisatud sümbol "$".

      Nagu SQL-i puhul, lisame veerud. Neid saab käsitsi lisada. Oluline on tagada, et lisatud veergude tüübid ühtivad, vastasel juhul võite hiljem kuvada veateate, näiteks "Andmetüübi mittevastavus".

      Veeru jaoks peate määrama 1C nime ja andmeallika nime.

      Exceli jaoks on funktsioon (tõrge nagu "Liiga vähe parameetreid. Nõuab 3"):

      • Kui esimene rida Exceli tabelid veergude nimed asuvad, siis peate lihtsalt määrama selle veeru nime, näiteks "Kood".
      • Vastasel juhul tuleb määrata täisnimi tabelinimega “Sheet1$.Code”, kuid lisada parameetritesse “HDR=NO;”.

      Exceli faili ühenduse parameetrid näevad välja järgmised:

      • XLSX-failid (Office'i versioon 2007 ja uuem)
        juht=( Microsoft Excel Draiver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS-failid (varem)
        Draiver=(Microsoft Exceli draiver (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Peate määrama oma nime ja faili tee.

Programmi 1C versioonis 8 lisasid arendajad funktsionaalsusele võimaluse ühendada kolmandate osapoolte andmebaase ja hankida neist teavet otse konfiguraatorist, ilma COM-ühendusi ja OLE-objekte kasutamata. Seda funktsiooni rakendatakse uue objektiga - "Välised andmeallikad"

1C väliseid andmeallikaid saab kasutada samamoodi nagu ülejäänud süsteemitabeleid:

  1. Aruannete ja arvutuste koostamisel andmete koostamise süsteemi (ACS) abil;
  2. Kolmandate osapoolte allikates salvestatud teabe linkide saamiseks;
  3. Tabelitesse salvestatud andmete muutmiseks;
  4. Taotluste tegemisel.

Oluline on teada, et see mehhanism ei ole loodud töötama teiste 1C andmebaasidega, kuna 1C.Enterprise'i töömudel ise ei tähenda andmete häireid füüsiliste tabelite tasemel.

Uue allika loomine

Programmi uue välise allika lisamine toimub režiimis "Configurator". Konfiguratsioonipuus on vastav haru (joonis 1)

Peate uue allika loomisel higistama, hoolimata asjaolust, et uue objekti vormil on ainult neli vahekaarti:

  1. Põhiline;
  2. Andmed;
  3. Funktsioonid;
  4. Õigused.

Esimesel vahekaardil on ainult üks huvitav parameeter - luku juhtimisrežiim. Kui te ei esita küsimusi tehingute andmete blokeerimise või teabevoogude paralleelstamise keerukuse kohta, võite jätta selle parameetri automaatse blokeerimise režiimi. Selline lähenemine võib aga kaasa tuua liigseid piiranguid (näiteks kui programm lukustab ühe kirje asemel kogu füüsilise tabeli, jättes teistelt kasutajatelt võimaluse sellega töötada).

Hallatavad lukud, erinevalt automaatsetest, kasutavad nad tehingumehhanismi, mis on manustatud programmi endasse, mitte DBMS-i, mis võimaldab teil tabelihõive palju enamale üle kanda. madal tase.

Seades selle parameetri väärtuseks "Automaatne ja hallatud", anname süsteemile võimaluse määrata, millist režiimi kasutada, viidates otse iga konkreetse tabeli vastavale atribuudile.

Välise allika atribuutide vormi andmete vahekaart

Vahekaardi „Andmed” vorm on näidatud joonisel fig. 2

Riis. 2

Siia saame lisada välise lähtekoodi tabeleid ja kuubikuid. Tabeli lisamiseks on kaks võimalust:

  1. Käsitsi, siis näeme tabeli lisamise vormi (joonis 3);

Riis. 3

  1. Või valige füüsiliste allikate tabelite loendist (joonis 4), sel juhul avaneb meie ees spetsiaalne konstruktor.

Riis. 4

Vaatame lähemalt tabeli lisamise vormi. Atribuuti "Nimi" kasutatakse objekti unikaalseks tuvastamiseks konfiguratsioonis.

Metaandmete objekti ja lõpliku füüsilise tabeli võrdlemine toimub vahekaardil "Lisa" asuva atribuudi "Nimi andmeallikas" kaudu (joonis 5).

Riis. 5

Järgmisena peame kindlaks määrama tabeli tüübi või pigem selle objektiivsuse. Kui struktuuris salvestatud andmeid saab ühe välja kaudu üheselt tuvastada, võib tabel olla objektitabel. Kui kirje identiteet on määratud võtmeväljade komplektiga, peab tabelil olema mitteobjektitüüp.

Võrreldes selliseid tabeleid teiste metaandmeobjektidega, saame tuua järgmise analoogia:

  • Objektitabelid on teatmeteosed;
  • Mitteobjektiivsed on teaberegistrid.

Võtmeväljade komplekt on määratletud järgmises vormiparameetris ("Võtmeväljad"). See väli on kohustuslik. Kui jätate selle tühjaks, tekib konfiguratsiooni salvestamisel tõrge.

Nagu näete jooniselt 5, ei ole mõned väljad ja vorminupud redigeerimiseks saadaval:

  • Väljendamine andmeallikas;
  • tabeli andmetüüp;
  • Vaateväli;
  • Vaata käitlejad.

Neid saab kasutada alles pärast seda, kui oleme täitnud tabeli väljad, määratledes nende tüübi ja määranud nende identifikaatorid (joonis 6)

Riis. 6

Siin tuleks tähelepanu pöörata valikule "Luba null", kui see ruut on märgitud, ei ole sellist välja soovitav võtmena kasutada.

Laua konstruktor

Vahest kõige olulisem ja huvitavam punkt välisallikatega töötamisel on ühendusstringi loomine. Selle konstruktor avaneb, kui klõpsate parameetri "Ühendusstring" kõrval kolme punktiga nuppu.

Kõigepealt palutakse meil otsustada, millist draiverit ühendamiseks kasutatakse (joonis 7)

Riis. 7

Selle parameetri vale määratlus ei võimalda teil luua ühendust kolmanda osapoolega teabebaas. Samuti tuleb mõista, et kõiki ripploendis määratud draivereid ei saa kasutada ühendusstringi automaatseks genereerimiseks. Kui platvorm andis vea (joonis 8), tuleb ühendusstring käsitsi kirjutada.

Joonis 8

Riis. 9

Liin ise on rangelt reguleeritud ehitus.

Ühendusstringi näide

Kaaluge kolmanda osapoole andmebaasi, mis on loodud Microsoft Access ja asub draivi D juurtes. Selle aluse ühendamiseks peame kasutama vastavat draiverit, kuid selle valimine liinikonstruktoris toob kaasa vea Joon.8.

Ühenduse parameetrid kirjutame ise.

Driver=(Microsoft Access Driver (*.mdb)) – selline näeb välja rea ​​esimene osa. V lokkis traksid oleme määratlenud juhi.

Sest Exceli failid see näeb välja selline (Microsoft Exceli draiver (*.xls)) , kontoris loodud Exceli failide puhul, mis on vanemad kui 2003, näeb draiveri rida välja selline (Microsoft Exceli draiver (*.xls, *.xlsx, *.xlsm, * .xlsb )).

Eraldades selle parameetri järgmisest semikooloniga, peame kirjutama oma salvestusruumi aadressi (meie puhul DBQ=D:\Database1.mdb).

Lisades need kaks parameetrit, saame Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, kirjutades selle parameetri, saame ligipääsu selle andmebaasi sisemistele struktuuridele.

Objekti "Väline allikas" jaoks ei piisa ainult selle loomisest konfiguratsioonis, see tuleb ühendada ka režiimis "Ettevõtted". Seda saab teha menüüst "Kõik funktsioonid"->Välised allikad. Kui me esimest korda oma tabelisse siseneme, peame kirjutama sama ühendusstringi juba režiimis "Ettevõte".

Miks see võimalus nii huvi pakub? Iga inimene, kes on 1C-s programmeerinud, on SQL-iga üsna tuttav ja vähemalt üldiselt kursis teiste ärirakenduste tehnoloogiliste platvormide arhitektuuri ja põhimõtetega, ütleb teile kindlalt, mis talle 1C-s kõige rohkem meeldib. Muidugi on päringukoostaja kõige mugavam ja läbimõeldum mehhanism päringute kirjutamiseks relatsioonistruktuuridest andmete saamiseks, millega ma isiklikult olen kohtunud. Ja nüüd on 1C andnud meile nii suurepärase võimaluse kasutada seda mitte ainult 1C-ga, vaid ka kõigi teiste tabelitega. Siin on vaid hunnik "kärbse sisse" valatud sellesse "meetünni". Kõik korras:

1) Seadistamine ja kasutamine- ilma "tamburiiniga tantsimiseta" ei tööta
a) Lisage väline andmeallikas - tundub, et pole midagi keerulist
b) märkige ruut "Vali loendist" - see on vajalik - see on vajalik toimivuse kontrollimiseks alguses ja säästa teid tarbetutest probleemidest
c) - vajutage kindlasti "..." - ühendus on ODBC. Mitte OLEDB nagu me kõik oleme harjunud, vaid ühe taseme võrra madalamal

D) Olge siin VÄGA ETTEVAATLIK.

See on ODBC draiver – kui kasutate klient-serveri versiooni, peab see serveris olema. Kui arendate ühte süsteemi ja töötate teise kallal (nagu tavaliselt), veenduge, et teid ei ootaks üllatused. Kummaline soovitus, aga vali vanim või levinum draiver, kui kiiruse pärast eriti muret ei tee ja sa ei kavatse SQL92 standardi piire ületada. See tagab teile parima ühilduvuse. Näiteks SQL Server 2008 jaoks oleks parim draiver SQL Server Native Client 11, kuid soovitan valida ainult SQL Server, vastasel juhul tuleb see väga native klient installida kas serverisse või kõikidesse kliendi masinatesse (juhul kui failiversiooni kasutamisest) ja kasu on eriline lihtsa ta ei anna sulle tööd.
e) Standardse serveri valimise dialoogiaknad

E) Soovitan parooli salvestamise küsimusele vastata "jah", vastasel juhul ei õnnestu seda ettevõtet alustada.
g) Valige tabel ja üksikasjad... suurepärane võimalus - saate selle kohe vastavalt oma soovile ümber nimetada (ja ka üksikasjad), samas kui atribuutides näete andmeallika väljade nimesid

Z) Ja nüüd jooksete, avage päringukujundaja - valite rumalalt tabelist kõik kirjed ja OPA - viga. Mida teha? Kui teil on hallatud liides, vaadake teenindusmenüüst ja kui teil on tavaline...
Mina isiklikult kasutasin seda koodi:
Kood 1C v 8.x Parameetrid = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = tõene;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;ANDMEBAAS=andmebaas";
Parameters.DBMS = "MSSQLServer";

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

Välised andmeallikad.DAX.SetConnection();
Võib-olla pole mõnda tükki vaja, kuid see töötab.
Peate koodi täitma ÜKS kord. Pärast seda ühendab see normaalselt ... müstika muidugi - miks see vajalik oli, pole selge ...

2) Kirjutuskaitstud andmeallikad- Jah, imesid ei juhtu ... aga mõnikord tahad ....

3) ÄRGE KASUTAGE NEID KOOS SISEMISE ANDMEALLIKAGA
Isiklikult tappis see fakt mind kohapeal.

Kuidas on .... mida oleme oodanud ja juba ette kujutanud ja lakkunud, kuidas me nüüd ühes päringus ühendame oma andmed 1C-ga, lülitame selle välja - grupeerime, sisestame aruandesse, kuid see ei olnud seal...
Aga loomulikult ei peata see kogenud inimesi... mis mõte pähe tuli? Täpselt nii – ajutised tabelid:

4) ÄRGE KASUTAGE NEID KOOS AJUTISTE LAUDADEGA

Aga see ei tundu enam tehnoloogiliste raskustena, vaid väga sarnane, mida nad tahavad, et me teeksime "et elu ei tunduks paradiisina" :).

5) Saab kasutada ainult SKD ühendustes
Neile, kes ei tea, on see ACS-is vahekaardil "Andmekogumi lingid". Kui tihti te neid kasutate? Mugavalt? Ilmselt tahetakse meid sundida neid sagedamini kasutama. Kuid seal on veerg "Lingi tingimus" ja "Lingi parameeter". Ma ei leidnud näidet nende kasutamise kohta üheski tüüpilises konfiguratsioonis, dokumentatsioonis ja ka Khrustalevas, millegipärast pole kõik läbipaistev. Kas keegi oskab mulle selgitada, kuidas "lingi tingimus" töötab. Kui kirjutate sinna SourceAttribute = ReceiverRevision, siis see ei tööta. Muidugi võib tingimuse kirjutada väljale "Avaldis" - enamikul juhtudel piisab sellest ... aga millegipärast pole see väga lihtne.

Kokkuvõttes lahendati see probleem varem kuskil järgmiselt:
Kood 1C v 8.x Funktsioon InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Kui DateCon > "20100101", siis
DateCon = "20100101";
EndIf;

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

ArrayNumber = Uus massiiv();
ArrayNumber.Add(Tüüp("Arv"));

ArrayString = Uus massiiv();
ArrayString.Add(Type("String"));

ArrayData = Uus massiiv();
ArrayDate.Add(Type("Kuupäev"));

//Arvestusliku kulu täidame tabelisse
TüübiNumber = UusTüübiKirjeldus(massiiviarv,KN);
StringType = NewTypeDescription(ArrayString, CS);
TüüpKuupäev = NewTypeDescription(ArrayDate);

//tabel andmete laadimiseks SQL-ist
TK = Uus väärtustabel();
TK.Columns.Add("Nomenklatuurikood", TypeString);
TK.Columns.Add("Kogus", Tüübinumber);
TK.Columns.Add("Periood", TüüpKuupäev);

TK.Indeksid.Add("Periood");

// Ühendage SQL-iga
ConnectionString = "Pakkuja=SQLOLEDB.1;Püsi turvateave=True;Kasutaja ID=sa;Pwd=;Andmeallikas=;Kasutage ettevalmistamise protseduuri=1;Automaattõlge=True;Paki suurus=4096;Tööjaama ID=;Kasuta krüptimist for Data=False;Silt veergude võrdlemisega, kui võimalik=False;Esialgne kataloog=Aruanded";
Ühendus = Uus COMObject("ADODB.Ühendus");
Käsk = Uus COMObject("ADODB.Käsk");
RecordSet = Uus COMObject("ADODB.RecordSet");
Kuupäev = "";
Katse
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Ühendus;
Command.CommandText = "Valige<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Erand
TK tagastamine;
Katse lõpp;

Kuigi RecordSet.EOF = valesilmus
String = TK.Lisa();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Nimi).Väärtus;
Rida.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Nimi).Väärtus;
RecordSet.MoveNext();
EndCycle;

Request = Uus taotlus();
VrTabel = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Alguskuupäev", Alguskuupäev);
Query.SetParameter("DateCon", DateCon);
Query.Text = "VALI
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT Andmetabel
| ALT
| &vrDataTable AS vrDataTable
|KUS
| vrDataTable.Period >= &DateStart
| Ja vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = Undefined;

Taotlus = uus taotlus;
Query.TempTableManager = VrTabel;
Query.Text = "Siin on päring, mis hõlmab ajutist tabelit";

Tulemus = Request.Run();
Tagastamise tulemus;

Lõppfunktsioonid

OuterSet = InitializeDataSource();
DataSet = Uus struktuur();
DataSet.Insert("SQL-tabel", väline komplekt);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputTo ReportForm, DataSet);

Tegelikult pole palju koodiridu ja need on üsna standardsed ... sel juhul saate kasutada päringukoostaja kõiki funktsioone ja anda ACS-is ainult funktsiooni DATA COMPOSITION

Kuid loomulikult näeb see välja veidi mitte nii ilus ... ja väärtuste tabelisse üleslaadimisel peate iga kord kirjutama koodi ja kontrollima, kas tegite üksikasjade nimes vea ... muidu tundub see, mis meile 1C-s anti, kuidagi poolik. Ma pole veel otsustanud, kumba on mugavam kasutada. Teie otsustate ja kirjutate oma otsustest ja sellest, mis ajendas teid neid tegema.

Teave võetud saidilt