Ārējie datu avoti 1c 8.3 Excel. Ārējie datu avoti

Izlaidums 8.2.14.533 - beidzot vairāk vai mazāk stabila platformas 14. laidiena versija. Visbeidzot bija iespēja izmēģināt brīnišķīgu iespēju - "ārējos datu avotus".

Kāpēc šo iespēju izraisa tādu interesi? Jebkurš cilvēks, kurš ir programmējis 1C, labi pārzina SQL un vismaz vispārīgi pārzina citu biznesa lietojumprogrammu tehnoloģisko platformu izstrādes arhitektūru un principus, ar stingru pārliecību jums pateiks, kas viņam 1C patīk visvairāk. Protams, vaicājumu veidotājs ir ērtākais un pārdomātākais mehānisms vaicājumu rakstīšanai, lai iegūtu datus no relāciju struktūrām, ar kurām esmu personīgi saticis. Un tagad 1C ir devis mums tik brīnišķīgu iespēju to izmantot ne tikai ar 1C, bet arī ar jebkuru citu galdu. Šeit ir tikai ķekars "mušu ziedē", kas ieliets šajā "medus mucā". Viss kārtībā:

1) Uzstādīšana un lietošana - bez "dejošanas ar tamburīnu" neiztiks

A) Pievienot ārējais avots dati - it kā nekas sarežģīts
b) atzīmējiet izvēles rūtiņu "Atlasīt no saraksta" - tas ir nepieciešams - tas ir nepieciešams, lai pārbaudītu veiktspēju sākumā un pasargātu jūs no nevajadzīgām nepatikšanām
iekšā)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- noteikti nospiediet "..." - savienojums ir ODBC. Nevis OLEDB, kā mēs visi esam pieraduši, bet vienu līmeni zemāk

Un esi šeit ĻOTI UZMANĪGI.

Šis ir ODBC draiveris — ja izmantojat klienta-servera versiju, tai ir jābūt serverī. Ja izstrādājat vienu sistēmu un strādājat pie citas (kā tas parasti notiek), pārliecinieties, ka nesaņemat nekādus pārsteigumus. Dīvains ieteikums, bet izvēlieties vecāko vai visizplatītāko draiveri, ja jūs īpaši neuztraucaties par ātrumu un jūs neplānojat pārsniegt SQL92 standarta robežas. Tas nodrošinās vislabāko saderību. Piemēram, SQL Server 2008 labākais braucējs būs SQL Server Native Client 11, bet es iesaku izvēlēties tikai SQL Server, pretējā gadījumā šis vietējais klients būs jāinstalē vai nu serverī vai visās klienta mašīnās (ja izmanto faila versija), un izmaksa ir īpaša vienkāršus uzdevumus viņš to nedarīs.

E) Standarta servera izvēles dialoglodziņi

G) Izvēlies tabulu un detaļas... lieliska iespēja – uzreiz vari to pārdēvēt pēc patikas (un arī detaļas), savukārt rekvizītos redzēsi datu avota lauku nosaukumus

Z) Un tagad palaižat, atveriet vaicājumu noformētāju - jūs stulbi atlasāt visus ierakstus no tabulas un OPA - kļūda. Ko darīt? Ja jums ir pārvaldīts interfeiss, skatieties servisa izvēlnē un, ja jums ir parasts...
Es personīgi izmantoju šo kodu:

Parametri = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL serveris);SERVER=servets;UID=sa;PWD=;DATU BĀZE=datubāze";
Parameters.DBMS = "MSSQLServeris";

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

ExternalDataSources.DAX.SetConnection();

Varbūt daži gabali nav vajadzīgi, bet tas darbojas. Nepieciešams palaist kodu VIENREIZ. Pēc tam pieslēgsies normāli... mistika protams - kāpēc tas bija vajadzīgs nav skaidrs...

2) Tikai lasāmi datu avoti
Jā, brīnumi nenotiek... bet dažreiz gribas...

3) NEIZMANTOJIET TOS KOPĀ AR IEKŠĒJIEM DATU AVOTIEM
Mani personīgi šis fakts nogalināja uz vietas.

Kā ir .... ko mēs gaidījām un jau esam iztēlojušies un laizījuši kā mēs tagad vienā pieprasījumā apvienosim savus datus ar 1C, izslēgsim - sagrupēsim, ievietosim atskaitē, bet nebija tur...

Bet, protams, tas neaptur pieredzējušus cilvēkus... kāda doma ienāca prātā? Tieši tā - pagaidu tabulas:

4) NELIETOJIET TOS KOPĀ AR PAGAIDU GALDIEM

Bet tas vairs neizskatās pēc tehnoloģiskām grūtībām, bet ļoti izskatās pēc tā, ko viņi vēlas, lai mēs darītu, "lai dzīve nešķistu paradīze" (IMG :) .

5) Var izmantot tikai SKD savienojumos

Tiem, kas nezina, tas ir ACS cilnē "Datu kopu saites". Cik bieži jūs tos lietojat? Ērti? Acīmredzot viņi vēlas piespiest mūs tos izmantot biežāk. Bet ir kolonna "Saites nosacījums" un "Saites parametrs". Es neatradu piemēru to izmantošanai nevienā tipiskā konfigurācijā, dokumentācijā un arī Khrustalevā, kaut kā viss nav pārredzams. Vai kāds var man paskaidrot, kā darbojas "saites nosacījums". Ja tur ierakstāt SourceAttribute = ReceiverRevision, tas nedarbojas. Protams, nosacījumu var ierakstīt laukā "Izteiksme" - vairumā gadījumu tas ir pietiekami ... bet kaut kā tas nav ļoti viegli.

