1c șir de conexiune la sursa de date externă. Surse de date externe. Fila „Date” din formularul proprietăților sursei externe

De ce este această oportunitate atât de interesantă? Orice persoană care a programat în 1C și este destul de familiarizată cu SQL și este cel puțin în general familiarizată cu arhitectura și principiile dezvoltării altor platforme tehnologice pentru aplicații de afaceri vă va spune cu fermitate ce îi place cel mai mult la 1C. Desigur, generatorul de interogări este cel mai convenabil și mai atent mecanism pentru scrierea de interogări pentru preluarea datelor 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. Doar că acest „butoi de miere” are o mulțime de „muște în unguent”. Să începem cu începutul:

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

D) Dar aici fiți 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 vă așteaptă nicio surpriză. O recomandare ciudată, dar alegeți cel mai vechi sau cel mai comun driver dacă nu vă îngrijorează în mod deosebit viteza și nu intenționați să depășiți capacitățile standardului SQL92. Acest lucru vă va oferi o compatibilitate mai bună. De exemplu, pentru SQL Server 2008, cel mai bun driver va 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 (dacă se utilizează versiunea fișierului), iar beneficiul este special pentru simplu, el nu vă va oferi nicio sarcină.
e) Dialogurile de selectare a serverului standard

și DB

f) Vă recomand să răspundeți „da” la întrebarea despre salvarea parolei, altfel nu veți putea începe acest lucru.
g) Selectați tabelul și detaliile... o oportunitate minunată - îl puteți redenumi imediat după bunul plac (și detaliile de asemenea), iar în proprietăți veți vedea numele câmpurilor sursei de date


h) Acum îl lansați, deschideți designerul de interogări - selectați prost toate înregistrările din tabel și OPA - o eroare. Ce să fac? Dacă aveți o interfață gestionată, uitați-vă la meniul de service, iar dacă una obișnuită...
Eu personal am folosit acest cod:
Cod 1C v 8.x Parametri = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.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(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();
Este posibil ca unele piese să nu fie necesare, dar funcționează.
Trebuie să rulați codul O dată. După care va fi normal să ne conectăm... misticism desigur - de ce a fost necesar acest lucru nu este clar...

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

3) NU POT FI UTILIZATE ÎMPREUNĂ CU SURSE INTERNE DE DATE
Personal, acest fapt m-a ucis pe loc.

Cum poate fi asta... ceea ce așteptam și deja ne-am imaginat și ne-am lins buzele despre cum ne vom combina acum datele cu 1C într-o singură solicitare, îl vom restrânge - grupați-l, inserați-l în raport, dar nu este cazul ...
Dar, desigur, acest lucru nu îi oprește pe oamenii experimentați... ce gând mi-a venit în minte? Așa este - tabele temporare:

4) NU POT FI UTILIZATE IMPREUNA CU TABELE TEMPORARE


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

5) Poate fi utilizat numai în conexiuni ACS
Pentru cei care nu știu, acesta se află în ACS în fila „Linkuri seturi de date”. Le folosesti des? Confortabil? Se pare că vor să ne oblige să le folosim mai des. Numai că există o coloană „Condiție de comunicare” și „Parametru de comunicare”. Nu am găsit un exemplu de utilizare a acestora în nicio configurație standard și, cumva, totul nu este transparent nici în documentație, nici în munca lui Khrustaleva. Poate cineva să-mi explice cum funcționează „condiția de conectare”. Dacă scrieți Atribute sursă = Atribute receptor acolo, nu funcționează. Desigur, condiția poate fi scrisă în câmpul „Expresie” - în majoritatea cazurilor este suficient... dar cumva nu funcționează foarte ușor.

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

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Dacă DataCon > „20100101” Atunci
DataCon = "20100101";
endIf;

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

//tabel pentru încărcarea datelor din SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add(„Perioada”, DataType);

TK.Indici.Add(„Perioada”);

