Eksterni izvori podataka 1c 8.3 excel. Eksterni izvori podataka

Izdanje 8.2.14.533 - konačno više-manje stabilna verzija 14. izdanja platforme. Konačno, ukazala se prilika da se isproba divna prilika – „spoljni izvori podataka“.

Zašto ovu priliku izaziva takav interes? Svaka osoba koja je programirala u 1C prilično je upoznata sa SQL-om i barem općenito upoznata s arhitekturom i principima razvoja drugih tehnoloških platformi za poslovne aplikacije sa sigurnošću će vam reći šta mu se najviše sviđa u 1C. Naravno, graditelj upita je najpogodniji i najpromišljeniji mehanizam za pisanje upita za dobijanje podataka iz relacionih struktura koji sam lično ikada sreo. A sada nam je 1C dao tako divnu priliku da ga koristimo ne samo sa 1C, već i sa bilo kojim drugim stolovima. Evo samo gomile "mušice" ulivene u ovo "bure meda". Sve po redu:

1) Postavljanje i korištenje - bez "plesa s tamburom" neće raditi

A) Dodaj eksterni izvor podaci - kao ništa komplikovano
b) označite kućicu "Izaberite sa liste" - neophodno je - ovo je neophodno kako biste provjerili performanse na početku i spasili vas od nepotrebnih problema
u)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- obavezno pritisnite "..." - veza je ODBC. Ne OLEDB kao što smo svi navikli, već jedan nivo niže

I budi ovdje VRLO PAŽLJIVO.

Ovo je ODBC drajver - ako koristite verziju klijent-server, ona mora biti na serveru. Ako razvijate na jednom sistemu, a radite na drugom (kao što je obično slučaj), pazite da ne budete iznenađeni. Čudna preporuka, ali odaberite najstariji ili najčešći drajver ako niste posebno zabrinuti za brzinu i ne namjeravate ići izvan granica standarda SQL92. Ovo će vam dati najbolju kompatibilnost. Na primjer za SQL Server 2008 najbolji vozac postojaće SQL Server Native Client 11, ali preporučujem da odaberete samo SQL Server, inače će ovaj izvorni klijent morati da bude instaliran ili na serveru ili na svim klijentskim mašinama (ako koristite verzija datoteke), a isplata je posebna za jednostavni zadaci on neće.

E) Standardni dijalozi za odabir servera

G) Odaberite tabelu i detalje ... odlična prilika - možete je odmah preimenovati kako želite (i detalje), dok ćete u svojstvima vidjeti nazive polja izvora podataka

H) I sad pokrenete, otvorite dizajner upita - glupo birate sve zapise iz tabele i OPA - greška. šta da radim? Ako imate upravljani interfejs, pogledajte servisni meni, a ako imate normalan...
Ja sam lično koristio ovaj kod:

Parametri = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = istina;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=baza podataka";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();

Možda neki komadi nisu potrebni, ali radi. Treba pokrenuti kod JEDNOM. Nakon toga će se normalno povezati...mistika naravno - zašto je to bilo potrebno nije jasno...

2) Izvori podataka samo za čitanje
Da, čuda se ne dešavaju...ali ponekad želite....

3) NEMOJTE IH KORISTITI ZAJEDNO SA INTERNIM IZVORIMA PODATAKA
Mene je lično ta činjenica ubila na licu mjesta.

Kako to.... sta su cekali i vec su zamislili i lizali kako mi sada u jednom zahtjevu kombinujemo svoje podatke sa 1C, okrenemo - grupišemo, ubacimo u izvještaj, ali nije bilo.. .

Ali naravno, to ne zaustavlja iskusne ljude... koja mi je pomisao pala na pamet? Tako je - privremene tabele:

4) NEMOJTE IH KORISTITI ZAJEDNO SA PRIVREMENIM TABLOVIMA

Ali ovo više ne liči na tehnološke poteškoće, već jako liči na ono što žele da uradimo "da nam život ne izgleda kao raj" (IMG :) .

5) Može se koristiti samo u SKD priključcima

Za one koji ne znaju, nalazi se u ACS-u na kartici "Veze za skup podataka". Koliko često ih koristite? Zgodno? Očigledno nas žele natjerati da ih češće koristimo. Ali postoji kolona "Stanje veze" i "Parametar veze". Nisam našao primjer njihove upotrebe ni u jednoj tipičnoj konfiguraciji, u dokumentaciji i u Hrustalevoj, nekako sve nije transparentno. Može li mi neko objasniti kako funkcionira "uvjet veze". Ako tamo napišete SourceAttribute = ReceiverRevision, to ne radi. Naravno, uslov se može upisati u polje "Izraz" - u većini slučajeva to je dovoljno... ali nekako nije baš lako.