Kopumā šī problēma iepriekš tika atrisināta šādi:

Funkcija InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ja DateCon > "20100101" Tad
DateCon = "20100101";
EndIf;

QN = jauni kvalifikāciju skaits(15,2);
cs = NewStringQalifiers(255);

ArrayNumber = jauns masīvs();
ArrayNumber.Add(Tips("Numurs"));

ArrayString = jauns masīvs();
ArrayString.Add(Type("String"));

ArrayData = jauns masīvs();
ArrayDate.Add(Tips("Datums"));

//Grāmatvedības pašizmaksu aizpildīsim tabulā
TypeNumber = JaunsTipsApraksts(masīvaNumurs,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabula datu ielādei no SQL
TK = jauna vērtību tabula();
TK.Columns.Add("Nomenklatūras kods", TypeString);
TK.Columns.Add("Daudzums", TypeNumber);
TK.Columns.Add("Periods", TipsDatums);

TK.Indices.Add("Periods");

// Izveidojiet savienojumu ar SQL
ConnectionString = "Provider=SQLOLEDB.1;Pastāv drošības informācija=True;Lietotāja ID=sa;Pwd=;Datu avots=;Izmantojiet sagatavošanas procedūru=1;Automātiskā tulkošana=True;Paketes izmērs=4096;Darbastacijas ID=;Izmantojiet šifrēšanu for Data=False;Atzīme ar kolonnu salīdzināšanu, ja iespējams=False;Sākotnējais katalogs=Atskaites";
Savienojums = jauns COMObject("ADODB.Savienojums");
Komanda = jauns COMObject("ADODB.Command");
RecordSet = jauns COMObject("ADODB.RecordSet");
Datums = "";
Mēģinājums
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = savienojums;
Command.CommandText = "Atlasiet * no PH, kur punkts >= "" + String(Formāts(DatumsSākums, "DF=ggggMMdd")) + "" un punkts RecordSet = Command.Execute();
RecordSet.MoveFirst();
Izņēmums
TK atgriešana;
Mēģinājuma beigas;

Kamēr RecordSet.EOF = viltus cilpa
Virkne = TK.Pievienot();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Vērtība;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Vērtība;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Vērtība;
RecordSet.MoveNext();
EndCycle;

Pieprasījums = Jauns pieprasījums();
VrTabula = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Sākuma datums", Sākuma datums);
Query.SetParameter("DateCon", DateCon);
Query.Text = "ATLASĪT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| NO
| &vrDataTable AS vrDataTable
|KUR
| vrDataTable.Period >= &DateStart
| Un vrDataTable.Period Query.Execute();
TK = Nedefinēts;

Pieprasījums = jauns pieprasījums;
Query.TempTableManager = VrTable;
Query.Text = "Šeit ir vaicājums, kas saistīts ar pagaidu tabulu";

Rezultāts = Request.Run();
Atgriešanas rezultāts;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = Jauna struktūra();
DataSet.Insert("SQL tabula", ārējā kopa);
GenericReports.Generate GenericReport (šis objekts, rezultāts, atšifrēšanas dati, izvades uz pārskata veidlapu, datu kopa);

Patiesībā koda rindu nav daudz, un tās ir diezgan standarta ... šajā gadījumā varat izmantot pilnu vaicājumu veidotāja funkcionalitāti un ACS sniegt tikai funkciju DATA SASTĀVS.

Bet, protams, tas izskatās nedaudz ne tik skaisti ... un, augšupielādējot vērtību tabulā katru reizi, jums ir jāraksta kods un jāpārbauda, ​​​​vai detaļu nosaukumā neesat kļūdījies ... citādi tas, ko mums iedeva 1C, izskatās kaut kā puslīdz. Vēl neesmu izlēmis, kuru lietot ērtāk. Jūs izlemjat un rakstiet par saviem lēmumiem un to, kas pamudināja jūs tos pieņemt.

[lai skatītu saiti ir jāreģistrējas]

Sākot ar versiju 8.3.5, platforma ievieš iespēju ierakstīt datus ārējo datu avotu tabulās. Rakstā aplūkota šī funkcionalitāte, kas paplašina esošās iespējas konfigurācijas integrēšanai ar trešo pušu sistēmām.

Piemērojamība

Rakstā ir apskatīta platforma 1C 8.3.5. Materiāls attiecas arī uz pašreizējām platformas izlaidumiem.

Rakstīšana uz ārējiem datu avotiem 1C:Enterprise 8

Platformā 8.2.14 tika pievienots metadatu koks jauns objekts– ārējie datu avoti. Šī mehānisma mērķis ir iegūt datus no ārējām datu bāzēm saistībā ar 1C.

Līdz ar platformas jauno izlaidumu iznākšanu ir attīstījušies ārējie datu avoti, piemēram, ir radusies iespēja tos ievietot pagaidu tabulās, veikt savienojumus ar parastajām tabulām.

Šajā rakstā mēs apskatīsim, kādi rīki izstrādātājam ir rakstīšanai uz ārējiem datu avotiem.

Visas darbības tika veiktas Microsoft SQL Server 2008 R2 DBVS.

Platformā 8.3.4 tika ieviesta iespēja izmantot ārējos datu avotos aprakstītās funkcijas.

Šī funkcija ļauj palaist SQL Server pusē saglabātās procedūras un ar to palīdzību piekļūt datiem no ārējiem avotiem, tostarp rakstīšanai.

Ņemsim piemēru. Izmantojot SQL Management Studio, izveidosim jaunu datu bāzi ar nosaukumu kursy_test. Visi turpmākie eksperimenti tiks veikti ar to.

Šajā datu bāzē mēs izveidosim nomenklatūras tabulu, kurai mēs uzrakstīsim skriptu ar šādu saturu:

IZMANTOT [kursy_test]
AIZIET
IZVEIDOT TABULU [dbo]. [nomenklatūra](
[id] [int] NOT NULL,
[apraksts] [nvarchar](150) NOT NULL,
[cena ] [ciparu ](15, 2) NULL,
IEROBEŽOJUMS [ PK_id ] PRIMĀRĀ ATSLĒGA ([ id ])
AIZIET

Izpildes rezultātā tiks izveidota tabula ar šādu struktūru:

Tagad mums ir jāizveido divas saglabātās procedūras, kas tiks izmantotas datu modificēšanai.

Sauksim pirmo procedūru par insert_nomenklatura. Tas tiks izstrādāts, lai pievienotu jauna līnija pie galda. Skripts tā izveidei izskatīsies šādi:

IZMANTOT [kursy_test]
AIZIET
IZVEIDOT PROCEDŪRU insert_nomenklatura
@id int ,
@description nvarchar(150),
@pricenumeric (15 , 2 )
AS
SĀKT
INSERT INTO [kursy_test].dbo. [ nomenklatūra ] ([ id ], [ apraksts ] , [ cena ])
VĒRTĪBAS (@id , @description , @price )
BEIGAS
AIZIET

Otrā procedūra ar nosaukumu update_nomenklatura atjauninās ierakstu, kas jau pastāv tabulā. Lai to izveidotu, tika palaists šāds skripts:

Objektu pārlūkprogrammā ģenerētā tabula un divas saglabātās procedūras izskatās šādi:

Mēs esam pabeiguši visas sagatavošanās darbības Microsoft SQL Server pusē, tagad mēs ejam uz 1C: Enterprise 8 konfiguratoru.

Mēs izveidojam jaunu ārējo datu avotu ar nosaukumu Nomenklatūra. Veidojot jaunu tabulu šajā datu avotā, mēs norādām šādus parametrus savienojumam ar datu avotu:

Savienojuma virkne ir šāda:

Draiveris = (SQL serveris) ; Serveris =(lokālais ); Datu bāze = cursy_test ; Lietotāja ID = sa ; parole=;

Ja lietotājam ir parole, tā ir jānorāda savienojuma virknes parametrā Parole.

Ja visi savienojuma parametri ir norādīti pareizi, noklikšķinot uz Labi, tiks atvērts logs ar datu avotā pieejamām tabulām:

Tabulā atzīmējam mūs interesējošos laukus. Kad nospiežat pogu Gatavs tabula dbo_nomenklatura tiks izveidota Nomenklatūras ārējā datu avotā:

Tagad mēs pārslēdzamies uz mūsu datu avota cilni “Funkcijas”.

Izmantojot līdzīgu vedni, mēs pievienojam divas saglabātās procedūras:

Mēs saņemam nākamo izskats cilnes “Funkcijas”:

Tagad ieprogrammēsim lietotāja interfeiss strādāt ar ārēju datu avotu.

Komandu paneļa saraksta veidā ievietojiet pogu “Pievienot” ar šādu apdarinātāju:

&AtClient
Add() procedūra
brīdinājums = jauns Apraksts Alerts(“OpenTableFinish”, ThisObject );
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
Brīdinājums, FormWindowOpenModeForm.LockAllInterface);
Beigās Procedūra

&AtClient
Saglabāšanas procedūra (komanda)
SaveOnServer();
EndProcedure &OnServer
Procedūra SaveOnServer()
Ja Objekts.Atsauce.Tukšs() Tad
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Citādi
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
EndIf ;
Beigās Procedūra

Uzņēmuma režīmā saraksta forma izskatās šādi:

Objekta forma ir parādīta zemāk:

Noklikšķiniet uz attēla, lai to palielinātu.

Tādējādi, izmantojot saglabātās procedūras, esam ieviesuši rakstīšanu uz ārējiem datu avotiem.

Platformā 8.3.5 ir parādījusies jauna iespēja - rakstīšana uz ārējiem datu avotiem tieši, apejot iepriekš apspriesto saglabāto procedūru mehānismu.

Datus var rediģēt gan programmatiski, gan interaktīvi. Un mūsu piemēram, jums nav jāizmanto konfigurācija.

Komandjoslās un izvēlnē "Vairāk" var redzēt standarta pogas, piemēram, "Izveidot", "Kopēt", "Rediģēt" utt.

Noklikšķiniet uz attēla, lai to palielinātu.

Un objekta formā parādījās pogas “Saglabāt” un “Saglabāt un aizvērt”:

Kā redzat, tagad darbs ar ārējiem avotiem ir līdzīgs darbam ar direktorijiem, dokumentiem utt.

Apsveriet, kādas izmaiņas ir veiktas metadatu līmenī, lai būtu iespējams rakstīt ārējos datu avotos.

Datu tabulai ir pievienots jauns rekvizīts Tikai lasīšana(tips - Būla).

Ja šis rekvizīts ir iestatīts uz True, datu ierakstīšana šajā tabulā, izmantojot platformu, nav iespējama.

Datu tabulas laukam tagad ir šādi rekvizīti:

  • Tikai lasīšana(tips - Būla) – vai ir iespējams mainīt datus šajā laukā;
  • AllowNull(tips - Būla) - vai šajā laukā ir iespējams saglabāt NULL vērtību.

Īpašums Tikai lasīšana jāiestata uz Taisnība datu bāzes laukiem ar automātiska maiņa, automātiski ģenerēti atslēgas lauki, aprēķinātie lauki utt.

Varat pievienot, modificēt un dzēst datus ārējos avotos, izmantojot iebūvēto valodu.

Šim nolūkam objekti ExternalDataSourceTableRecordSet Un ExternalDataSourceTableObject ieviestas jaunas metodes Rakstīt () Un Dzēst().

Apsveriet piemēru, kā programmatiski pievienot jaunu ierakstu iepriekš apskatītajam ārējam datu avotam.

&AtClient
Procedūra Izveidot programmatiski(komanda)
Izveidojiet programmatiski serverī();
EndProcedure &OnServer

Procedūra Izveidojiet programmatiski serverī()
WritableObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WritableObject.description= “Skapis” ;
WritableObject.price= 5000 ;
WritableObject.Write();
Beigās Procedūra

Ārējā datu avota tabulas objekta modulī tagad varat iestatīt rakstīšanas notikumu apdarinātājus, piemēram, Pirms rakstīšanas (), OnRecord() utt.:

Šajā rakstā tika apskatītas divas iespējas datu ierakstīšanai uz ārējiem datu avotiem - izmantojot saglabātās procedūras un izmantojot jaunos 8.3.5 platformas mehānismus.

Tādējādi platforma tagad ievieš mehānismus pilnīgai integrācijai ar ārējām lietojumprogrammām.

Versijā 8.3.6 iepriekš aprakstītā funkcionalitāte ir paplašināta ar jaunu īpašas metodes GetChangableFields() un SetChangableFields(). Ar to palīdzību iespējams veikt rakstīšanas operāciju tiem tabulas VIEW laukiem, kuri konfiguratorā ir atzīmēti kā tikai lasāmi. Pateicoties tam, kļuva iespējams īstenot scenāriju, kurā rakstīšana uz atsevišķiem VID tabulas laukiem ir iespējama tikai tajos gadījumos, kad tas ir nepieciešams saskaņā ar aplikācijas biznesa loģiku.

Versijā 8.3.7 ir uzlabots mehānisms, kas nosaka, kuros īpašos VIEW tabulu laukos var būt NULL vērtības. Līdz šim visas VIEW tabulas varēja izmantot šo vērtību. Šīs izmaiņas ir saistītas ar šķirošanas ātruma palielināšanos dinamiskie saraksti uz šiem laukiem.

Laidienā 8.3.8 beidzot ir iespējams noteikt, vai ārējais datu avots atrodas darījuma stāvoklī. Šo funkcionalitāti nodrošina jaunā metode ExternalDataSourceManager.TransactionActive()

Noslēgumā mēs atzīmējam, ka ārējiem datu avotiem, kā parādīts iepriekš, ir aprakstītas klasiskā relāciju modeļa datu tabulas. Platforma izmanto atšķirīgu paradigmu darbam ar datiem, piedāvājot izstrādātājam noteiktu lietojumprogrammu objektu tipu kopumu (uzziņu grāmatas, dokumenti, reģistri utt.). Tāpēc sistēma, strādājot ar ārējo datu avotu tabulām, neatbalsta lielāko daļu funkcionalitātes, kas raksturīga tās “vietējiem” objektiem. Tāpēc ieteicams atturēties no kaut kādas biznesa loģikas izstrādes, ņemot vērā VID tabulu izmantošanu, ja tas nav saistīts ar integrācijas uzdevumiem ar jau esošās sistēmas. Vai, vienkārši sakot, jums vajadzētu izvairīties no datu, kas tiek aktīvi izmantoti jūsu lietojumprogrammā, glabāšanas citā tabulā. ārējā sistēma ja tos neizmanto šī sistēma.

Nākamajā rakstā mēs apsvērsim ārējo datu avotu tehnoloģijas izmantošanas loģisku turpinājumu sistēmā 1C: Enterprise.

Strādājiet ar tiem sarakstos 1C Enterprise režīmā.

Taču darbā nereti rodas situācija, kad daļa datu tiek glabāta kaut kur citur.

  • Tiešsaistes veikals (parasti glabā datus ārējā MySQL/SQL datu bāzē)
  • Vēl viena bāze.

Lai strādātu ar tādiem datiem, kas tiek glabāti citās datu bāzēs, ir jāizstrādā īpaši mehānismi.

Versijā 1C 8.2.14 parādījās jauns ar nosaukumu 1C ārējie datu avoti, kas ievērojami atvieglo programmētāja darbu, jo:

  • tagad nav jāveido īpaši mehānismi datu iegūšanai
  • šādiem datiem var piekļūt
  • šādus datus var apskatīt 1C sarakstos.
    • Ārējais datu avots 1C - ārējā bāze SQL

      Pieņemsim, ka mums ir SQL datu bāze, kurā tiek glabāti nepieciešamie dati. Mēģināsim nolasīt datus no tā, izmantojot 1C ārējā datu avota mehānismu.

      Pievienosim ārējo datu avotu 1C. Jādodas uz konfiguratoru, ārējie datu avoti atrodas konfigurācijas logā, pašā koka apakšā.

      1. Savienojums

      Pievienosim jaunu ārējo datu avotu 1C, sauksim to patvaļīgi.

      Datu bāze sastāv no tabulām. Mums tie jāpievieno pievienotajā ārējā datu avotā. Ar peles labo pogu noklikšķiniet uz tā un atlasiet Pievienot tabulu.

      Pirmo reizi tas liks jums norādīt savienojuma virkni. To var ievadīt manuāli vai izveidot, un jums ir jānoklikšķina uz pogas “…”.

      Kā draiveri mūsu konkrētajā gadījumā mēs izvēlēsimies "SQL Server"

      Aizpildīsim pamata parametrus savienojumam ar SQL. Servera nosaukumu var ievadīt vai izvēlēties no saraksta.

      1C izveidos savienojumu ar SQL un piedāvās sarakstā atlasīt konkrētu datu bāzi.

      Pēc tam 1C parādīs šīs datu bāzes tabulu sarakstu un to kolonnas. Jums ir jāatlasa vajadzīgās tabulas ar izvēles rūtiņām.

      Tiks pievienotas tabulas un kolonnas. Nosaukumi būs tādi, kādi tie ir definēti attālajā datu bāzē. 1C varat tos pārdēvēt (īpašībās).

      Šeit ir pievienotas tabulas piemērs:

      Šeit ir pievienotas kolonnas piemērs:

      Lai 1C platforma strādātu ar ārējo tabulu tāpat kā ar 1C direktorijiem, tabulā var norādīt papildu parametrus:

      • Rekvizītā Key Field norādiet vienu no kolonnām, kas nodrošinās unikālo rindas identifikāciju; ja vairākas virknes nodrošina unikalitāti, tad šādā veidā nedarbojas (lauka Kods analogs)
      • Lauka rekvizītā Skats norādiet vienu no kolonnām, kas nodrošinās īsu virknes attēlojumu (lauka Name analogs).
      • Rekvizītā Tabulas datu tips norādiet Objekta dati.

      2. Skats

      Savienojums ar attālo datu bāzi netiek izveidots automātiski. Lai izveidotu savienojumu, jums jāizvēlas tipiska izvēlne.

      Filiālē Standarts atrodas īpaša komandaĀrējo datu avotu pārvaldība, kas ļauj norādīt savienojuma parametrus (savējos 1C Enterprise režīmam) un izveidot savienojumu.

      Vispirms jānorāda parametri savienojumam ar datu bāzi.

      Kad veicāt konfigurāciju konfiguratorā, tas parādīja savienojuma virkni. To var redzēt vēlreiz, konfiguratorā vēlreiz noklikšķinot uz Pievienot tabulu.

      Kopējiet savienojuma virkni un norādiet to 1C Enterprise režīmā.

      Pēc tam jums ir jāizveido faktiskais savienojums.

      Pēc savienojuma izveides ir iespējams strādāt ar sarakstiem.

      3. Izmantojiet 1C valodā

      Savienojumu var izveidot arī no programmas koda 1C valodā.

      Savienojuma parametri ir norādīti šādi:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = true;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "parole";
      ConnectionParameters.ConnectionString = "savienojuma virkne no konfiguratora";
      ConnectionParameters.DBMS = "MSSQLServeris";

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

      Varat vaicāt datus no datu bāzes, izmantojot parasto . Vaicājuma teksta piemērs ārējam avotam OurExternalSource un tablesExternalSourceTable:

      ATLASĪT
      Ārējā avota tabula. Lauka nosaukums
      NO
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Ārējais datu avots 1C - darbs ar Excel failu

      Izmēģināsim citu iespēju - strādāt ar Excel failu, izmantojot ārēju 1C datu avotu.

      Izveidosim vienkāršu Excel failu.

      Pievienosim ārēju avotu, patvaļīgi nosaucam to par FileExcel. Pievienojiet tai tabulu "Sheet1 $". Kā redzat, šis ir lapas nosaukums programmā Excel, pievienojot simbolu “$”.

      Tāpat kā SQL gadījumā, pievienosim kolonnas. Tos var pievienot manuāli. Ir svarīgi nodrošināt, lai pievienoto kolonnu veidi atbilstu, pretējā gadījumā vēlāk var tikt parādīts kļūdas ziņojums, piemēram, "Datu veida neatbilstība".

      Kolonnai jānorāda nosaukums 1C un nosaukums datu avotā.

      Programmai Excel ir funkcija (kļūda, piemēram, "Pārāk maz parametru. Nepieciešami 3"):

      • Ja pirmā rinda Excel tabulas kolonnu nosaukumi atrodas, tad jums vienkārši jānorāda šīs kolonnas nosaukums, piemēram, “Kods”.
      • Pretējā gadījumā jānorāda pilns nosaukums ar tabulas nosaukumu “Sheet1$.Code”, bet parametros jāpievieno “HDR=NO;”.

      Excel faila savienojuma parametri izskatās šādi:

      • XLSX faili (Office versija 2007 un jaunāka versija)
        Šoferis=( Microsoft Excel Draiveris (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS faili (agrāk)
        Draiveris=(Microsoft Excel draiveris (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Jums jānorāda savs nosaukums un ceļš uz failu.

Programmas 1C versijā izstrādātāji funkcionalitātei pievienoja iespēju savienot trešo pušu datu bāzes un iegūt informāciju no tām tieši no konfiguratora, neizmantojot COM savienojumus un OLE objektus. Šī funkcija ir ieviesta, izmantojot jaunu objektu - "Ārējie datu avoti"

Ārējos datu avotus 1C var izmantot tāpat kā pārējās sistēmas tabulas:

  1. Veidojot atskaites un aprēķinus, izmantojot datu kompozīcijas sistēmu (ACS);
  2. Lai iegūtu saites uz informāciju, kas glabājas trešo pušu avotos;
  3. Mainīt tabulās saglabātos datus;
  4. Veicot pieprasījumus.

Ir svarīgi zināt, ka šis mehānisms nav paredzēts darbam ar citām 1C datu bāzēm, jo ​​1C.Enterprise darbības modelis pats par sevi nenozīmē iejaukšanos datos fizisko tabulu līmenī.

Jauna avota izveide

Jauna ārējā avota pievienošana programmai notiek režīmā "Konfigurators". Konfigurācijas kokā ir atbilstošs zars (1. att.)

Veidojot jaunu avotu, jums būs jāpasvīst, neskatoties uz to, ka jaunā objekta formā ir tikai četras cilnes:

  1. Pamata;
  2. Dati;
  3. Funkcijas;
  4. Tiesības.

Pirmajā cilnē ir tikai viens interesants parametrs - bloķēšanas vadības režīms. Ja neuzdodat jautājumus par datu bloķēšanu darījumos, par informācijas plūsmu paralēlizēšanas sarežģījumiem, varat atstāt šo parametru automātiskās bloķēšanas režīmā. Tomēr šāda pieeja var radīt pārmērīgus ierobežojumus (piemēram, kad viena ieraksta vietā programma bloķē visu fizisko tabulu, liedzot citiem lietotājiem iespēju ar to strādāt).

Pārvaldītas slēdzenes, atšķirībā no automātiskajiem, tie izmanto transakciju mehānismu, kas ir iegults pašā programmā, nevis DBVS, kas ļauj pārsūtīt tabulu tvērumus uz daudz vairāk zems līmenis.

Iestatot šo parametru uz "Automātiski un pārvaldīts", mēs sniedzam sistēmai iespēju noteikt, kuru režīmu izmantot, tieši atsaucoties uz katras konkrētās tabulas atbilstošo rekvizītu.

Ārējā avota rekvizītu formas datu cilne

Cilnes “Dati” forma ir parādīta attēlā. 2

Rīsi. 2

Šeit mēs varam pievienot ārējo avotu tabulas un kubus. Ir divi veidi, kā pievienot tabulu:

  1. Manuāli, tad redzēsim tabulas pievienošanas formu (3. att.);

Rīsi. 3

  1. Vai arī izvēlieties no fizisko avotu tabulu saraksta (4. att.), šajā gadījumā mūsu priekšā atveras īpašs konstruktors.

Rīsi. 4

Sīkāk apskatīsim tabulas pievienošanas veidlapu. Rekvizīts "Nosaukums" tiek izmantots, lai unikāli identificētu objektu konfigurācijā.

Metadatu objekta un galīgās fiziskās tabulas salīdzināšana notiek, izmantojot rekvizītu "Datu avota nosaukums", kas atrodas cilnē "Papildu" (5. att.).

Rīsi. pieci

Tālāk mums ir jānosaka tabulas veids vai drīzāk tās objektivitāte. Ja struktūrā saglabātos datus var unikāli identificēt, izmantojot jebkuru lauku, tabula var būt objektu tabula. Ja ieraksta individualitāti nosaka atslēgu lauku kopa, tabulai ir jābūt neobjekta tipam.

Salīdzinot šādas tabulas ar citiem metadatu objektiem, mēs varam izdarīt šādu analoģiju:

  • Objektu tabulas ir atsauces grāmatas;
  • Neobjektīvi ir informācijas reģistri.

Atslēgas lauku kopa ir definēta nākamajā formas parametrā ("Atslēgas lauki"). Šis lauks ir obligāts, atstājot to tukšu, saglabājot konfigurāciju, radīsies kļūda.

Kā redzams 5. attēlā, daži lauki un veidlapas pogas nav pieejami rediģēšanai:

  • Izteiksme datu avotā;
  • Tabulas datu tips;
  • Skata lauks;
  • Skatu apstrādātāji.

Tos var izmantot tikai pēc tam, kad esam aizpildījuši tabulas laukus, definējot to veidu un iestatot identifikatorus (6. att.)

Rīsi. 6

Šeit jums vajadzētu pievērst uzmanību opcijai "Atļaut nulli", ja šī rūtiņa ir atzīmēta, nav vēlams izmantot šādu lauku kā atslēgu.

Galdu konstruktors

Varbūt vissvarīgākais un interesantākais punkts darbā ar ārējiem avotiem ir savienojuma virknes izveide. Tās konstruktors tiek atvērts, noklikšķinot uz pogas ar trim punktiem blakus parametram "Savienojuma virkne".

Vispirms mums tiks lūgts izlemt par draiveri, kas tiks izmantots savienojuma izveidei (7. att.)

Rīsi. 7

Nepareiza šī parametra definīcija neļaus jums izveidot savienojumu ar trešo pusi informācijas bāze. Ir arī jāsaprot, ka ne visus nolaižamajā sarakstā norādītos draiverus var izmantot, lai automātiski ģenerētu savienojuma virkni. Ja platforma deva kļūdu (8. att.), tad savienojuma virkne būs jāraksta manuāli.

8. att

Rīsi. deviņi

Pati līnija ir stingri reglamentēta konstrukcija.

Savienojuma virknes piemērs

Apsveriet iespēju izveidot trešās puses datu bāzi Microsoft Access un atrodas diska D saknē. Lai pieslēgtu šo bāzi, ir jāizmanto atbilstošs draiveris, bet izvēloties to līnijas konstruktorā, rodas kļūda 8. att.

Savienojuma parametrus rakstīsim paši.

Draiveris=(Microsoft Access Driver (*.mdb)) — šādi izskatās rindas pirmā daļa. IN cirtaini breketes mēs esam definējuši vadītāju.

Priekš Excel faili tas izskatīsies šādi (Microsoft Excel Driver (*.xls)) , Excel failiem, kas izveidoti birojā, kas vecāki par 2003. gadu, draivera rinda izskatīsies šādi (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *). .xlsb )).

Atdalot šo parametru no nākamā ar semikolu, jāuzraksta mūsu krātuves adrese (mūsu gadījumā DBQ=D:\Database1.mdb).

Saskaitot šos divus parametrus, iegūstam Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, ierakstot šo parametru, iegūstam pieeju šīs datu bāzes iekšējām struktūrām.

Objektam "Ārējais avots" nepietiek tikai ar tā izveidošanu konfigurācijā, tam jābūt arī savienotam režīmā "Uzņēmumi". To var izdarīt no izvēlnes "Visas funkcijas"->Ārējie avoti. Pirmoreiz ievadot tabulu, mums ir jāieraksta tā pati savienojuma virkne jau režīmā "Uzņēmums".

Kāpēc šī iespēja ir tik interesanta? Jebkurš cilvēks, kurš ir programmējis 1C, labi pārzina SQL un vismaz vispārīgi pārzina citu biznesa lietojumprogrammu tehnoloģisko platformu izstrādes arhitektūru un principus, ar stingru pārliecību jums pateiks, kas viņam 1C patīk visvairāk. Protams, vaicājumu veidotājs ir ērtākais un pārdomātākais mehānisms vaicājumu rakstīšanai, lai iegūtu datus no relāciju struktūrām, ar kurām esmu personīgi saticis. Un tagad 1C ir devis mums tik brīnišķīgu iespēju to izmantot ne tikai ar 1C, bet arī ar jebkuru citu galdu. Šeit ir tikai ķekars "mušu ziedē", kas ieliets šajā "medus mucā". Viss kārtībā:

1) Iestatīšana un lietošana- bez "dejošanas ar tamburīnu" neiztiks
a) Pievienojiet ārēju datu avotu - šķiet, ka tas nav nekas sarežģīts
b) atzīmējiet izvēles rūtiņu "Atlasīt no saraksta" - tas ir nepieciešams - tas ir nepieciešams, lai pārbaudītu veiktspēju sākumā un pasargātu jūs no nevajadzīgām nepatikšanām
c) - noteikti nospiediet "..." - savienojums ir ODBC. Nevis OLEDB, kā mēs visi esam pieraduši, bet vienu līmeni zemāk