//Conectează-te la SQL
Șir de conexiune = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Utilizați procedura pentru Pregătire=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Criptare 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(AbbrLP(ConnectionString));
Command.ActiveConnection = Conexiune;
Command.CommandText = "S_elect * din PH unde punct >= "" + String(Format(StartDate, "DF=aaaaMMzz")) + "" și punct<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Excepție
Returnarea specificațiilor tehnice;
EndTempt;

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

Solicitare = Solicitare nouă();
VrTable = New TemporaryTableManager();

Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Data de începere", Data de începere);
Request.SetParameter("DataCon", DateCon);
Query.Text = „SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Plasați DataTable
|DIN
| &vDataTable AS vrDataTable
|UNDE
| vrDataTable.Period >= &DateStart
| Și vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = nedefinit;

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

Rezultat = Query.Run();
Rezultat returnat;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = Structură nouă();
DataSet.Insert ("Tabel SQL", ExternalSet);
TypicalReports.GenerateTypicalReport(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 designerului de interogări și puteți oferi doar funcția DATA COMPOSITION la ACS

Dar cu siguranță nu arată la fel de frumos... și de fiecare dată când trebuie să scrieți cod pentru a încărca valori într-un tabel și a verifica dacă ați greșit în numele detaliilor... și 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 determinat să le faci.
Autor.

Surse de date externe 1C - un obiect de metadate relativ nou 1C 8.3 și 8.2, cu care este posibilă conectarea la surse de date externe 1C: tabele SQL, Excel, Access, FoxPro (dbf), o altă bază de date 1C, Oracle, Paradox (db) , - și chiar citirea din fișiere txt/csv simple.

Acest lucru oferă multe posibilități cu alte sisteme. Să aruncăm o privire mai atentă.

Configurarea surselor de date externe în 1C 8

Configurarea surselor externe este individuală pentru fiecare tip de sistem. Dar, de regulă, partea generală a configurației este aceeași - aceasta este setarea șirului de conexiune:

Obțineți 267 de lecții video pe 1C gratuit:

Dacă șirul de conexiune este specificat corect, sistemul vă va solicita să selectați tabelul dorit din baza de date. Ca urmare, vom obține un tabel gata făcut în care putem specifica câmpul cheie (un câmp unic) și câmpul de prezentare (cum se va reflecta înregistrarea în 1C):

Utilizarea surselor de date externe în 1C 8.3

Sursele de date externe în 1C pot fi utilizate ca și alte tabele de baze de date. Platforma generează automat un formular pentru ei dacă nu este specificat unul. De asemenea, este posibil să utilizați date din surse externe în interogări.

Versiunea 8.2.14.533 este î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ă, s-a prezentat oportunitatea de a încerca o oportunitate minunată - „surse de date externe”.

De ce este această oportunitate atât de interesantă? Orice persoană care a programat în 1C și este destul de familiarizată cu SQL și este cel puțin în general familiarizată cu arhitectura și principiile dezvoltării altor platforme tehnologice pentru aplicații de afaceri vă va spune cu fermitate ce îi place cel mai mult la 1C. Desigur, generatorul de interogări este cel mai convenabil și mai atent mecanism pentru scrierea de interogări pentru preluarea datelor 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. Doar că acest „butoi de miere” are o mulțime de „muște în unguent”. Să începem cu începutul:

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

A) Adăugați o sursă de date externă - nu pare complicat
b) bifați caseta de selectare „Selectați din listă” - obligatoriu - acest lucru este necesar pentru a verifica funcționalitatea la început și vă va salva de probleme inutile
V)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- asigurați-vă că faceți clic pe „...” - conexiunea este ODBC. Nu OLEDB cum suntem toți obișnuiți, ci cu un nivel mai jos

