Surse de date externe 1c 8.3 excel. Surse de date externe

Versiunea 8.2.14.533 - în sfârșit o versiune mai mult sau mai puțin stabilă a celei de-a 14-a lansări a platformei. În cele din urmă, a existat șansa de a încerca o oportunitate minunată - „surse de date externe”.

De ce această ocazie trezește un asemenea interes? Orice persoana care a programat in 1C este destul de familiarizata cu SQL si cel putin in termeni generali familiarizata cu arhitectura si principiile dezvoltarii altor platforme tehnologice pentru aplicatii de business iti va spune cu certitudine ferma ce ii place cel mai mult in 1C. Desigur, generatorul de interogări este cel mai convenabil și mai atent mecanism pentru scrierea de interogări pentru obținerea de date din structuri relaționale pe care le-am întâlnit personal vreodată. Și acum 1C ne-a oferit o oportunitate atât de minunată de a-l folosi nu numai cu 1C, ci și cu orice alte mese. Iată doar o grămadă de „muscă în unguent” turnate în acest „butoi de miere”. Totul in ordine:

1) Configurare și utilizare - fără „dans cu tamburin” nu va funcționa

A) Adăugați sursă externă date - ca nimic complicat
b) bifați caseta „Selectați din listă” - este necesar - acest lucru este necesar pentru a verifica performanța la început și pentru a vă salva de probleme inutile
în)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- asigurați-vă că apăsați „...” - conexiunea este ODBC. Nu OLEDB cum suntem toți obișnuiți, ci cu un nivel mai jos

Și fii aici FOARTE ATENȚI.

Acesta este un driver ODBC - dacă utilizați versiunea client-server, acesta trebuie să fie pe server. Dacă dezvoltați pe un sistem și lucrați pe altul (cum este de obicei cazul), asigurați-vă că nu aveți surprize. O recomandare ciudată, dar alegeți cel mai vechi sau cel mai comun șofer dacă nu vă preocupă în mod deosebit viteza și nu intenționați să depășiți limitele standardului SQL92. Acest lucru vă va oferi cea mai bună compatibilitate. De exemplu, pentru SQL Server 2008 cel mai bun sofer va exista SQL Server Native Client 11, dar recomand să alegeți doar SQL Server, altfel acest client nativ va trebui instalat fie pe server, fie pe toate mașinile client (dacă utilizați versiunea fișierului), iar plata este specială pentru sarcini simple el nu va face.

E) Casete de dialog pentru selectarea serverului standard

G) Alegeți un tabel și detalii... o oportunitate grozavă - îl puteți redenumi imediat după bunul plac (și detaliile de asemenea), în timp ce în proprietăți veți vedea numele câmpurilor sursei de date

H) Și acum rulați, deschideți designerul de interogări - selectați prost toate înregistrările din tabel și OPA - o eroare. Ce sa fac? Dacă ai o interfață gestionată, uită-te în meniul de service, iar dacă ai una normală...
Eu personal am folosit acest cod:

Parametri = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parametri.AuthenticationStandard = adevărat;
Parameters.UserName = "sa";
Parametri.Parola = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();

Poate că unele piese nu sunt necesare, dar funcționează. Trebuie să rulați cod O SINGURA DATA. După aceea, se va conecta în mod normal ... misticism desigur - de ce a fost necesar nu este clar ...

2) Surse de date numai pentru citire
Da, miracolele nu se întâmplă... dar uneori vrei să....

3) NU LE UTILIZAȚI ÎMPREUNĂ CU SURSE INTERNE DE DATE
Personal, acest fapt m-a ucis pe loc.

Cum este .... ceea ce am așteptat și ne-am imaginat deja și am lins cum acum, într-o singură solicitare, vom combina datele noastre cu 1C, îl vom dezactiva - îl grupăm, îl inserăm în raport, dar nu a fost Acolo ...

Dar, desigur, acest lucru nu îi oprește pe oameni cu experiență... ce gând mi-a venit în minte? Așa este - tabele temporare:

4) NU LE UTILIZAȚI ÎMPREUNĂ CU TABELE TEMPORARE

Dar asta nu mai arată a dificultăților tehnologice, ci seamănă foarte mult cu ceea ce vor ei să facem „ca viața să nu pară un paradis” (IMG :) .

5) Poate fi utilizat numai în conexiuni SKD