D) Šeit esiet ĻOTI UZMANĪGI.

Šis ir ODBC draiveris — ja izmantojat klienta-servera versiju, tai ir jābūt serverī. Ja izstrādājat vienu sistēmu un strādājat pie citas (kā tas parasti notiek), pārliecinieties, ka nesaņemat nekādus pārsteigumus. Dīvains ieteikums, bet izvēlieties vecāko vai visizplatītāko draiveri, ja jūs īpaši neuztraucaties par ātrumu un jūs neplānojat pārsniegt SQL92 standarta robežas. Tas nodrošinās vislabāko saderību. Piemēram, SQL Server 2008 vislabākais draiveris būtu SQL Server Native Client 11, bet es iesaku izvēlēties tikai SQL Server, pretējā gadījumā šis ļoti vietējais klients būs jāinstalē vai nu serverī, vai visās klienta mašīnās (gadījumā no faila versijas izmantošanas), un ieguvums ir īpašs vienkāršam viņš nedos jums darbu.
e) Standarta servera izvēles dialoglodziņi

E) Es iesaku atbildēt “jā” uz jautājumu par paroles saglabāšanu, pretējā gadījumā šī biznesa uzsākšana nedarbosies.
g) Izvēlies tabulu un detaļas... lieliska iespēja - uzreiz vari pārdēvēt pēc patikas (un arī detaļas), savukārt rekvizītos redzēsi datu avota lauku nosaukumus