Dar fii aici FOARTE ATENT.

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 vă așteaptă nicio surpriză. O recomandare ciudată, dar alegeți cel mai vechi sau cel mai comun driver dacă nu vă îngrijorează în mod deosebit viteza și nu intenționați să depășiți capacitățile standardului SQL92. Acest lucru vă va oferi o compatibilitate mai bună. De exemplu, pentru SQL Server 2008, cel mai bun driver va 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 (dacă se utilizează versiunea fișierului), iar beneficiul este special pentru simplu, el nu vă va oferi nicio sarcină.

E) Casete de dialog pentru selectarea serverului standard

G) Selectați tabelul și detaliile... o oportunitate minunată - îl puteți redenumi imediat după bunul plac (și detaliile de asemenea), iar în proprietăți veți vedea numele câmpurilor sursei de date

Z) Și acum îl lansați, deschideți designerul de interogări - selectați prostește toate înregistrările din tabel și OPA - o eroare. Ce să fac? Dacă aveți o interfață gestionată, uitați-vă la meniul de service, iar dacă una obișnuită...
Eu personal am folosit acest cod:

Parametri = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.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(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();

Este posibil ca unele piese să nu fie necesare, dar funcționează. Trebuie să rulați codul O SINGURA DATA. După care va fi normal să ne conectăm... misticism desigur - de ce a fost necesar acest lucru nu este clar...

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

3) NU POT FI UTILIZATE ÎMPREUNĂ CU SURSE INTERNE DE DATE
Personal, acest fapt m-a ucis pe loc.

Cum poate fi asta... ceea ce așteptam și deja ne-am imaginat și ne-am lins buzele despre cum ne vom combina acum datele cu 1C într-o singură solicitare, îl vom restrânge - grupați-l, inserați-l în raport, dar nu este cazul ...

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

4) NU POT FI UTILIZATE IMPREUNA CU TABELE TEMPORARE

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

5) Poate fi utilizat numai în conexiuni ACS

Pentru cei care nu știu, acesta se află în ACS în fila „Linkuri seturi de date”. Le folosesti des? Confortabil? Se pare că vor să ne oblige să le folosim mai des. Numai că există o coloană „Condiție de comunicare” și „Parametru de comunicare”. Nu am găsit un exemplu de utilizare a acestora în nicio configurație standard și, cumva, totul nu este transparent nici în documentație, nici în munca lui Khrustaleva. Poate cineva să-mi explice cum funcționează „condiția de conectare”. Dacă scrieți Atribute sursă = Atribute receptor acolo, nu funcționează. Desigur, condiția poate fi scrisă în câmpul „Expresie” - în majoritatea cazurilor este suficient... dar cumva nu funcționează foarte ușor.

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

Funcția InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Dacă DataCon > „20100101” Atunci
DataCon = "20100101";
endIf;

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

//tabel pentru încărcarea datelor din SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add(„Perioada”, DataType);

TK.Indici.Add(„Perioada”);

//Conectează-te la SQL
Șir de conexiune = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Utilizați procedura pentru Pregătire=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Criptare 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(AbbrLP(ConnectionString));
Command.ActiveConnection = Conexiune;
Command.CommandText = "Selectați * din PH unde punct >= "" + String(Format(DateStart, "DF=aaaaMMzz")) + "" și punct RecordSet = Command.Execute();
RecordSet.MoveFirst();
Excepție
Returnarea specificațiilor tehnice;
EndTempt;

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

Solicitare = Solicitare nouă();
VrTable = New TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Data de începere", Data de începere);
Request.SetParameter("DataCon", DateCon);
Query.Text = „SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Plasați DataTable
|DIN
| &vDataTable AS vrDataTable
|UNDE
| vrDataTable.Period >= &DateStart
| Și vrDataTable.Period Query.Execute();
TZ = nedefinit;

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