Pentru cei care nu știu, se află în ACS din fila „Link-uri seturi de date”. Cât de des le folosiți? Convenabil? Se pare că vor să ne oblige să le folosim mai des. Dar există o coloană „Condiție link” și „Parametru link”. Nu am găsit un exemplu de utilizare a lor în nicio configurație tipică, în documentație și nici în Khrustaleva, cumva totul nu este transparent. Poate cineva să-mi explice cum funcționează „condiția linkului”. Dacă scrieți SourceAttribute = ReceiverRevision acolo, nu funcționează. Desigur, condiția poate fi scrisă în câmpul „Expresie” - în cele mai multe cazuri este suficient... dar cumva nu este foarte ușor.

În total, această problemă a fost rezolvată anterior undeva astfel:

Funcția InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Dacă DateCon > „20100101” Atunci
DateCon = "20100101";
EndIf;

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("Number");

ArrayString = New Array();
ArrayString.Add(Type(„String”));

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

//Vom completa costul contabil în tabel
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabel pentru a încărca date din SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add(„Perioada”, TypeDate);

TK.Indices.Add(„Perioada”);

// Conectați-vă la SQL
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Utilizați procedura pentru Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption pentru Date=False;Etichetă cu colaţionarea coloanelor atunci când este posibil=Fals;Catalog iniţial=Rapoarte";
Conexiune = New COMObject("ADODB.Connection");
Comanda = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Data = "";
Atentat, încercare
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Conexiune;
Command.CommandText = "Selectați * din PH unde punct >= "" + String(Format(DateStart, "DF=aaaaMMzz")) + "" și punct RecordSet = Command.Execute();
RecordSet.MoveFirst();
O exceptie
Returnarea TK;
Sfârșitul încercării;

În timp ce RecordSet.EOF = buclă falsă
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Solicitare = Solicitare nouă();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = „SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| DE LA
| &vrDataTable AS vrDataTable
|UNDE
| vrDataTable.Period >= &DateStart
| Și vrDataTable.Period Query.Execute();
TK = nedefinit;

Solicitare = Solicitare nouă;
Query.TempTableManager = VrTable;
Query.Text = "Iată o interogare care implică un tabel temporar";

Rezultat = Request.Run();
Rezultat returnat;

EndFunctions

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

De fapt, nu există multe linii de cod și sunt destul de standard... în acest caz, puteți utiliza întreaga funcționalitate a generatorului de interogări și puteți oferi doar funcția COMPOZIȚIE DE DATE în ACS

Dar, desigur, arată puțin nu atât de frumos ... și încărcând în tabelul de valori de fiecare dată trebuie să scrieți codul și să verificați dacă ați greșit în numele detaliilor ... altfel ceea ce ni s-a dat în 1C pare cumva cu jumătate de inimă. Încă nu m-am hotărât care este mai convenabil de utilizat. Tu decizi și scrie despre deciziile tale și despre ce te-a împins să le iei.

[trebuie să vă înregistrați pentru a vedea linkul]

Începând cu versiunea 8.3.5, platforma implementează capacitatea de a scrie date în tabele de surse de date externe. Articolul are în vedere această funcționalitate, care extinde posibilitățile existente de integrare a configurației cu sisteme terțe.

Aplicabilitate

Articolul discută platforma 1C 8.3.5. Materialul este, de asemenea, relevant pentru lansările actuale ale platformei.

Scrierea către surse de date externe în 1C:Enterprise 8

În platforma 8.2.14, a fost adăugat arborele de metadate obiect nou– surse externe de date. Scopul acestui mecanism este de a obține date din baze de date externe în legătură cu 1C.

Odată cu lansarea noilor versiuni ale platformei, sursele externe de date au evoluat, de exemplu, a devenit posibilă plasarea lor în tabele temporare, realizarea de asocieri cu tabele obișnuite.

În acest articol, ne vom uita la ce instrumente are un dezvoltator pentru a scrie în surse de date externe.

Toate acțiunile au fost efectuate pe SGBD-ul Microsoft SQL Server 2008 R2.

În platforma 8.3.4, a fost implementată capacitatea de a utiliza funcțiile descrise în sursele de date externe.

Această caracteristică vă permite să rulați proceduri stocate pe partea SQL Server și, cu ajutorul lor, să accesați date din surse externe, inclusiv pentru scriere.

Să luăm un exemplu. Să creăm o nouă bază de date cu numele kursy_test folosind SQL Management Studio. Toate experimentele ulterioare vor fi efectuate pe el.

În această bază de date, vom crea un tabel de nomenklatură, pentru aceasta vom scrie un script cu următorul conținut:

USE [kursy_test]
MERGE
CREATE TABLE [ dbo ] . [nomenklatura](
[ id ] [ int ] NOT NULL ,
[ descriere ] [ nvarchar ](150 ) NOT NULL ,
[ preț ] [ numeric ](15 , 2 ) NULL ,
CONSTRAINT [ PK_id ] CHEIE PRIMARĂ ([ id ])
MERGE

În urma execuției, va fi creat un tabel cu următoarea structură:

Acum trebuie să creăm două proceduri stocate care vor fi folosite pentru a modifica datele.

Să numim prima procedură insert_nomenklatura. Va fi conceput pentru a adăuga linie nouă la masă. Scriptul pentru a-l crea va arăta astfel:

USE [kursy_test]
MERGE
CREATE PROCEDURE insert_nomenklatura
@id int ,
@description nvarchar(150 ),
@pricenumeric (15 , 2 )
LA FEL DE
ÎNCEPE
INSERT INTO [kursy_test].dbo. [ nomenklatura ] ([ id ], [ descriere ] ,[ preț ])
VALORI (@id , @description , @price )
SFÂRȘIT
MERGE

A doua procedură, denumită update_nomenklatura, va actualiza o înregistrare care există deja în tabel. Pentru a-l crea, a fost rulat următorul script:

În Object Browser, tabelul generat și două proceduri stocate arată astfel:

Am finalizat toți pașii pregătitori pe partea Microsoft SQL Server, acum mergem la configuratorul 1C:Enterprise 8.

Creăm o nouă sursă externă de date numită Nomenklatura. Când creăm un tabel nou în această sursă de date, specificăm următorii parametri pentru conectarea la sursa de date:

Șirul de conexiune este următorul:

Driver = (SQL Server) ; Server =(local); Baza de date = cursy_test ; User Id = sa ; parola=;

Dacă utilizatorul sa are o parolă, aceasta trebuie specificată în parametrul Parolă din șirul de conexiune.

Dacă toți parametrii de conexiune sunt specificați corect, când faceți clic pe OK, se va deschide o fereastră care conține tabele disponibile în sursa de date:

Bifăm câmpurile care ne interesează în tabel. Când apăsați un buton Gata tabelul dbo_nomenklatura va fi creat în sursa externă de date Nomenklatura:

Acum trecem la fila „Funcții” a sursei noastre de date.

Folosind un expert similar, adăugăm două proceduri stocate:

Primim următorul aspect filele „Funcții”:

Acum hai să programăm interfața cu utilizatorul pentru a lucra cu o sursă de date externă.

Sub forma unei liste pe panoul de comandă, plasați butonul „Adăugați” cu următorul handler:

&AtClient
Procedura Add().
alert = nou Descrierealerte(„OpenTableFinish”, ThisObject );
OpenForm (
„ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
Alerta, FormWindowOpenModeForm.LockAllInterface);
EndProcedure

&AtClient
Salvare procedură (comandă)
SaveOnServer();
EndProcedure &OnServer
Procedură SaveOnServer()
Dacă Obiect.Referință.Gol() Apoi
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
In caz contrar
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
EndIf ;
EndProcedure

În modul întreprindere, formularul de listă arată astfel:

Forma obiectului este prezentată mai jos:

Click pe imagine pentru marire.

Astfel, folosind proceduri stocate, am implementat scrierea în surse externe de date.

În platforma 8.3.5, a apărut o nouă caracteristică - scrierea directă către surse de date externe, ocolind mecanismul procedurilor stocate discutat mai sus.

Datele pot fi editate atât programatic, cât și interactiv. Și pentru exemplul nostru, nu trebuie să apelați la configurare.

În barele de comandă și în meniul „Mai multe”, puteți vedea butoanele standard, precum „Creare”, „Copiere”, „Editare”, etc.

Click pe imagine pentru marire.

Și sub forma obiectului, au apărut butoanele „Salvare” și „Salvare și închidere”:

După cum puteți vedea, acum lucrul cu surse externe este similar cu lucrul cu directoare, documente etc.

Luați în considerare ce modificări au fost făcute la nivel de metadate pentru a face posibilă scrierea în surse de date externe.

O nouă proprietate a fost adăugată la tabelul de date Doar lectură(tip - boolean).

Dacă această proprietate este setată la True, nu este posibilă scrierea datelor în acest tabel prin intermediul platformei.

Câmpul tabelului de date are acum următoarele proprietăți:

  • Doar lectură(tip - boolean) – este posibilă modificarea datelor din acest câmp;
  • AllowNull(tip - boolean) - dacă este posibilă stocarea valorii NULL în acest câmp.

Proprietate Doar lectură ar trebui setat la Adevărat pentru câmpurile bazei de date cu schimbare automată, câmpuri cheie generate automat, câmpuri calculate etc.

Puteți adăuga, modifica și șterge date din surse externe folosind limbajul încorporat.

Pentru aceasta, obiectele ExternalDataSourceTableRecordSetȘi ExternalDataSourceTableObject au fost implementate noi metode Scrie()Și Șterge().

Luați în considerare un exemplu de adăugare programatică a unei noi înregistrări pentru sursa externă de date discutată mai sus.

&AtClient
Procedură Creați programatic(Comandă)
Creați programatic pe server();
EndProcedure &OnServer

Procedură Creați programatic pe server()
WritableObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WritableObject.description= „Dulap” ;
writableObject.price= 5000 ;
WritableObject.Write();
EndProcedure

În modulul de obiect tabel al unei surse de date externe, acum puteți seta handlere de evenimente de scriere, cum ar fi Înainte de a scrie (), Oficial() etc.:

În acest articol, au fost luate în considerare două opțiuni pentru scrierea datelor în surse externe de date - utilizarea procedurilor stocate și utilizarea noilor mecanisme ale platformei 8.3.5.

Astfel, platforma implementează acum mecanisme de integrare deplină cu aplicațiile externe.

În versiunea 8.3.6, funcționalitatea descrisă mai sus a fost extinsă cu noi metode speciale GetChangableFields() și SetChangableFields(). Cu ajutorul acestora, este posibilă efectuarea unei operații de scriere în acele câmpuri din tabelul VIEW care sunt marcate în configurator ca doar citire. Datorită acestui fapt, a devenit posibilă implementarea unui scenariu în care scrierea în câmpurile individuale ale tabelului VID este posibilă numai în acele cazuri în care este necesar în conformitate cu logica de afaceri a aplicației.

În versiunea 8.3.7, a fost îmbunătățit un mecanism care determină ce câmpuri specifice ale tabelelor VIEW pot conține valori NULL. Până în acest moment, toate tabelele VIEW ar putea lua această valoare. Această modificare se datorează creșterii vitezei de sortare în liste dinamice pe aceste domenii.

În versiunea 8.3.8, este în sfârșit posibil să se determine dacă o sursă de date externă se află într-o stare tranzacțională. Această funcționalitate este oferită de noua metodă ExternalDataSourceManager.TransactionActive()

În concluzie, observăm că pentru sursele de date externe, așa cum se arată mai sus, sunt descrise tabele de date din modelul relațional clasic. Platforma folosește o paradigmă diferită pentru lucrul cu date, oferind dezvoltatorului un anumit set de tipuri de obiecte de aplicație (cărți de referință, documente, registre etc.). Acesta este motivul pentru care sistemul, atunci când lucrează cu tabele de surse de date externe, nu acceptă majoritatea funcționalității care sunt inerente obiectelor sale „native”. Prin urmare, se recomandă să se abțină de la dezvoltarea unui fel de logică de afaceri, ținând cont de utilizarea tabelelor VID, dacă aceasta nu are legătură cu sarcinile de integrare cu deja sistemele existente. Sau, în termeni simpli, ar trebui să încercați să evitați stocarea datelor care sunt utilizate în mod activ în aplicația dvs. într-un alt tabel. sistem extern dacă nu sunt utilizate de acest sistem.

În articolul următor, vom lua în considerare continuarea logică a utilizării tehnologiei surselor de date externe în sistemul 1C:Enterprise.

Lucrați cu ei în liste în modul 1C Enterprise.

Cu toate acestea, la locul de muncă, apare adesea o situație când o parte din date este stocată în altă parte.

  • Magazin online (de obicei stochează date într-o bază de date MySQL/SQL externă)
  • O altă bază.

Pentru a lucra cu astfel de date care sunt stocate în alte baze de date, trebuie să dezvoltați mecanisme speciale.

În versiunea 1C 8.2.14, a apărut una nouă numită 1C External Data Sources, care facilitează foarte mult munca programatorului, deoarece:

  • acum nu mai este nevoie să se creeze mecanisme speciale pentru obținerea datelor
  • astfel de date pot fi accesate de
  • astfel de date pot fi vizualizate în liste 1C.
    • Sursă de date externă 1C - bază externă SQL

      Să presupunem că avem o bază de date SQL care stochează datele de care avem nevoie. Să încercăm să citim datele din acesta folosind mecanismul 1C External Data Source.

      Să adăugăm o sursă de date externă 1C. Trebuie să mergeți la configurator, sursele de date externe sunt situate în fereastra de configurare, în partea de jos a arborelui.

      1. Conexiune

      Să adăugăm o nouă sursă externă de date 1C, să o numim arbitrar.

      Baza de date este formată din tabele. Trebuie să le adăugăm în sursa externă de date adăugată. Faceți clic dreapta pe el și selectați Adăugare tabel.

      Prima dată, vă va solicita să furnizați un șir de conexiune. Poate fi introdus manual sau format, pentru care trebuie să faceți clic pe butonul „…”.

      Ca driver în cazul nostru particular, vom selecta „SQL Server”

      Să completăm parametrii de bază pentru conectarea la SQL. Numele serverului poate fi introdus sau selectat din listă.

      1C se va conecta la SQL și vă va solicita să selectați o anumită bază de date din listă.

      După aceea, 1C va afișa o listă de tabele din această bază de date și coloanele acestora. Trebuie să selectați tabelele necesare cu casete de selectare.

      Vor fi adăugate tabele și coloane. Numele vor fi așa cum sunt definite în baza de date la distanță. În 1C le puteți redenumi (în proprietăți).

      Iată un exemplu de tabel adăugat:

      Iată un exemplu de coloană adăugată:

      Pentru ca platforma 1C să funcționeze cu un tabel extern în același mod ca și cu directoarele 1C, în tabel pot fi specificați parametri suplimentari:

      • În proprietatea Câmp cheie, specificați una dintre coloanele care va furniza identificarea unică a rândului; dacă mai multe șiruri oferă unicitate, atunci Pe aici nu funcționează (analogul câmpului Cod)
      • În proprietatea câmpului Vizualizare, specificați una dintre coloanele care va oferi o scurtă reprezentare a șirului (analogul câmpului Nume)
      • În proprietatea Tip de date Tabel, specificați Date obiect.

      2. Vizualizare

      Conexiunea la baza de date la distanță nu se face automat. Pentru a vă conecta, trebuie să selectați un meniu tipic.

      În ramura se află Standard echipa speciala Gestionarea surselor de date externe, care vă permite să specificați parametrii de conectare (proprii pentru modul 1C Enterprise) și să vă conectați.

      Mai întâi trebuie să specificați parametrii pentru conectarea la baza de date.

      Când ai făcut configurarea în configurator, ți-a arătat șirul de conexiune ca rezultat. Îl puteți vedea din nou făcând clic din nou pe Adăugați tabel în configurator.

      Copiați șirul de conexiune și specificați-l în modul 1C Enterprise.

      După aceea, trebuie să faceți conexiunea reală.

      După ce se realizează conexiunea, este posibil să se lucreze cu liste.

      3. Utilizare în limbajul 1C

      Conexiunea se poate face și din codul programului în limbajul 1C.

      Parametrii de conectare sunt specificați după cum urmează:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = adevărat;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = „parolă”;
      ConnectionParameters.ConnectionString = "șir de conexiune din configurator";
      ConnectionParameters.DBMS = "MSSQLServer";

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

      Puteți interoga datele din baza de date folosind obișnuitul . Un exemplu de text de interogare pentru o sursă externă OurExternalSource și tablesExternalSourceTable:

      SELECTAȚI
      ExternalSource Table.FieldName
      DIN
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Sursă de date externă 1C - lucrul cu un fișier Excel

      Să încercăm o altă opțiune - lucrul cu un fișier Excel printr-o sursă de date 1C externă.

      Să creăm un fișier Excel simplu.

      Să adăugăm o sursă externă, numim-o în mod arbitrar FileExcel. Adăugați tabelul „Sheet1 $” la acesta. După cum puteți vedea, acesta este numele foii în Excel cu adăugarea simbolului „$”.

      Ca și în cazul SQL, să adăugăm coloane. Ele pot fi adăugate manual. Este important să vă asigurați că tipurile de coloane adăugate se potrivesc, în caz contrar, este posibil să primiți o eroare precum „Tip de date nepotrivire” mai târziu.

      Pentru coloană, trebuie să specificați numele în 1C și numele în sursa de date.

      Pentru Excel, există o caracteristică (o eroare precum „Prea puțini parametri. Necesită 3”):

      • Dacă prima linie tabele Excel numele coloanelor sunt localizate, atunci trebuie doar să specificați numele acestei coloane, de exemplu, „Cod”.
      • În caz contrar, trebuie să specificați numele complet cu numele tabelului „Sheet1$.Code”, dar adăugați „HDR=NO;” în parametri.

      Parametrii de conectare pentru un fișier Excel arată astfel:

      • Fișiere XLSX (versiunea Office 2007 și o versiune ulterioară)
        Șofer=( Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • Fișiere XLS (fost)
        Driver=(Driver Microsoft Excel (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Trebuie să specificați propriul nume și calea către fișier.

În versiunea 8 a programului 1C, dezvoltatorii au adăugat la funcționalitate posibilitatea de a conecta baze de date terțe și de a obține informații de la acestea direct din configurator, fără a utiliza conexiuni COM și obiecte OLE. Această caracteristică este implementată folosind un nou obiect - „Surse de date externe”

Sursele de date externe din 1C pot fi utilizate în același mod ca și restul tabelelor de sistem:

  1. La crearea de rapoarte și calcule folosind un sistem de compoziție a datelor (ACS);
  2. Pentru a obține link-uri către informații stocate în surse terțe;
  3. Pentru a modifica datele stocate în tabele;
  4. La efectuarea cererilor.

Este important de știut că acest mecanism nu este conceput pentru a funcționa cu alte baze de date 1C, deoarece modelul de operare 1C.Enterprise în sine nu implică interferențe cu datele la nivelul tabelelor fizice.

Crearea unei noi surse

Adăugarea unei noi surse externe la program are loc în modul „Configurator”. Există o ramură corespunzătoare în arborele de configurare (Fig. 1)

Va trebui să transpirați când creați o nouă sursă, în ciuda faptului că forma noului obiect are doar patru file:

  1. De bază;
  2. Date;
  3. Funcții;
  4. Drepturile.

Prima filă are un singur parametru interesant - modul de control al blocării. Dacă nu puneți întrebări despre blocarea datelor în tranzacții, despre complexitatea paralelizării fluxurilor de informații, puteți lăsa acest parametru în modul de blocare automată. Cu toate acestea, această abordare poate duce la restricții excesive (de exemplu, atunci când în loc de o singură înregistrare, programul blochează întregul tabel fizic, privând alți utilizatori de capacitatea de a lucra cu acesta).

Încuietori gestionate, spre deosebire de cele automate, folosesc mecanismul de tranzacție încorporat în programul în sine, și nu în DBMS, ceea ce vă permite să transferați capturi de tabel în mult mai mult nivel scăzut.

Setând acest parametru la „Automat și gestionat”, dăm sistemului posibilitatea de a determina ce mod să folosească, referindu-ne direct la proprietatea corespunzătoare fiecărui tabel specific.

Fila de date din formularul proprietăților sursei externe

Forma filei „Date” este prezentată în Fig. 2

Orez. 2

Aici putem adăuga tabele și cuburi surse externe. Există două moduri de a adăuga un tabel:

  1. Manual, apoi vom vedea formularul pentru adăugarea unui tabel (Fig. 3);

Orez. 3

  1. Sau selectați din lista tabelelor sursă fizice (Fig. 4), în acest caz se deschide în fața noastră un constructor special.

Orez. 4

Să aruncăm o privire mai atentă la formularul pentru adăugarea unui tabel. Proprietatea „Nume” este utilizată pentru a identifica unic un obiect din configurație.

Comparația dintre obiectul de metadate și tabelul fizic final are loc prin proprietatea „Nume în sursa de date” situată în fila „Adițional” (Fig. 5)

Orez. cinci

În continuare, trebuie să stabilim tipul mesei, sau mai degrabă obiectivitatea acestuia. Dacă datele stocate în structură pot fi identificate în mod unic prin orice câmp, tabelul poate fi un tabel cu obiecte. Dacă identitatea înregistrării este determinată de un set de câmpuri cheie, tabelul trebuie să aibă un tip non-obiect.

Comparând astfel de tabele cu alte obiecte de metadate, putem trage următoarea analogie:

  • Tabelele cu obiecte sunt cărți de referință;
  • Neobiective sunt registrele de informații.

Setul de câmpuri cheie este definit în următorul parametru de formular ("Câmpuri cheie"). Acest câmp este obligatoriu, lăsându-l necompletat va avea ca rezultat o eroare la salvarea configurației.

După cum puteți vedea din Fig.5, unele câmpuri și butoane de formular nu sunt disponibile pentru editare:

  • Exprimarea în sursa de date;
  • Tipul de date din tabel;
  • Câmp de vizualizare;
  • Vizualizați handlere.

Ele pot fi folosite doar după ce completăm câmpurile din tabel, definim tipul și stabilim identificatorii lor (Fig. 6)

Orez. 6

Aici ar trebui să acordați atenție opțiunii „Allow Null”, dacă această casetă este bifată, un astfel de câmp nu este de dorit să fie folosit ca cheie.

Constructor de tabel

Poate cel mai important și interesant punct în lucrul cu surse externe este crearea unui șir de conexiune. Constructorul său se deschide când faceți clic pe butonul cu trei puncte de lângă parametrul „Șir de conexiune”.

În primul rând, ni se va cere să decidem asupra driverului care va fi folosit pentru conectare (Fig. 7)

Orez. 7

Definirea incorectă a acestui parametru nu vă va permite să vă conectați la o terță parte baza de informatii. De asemenea, trebuie înțeles că nu toți driverele specificate în lista derulantă pot fi folosite pentru a genera automat un șir de conexiune. Dacă platforma a dat o eroare (Fig. 8), atunci șirul de conexiune va trebui scris manual.

Fig.8

Orez. nouă

Linia în sine este o construcție strict reglementată.

Exemplu de șir de conexiune

Luați în considerare o bază de date terță parte creată în Microsoft Accessși situat în rădăcina unității D. Pentru a conecta această bază, trebuie să folosim driverul corespunzător, dar alegerea lui în constructorul de linie duce la o eroare Fig.8.

Vom scrie singuri parametrii de conectare.

Driver=(Microsoft Access Driver (*.mdb)) - așa arată prima parte a liniei. ÎN acolade am definit soferul.

Pentru Fișiere Excel va arăta ca (Microsoft Excel Driver (*.xls)) , pentru fișierele Excel create în birou mai vechi de 2003, șirul de driver va arăta ca (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, * .xlsb )).

Separând acest parametru de următorul cu punct și virgulă, trebuie să scriem adresa stocării noastre (în cazul nostru, DBQ=D:\Database1.mdb).

Adăugând acești doi parametri, obținem Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, scriind acest parametru, obținem acces la structurile interne ale acestei baze de date.

Pentru obiectul „Sursă externă”, nu este suficient doar să îl creați în configurație, trebuie să fie conectat și în modul „Întreprinderi”. Acest lucru se poate face din meniul „Toate funcțiile”->Surse externe. Când intrăm prima dată în tabelul nostru, trebuie să scriem același șir de conexiune deja în modul „Enterprise”.

De ce este această oportunitate atât de interesantă? Orice persoana care a programat in 1C este destul de familiarizata cu SQL si cel putin in termeni generali familiarizata cu arhitectura si principiile dezvoltarii altor platforme tehnologice pentru aplicatii de business iti va spune cu certitudine ferma ce ii place cel mai mult in 1C. Desigur, generatorul de interogări este cel mai convenabil și mai atent mecanism pentru scrierea de interogări pentru obținerea de date din structuri relaționale pe care le-am întâlnit personal vreodată. Și acum 1C ne-a oferit o oportunitate atât de minunată de a-l folosi nu numai cu 1C, ci și cu orice alte mese. Iată doar o grămadă de „muscă în unguent” turnate în acest „butoi de miere”. Totul in ordine:

1) Configurare și utilizare- fără „dans cu tamburin” nu va funcționa
a) Adăugați o sursă de date externă - nu pare nimic complicat
b) bifați caseta „Selectați din listă” - este necesar - acest lucru este necesar pentru a verifica performanța la început și pentru a vă salva de probleme inutile
c) - asigurați-vă că apăsați „...” - conexiunea este ODBC. Nu OLEDB cum suntem toți obișnuiți, ci cu un nivel mai jos