Ukupno, ovaj problem je ranije riješen negdje ovako:

Funkcija InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ako DateCon > "20100101" Onda
DateCon = "20100101";
EndIf;

QN = Novi kvalifikacioni broj(15,2);
cs = NewStringQualifiers(255);

Broj polja = Novi niz();
ArrayNumber.Add(Type("Broj"));

ArrayString = Novi niz();
ArrayString.Add(Type("String"));

ArrayData = Novi niz();
ArrayDate.Add(Type("Date"));

//Knjigovodstveni trošak ćemo popuniti u tabeli
VrstaNumber = NewTypeDescription(NumberNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tablica za učitavanje podataka iz SQL-a
TK = Nova tablica vrijednosti();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Period", TypeDate);

TK.Indices.Add("Period");

// Povezivanje na SQL
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;Korisnički ID=sa;Pwd=;Izvor podataka=;Koristi proceduru za pripremu=1;Auto Translate=True;Packet Size=4096;ID radne stanice=;Koristi šifriranje for Data=False;Tag sa razvrstavanjem kolona kada je moguće=False;Inicijalni katalog=Izvještaji";
Connection = New COMObject("ADODB.Connection");
Naredba = Novi COMObject("ADODB.Command");
RecordSet = Novi COMObject("ADODB.RecordSet");
Datum = "";
Pokušaj
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Veza;
Command.CommandText = "Izaberi * iz PH gdje je tačka >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" i period RecordSet = Command.Execute();
RecordSet.MoveFirst();
Izuzetak
Povratak TK;
Kraj pokušaja;

Dok RecordSet.EOF = Lažna petlja
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Red.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Zahtjev = Novi zahtjev();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Datum početka", Datum početka);
Query.SetParameter("DateCon", DateCon);
Query.Text = "ODABIR
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
OD
| &vrDataTable AS vrDataTable
|WHERE
| vrDataTable.Period >= &DateStart
| I vrDataTable.Period Query.Execute();
TK = Nedefinisano;

Zahtjev = Novi zahtjev;
Query.TempTableManager = VrTable;
Query.Text = "Ovo je upit koji uključuje privremenu tabelu";

Rezultat = Request.Run();
Return Result;

EndFunctions

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

Zapravo, nema mnogo linija koda i prilično su standardne... u ovom slučaju možete koristiti punu funkcionalnost graditelja upita i dati samo funkciju SASTAV PODATAKA u ACS-u

Ali, naravno, izgleda malo ne tako lijepo... i učitavanje u tablicu vrijednosti svaki put kada treba da napišete kod i provjerite jeste li pogriješili u nazivu detalja... inače ono što smo dobili u 1C izgleda nekako polovično. Još nisam odlučio koji je zgodniji za korištenje. Vi odlučujete i pišete o svojim odlukama i šta vas je nagnalo da ih donesete.

[morate se registrovati da vidite link]

Počevši od verzije 8.3.5, platforma implementira mogućnost upisivanja podataka u tabele eksternih izvora podataka. Članak razmatra ovu funkcionalnost, koja proširuje postojeće mogućnosti za integraciju konfiguracije sa sistemima trećih strana.

Primjenjivost

U članku se govori o platformi 1C 8.3.5. Materijal je također relevantan za trenutna izdanja platforme.

Pisanje u eksterne izvore podataka u 1C:Enterprise 8

U platformi 8.2.14 dodano je stablo metapodataka novi objekat– eksterni izvori podataka. Svrha ovog mehanizma je da dobije podatke iz eksternih baza podataka u vezi sa 1C.

Izlaskom novih izdanja platforme, eksterni izvori podataka su evoluirali, na primjer, postalo je moguće smjestiti ih u privremene tablice, izvršiti spajanje s regularnim tablicama.

U ovom članku ćemo pogledati koje alate programer ima za pisanje u eksterne izvore podataka.

Sve radnje su izvedene na Microsoft SQL Server 2008 R2 DBMS.

U platformi 8.3.4 implementirana je mogućnost korištenja funkcija opisanih u vanjskim izvorima podataka.

Ova funkcija vam omogućava da pokrenete pohranjene procedure na strani SQL Servera i uz njihovu pomoć pristupite podacima iz vanjskih izvora, uključujući i za pisanje.

Uzmimo primjer. Kreirajmo novu bazu podataka sa imenom kursy_test koristeći SQL Management Studio. Na njemu će se izvoditi svi daljnji eksperimenti.

U ovoj bazi podataka napravićemo tabelu nomenklature, za to ćemo napisati skriptu sledećeg sadržaja:

KORISTI [kursy_test]
GO
CREATE TABLE [dbo] . [nomenklatura](
[ id ] [ int ] NOT NULL ,
[ opis ] [ nvarchar ](150 ) NOT NULL ,
[ cijena ] [ numeric ](15 , 2 ) NULL ,
OGRANIČENJE [ PK_id ] PRIMARNI KLJUČ ([ id ])
GO

Kao rezultat izvršenja, kreiraće se tabela sledeće strukture:

Sada moramo kreirati dvije pohranjene procedure koje će se koristiti za modificiranje podataka.

Nazovimo prvu proceduru insert_nomenklatura. Biće dizajniran za dodavanje nova linija do stola. Skripta za kreiranje će izgledati ovako:

KORISTI [kursy_test]
GO
CREATE PROCEDURE insert_nomenklatura
@id int ,
@description nvarchar(150 ),
@pricenumeric (15 , 2 )
AS
POČNI
INSERT INTO [kursy_test].dbo. [ nomenklatura ] ([ id ], [ opis ] , [ cijena ])
VRIJEDNOSTI (@id, @opis, @cijena)
KRAJ
GO

Druga procedura, nazvana update_nomenklatura, ažurirat će zapis koji već postoji u tabeli. Da biste ga kreirali, pokrenuta je sljedeća skripta:

U Object Browser-u, generirana tabela i dvije pohranjene procedure izgledaju ovako:

Završili smo sve pripremne korake na strani Microsoft SQL Servera, sada idemo na 1C:Enterprise 8 konfigurator.

Kreiramo novi eksterni izvor podataka pod nazivom Nomenklatura. Prilikom kreiranja nove tablice u ovom izvoru podataka, specificiramo sljedeće parametre za povezivanje s izvorom podataka:

Niz veze je sljedeći:

Driver = (SQL Server) ; Server =(lokalni ); Baza podataka = cursy_test; Id korisnika = sa ; password=;

Ako sa korisnik ima lozinku, ona mora biti navedena u parametru Password niza veze.

Ako su svi parametri veze ispravno navedeni, kada kliknete na OK, otvorit će se prozor koji sadrži tabele dostupne u izvoru podataka:

U tabeli označavamo polja koja nas zanimaju. Kada pritisnete dugme Spreman tabela dbo_nomenklatura će biti kreirana u vanjskom izvoru podataka Nomenklatura:

Sada prelazimo na karticu "Funkcije" našeg izvora podataka.

Koristeći sličan čarobnjak, dodajemo dvije pohranjene procedure:

Dobijamo sljedeće izgled kartice “Funkcije”:

Sada programirajmo korisnički interfejs za rad sa eksternim izvorom podataka.

U obliku liste na komandnoj tabli postavite dugme „Dodaj“ sa sledećim rukovaocem:

&AtClient
Add() procedura
upozorenje = novo DescriptionAlerts(“OpenTableFinish”, ThisObject );
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
upozorenje, FormWindowOpenModeForm.LockAllInterface);
EndProcedure

&AtClient
Procedura Sačuvaj (naredba)
SaveOnServer();
EndProcedure &OnServer
Procedura SaveOnServer()
Ako Object.Reference.Empty() Onda
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Inače
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
EndIf ;
EndProcedure

U poslovnom načinu, obrazac liste izgleda ovako:

Oblik objekta je prikazan u nastavku:

Kliknite na sliku za povećanje.

Tako smo, koristeći pohranjene procedure, implementirali pisanje u eksterne izvore podataka.

U platformi 8.3.5 pojavila se nova karakteristika - direktno upisivanje u eksterne izvore podataka, zaobilazeći mehanizam pohranjenih procedura o kojem smo gore govorili.

Podaci se mogu uređivati ​​i programski i interaktivno. A za naš primjer, ne morate pribjeći konfiguraciji.

U komandnim trakama i u meniju "Više" možete vidjeti standardna dugmad, kao što su "Kreiraj", "Kopiraj", "Uredi" itd.

Kliknite na sliku za povećanje.

A u obliku objekta pojavila su se dugmad "Sačuvaj" i "Sačuvaj i zatvori":

Kao što vidite, sada je rad sa eksternim izvorima sličan radu sa direktorijumima, dokumentima itd.

Razmotrite koje su promjene napravljene na nivou metapodataka kako bi se omogućilo pisanje u eksterne izvore podataka.

Novo svojstvo je dodano u tablicu podataka Samo čitanje(tip - boolean).

Ako je ovo svojstvo postavljeno na True, upisivanje podataka u ovu tablicu putem platforme nije moguće.

Polje tabele podataka sada ima sljedeća svojstva:

  • Samo čitanje(tip - boolean) – da li je moguće promijeniti podatke u ovom polju;
  • AllowNull(tip - boolean) - da li je moguće pohraniti NULL vrijednost u ovo polje.

Nekretnina Samo čitanje treba postaviti na Tačno za polja baze podataka sa automatska promena, automatski generirana ključna polja, izračunata polja itd.

Možete dodavati, mijenjati i brisati podatke u vanjskim izvorima koristeći ugrađeni jezik.

Za ovo, objekti ExternalDataSourceTableRecordSet I ExternalDataSourceTableObject implementirane su nove metode Pisati() I Izbriši().

Razmotrite primjer programskog dodavanja novog zapisa za eksterni izvor podataka o kojem smo gore govorili.

&AtClient
Procedura Kreirajte programski(komanda )
Kreirajte programski na serveru();
EndProcedure &OnServer

Procedura Kreirajte programski na serveru()
WritableObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WritableObject.description= “Ormar” ;
writableObject.price= 5000 ;
WritableObject.Write();
EndProcedure

U modulu objekta tablice vanjskog izvora podataka, sada možete postaviti rukovaoce događajima pisanja, kao što je Prije pisanja(), OnRecord() itd.:

U ovom članku razmatrane su dvije opcije za upisivanje podataka u eksterne izvore podataka – korištenjem pohranjenih procedura i korištenjem novih mehanizama platforme 8.3.5.

Dakle, platforma sada implementira mehanizme za punu integraciju sa eksternim aplikacijama.

U verziji 8.3.6, gore opisana funkcionalnost je proširena novim posebne metode GetChangableFields() i SetChangableFields(). Uz pomoć njih moguće je izvršiti operaciju pisanja u ona polja VIEW tablice koja su u konfiguratoru označena kao samo za čitanje. Zahvaljujući tome, postalo je moguće implementirati scenario u kojem je upisivanje u pojedina polja VID tabele moguće samo u onim slučajevima kada je to neophodno u skladu sa poslovnom logikom aplikacije.

U verziji 8.3.7, poboljšan je mehanizam koji određuje koja specifična polja VIEW tabela mogu sadržavati NULL vrijednosti. Do ove tačke, sve VIEW tabele su mogle uzeti ovu vrijednost. Ova promjena je posljedica povećanja brzine sortiranja u dinamičke liste na ovim poljima.

U izdanju 8.3.8 konačno je moguće utvrditi da li je vanjski izvor podataka u transakcijskom stanju. Ovu funkcionalnost pruža nova metoda ExternalDataSourceManager.TransactionActive()

U zaključku napominjemo da su za eksterne izvore podataka, kao što je gore prikazano, opisane tabele podataka iz klasičnog relacionog modela. Platforma koristi drugačiju paradigmu za rad sa podacima, nudeći programeru određeni skup tipova aplikativnih objekata (priručnici, dokumenti, registri, itd.). Zbog toga sistem, kada radi sa tabelama eksternih izvora podataka, ne podržava većinu funkcionalnosti koje su inherentne njegovim „nativnim“ objektima. Stoga se preporučuje suzdržati se od razvoja neke vrste poslovne logike, uzimajući u obzir korištenje VID tabela, ako to nije povezano sa zadacima integracije sa već postojeći sistemi. Ili, jednostavno rečeno, trebali biste pokušati izbjeći pohranjivanje podataka koji se aktivno koriste u vašoj aplikaciji u nekoj drugoj tablici. eksterni sistem ako ih ovaj sistem ne koristi.

U sljedećem članku ćemo razmotriti logičan nastavak korištenja tehnologije vanjskih izvora podataka u sistemu 1C:Enterprise.

Radite s njima na listama u 1C Enterprise modu.

Međutim, u radu se često javlja situacija kada se dio podataka pohrani negdje drugdje.

  • Online prodavnica (obično pohranjuje podatke u eksternoj MySQL/SQL bazi podataka)
  • Druga baza.

Da biste radili s takvim podacima koji su pohranjeni u drugim bazama podataka, morate razviti posebne mehanizme.

U verziji 1C 8.2.14 pojavio se novi pod nazivom 1C External Data Sources, koji uvelike olakšava rad programera, jer:

  • sada nema potrebe za stvaranjem posebnih mehanizama za dobijanje podataka
  • takvim podacima se može pristupiti
  • takvi podaci se mogu vidjeti u 1C listama.
    • Eksterni izvor podataka 1C - eksterna baza SQL

      Recimo da imamo SQL bazu podataka koja pohranjuje podatke koji su nam potrebni. Pokušajmo iz njega pročitati podatke pomoću mehanizma 1C vanjskog izvora podataka.

      Dodajmo vanjski izvor podataka 1C. Morate otići u konfigurator, vanjski izvori podataka se nalaze u prozoru za konfiguraciju, na samom dnu stabla.

      1. Povezivanje

      Dodajmo novi eksterni izvor podataka 1C, nazovimo ga proizvoljno.

      Baza podataka je sastavljena od tabela. Moramo ih dodati unutar dodanog vanjskog izvora podataka. Kliknite desnim tasterom miša na njega i izaberite Dodaj tabelu.

      Prvi put će od vas tražiti da unesete niz veze. Može se unijeti ručno ili formirati, za što je potrebno kliknuti na dugme “…”.

      Kao drajver u našem konkretnom slučaju, izabraćemo "SQL Server"

      Popunimo osnovne parametre za povezivanje na SQL. Ime servera se može uneti ili izabrati sa liste.

      1C će se povezati na SQL i zatražiti od vas da odaberete određenu bazu podataka sa liste.

      Nakon toga, 1C će prikazati listu tabela u ovoj bazi podataka i njihovih kolona. Potrebno je da izaberete potrebne tabele sa potvrdnim okvirima.

      Tabele i kolone će biti dodane. Imena će biti onakva kakva su definirana u udaljenoj bazi podataka. U 1C ih možete preimenovati (u svojstvima).

      Evo primjera dodane tabele:

      Evo primjera dodane kolone:

      Da bi 1C platforma radila s vanjskom tablicom na isti način kao i sa 1C direktorijima, u tablici se mogu navesti dodatni parametri:

      • U svojstvu Ključno polje navedite jednu od kolona koja će pružiti jedinstvenu identifikaciju reda; ako višestruki nizovi pružaju jedinstvenost, onda ovuda ne radi (analog polja Code)
      • U svojstvu polja Prikaz navedite jednu od kolona koja će pružiti kratku reprezentaciju niza (analog polja Name)
      • U svojstvu tipa podataka tablice navedite podatke objekta.

      2. Pogled

      Veza sa udaljenom bazom podataka se ne uspostavlja automatski. Da biste se povezali, morate odabrati tipičan meni.

      U branši Standard se nalazi specijalni tim Upravljanje vanjskim izvorima podataka, koje vam omogućava da odredite parametre veze (sopstvene za 1C Enterprise mod) i povežete se.

      Prvo morate odrediti parametre za povezivanje s bazom podataka.

      Kada ste izvršili konfiguraciju u konfiguratoru, on vam je kao rezultat pokazao niz veze. Možete ga ponovo vidjeti klikom na Dodaj tabelu u konfiguratoru.

      Kopirajte niz veze i navedite ga u 1C Enterprise modu.

      Nakon toga, potrebno je da uspostavite stvarnu vezu.

      Nakon uspostavljanja veze, moguć je rad sa listama.

      3. Koristite u 1C jeziku

      Povezivanje se može izvršiti i iz programskog koda na 1C jeziku.

      Parametri veze su specificirani na sljedeći način:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = istina;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "lozinka";
      ConnectionParameters.ConnectionString = "niz veze iz konfiguratora";
      ConnectionParameters.DBMS = "MSSQLServer";

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

      Možete tražiti podatke iz baze podataka koristeći uobičajeni . Primjer teksta upita za vanjski izvor OurExternalSource i tablesExternalSourceTable:

      SELECT
      ExternalSource Table.FieldName
      OD
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Eksterni izvor podataka 1C - rad s Excel datotekom

      Pokušajmo drugu opciju - rad s Excel datotekom preko vanjskog 1C izvora podataka.

      Kreirajmo jednostavnu Excel datoteku.

      Dodajmo eksterni izvor, proizvoljno ga nazovimo FileExcel. Dodajte joj tabelu "Sheet1 $". Kao što vidite, ovo je naziv lista u Excelu sa dodatkom simbola “$”.

      Kao iu slučaju SQL-a, dodajmo kolone. Mogu se dodati ručno. Važno je osigurati da se tipovi dodanih kolona podudaraju, inače ćete kasnije dobiti grešku poput "Nepodudaranje vrste podataka".

      Za kolonu morate navesti ime u 1C i ime u izvoru podataka.

      Za Excel postoji funkcija (greška poput "Premalo parametara. Zahtijeva 3"):

      • Ako je prvi red Excel tabele nalaze se nazivi kolona, ​​tada samo trebate navesti ime ove kolone, na primjer, "Šifra".
      • U suprotnom, morate navesti puno ime sa imenom tabele “Sheet1$.Code”, ali dodati “HDR=NO;” u parametre.

      Parametri veze za Excel datoteku izgledaju ovako:

      • XLSX fajlovi (Office verzija 2007 i novije)
        Vozač=( Microsoft Excel Drajver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS fajlovi (ranije)
        Driver=(Microsoft Excel drajver (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Morate navesti svoje ime i putanju do datoteke.

U verziji 8 programa 1C programeri su dodali funkcionalnosti mogućnost povezivanja baza podataka trećih strana i dobivanja informacija od njih direktno iz konfiguratora, bez korištenja COM veza i OLE objekata. Ova funkcija je implementirana pomoću novog objekta - "Vanjski izvori podataka"

Vanjski izvori podataka u 1C mogu se koristiti na isti način kao i ostale sistemske tablice:

  1. Prilikom kreiranja izvještaja i proračuna korištenjem sistema za sastav podataka (ACS);
  2. Da biste dobili veze do informacija pohranjenih u izvorima trećih strana;
  3. Za promjenu podataka pohranjenih u tabelama;
  4. Prilikom postavljanja zahtjeva.

Važno je znati da ovaj mehanizam nije dizajniran za rad s drugim 1C bazama podataka, jer sam model rada 1C.Enterprise ne podrazumijeva smetnje u podacima na nivou fizičkih tabela.

Kreiranje novog izvora

Dodavanje novog eksternog izvora u program se dešava u režimu "Konfigurator". Postoji odgovarajuća grana u stablu konfiguracije (slika 1)

Morat ćete se oznojiti kada kreirate novi izvor, uprkos činjenici da forma novog objekta ima samo četiri kartice:

  1. Basic;
  2. Podaci;
  3. Funkcije;
  4. Prava.

Prva kartica ima samo jedan zanimljiv parametar - način kontrole zaključavanja. Ako ne postavljate pitanja o blokiranju podataka u transakcijama, o zamršenostima paraleliziranja tokova informacija, ovaj parametar možete ostaviti u automatskom načinu blokiranja. Međutim, ovaj pristup može dovesti do prevelikih ograničenja (na primjer, kada umjesto jednog zapisa program zaključa cijelu fizičku tablicu, lišavajući druge korisnike mogućnosti rada s njom).

Upravljane brave, za razliku od automatskih, koriste mehanizam transakcije koji je ugrađen u sam program, a ne u DBMS, što vam omogućava da prenesete snimke tablica na mnogo više nizak nivo.

Postavljanjem ovog parametra na "Automatic and Managed", dajemo sistemu mogućnost da odredi koji način će koristiti upućivanjem direktno na odgovarajuće svojstvo svake određene tabele.

Kartica podataka u obrascu za svojstva eksternog izvora

Forma kartice „Podaci“ prikazana je na Sl. 2

Rice. 2

Ovdje možemo dodati vanjske izvorne tabele i kocke. Postoje dva načina za dodavanje tabele:

  1. Ručno, tada ćemo vidjeti obrazac za dodavanje tabele (slika 3);

Rice. 3

  1. Ili izaberite sa liste fizičkih izvornih tabela (slika 4), u ovom slučaju se pred nama otvara poseban konstruktor.

Rice. 4

Pogledajmo bliže obrazac za dodavanje tabele. Svojstvo "Name" se koristi za jedinstvenu identifikaciju objekta u konfiguraciji.

Poređenje objekta metapodataka i konačne fizičke tabele odvija se kroz svojstvo "Naziv u izvoru podataka" koje se nalazi na kartici "Napredno" (slika 5)

Rice. pet

Zatim moramo odrediti tip tabele, odnosno njenu objektivnost. Ako se podaci pohranjeni u strukturi mogu jednoznačno identificirati kroz bilo koje polje, tabela može biti tabela objekata. Ako je identitet zapisa određen skupom ključnih polja, tabela mora imati ne-objektni tip.

Uspoređujući takve tabele s drugim objektima metapodataka, možemo povući sljedeću analogiju:

  • Tabele objekata su referentne knjige;
  • Neobjektivni su registri informacija.

Skup ključnih polja definira se u sljedećem parametru obrasca ("Ključna polja"). Ovo polje je obavezno, ako ga ostavite praznim, rezultirat će greškom pri spremanju konfiguracije.

Kao što vidite na slici 5, neka polja i dugmad obrasca nisu dostupna za uređivanje:

  • Izraz u izvoru podataka;
  • Tip podataka tabele;
  • View field;
  • Pogledajte rukovaoce.

Mogu se koristiti tek nakon što popunimo polja tabele, definišemo njihov tip i postavimo njihove identifikatore (slika 6)

Rice. 6

Ovdje treba obratiti pažnju na opciju "Allow Null", ako je ovo polje označeno, nije poželjno koristiti takvo polje kao ključ.

Konstruktor stola

Možda je najvažnija i najzanimljivija točka u radu s vanjskim izvorima stvaranje niza veze. Njegov konstruktor se otvara kada kliknete na dugme sa tri tačke pored parametra "Connection string".

Prije svega, od nas će biti zatraženo da odlučimo o drajveru koji će se koristiti za povezivanje (slika 7)

Rice. 7

Pogrešna definicija ovog parametra neće vam omogućiti da se povežete sa trećom stranom baza podataka. Također treba imati na umu da se svi upravljački programi navedeni u padajućoj listi ne mogu koristiti za automatsko generiranje niza veze. Ako je platforma dala grešku (slika 8), tada će se niz veza morati ručno napisati.

Fig.8

Rice. devet

Sama linija je strogo uređena konstrukcija.

Primjer niza veze

Uzmite u obzir bazu podataka treće strane kreiranu u Microsoft Access i nalazi se u korijenu diska D. Za povezivanje ove baze moramo koristiti odgovarajući drajver, ali odabirom istog u konstruktoru linija dolazi do greške Sl.8.

Parametre veze ćemo napisati sami.

Driver=(Microsoft Access Driver (*.mdb)) - ovako izgleda prvi deo linije. IN kovrčave zagrade definisali smo drajver.

Za Excel fajlovi izgledat će ovako (Microsoft Excel Driver (*.xls)) , za Excel datoteke kreirane u kancelariji starije od 2003, linija drajvera će izgledati (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, * .xlsb )).

Odvajajući ovaj parametar od sljedećeg tačkom i zarezom, moramo napisati adresu našeg skladišta (u našem slučaju, DBQ=D:\Database1.mdb).

Dodavanjem ova dva parametra dobijamo Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, upisujući ovaj parametar, dobijamo pristup internim strukturama ove baze podataka.

Za objekat "Spoljni izvor" nije dovoljno samo kreirati ga u konfiguraciji, već mora biti povezan i u režimu "Enterprises". To se može učiniti iz menija "Sve funkcije"->Spoljni izvori. Kada prvi put uđemo u našu tabelu, moramo napisati isti niz veze već u "Enterprise" modu.

Zašto je ova prilika od takvog interesa? Svaka osoba koja je programirala u 1C prilično je upoznata sa SQL-om i barem općenito upoznata s arhitekturom i principima razvoja drugih tehnoloških platformi za poslovne aplikacije sa sigurnošću će vam reći šta mu se najviše sviđa u 1C. Naravno, graditelj upita je najpogodniji i najpromišljeniji mehanizam za pisanje upita za dobijanje podataka iz relacionih struktura koji sam lično ikada sreo. A sada nam je 1C dao tako divnu priliku da ga koristimo ne samo sa 1C, već i sa bilo kojim drugim stolovima. Evo samo gomile "mušice" ulivene u ovo "bure meda". Sve po redu:

1) Postavljanje i korištenje- bez "plesa s tamburom" neće raditi
a) Dodajte vanjski izvor podataka - čini se da nije ništa komplikovano
b) označite kućicu "Izaberite sa liste" - neophodno je - ovo je neophodno kako biste provjerili performanse na početku i spasili vas od nepotrebnih problema
c) - obavezno pritisnite "..." - veza je ODBC. Ne OLEDB kao što smo svi navikli, već jedan nivo niže