Rezultat = Query.Run();
Rezultat returnat;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = Structură nouă();
DataSet.Insert ("Tabel SQL", ExternalSet);
TypicalReports.GenerateTypicalReport(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 designerului de interogări și puteți oferi doar funcția DATA COMPOSITION la ACS

Dar cu siguranță nu arată la fel de frumos... și de fiecare dată când trebuie să scrieți cod pentru a încărca valori într-un tabel și a verifica dacă ați greșit în numele detaliilor... și 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 determinat să le faci.

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

De ce este această oportunitate atât de interesantă? Orice persoană care a programat în 1C și este destul de familiarizată cu SQL și este cel puțin în general familiarizată cu arhitectura și principiile dezvoltării altor platforme tehnologice pentru aplicații de afaceri vă va spune cu fermitate ce îi place cel mai mult la 1C. Desigur, generatorul de interogări este cel mai convenabil și mai atent mecanism pentru scrierea de interogări pentru preluarea datelor 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. Doar că acest „butoi de miere” are o mulțime de „muște în unguent”. Să începem cu începutul:

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

D) Dar aici fiți 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 vă așteaptă nicio surpriză. O recomandare ciudată, dar alegeți cel mai vechi sau cel mai comun driver dacă nu vă îngrijorează în mod deosebit viteza și nu intenționați să depășiți capacitățile standardului SQL92. Acest lucru vă va oferi o compatibilitate mai bună. De exemplu, pentru SQL Server 2008, cel mai bun driver va 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 (dacă se utilizează versiunea fișierului), iar beneficiul este special pentru simplu, el nu vă va oferi nicio sarcină.
e) Dialogurile de selectare a serverului standard

E) Vă recomand să răspundeți „da” la întrebarea despre salvarea parolei, altfel nu veți putea începe această afacere.
g) Selectați tabelul și detaliile... o oportunitate minunată - îl puteți redenumi imediat după bunul plac (și detaliile de asemenea), iar în proprietăți veți vedea numele câmpurilor sursei de date

Z) Și acum îl lansați, deschideți designerul de interogări - selectați prostește toate înregistrările din tabel și OPA - o eroare. Ce să fac? Dacă aveți o interfață gestionată, uitați-vă la meniul de service, iar dacă una obișnuită...
Eu personal am folosit acest cod:
Cod 1C v 8.x Parametri = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.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(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();
Este posibil ca unele piese să nu fie necesare, dar funcționează.
Trebuie să rulați codul O dată. După care va fi normal să ne conectăm... misticism desigur - de ce a fost necesar acest lucru nu este clar...

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

3) NU POT FI UTILIZATE ÎMPREUNĂ CU SURSE INTERNE DE DATE
Personal, acest fapt m-a ucis pe loc.

Cum poate fi asta... ceea ce așteptam și deja ne-am imaginat și ne-am lins buzele despre cum ne vom combina acum datele cu 1C într-o singură solicitare, îl vom restrânge - grupați-l, inserați-l în raport, dar nu este cazul ...
Dar, desigur, acest lucru nu îi oprește pe oamenii experimentați... ce gând mi-a venit în minte? Așa este - tabele temporare:

4) NU POT FI UTILIZATE IMPREUNA CU TABELE TEMPORARE

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

5) Poate fi utilizat numai în conexiuni ACS
Pentru cei care nu știu, acesta se află în ACS în fila „Linkuri seturi de date”. Le folosesti des? Confortabil? Se pare că vor să ne oblige să le folosim mai des. Numai că există o coloană „Condiție de comunicare” și „Parametru de comunicare”. Nu am găsit un exemplu de utilizare a acestora în nicio configurație standard și, cumva, totul nu este transparent nici în documentație, nici în munca lui Khrustaleva. Poate cineva să-mi explice cum funcționează „condiția de conectare”. Dacă scrieți Atribute sursă = Atribute receptor acolo, nu funcționează. Desigur, condiția poate fi scrisă în câmpul „Expresie” - în majoritatea cazurilor este suficient... dar cumva nu funcționează foarte ușor.

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

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Dacă DataCon > „20100101” Atunci
DataCon = "20100101";
endIf;

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