D) Fiți FOARTE ATENȚI aici.

Acesta este un driver ODBC - dacă utilizați versiunea client-server, acesta trebuie să fie pe server. Dacă dezvoltați pe un sistem și lucrați pe altul (cum este de obicei cazul), asigurați-vă că nu aveți surprize. O recomandare ciudată, dar alegeți cel mai vechi sau cel mai comun șofer dacă nu vă preocupă în mod deosebit viteza și nu intenționați să depășiți limitele standardului SQL92. Acest lucru vă va oferi cea mai bună compatibilitate. De exemplu, pentru SQL Server 2008, cel mai bun driver ar fi SQL Server Native Client 11, dar recomand să alegeți doar SQL Server, altfel acest client foarte nativ va trebui instalat fie pe server, fie pe toate mașinile client (în cazul de folosire a versiunii de fișier), iar câștigul este special pentru simplu, el nu vă va oferi un loc de muncă.
e) Casete de dialog pentru selectarea serverului standard

E) Recomand să răspundeți „da” la întrebarea de salvare a parolei, altfel nu va funcționa pentru a începe această afacere.
g) Alegeți un tabel și detalii... o oportunitate grozavă - îl puteți redenumi imediat după bunul plac (și detaliile de asemenea), în timp ce în proprietăți veți vedea numele câmpurilor sursei de date