D) Ovdje budite VEOMA PAŽLJIVI.

Ovo je ODBC drajver - ako koristite verziju klijent-server, ona mora biti na serveru. Ako razvijate na jednom sistemu, a radite na drugom (kao što je obično slučaj), pazite da ne budete iznenađeni. Čudna preporuka, ali odaberite najstariji ili najčešći drajver ako niste posebno zabrinuti za brzinu i ne namjeravate ići izvan granica standarda SQL92. Ovo će vam dati najbolju kompatibilnost. Na primjer, za SQL Server 2008, najbolji drajver bi bio SQL Server Native Client 11, ali preporučujem da odaberete samo SQL Server, inače će ovaj vrlo izvorni klijent morati biti instaliran ili na serveru ili na svim klijentskim mašinama (u slučaju korištenja verzije datoteke), a dobitak je poseban jer vam jednostavno neće dati posao.
e) Standardni dijalozi za odabir servera

E) Preporučujem da na pitanje čuvanja lozinke odgovorite sa "da", inače neće uspjeti započeti ovaj posao.
g) Odaberite tabelu i detalje... odlična prilika - možete je odmah preimenovati kako želite (a i detalje), dok ćete u svojstvima vidjeti nazive polja izvora podataka

H) I sad pokrenete, otvorite dizajner upita - glupo birate sve zapise iz tabele i OPA - greška. šta da radim? Ako imate upravljani interfejs, pogledajte servisni meni, a ako imate normalan...
Ja sam lično koristio ovaj kod:
Code 1C v 8.x Parameters = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = istina;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=baza podataka";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Možda neki komadi nisu potrebni, ali radi.
Morate izvršiti kod JEDNOM. Nakon toga će se normalno povezati...mistika naravno - zašto je to bilo potrebno nije jasno...