Z) Un tagad palaižat, atveriet vaicājumu noformētāju - jūs stulbi atlasāt visus ierakstus no tabulas un OPA - kļūda. Ko darīt? Ja jums ir pārvaldīts interfeiss, skatieties servisa izvēlnē un, ja jums ir parasts...
Es personīgi izmantoju šo kodu:
Kods 1C v 8.х Parametri = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL serveris);SERVER=servets;UID=sa;PWD=;DATU BĀZE=datubāze";
Parameters.DBMS = "MSSQLServeris";

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

ExternalDataSources.DAX.SetConnection();
Varbūt daži gabali nav vajadzīgi, bet tas darbojas.
Kods ir jāizpilda VIENREIZ. Pēc tam pieslēgsies normāli... mistika protams - kāpēc tas bija vajadzīgs nav skaidrs...

2) Tikai lasāmi datu avoti- Jā, brīnumi nenotiek... bet dažreiz gribas...

3) NEIZMANTOJIET TOS KOPĀ AR IEKŠĒJIEM DATU AVOTIEM
Mani personīgi šis fakts nogalināja uz vietas.

Kā ir .... ko mēs gaidījām un jau esam iztēlojušies un laizījuši kā mēs tagad vienā pieprasījumā apvienosim savus datus ar 1C, izslēgsim - sagrupēsim, ievietosim atskaitē, bet nebija tur...
Bet, protams, tas neaptur pieredzējušus cilvēkus... kāda doma ienāca prātā? Tieši tā - pagaidu tabulas:

4) NELIETOJIET TOS KOPĀ AR PAGAIDU GALDIEM

Bet tas vairs neizskatās pēc tehnoloģiskām grūtībām, bet ļoti izskatās pēc tā, ko viņi vēlas, lai mēs darām "lai dzīve neliktos kā paradīze" :).

5) Var izmantot tikai SKD savienojumos
Tiem, kas nezina, tas ir ACS cilnē "Datu kopu saites". Cik bieži jūs tos lietojat? Ērti? Acīmredzot viņi vēlas piespiest mūs tos izmantot biežāk. Bet ir kolonna "Saites nosacījums" un "Saites parametrs". Es neatradu piemēru to izmantošanai nevienā tipiskā konfigurācijā, dokumentācijā un arī Khrustalevā, kaut kā viss nav pārredzams. Vai kāds var man paskaidrot, kā darbojas "saites nosacījums". Ja tur ierakstāt SourceAttribute = ReceiverRevision, tas nedarbojas. Protams, nosacījumu var ierakstīt laukā "Izteiksme" - vairumā gadījumu tas ir pietiekami ... bet kaut kā tas nav ļoti viegli.

Kopumā šī problēma iepriekš tika atrisināta šādi:
Kods 1C v8.x funkcija InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Ja DateCon > "20100101" Tad
DateCon = "20100101";
EndIf;