H) Și acum rulați, deschideți designerul de interogări - selectați prost toate înregistrările din tabel și OPA - o eroare. Ce sa fac? Dacă ai o interfață gestionată, uită-te în meniul de service, iar dacă ai una normală...
Eu personal am folosit acest cod:
Cod 1C v 8.x Parametri = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parametri.AuthenticationStandard = adevărat;
Parameters.UserName = "sa";
Parametri.Parola = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Poate că unele piese nu sunt necesare, dar funcționează.
Trebuie să executați codul O dată. După aceea, se va conecta în mod normal ... misticism desigur - de ce a fost necesar nu este clar ...

2) Surse de date numai pentru citire- Da, miracolele nu se întâmplă... dar uneori vrei să...

3) NU LE UTILIZAȚI ÎMPREUNĂ CU SURSE INTERNE DE DATE
Personal, acest fapt m-a ucis pe loc.

Cum este .... ceea ce am așteptat și ne-am imaginat deja și am lins cum acum, într-o singură solicitare, vom combina datele noastre cu 1C, îl vom dezactiva - îl grupăm, îl inserăm în raport, dar nu a fost Acolo ...
Dar, desigur, acest lucru nu îi oprește pe oameni cu experiență... ce gând mi-a venit în minte? Așa este - tabele temporare:

4) NU LE UTILIZAȚI ÎMPREUNĂ CU TABELE TEMPORARE

Dar asta nu mai arată a dificultăți tehnologice, ci seamănă foarte mult cu ceea ce vor ei să facem „ca viața să nu pară un paradis” :).

5) Poate fi utilizat numai în conexiuni SKD
Pentru cei care nu știu, se află în ACS din fila „Link-uri seturi de date”. Cât de des le folosiți? Convenabil? Se pare că vor să ne oblige să le folosim mai des. Dar există o coloană „Condiție link” și „Parametru link”. Nu am găsit un exemplu de utilizare a lor în nicio configurație tipică, în documentație și nici în Khrustaleva, cumva totul nu este transparent. Poate cineva să-mi explice cum funcționează „condiția linkului”. Dacă scrieți SourceAttribute = ReceiverRevision acolo, nu funcționează. Desigur, condiția poate fi scrisă în câmpul „Expresie” - în cele mai multe cazuri este suficient... dar cumva nu este foarte ușor.

În total, această problemă a fost rezolvată anterior undeva astfel:
Cod 1C v 8.x Funcția InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Dacă DateCon > „20100101” Atunci
DateCon = "20100101";
EndIf;

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("Number");

ArrayString = New Array();
ArrayString.Add(Type(„String”));

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