2) Izvori podataka samo za čitanje- Da, čuda se ne dešavaju...ali ponekad želite....

3) NEMOJTE IH KORISTITI ZAJEDNO SA INTERNIM IZVORIMA PODATAKA
Mene je lično ta činjenica ubila na licu mjesta.

Kako to.... sta su cekali i vec su zamislili i lizali kako mi sada u jednom zahtjevu kombinujemo svoje podatke sa 1C, okrenemo - grupišemo, ubacimo u izvještaj, ali nije bilo.. .
Ali naravno, to ne zaustavlja iskusne ljude... koja mi je pomisao pala na pamet? Tako je - privremene tabele:

4) NEMOJTE IH KORISTITI ZAJEDNO SA PRIVREMENIM TABLOVIMA

Ali ovo više ne liči na tehnološke poteškoće, već jako liči na ono što žele da uradimo "da nam život ne izgleda kao raj" :).

5) Može se koristiti samo u SKD priključcima
Za one koji ne znaju, nalazi se u ACS-u na kartici "Veze za skup podataka". Koliko često ih koristite? Zgodno? Očigledno nas žele natjerati da ih češće koristimo. Ali postoji kolona "Stanje veze" i "Parametar veze". Nisam našao primjer njihove upotrebe ni u jednoj tipičnoj konfiguraciji, u dokumentaciji i u Hrustalevoj, nekako sve nije transparentno. Može li mi neko objasniti kako funkcionira "uvjet veze". Ako tamo napišete SourceAttribute = ReceiverRevision, to ne radi. Naravno, uslov se može upisati u polje "Izraz" - u većini slučajeva to je dovoljno... ali nekako nije baš lako.