QN = jauni kvalifikāciju skaits(15,2);
cs = NewStringQalifiers(255);

ArrayNumber = jauns masīvs();
ArrayNumber.Add(Tips("Numurs"));

ArrayString = jauns masīvs();
ArrayString.Add(Type("String"));

ArrayData = jauns masīvs();
ArrayDate.Add(Tips("Datums"));

//Grāmatvedības pašizmaksu aizpildīsim tabulā
TypeNumber = JaunsTipsApraksts(masīvaNumurs,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabula datu ielādei no SQL
TK = jauna vērtību tabula();
TK.Columns.Add("Nomenklatūras kods", TypeString);
TK.Columns.Add("Daudzums", TypeNumber);
TK.Columns.Add("Periods", TipsDatums);

TK.Indices.Add("Periods");

// Izveidojiet savienojumu ar SQL
ConnectionString = "Provider=SQLOLEDB.1;Pastāv drošības informācija=True;Lietotāja ID=sa;Pwd=;Datu avots=;Izmantojiet sagatavošanas procedūru=1;Automātiskā tulkošana=True;Paketes izmērs=4096;Darbastacijas ID=;Izmantojiet šifrēšanu for Data=False;Atzīme ar kolonnu salīdzināšanu, ja iespējams=False;Sākotnējais katalogs=Atskaites";
Savienojums = jauns COMObject("ADODB.Savienojums");
Komanda = jauns COMObject("ADODB.Command");
RecordSet = jauns COMObject("ADODB.RecordSet");
Datums = "";
Mēģinājums
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = savienojums;
Command.CommandText = "S_elect * no PH kur periods >= "" + String(Formāts(DatumsSākums, "DF=ggggMMdd")) + "" un punkts<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Izņēmums
TK atgriešana;
Mēģinājuma beigas;

Kamēr RecordSet.EOF = viltus cilpa
Virkne = TK.Pievienot();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Vērtība;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Vērtība;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Vērtība;
RecordSet.MoveNext();
EndCycle;

Pieprasījums = Jauns pieprasījums();
VrTabula = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Sākuma datums", Sākuma datums);
Query.SetParameter("DateCon", DateCon);
Query.Text = "ATLASĪT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|PUT DataTable
| NO
| &vrDataTable AS vrDataTable
|KUR
| vrDataTable.Period >= &DateStart
| Un vrDataTable.Period<= &ДатаКон";
Pieprasīt.Izpildīt();
TK = Nedefinēts;

Pieprasījums = jauns pieprasījums;
Query.TempTableManager = VrTable;
Query.Text = "Šeit ir vaicājums, kas saistīts ar pagaidu tabulu";

Rezultāts = Request.Run();
Atgriešanas rezultāts;

EndFunctions

OuterSet = InitializeDataSource();
DataSet = Jauna struktūra();
DataSet.Insert("SQL tabula", ārējā kopa);
GenericReports.Generate GenericReport (šis objekts, rezultāts, atšifrēšanas dati, izvades uz pārskata veidlapu, datu kopa);

Patiesībā koda rindu nav daudz, un tās ir diezgan standarta ... šajā gadījumā varat izmantot pilnu vaicājumu veidotāja funkcionalitāti un ACS sniegt tikai funkciju DATA SASTĀVS.

Bet, protams, tas izskatās nedaudz ne tik skaisti ... un, augšupielādējot vērtību tabulā katru reizi, jums ir jāraksta kods un jāpārbauda, ​​​​vai detaļu nosaukumā neesat kļūdījies ... citādi tas, ko mums iedeva 1C, izskatās kaut kā puslīdz. Vēl neesmu izlēmis, kuru lietot ērtāk. Jūs izlemjat un rakstiet par saviem lēmumiem un to, kas pamudināja jūs tos pieņemt.

Informācija ņemta no vietnes