//Vom completa costul contabil în tabel
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabel pentru a încărca date din SQL
TK = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add(„Perioada”, TypeDate);

TK.Indices.Add(„Perioada”);

// Conectați-vă la SQL
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Utilizați procedura pentru Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption pentru Date=False;Etichetă cu colaţionarea coloanelor atunci când este posibil=Fals;Catalog iniţial=Rapoarte";
Conexiune = New COMObject("ADODB.Connection");
Comanda = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Data = "";
Atentat, încercare
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Conexiune;
Command.CommandText = "S_elect * din PH unde perioada >= "" + String(Format(DateStart, "DF=aaaaMMzz")) + "" și punct<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
O exceptie
Returnarea TK;
Sfârșitul încercării;

În timp ce RecordSet.EOF = buclă falsă
String = TK.Add();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Solicitare = Solicitare nouă();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = „SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| DE LA
| &vrDataTable AS vrDataTable
|UNDE
| vrDataTable.Period >= &DateStart
| Și vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = nedefinit;

Solicitare = Solicitare nouă;
Query.TempTableManager = VrTable;
Query.Text = "Iată o interogare care implică un tabel temporar";

Rezultat = Request.Run();
Rezultat returnat;

EndFunctions

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

De fapt, nu există multe linii de cod și sunt destul de standard... în acest caz, puteți utiliza întreaga funcționalitate a generatorului de interogări și puteți oferi doar funcția COMPOZIȚIE DE DATE în ACS

Dar, desigur, arată puțin nu atât de frumos ... și încărcând în tabelul de valori de fiecare dată trebuie să scrieți codul și să verificați dacă ați greșit în numele detaliilor ... altfel ceea ce ni s-a dat în 1C pare cumva cu jumătate de inimă. Încă nu m-am hotărât care este mai convenabil de utilizat. Tu decizi și scrie despre deciziile tale și despre ce te-a împins să le iei.

Informatii preluate de pe site