Ukupno, ovaj problem je ranije riješen negdje ovako:
Kod 1C v 8.x Funkcija InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ako DateCon > "20100101" Onda
DateCon = "20100101";
EndIf;

QN = Novi kvalifikacioni broj(15,2);
cs = NewStringQualifiers(255);

Broj polja = Novi niz();
ArrayNumber.Add(Type("Broj"));

ArrayString = Novi niz();
ArrayString.Add(Type("String"));

ArrayData = Novi niz();
ArrayDate.Add(Type("Date"));

//Knjigovodstveni trošak ćemo popuniti u tabeli
VrstaNumber = NewTypeDescription(NumberNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tablica za učitavanje podataka iz SQL-a
TK = Nova tablica vrijednosti();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Period", TypeDate);

TK.Indices.Add("Period");

// Povezivanje na SQL
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;Korisnički ID=sa;Pwd=;Izvor podataka=;Koristi proceduru za pripremu=1;Auto Translate=True;Packet Size=4096;ID radne stanice=;Koristi šifriranje for Data=False;Tag sa razvrstavanjem kolona kada je moguće=False;Inicijalni katalog=Izvještaji";
Connection = New COMObject("ADODB.Connection");
Naredba = Novi COMObject("ADODB.Command");
RecordSet = Novi COMObject("ADODB.RecordSet");
Datum = "";
Pokušaj
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Veza;
Command.CommandText = "S_elect * iz PH gdje je tačka >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" i tačka<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Izuzetak
Povratak TK;
Kraj pokušaja;

Dok RecordSet.EOF = Lažna petlja
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Red.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Zahtjev = Novi zahtjev();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Datum početka", Datum početka);
Query.SetParameter("DateCon", DateCon);
Query.Text = "ODABIR
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
OD
| &vrDataTable AS vrDataTable
|WHERE
| vrDataTable.Period >= &DateStart
| I vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = Nedefinisano;

Zahtjev = Novi zahtjev;
Query.TempTableManager = VrTable;
Query.Text = "Ovo je upit koji uključuje privremenu tabelu";

Rezultat = Request.Run();
Return Result;

EndFunctions

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

Zapravo, nema mnogo linija koda i prilično su standardne... u ovom slučaju možete koristiti punu funkcionalnost graditelja upita i dati samo funkciju SASTAV PODATAKA u ACS-u

Ali, naravno, izgleda malo ne tako lijepo... i učitavanje u tablicu vrijednosti svaki put kada treba da napišete kod i provjerite jeste li pogriješili u nazivu detalja... inače ono što smo dobili u 1C izgleda nekako polovično. Još nisam odlučio koji je zgodniji za korištenje. Vi odlučujete i pišete o svojim odlukama i šta vas je nagnalo da ih donesete.

Informacije preuzete sa stranice