//tabel pentru încărcarea datelor din SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add(„Perioada”, DataType);

TK.Indici.Add(„Perioada”);

//Conectează-te la SQL
Șir de conexiune = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Utilizați procedura pentru Pregătire=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Criptare 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(AbbrLP(ConnectionString));
Command.ActiveConnection = Conexiune;
Command.CommandText = "S_elect * din PH unde perioada >= "" + String(Format(DateStart, "DF=aaaaMMzz"))) + "" și punct<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Excepție
Returnarea specificațiilor tehnice;
EndTempt;

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

Solicitare = Solicitare nouă();
VrTable = New TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Data de începere", Data de începere);
Request.SetParameter("DataCon", DateCon);
Query.Text = „SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Plasați DataTable
|DIN
| &vDataTable AS vrDataTable
|UNDE
| vrDataTable.Period >= &DateStart
| Și vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = nedefinit;

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

Rezultat = Query.Run();
Rezultat returnat;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = Structură nouă();
DataSet.Insert ("Tabel SQL", ExternalSet);
TypicalReports.GenerateTypicalReport(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 designerului de interogări și puteți oferi doar funcția DATA COMPOSITION la ACS

Dar cu siguranță nu arată la fel de frumos... și de fiecare dată când trebuie să scrieți cod pentru a încărca valori într-un tabel și a verifica dacă ați greșit în numele detaliilor... și 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 determinat să le faci.

Informatii preluate de pe site

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

Cu toate acestea, în muncă există adesea o situație în care 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 stocate în alte baze de date, trebuie dezvoltate 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 în mod obișnuit
  • astfel de date pot fi vizualizate în liste 1C.
    • Sursă de date externă 1C – bază de date SQL externă

      Să presupunem că avem o bază de date SQL în care sunt stocate 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 1C externă. 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, denumim-o în mod 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 generat făcând clic pe butonul „…”.

      În cazul nostru specific, vom selecta „SQL Server” ca driver

      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 se va oferi să selecteze o anumită bază de date din listă.

      După aceasta, 1C va afișa o listă de tabele din această bază de date și coloanele acestora. Trebuie să bifați casetele pentru a selecta tabelele necesare.

      Vor fi adăugate tabele și coloane. Numele vor fi aceleași cu cele 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, puteți specifica parametri suplimentari în tabel:

      • În proprietatea Câmp cheie, specificați una dintre coloanele care va furniza o identificare unică a rândului; dacă mai multe linii oferă unicitate, atunci această metodă nu funcționează (analog cu câmpul Cod)
      • În proprietatea Câmp de prezentare, specificați una dintre coloanele care va oferi o scurtă reprezentare a liniei (analog cu câmpul Nume)
      • În proprietatea Tip de date tabel, specificați Date obiect.

      2. Vizualizare

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

      În ramura Standard există o comandă specială Gestionarea surselor de date externe, care vă permite să specificați parametrii de conectare (specifici modului 1C Enterprise) și să realizați o conexiune.

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

      Când ai făcut setările î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ăugare tabel în configurator.

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

      După aceasta, 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.GetGeneralConnectionParameters();

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

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

      Puteți interoga date dintr-o bază de date folosind un . Un exemplu de text de interogare pentru o sursă externă OurExternalSource și tabelele ExternalSource Table:

      ALEGE
      ExternalSourceTable.FieldName
      DIN
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Sursă de date externă 1C - lucrul cu fișierul 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. Să adăugăm tabelul „Sheet1$”. După cum puteți vedea cu ușurință, 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 pe care le adăugați se potrivesc, altfel s-ar putea să primiți ulterior o eroare precum „Nepotrivire tip de date”.

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

      Există o caracteristică pentru Excel (eroare precum „Prea puțini parametri. Sunt necesari 3”):

      • Dacă primul rând al unui tabel Excel conține nume de coloane, atunci trebuie să indicați pur și simplu 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 conexiune pentru fișierul Excel arată astfel:

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