Datu saņemšana caur com savienojumu no 1s. V8: COM savienojums. Uzskaites saņemšana un salīdzināšana, izmantojot COM savienojumu

Jautājums: vietnes parsēšana, izmantojot COM IE 11


Laba diena.!
Jautājums ir sāpīgi labi zināms, jums ir jāņem informācija no vietnes. Bet ir nianses:
1. Nav iespējas doties tieši uz autorizācijas lapu (vispirms dodieties uz mājas lapu, noklikšķiniet uz saites LogIn, iegūstiet autorizācijas veidlapu un tikai pēc tam piesakieties).
2. Jums ir jāapmeklē vietne, izmantojot meklēšanas josla meklējiet datus, pēc tam izlasiet un meklējiet vēlreiz (dati var būt krievu un angļu valodā, t.i., ja meklēšanas dati ir krievu valodā, tad jums ir jāmeklē vietnes “krievu versijā”, un šī ir vēl viena saite uz citu lapu. Tāda pati problēma ir ar angļu valodu).

Galu galā:
- dodieties uz sākumlapu - piesakieties - meklējiet datus - (ja nepieciešams, dodieties uz citu vietnes versiju) - paņemiet to.

Problēma:
Sekojot saitei, dati netiek nolasīti rekvizītā "dokuments".
Tas notiek divos punktos:
- kad mēs sekojam saitei, lai pieteiktos (šī nav poga, bet tikai saite);
- kad mēs mainām valodu vietnē (arī saite).

Piezīme
Ja pirms sekošanas saitei autorizācijas posmā saņemat saiti, aizveriet com un atveriet to vēlreiz, veicot pāreju, izmantojot metodi IE.navigate("link"), tad rekvizīta "document" dati darbojas normāli. Taču jūs nevarēsit darīt to pašu, mainot valodu vietnē, jo... Man ir jāpiesakās vēlreiz, un es nevēlos atrisināt šo problēmu tieši tāpat.

Lūk, kods:

&Klienta procedūrā SetWaitingIE(IE, SecondCall=False) Ja NAV IE.Busy, tad D = CurrentDate() + 3; Kamēr D >= CurrentDate() Loop If IE.Busy then Abort; endIf; EndCycle; endIf; Kamēr IE.Busy Loop EndLoop; Kamēr IE.ReadyState< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"pabeigts" cikls EndCycle; Izņēmums, ja SecondCall then Return; Else Link = IE.LocationURL; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(saite); SetExpectIE(IE, True); endIf; EndAttempt; EndProcedure &OnClient funkcija PerformUserAuthorization(IE, Saite, Pieteikšanās, Parole, Authorized=False, SC=0) Mēģinājuma elementi = IE.Document.GetElementsByName("lietotājvārds"); Ja Elements.Length = 1, tad katram El Of Elements Loop El.Value = Pieteikšanās; EndCycle; endIf; Elements = IE.Document.GetElementsByName("parole"); Ja Elements.Length = 1, tad katram El Of Elements Loop El.Value = parole; EndCycle; endIf; IE.Document.GetElementById("ID"). Noklikšķiniet (); SetWaitingIE(IE); Atļauts = True; Izņēmums, ja CN > 3, tad atgriezt False; endIf; IE.Quit(); IE.Navigate(saite); SetWaitingIE(IE); MF = MF + 1; Ja PerformUserAuthorization(IE, Link, Login, Password, SCH), tad atgriež True; endIf; EndAttempt; Atgriezties pilnvarots; EndFunction &OnClient procedure Upload(Command) SpTables = GetListTablesForUpload(); Ja SpTables = False, tad atgriezieties; endIf; IE = GetCOM("InternetExplorer.Application"); Katrai rindai no SpTable.SOURCE_LIST Cikls RA = Row.ID; Resurss = String.RESOURCE; IE.Navigate(resurss); SetWaitingIE(IE); Izmēģiniet If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("Klasesnosaukums"); Ja Classes.Length = 1, tad katrai klasei no klasēm Loop Resource = Class.All(0).Href; Pārtraukt; EndCycle; Mēģina IE.Quit(); IE = IE.Navigate(resurss); SetWaitingIE(IE); Izņēmuma ziņojums("Savienojums ar vietni "" +String.NAME + "" neizdevās!"); Pārtraukt; EndAttempt; Pretējā gadījumā Report("Savienojums ar vietni "" +String.NAME + "" neizdevās!"); Pārtraukt; endIf; endIf; Ja NOT PerformUserAuthorization(IE, Resource, String.LOGIN, String.PASSWORD) Tad Report("Lietotāja autorizācija vietnē "" + String.NAME + "" nav pabeigta!"); Pārtraukt; endIf; Resurss = IE.LocationURL; Personu saraksts = SpTable.FACE_CODES.FindLines(New Structure("AVOTS", RA)); ListNotFound = Jauns masīvs; Katrai personai no personu saraksta cikls PersonName = Person.NAME_IN_SITE; Tas ir krievu = Rakstzīmju kods(PersonName, 1) >= 1040; TechResource = ?(Tas ir krievu valodā, StrReplace(Resource, "en_US", "ru_RU"), StrReplace(Resource, "ru_RU", "en_US")); Ja TekResurs<>IE.LocationURL Tad RootClasses = IE.Document.GetElementsByClassName("ClassName"); Ja RootClasses.Length = 1, tad katrai saknes klasei no RootClasses cilpas klases = RootClass.Children; Pārtraukt; EndCycle; AmGroup = False; RuGroup = False; Katrai klasei no klasēm cilpa Ja HPreg(Klases.KlasesNosaukums) = "nolaižamās izvēlnes galvene" Tad AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Eiropa") > 0; ElseIf HPreg(Class.ClassName)<>"atlasīts" Tad If AmGroup Un Find(Class.All(0).InnerText, "English") > 0 VAI RuGroup Un Find(Class.All(0).InnerText, "Krievija") > 0 Tad IE.Navigate(Class .Visi(1).Href); SetWaitingIE(IE); Pārtraukt; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Vērtība = PersonName; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); Mēģina SetExpect(IE); //Saņemto datu ķēde ExceptionListNotFound.Add(Person); Turpināt; EndAttempt; EndCycle; Izņēmuma ziņojums("Kļūda:" + Symbols.PS + ErrorDescription()); Pārtraukt; EndAttempt; EndCycle; IE.Quit(); Procedūras beigas

Atbilde:

Tēma ir ļoti interesanta, bet man personīgi diemžēl nav ne pieredzes, ne pat iespēju kaut kā izprast šo problēmu. Ja varat atrast informāciju par šo tēmu, lūdzu, dalieties ar to.
--- Apvienība ziņas, 2016. gada 29. aprīlis ---

Kā es saprotu, nav piekļuves SQL datu bāzei?

--- Ziņojumu sapludināšana, 2016. gada 29. aprīlis ---

Nu, ja parsēšana, tad kāda veida piekļuve?

Jautājums: COM savienojums 1C 8.3 - 1C 8.3 Vai savienojumā ir iespējams ievadīt atkļūdotāju


Vēlējos foruma dalībniekiem jautāt, vai vispār ir iespējams atkļūdot, kad, izmantojot COM savienojumu, izmantojot apstrādi no vienas datu bāzes platformā 8.3.6 (BP 3.0), izveidoju savienojumu ar pašrakstītas datu bāzes ārējā savienojuma moduli (arī darbojas). platformā 8.3.6) un izsaukt eksportēšanas no tās procedūras, izmantojot apstrādi? Šobrīd datu bāzes ir uz failiem balstītas un atrodas vienā datorā, taču ir plānota servera versija. Līdz šim es izmantoju tālāk norādītās konstrukcijas, lai pārsūtītu patvaļīgu kodu izpildei pa COM savienojumu, kā arī reģistrētu kļūdas. Šeit ir procedūru fragmenti ārējā savienojuma moduļa pašrakstītajā datu bāzē:

Funkcija ExecuteIn(CodeExecute, palīgparametrs = "") Eksportēt
Drošības pārbaude(); // Aizsardzība pret mēģinājumiem izpildīt ļaunprātīgu kodu, kad tiek izveidots ārējs savienojums cita lietotāja vārdā Atbilde = "0" //Ja nekas nav jāatgriež, tad ja kodā nav kļūdu  //atgriež tikai OK  //Jo Pārsūtītajā kodā var būt kļūdas, tad mēs iesaiņosim tā izpildi mēģinājumā. Mēģiniet izpildīt (CodeExecute); // Izpildiet kodu kā virkni citā datorā, izmantojot COM savienojumu (Libra Base ārējā savienojuma modulis) Izņēmums   //ja ir kļūda, tad atgriež tās tekstu Atbilde = ErrorDetailView(ErrorInfo()); EndAttempt ; Atgriezt atbildi; EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Aizsardzība pret mēģinājumiem izpildīt ļaunprātīgu kodu, kad tiek izveidots ārējs savienojums cita lietotāja vārdā. OutParameter = "Ir savienojums ar skalas bāzi, izmantojot COM savienojumu!"; Atgriezties True ; EndFunction
No BP 3.0 es izpildu šādu fragmentu:
Mēģinājums
Com = jauns COMObject("V83.COMConnector"); Savienojums = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Pārbaude izturēta! Ir savienojums ar mēroga datu bāzi"); Izņēmuma kļūda = ErrorDetailView(ErrorInfo()); TellUser("Nav COM savienojuma ar Libra bāzi! Detaļas"+Kļūda); Com=Undefined ; Atgriezties ; EndAttempt ; Out = ""; In = "1"; Ja Connection.Communication Test(In, Out) Then TellUser("Sakaru tests ar mēroga konfigurāciju veiksmīgs! Atbilde: "+Out); Pretējā gadījumā TellUser("Saziņas pārbaude ar mēroga konfigurāciju neizdevās! Atbilde: "+Out); EndIf ;
Es, protams, saprotu, ka nevarēs ievadīt Execute(CodeString1C8) operatoru, bet vai ir tāda iespēja izsaucot attālā moduļa procedūru ārējais savienojums no galvenās datu bāzes Connection.TestConnections(In, Out), lai ievadītu savu kodu tajā pašā atkļūdotāja sesijā savas izsaukšanas procedūras funkcijā Security Check()?
Es jau apskatīju dokumentāciju, ko varēju atrast par šo jautājumu. Es iestatīju opcijas, lai iespējotu atkļūdošanu un pārtraukuma punktus visur abās konfigurācijās. Es palaižu abus konfiguratorus.
Vai šajā situācijā vispār ir iespējams atkļūdot drošības pārbaudes() procedūru ārējā savienojuma moduļa malā?

Jautājums: Nepareiza IP adrese COM savienojumā


Ir apstrāde, kas pārsūta dokumentus starp serveriem, izmantojot V83.ComConnector. Serveris 1 (1C versija 8.2.19.90) vienmēr izveido savienojumu ar serveri 2 (versija 8.3.8.2033). Savienojuma līnijā bija servera 2 IP adrese, un viss darbojās labi. Pašā serverī 1 es redzēju arī instalēto platformu, piemēram, serverī 2, versiju 8.3.9.2033 (ja tas ir svarīgi).

Problēma ir tāda, ka serverī 2 mainījās IP adrese, apstrāde, protams, pārstāja darboties, un, ievadot jaunu IP savienojuma rindā, apstrāde ģenerē kļūdu, kuras apraksts joprojām ir vecā IP (!) un teksts. “Mēģinājums izveidot savienojumu bija neveiksmīgs, jo no cita datora netika saņemta vajadzīgā atbilde noteiktajā laikā vai izveidots savienojums nepareizas atbildes dēļ no jau pievienota datora."

Visu pārstartēja, iztīrīja cache utt., admini zvēr, ka no viņu puses viss ir ok, caur RDP var ielogoties no viena servera uz otru utt.

Kas varētu būt nepareizi, kā es varu to atrisināt? Izpētīju visu internetu un nevarēju atrast tādu situāciju!

Atbilde:() 100% pārliecināts! Otrajā dienā mēģinu, kā jau rakstīju, skatos ar atkļūdotāju, es pat izveidoju stulbu vienas šūnas apstrādi savienojuma pārbaudei, uznirst kļūda un viss

Jautājums: COM savienojums ar dažādām versijām


Sveiki visiem.
Man ir datu bāze ala “Consolidation”, kas apkopo dažādus datus no dažādām datu bāzēm un apkopo visu vienā kaudzē. Problēma ir tāda, ka jums ir nepieciešams izveidot savienojumu ar šīm datu bāzēm caur com, taču tās ir dažādas versijas, tāpēc beigās tiek parādīta kļūda, piemēram,
Savienojuma kļūda!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Kļūda, izsaucot konteksta metodi (Connect) : radās izņēmums (V83.COMConnector. 1 ) : neatbilstība starp klienta un servera versijām 1 C:Enterprise Client versijas atšķiras un serveris (8.3. 8.1964 - 8.3. 6.2332), klienta lietojumprogramma: COM savienojums

Es izveidoju vienu savienojumu, cits atkrīt...

Es zinu, ka kaut kādā veidā, izmantojot komponentu pakalpojumu, katrai versijai var izveidot "savas klases (savienotājus)" un pēc tam izveidot jaunu COM objektu, kas atbilst klases platformas versijai ... varbūt es kļūdos.

Palīdziet man pārvarēt šo problēmu...

Atbilde: Tas arī viss... es noņemšu jautājumu..

Jautājums: Com kļūda, apstrādājot aizpildīšanu


Sveiki.
8.2 Mazumtirdzniecība 1.
Es izveidoju savienojumu ar 8.1 Nav tipiska konf.
Pieslēdzos caur com datu bāzei un mēģinu izveidot dokumentu, bet izsaucot “CreateDocument()” vai “GetObject()” procedūrā rodas kļūda ApstrādeAizpildīšana. skatīt att.

Es mēģinu to pašu 8.1 datu bāzē, taču nav kļūdu, kā arī neievadu aizpildīšanas apstrādi.
Kas varētu būt nepareizi?

Atbilde: turboq, greizi uzrakstīts dokumentu modulis!

Pievienots pēc 5 minūtēm
Viņu nesauc! Viņa mēģina apkopot! Bet, tā kā, izveidojot savienojumu, izmantojot ComConnector, dialoga režīma problēma NEPASTĀV, dokumenta moduli nevar kompilēt.
Šādos gadījumos, kad ir nepieciešams realizēt darbu ar dialogu objekta modulī, izmantojiet norādījumus priekšapstrādātājam

Tā nav jūsu kļūda, bet gan kļūda dokumenta modulī datubāzē, ar kuru veidojat savienojumu.

Datu bāzē kods tiek izpildīts klientam un ir dialoga režīms, tāpēc viss notiek bez kļūdām

Savienojumam neizmantojiet ComConnector, V8.Aplikāciju, tad interfeisa lietas jums būs pieejamas

Pievienots pēc 5 minūtēm
=======================================================================================================================
no ārējā savienojuma (SP) apraksta Es izcēlu treknrakstā to, kas jums jāizlasa par ComConnections

Apraksts:

Kopumā darbs ar 1C:Enterprise 8, izmantojot ārējo savienojumu, ir līdzīgs darbam ar 1C:Enterprise servera automatizācijas režīmā. Galvenās atšķirības ir šādas:

  • Automatizācijas servera gadījumā tiek palaista pilnvērtīga 1C:Enterprise 8 lietojumprogramma, bet ārējā savienojuma gadījumā tiek palaists salīdzinoši neliels procesā esošais COM serveris.
  • Nav pieejams, strādājot, izmantojot ārējo savienojumu funkcionalitāte, vienā vai otrā veidā saistīts ar 1C:Enterprise 8 lietotāja interfeisa organizāciju;
  • Palaižot ārējo savienojumu, pārvaldītais lietojumprogrammas modulis (modulis regulāra lietošana) konfigurācija 1C:Uzņēmums 8. Tā lomu, strādājot ar ārējo savienojumu, spēlē ārējā savienojuma modulis.
Izmantojot ārējo savienojumu, salīdzinājumā ar automatizācijas servera izmantošanu ir šādas priekšrocības:
  • Ātrāka savienojuma iestatīšana, jo nav jāizveido atsevišķs process operētājsistēma, un visas darbības tiek veiktas zvanīšanas procesa ietvaros;
  • Ātrāka piekļuve 1C:Enterprise objektu īpašībām un metodēm, jo ​​piekļuves organizēšanai nav nepieciešama starpprocesu komunikācija;
  • Mazāks operētājsistēmas resursu patēriņš.
Lai organizētu piekļuvi 1C:Enterprise 8 datiem, izmantojot ārējo savienojumu, tiek veikta šāda darbību secība:
  • tiek izveidots COM savienojumu pārvaldnieks, ar kura palīdzību tiek izveidots savienojums;
  • tiek veikts izsaukums uz COM savienojuma pārvaldnieka savienojuma metodi. Savienojuma metode atgriež ārējo savienojumu ar informācijas bāze 1C:Uzņēmums 8;
  • izmantojot ārēju savienojumu, tiek nodrošināta piekļuve derīgām metodēm, rekvizītiem un informācijas bāzes objektiem, ar kuru tiek izveidots savienojums.
Svarīgs! Lietotāja saskarnes trūkuma dēļ ne visus objektus, rekvizītus un metodes var izmantot ārējā savienojumā.
Ārējais savienojums nodrošina pilna piekļuve tās globālajā kontekstā. Tāpēc ārējam savienojumam kā tā metodēm var būt: sistēmas konstantes, konfiguratorā norādīto objektu vērtības, kurām piekļuve tiek veikta, izmantojot pārvaldniekus (piemēram, konstantes, uzskaitījumi, direktoriji, dokumenti, dokumentu žurnāli, atskaites , apstrāde, raksturlielumu veidu plāni, kontu plāni , aprēķinu veidu plāni, reģistri), kā arī ārējā pieslēguma modulī ar atslēgvārdu Eksportēt deklarētie mainīgie.

Pieejamība:

Integrācija.

Jautājums: COM savienojums, raksturlielumu tipa plāns


Uzdevums ir programmatiski izveidot jaunu elementu zināmā raksturīgo tipu plānā, izmantojot COM savienojumu. Savienojums ir izveidots, šeit viss ir kārtībā.

Es rakstu šādi:

TypeDescriptionTech = New TypeDescription("DirectoryLink. Darījuma partneri"); PurposeProperties = Savienojums. Raksturlielumu veidu plāni. Objektu kategoriju īpašību mērķi. FindByName(“Kataloga “Privātpersonas””); NewElement = savienojums. Raksturlielumu veidu plāni. Objekta īpašības. Izveidot vienumu(); Jaunais elements. Nosaukums = PropertyName; Jaunais elements. PropertyAssignment = PropertyAssignment; Jaunais elements. ValueType = DescriptionTypesTech;

Pēdējā rinda nedarbojas. Un tas ir saprotams, tas atrod šādu tipu datu bāzei, kurā darbojas 1C, bet man ir nepieciešams veids pievienotajai datubāzei. Kā to iegūt?

Manā versijā vienkārši tiek izveidots elements ar vērtības tipu “Pielāgots saraksts”. Principā darbojas, bet ir kaut kā neglīts.

Platforma 8.3. COM savienojums ir priekšnoteikums. Risinājumi bez tā izmantošanas neinteresē.

Atbilde:

Ruļļi. Paldies, izdevās.

Jautājums: COM savienojums. Vaicājuma parametra problēma


Laba diena.
Problēma ar pieprasījumu, izmantojot COM savienojumu.

Perem TK; ArrayItems = COM.NewObject("Masīvs"); Katrai rindai no TZNomenklatūras cikla nomenklatūra = COM.Directories.Nomenclature.GetLink(COM.NewObject("UnikālaisIdentifier", Abbr(String.Nomenclature.Identifier))); Nomenklatūra Masīvs.Pievienot(Nomenklatūra); EndCycle; Ja ArrayItems.Quantity()<>0 Tad pieprasījums = COM.NewObject("Pieprasījums"); Request.Text = "SELECT |PricesItemsSliceLast.Commodities AS vienums, |PricesItemsSliceLast.VacationPrice AS Cena, |PricesItemsSliceLast.RatePVN, |PricesItemsSliceLast.RateNP |FROM |RegisterInformation.CenasSliceCenaPēdējā cena, &| ory B (&masīvs no Nomenklatūra) |Un Inventory and Materials.ThisGroup = FALSE |And Registrator LINK Document.Setting SalesPrices) AS NomenklatūraCenasSliceLast"; Request.SetParameter("Preču masīvs", Preču masīvs); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("Cenas veids", COM.Directories.PriceTypes.GetRef(COM.NewObject("UnikālaisIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Vērtību tabula"); TK = Request.Run().Augšupielādēt(); Citādi TK = New ValueTable; TK.Columns.Add("Nomenklatūra"); TK.Columns.Add("Cena"); TK.Columns.Add("Procenti"); TK.Columns.Add("PVN likme"); endIf;

Problēma ir tieši ar preci vai vienumu masīvu; ja tos iestatāt kā parametru, pieprasījums atgriež tukšas cenas; ja šo parametru nenorāda vispār, pieprasījums atgriež pareizos datus.
Tās pašas ārējās datu bāzes vaicājumu konsolē viss tiek apstrādāts bez problēmām.
Kas varētu būt nepareizi?

Atbilde:

Mēģiniet to izdarīt, izmantojot VremTable. Izveidojiet vērtību tabulu ar kolonnām resp. piemēram, aizpildiet to, ievelciet to pieprasījumā un pēc tam lietojiet to ar iekšēju savienojumu.

Jautājums: Com savienojums no failu datu bāzes uz failu datu bāzi


Labrīt. Man ir failu datubāze 8.3, no kuras es mēģinu izveidot savienojumu ar citu failu datu bāzi, izmantojot com savienojumu:

Directory = "C:\Users\1C\Workflow (test)"; Lietotājs = "Administrators"; Parole = ""; Savienojuma parametri = "Fails="+Directory+";Usr="+Lietotājs+";Pwd="+Parole+";"; V83 = jauns COMObject("V83.COMConnector"); Mēģināt izveidot savienojumu = V83.Connect(ConnectionParameters); Izņēmuma ziņojums ("Nevarēja izveidot savienojumu ar dokumentu plūsmu!"); EndAttempt;


Tiek izmests izņēmums, bez kļūdas apraksta.
Abas datu bāzes ir spiestas palaist 8.3. versijā. Direktorija un lietotājs ir norādīti pareizi. Kāds varētu būt iemesls?

Atbilde:

Es rakstu koda rindu V82 = New COMObject (" V83.COMConnector"); un pārējā koda daļa ir tāda, kā norādīts tālāk, bez izmaiņām.

Ja avota un mērķa platformas versijas atšķiras, rodas kļūda.

Nav skaidrs, kuru bibliotēkas versiju reģistrēt un kur to reģistrēt?

Es domāju, ka man ir jāreģistrē bibliotēka, versija 8.2.18.61, un es to daru, izmantojot bat failu

regsvr32 /n /i:user "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
pauze

msk-test1c:1641 — tas ir serveris 8.3.5.1098
V82 = jauns COMObject("V82. COMConnector"); Pārskats ("Pieslēgties grāmatvedībai 3.0..."); Mēģināt izveidot savienojumu = V82. Connect("srvr = ""msk-test1c:1641""; ref = ""db_test""; usr = ""Administrators""; pwd = ""123"""); Paziņot ("Urā savienojums izveidots!"); Izņēmuma ziņojums ("Nav savienojuma ar datu bāzi!"); Report(ErrorDescription()); // Informācija = Informācija par kļūdu(); // Pārskats("Apraksts= "" + Info.Apraksts + """); // Pārskats ("Moduļa nosaukums= "" + Info.Moduļa nosaukums + """); // Pārskats ("LineNumber=" + Info.LineNumber); // Pārskats ("SourceLine= "" + Info.SourceString + """); Atgriezties; EndAttempt;

Kur reģistrēt bibliotēku, klientā, 8.2 serverī, 8.3 serverī? Attēls zemāk.
(klienta-servera versijai un 1C datu bāzes faila versijai)

Atbilde: Bija uzdevums sazināties ar vienu termināli, izmantojot tīmekļa pakalpojumu. Bāze ir, teiksim, viegla. Arī 0,5 vai ātrāk?

Grūti pateikt – man nav pietiekami daudz datu. Mūs iepriecināja 0,5 sekundes, mīnus nevajadzīgais 1C klients trešās puses mašīnā, mīnus bibliotēkas versiju sinhronizācija pēc 1C dzinēja atjaunināšanas, mīnus dieva sasodītā comsafearray, normāli nosaukumi un lauku tipi... Viņš domāja par mums no plkst. otra puse (sistēma, kas integrējas ar 1C) "viņi nesapratīs", kad izrādīsies, ka viņiem ir jāpārraksta savi 1C zvani uz jaunu "sistēmas komunikācijas modeli". Taču, vienu reizi testu datubāzē izmēģinājuši vienu funkciju, tagad mūs ķircina ar “pārslēgsimies uz pakalpojumu pēc iespējas ātrāk”.

Jautājums: Kā Com objektiem izmantot TypeContains?


Ja Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) then There IsNomenclature = True; endIf;

"Props" tika saņemts no com savienojuma ar citu 1c datu bāzi. Salīdzinot, rodas kļūda:

(Ārējā apstrāde.Koeficienta pārrēķins.Form.Form.Form(183)): Kļūda, izsaucot konteksta metodi (ContainsType)
Ja Atribūts.Tips.ContainsType(Tips("DirectoryLink.Nomenclature")) Tad
tāpēc ka:
Radās izņēmums (1C: Enterprise 8.3.8.1964): veida neatbilstība (parametra numurs "1")

Man ir aizdomas, ka tas ir jāsalīdzina ar veidu com? Kā pareizi pārbaudīt tipu?

Atbilde:

Tas neripo. Es atrisināju problēmu šādi:
Vispārējā moduļa uztvērēju datu bāzē, kurā ir atzīmēta ārējā savienojuma izvēles rūtiņa, kods ir:

Funkcija CheckAttributeType(Atribūts, Tips) Eksportēt Atgriešanās Atribūts.Tips.ContainsType(Tips(Tips)); EndFunction

Datubāzē, no kuras es izveidoju savienojumu, es izsaucu procedūru, izmantojot Com:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType (atribūts, "DirectoryLink.Nomenclature")

Drukāt (Ctrl+P)

Viena no iespējām datu apmaiņai starp 1C datu bāzēm ir apmaiņa, izmantojot COM savienojumu. Izmantojot COM savienojumu, varat izveidot savienojumu no vienas 1C datu bāzes ar otru un lasīt vai rakstīt datus. Šo metodi var izmantot gan datu bāzu klienta-servera versijās, gan failu datu bāzēs. Šajā rakstā ir apskatīti šāda veida savienojumi platformā 8.3

com savienojums

Lietojumprogrammai 1C varat izveidot divu veidu COM objektus. Tie ir ole savienojumi V83.Pieteikums un com savienojumi V83.COM savienotājs . Gadījumā, ja V83.Pieteikums Tiek palaista gandrīz pilnvērtīga lietojumprogrammas 1C kopija. Lietošanas gadījumā V83.COM savienotājs Tiek palaista neliela servera daļa. Darbības ātrums šajā gadījumā ir lielāks, taču dažas funkcijas var nebūt pieejamas. Jo īpaši darbs ar formām un kopējiem moduļiem, kuriem nav iestatīts īpašums strādāt ar ārējiem savienojumiem. Lielākoties jums vajadzētu izmantot V83.COM savienotājs un tikai funkcionalitātes trūkuma gadījumā V83.Pieteikums. Darbības ātruma atšķirības var būt īpaši pamanāmas liela apjoma datu bāzēs. Izmantotajai platformai 8.2 V82.Application vai V82.COMConnector

Izveidojiet OLE savienojumu

Savienojums = jauns COMObject(“V83.Application” );

Izveidojiet COM savienojumu

Savienojums = jauns COMObject(“V83.COMConnector” );

Savienojuma virkne

//Klienta-servera opcijai
Savienojuma virkne= "Srvr = ""Servera nosaukums" ";Ref = " "Bāzes nosaukums" ;
//Failu režīma opcijai:
Savienojuma virkne= "Fails = ""PathKBase" “; Usr = Lietotājvārds; Pwd = parole”;
Mēģinājums
Savienojums = savienojums . Savienot(Savienojuma virkne) ;
Izņēmums
Ziņojums = New MessageToUser;
Ziņa . Teksts = “Neizdevās izveidot savienojumu ar datu bāzi” + AprakstsKļūdas(); Ziņa . Ziņot();
EndAttempt ;

Atvienošanās

Savienojums = Undefined ;
Objektam V83.Pieteikums Savienojums ir jāpārtrauc, pretējā gadījumā paliks nepilnīga sesija, kas pēc tam būs manuāli jāizdzēš. Gadījumā, ja V83.COM savienotājs savienojums tiek pārtraukts automātiski, kad tiek pabeigta procedūra, kurā tika izveidots savienojums.Un ir vēl viens mazs punkts. Lietotājam, kuram tiek izveidots savienojums, tā iestatījumos ir jāatspējo izvēles rūtiņa “Pieprasīt apstiprinājumu, aizverot programmu”.

NewObject() metode

Lai izveidotu jaunu objektu, varat izmantot NewObject() metodi, piemēram:

Priekš V83.COM savienotājs

PieprasītCOM = Savienojums. NewObject( "Pieprasīt") ;
TableCOM = Savienojums. NewObject( "Vērtību tabula") ;
ArrayCOM = savienojums. NewObject ("Masīvs");

ViewCOM =Savienojums.JaunsObjekts

Priekš V83.Pieteikums

RequestOLE = Savienojums. NewObject(“ Pieprasīt ") ;
TableOLE = savienojums. Jauns objekts("Vērtību tabula") ;
ArrayOLE = Connection.NewObject(“Masīvs” );
ViewCOM =Savienojums.JaunsObjekts(“UniqueIdentifier”, StringUID);

PieprasītCOM . Teksts ="IZVĒLIES
| Organizāciju amati. Kods,
| Organizāciju amati.Nosaukums
|NO | Direktorija.Organizāciju pozīcijas
ORGANIZĀCIJAS AMATĀM”;

Rezultāts = PieprasītCOM. Palaist();
Paraugs = Rezultāts. Izvēlieties () ;
Ardievu atlase. Nākamais()Cikls
EndCycle ;
Varat arī izmantot konfigurācijas objektu pārvaldniekus:
DirectoryCOM = savienojums. Katalogi. DirectoryName;
DokumentsCOM = Savienojums. Dokumentācija. dokumenta nosaukums;
RegisterCOM = savienojums. Informācijas reģistri. ReģistrētiesNosaukums ;

Uzskaites saņemšana un salīdzināšana, izmantojot COM savienojumu

Lai salīdzinātu konfigurācijā definēto uzskaites elementu vērtības, šie elementi ir jāpārvērš vienā no primitīvajiem veidiem, kuru salīdzināšana ir vienkārša. Šādi tipi var būt gan ciparu, gan virknes tipi. Uzskaitījuma elementa vērtību var pārvērst par skaitlisko veidu, piemēram:

Enum vienums = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues = Enum Element.Metadata().Enum Values;

EnumerationElementNumber = IespējamāsVērtības.Indekss(IespējamāsVērtības.Atrast(Savienojums.XMLString(Uzskaitīšanas elements)));

Ja EnumerationItemNumber = 0, tad Report( “Uzskaitīšanas vērtība1”);

ElseIfEnumerationItemNumber = 1 Tad Pārskats("UzskaitīšanasVērtība2");

endIf;

Objekta izgūšana, izmantojot COM, izmantojot identifikatoru

Izmantojot konfigurācijas objektu pārvaldniekus, mēs iegūstam com objektu, piemēram:
DokumentsCOM = Savienojums. Dokumentācija. dokumenta nosaukums;

Tad mēs iegūstam unikālu identifikatora virkni:

StringUID =Savienojums.virkne ( DocumentCOM.UniqueIdentifier())

Identifikators = jauns U unikālaisIdentifier (StringUID);
AR linkByIdentifier = Dokumenti[Dokumenta nosaukums].GetLink(Identifier);

Ja jums ir jāatrod com objekts pēc dokumenta pēc identifikatora, jums jāraksta šādi:

WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);
LinkByIdentifier = Connection.Documents[Dokumenta nosaukums].GetLink(WidCOM);

Viens veids, kā pārsūtīt datus no vienas 1C konfigurācijas uz citu, ir programmatūras savienojums, izmantojot COM. Daudzi uzņēmumi izmanto vairākas dažādas datu bāzes, starp kurām ir jābūt noteiktiem savienojumiem un atkarībām. Ja nepieciešams ne tikai pārsūtīt datus, bet arī veikt noteiktu datu apstrādi, tad COM savienojums būs optimālais mehānisms. Spēja analizēt datus no citas 1C datu bāzes ir noderīga jebkuram izstrādātājam.

Mēs savienojam ar 1C datu bāzi, izmantojot COM

Lai ieviestu COM savienojumu 1C, tiek izmantots īpašs mehānisms ar nosaukumu COMConnector. Šis objekts ir uzstādīts kopā ar platformu un tiek izmantots informācijas bāzu savienošanai. Jāatzīmē, ka versijām 8.2 un 8.3 tiek izmantoti objekti ar dažādiem nosaukumiem - attiecīgi “V82.COMConnector” un “V83.COMConnector”.

Atcerieties, ka COM savienojuma ilgums ar datu bāzi maksā licenci – neaizraujieties ar vairāku savienojumu vienlaicīgu izpildi. Tas ir īpaši svarīgi organizācijām, kurām ir ierobežots licenču skaits. Šo problēmu var atrisināt, izmantojot rutīnas uzdevumus, kas tiek izpildīti, ja nav aktīvo lietotāju savienojumu ar informācijas bāzi.

Lai varētu izveidot savienojumu ar citu datu bāzi un pieprasīt nepieciešamo informāciju, jums jāzina šādi dati:

  1. Kāda veida tas ir - fails vai klients-serveris;
  2. Kur tas atrodas;
  3. Kādu vārdu un paroli var izmantot, lai pieteiktos?
  4. Kādi dati jūs interesē?

No pirmajiem trim punktiem, lai ieviestu COM savienojumu, jums ir jāizveido parametru virkne. Atkarībā no informācijas drošības veida tas atšķirsies izskats. Izmantojot saņemto virkni, tiek izveidots savienojums, ar kura palīdzību jūs varat savākt datus no citas datu bāzes analīzei un apstrādei, izmantojot jebkādas metodes.

Savienojuma parametriFileIB = "Fails=""Path_to_database""; Usr=""Lietotāja_vārds"";Pwd=""Parole"""; Savienojuma parametriClientServerIB = "Srvr=""Servera_nosaukums""; Ref=""Datu bāzes_nosaukums""; Usr=""Lietotāja_nosaukums""; Pwd=""Parole""";

Savienojuma funkcija ir vienkārša, un tai nevajadzētu radīt nekādus jautājumus, ja visi parametri ir norādīti pareizi. Lai paātrinātu atkļūdošanu un analīzi iespējamās kļūdas savienojumu labāk ir iekļaut konstrukcijā “Izmēģināt”. Funkcija atgriezīs “COM objekta” tipa vērtību, ar kuru jūs strādāsiet, lai iegūtu nepieciešamos datus.

&OnServer funkcija ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c database\ERP""; Usr=""Administrators"";Pwd=""1"""; V83COMCon= jauns COMObject("V83.COMConnector"); Mēģināt atgriezt V83COMCon.Connect(IB savienojuma parametri); Izņēmuma ziņojums(ErrorDescription()); Atgriezties Undefined; EndAttempt; EndFunction

Izmantojot COM savienojumu, jūs varat ne tikai atlasīt datus, bet arī pievienot tos datubāzei, ar kuru veidojat savienojumu. Atcerieties, ka mēs varam pārsūtīt 4 primitīvus datu tipus, izmantojot COM objektu. Citi veidi būs jānorāda, izmantojot platformā iebūvētās meklēšanas funkcijas. Lūdzu, ņemiet vērā, ka globālās platformas funkcijas tiek izsauktas arī, izmantojot COM savienojumu.

Mēs saņemam datus no 1C datu bāzes

Kad esat saņēmis vēlamo objektu, jums ir jānolasa dati no citas datu bāzes. Lai to izdarītu, mēs izmantojam pieprasījumu, izmantojot COM savienojumu 1C 8.3, izmantojot no funkcijas saņemto “COM objekta” tipa vērtību. Ir svarīgi vispirms izveidot savienojumu ar datu bāzi un pēc tam izpildīt pieprasījumu. Izpilde notiek, izmantojot NewObject metodi, kā parametru norādot objekta tipu virknes formā - “Pieprasījums”.

&OnServer procedūra TestCOMOnServer() Connection = ConnectToBase(); Ja TypeValue(Savienojums) Tips("Nedefinēts"), Tad RequestBPZO = Connection.NewObject("Pieprasījums"); RequestBPZO.Text = "ATLASĪT pirmos 15 | DirectoryUser.Name AS nosaukums | FROM | Directory.users AS DirectoryUser"; Select = RequestBPZO.Execute().select(); Kaut atlase.next() cilpa Report(Selection.Number); EndCycle; endIf; Procedūras beigas >

Piemēram, lai iegūtu informāciju par noteiktas nodaļas lietotājiem, mēs pieprasījumā iestatīsim nosacījumu, izmantojot parametrus. Viens parametrs būs vienkārša tipa - virkne, un dalījums būs saite uz direktorija elementu "Uzņēmuma struktūra". Vaicājuma rezultāts ir tabula ar uzskaitītajiem laukiem tāda veida, kāds tie pastāv datu bāzē, ar kuru tika izveidots COM savienojums. Ja vēlaties tos pārveidot par citiem veidiem, izmantojiet standarta platformas funkcijas:

  • Line();
  • Skaitlis();
  • Datums().
RequestBPZO = Connection.NewObject("Pieprasījums"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department = &RequiredDepartment | Un DirectoryUser.Name, piemēram, ""%"" + &RequiredName+ ""%""" ; Pieprasīt BPZO.SetParameter("Nepieciešamā nodaļa", Savienojums. Katalogi. Uzņēmuma struktūra. Atrast pēc koda ("00-000023")); RequestBPZO.SetParameter("RequiredName","Jekaterina"); Select = RequestBPZO.Execute().select(); Kamēr Selection.next() cilpa Report(Selection.Name); EndCycle;

Ja nepieciešams pārsūtīt masīvu uz datu bāzi atlasei, pamatojoties uz vairākiem parametriem, piemēram, nodaļas, tiek izmantota arī komanda NewObject. Līdzīgi varat nodot vērtību sarakstu vai tabulu, aizpildot tos ar citas datu bāzes elementiem, izmantojot savienojumu. Visi ir pieejami meklēšanai esošās metodes platformas objekti un mehānismi.

RequestBPZO = Connection.NewObject.("Pieprasījums"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&Nepieciešamsnodaļa) | Un DirectoryUser.Name, piemēram, ""%"" + &NepieciešamsName+ ""%" " "; Nodaļu masīvs = Connection.NewObject("Masīvs"); Nodaļu masīvs.Pievienot(Savienojums.Katalogi.Uzņēmuma struktūra.Atrast pēc koda("00-000023")); Nodaļu masīvs.Pievienot(Savienojums.Katalogi.Uzņēmuma struktūra.Atrast pēc koda("00-000038")); Nodaļu masīvs.Pievienot(Savienojums.Katalogi.Uzņēmuma struktūra.Atrast pēc koda("00-000046")); Pieprasīt BPZO.SetParameter ("Nepieciešamā nodaļa", nodaļu masīvs); RequestBPZO.SetParameter("RequiredName","Jekaterina"); Select = RequestBPZO.Execute().select(); Kamēr Selection.next() cilpa Report(Selection.Name); EndCycle;

Pārsūtot dokumentus vai direktoriju elementus, vienmēr rodas jautājums par konkrēta objekta nodošanas kontroli. Ar COM savienojumu palīdzību šādas problēmas var atrisināt, izmantojot unikālu identifikatoru. Spraudņu datu bāzē ir jāatrod objekts pēc identifikatora no pašreizējās informācijas drošības, izmantojot funkciju “GetLink”, izmantojot identifikatoru kā virkni. Ja tāds nav atrasts, varat to izveidot, izmantojot COM savienojumu.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UnikālaisIdentifier()); Ja NAV ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UnikālaisIdentifier", StrIdent))), tad NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Nosaukums; NewUser.Individual = Directories.Users.FindByCode("00-0000313"). Individuāls; NewUser.Write(); endIf;

Arī COM savienojumam ir tiesības izmantot procedūras un funkcijas no parastajiem 1C moduļiem ar iespējotu rekvizītu “Ārējais savienojums”. Papildus šim nosacījumam izsauktajai funkcijai vai procedūrai ir jābūt eksportētai, un tajā nedrīkst ietvert serverī veiktās interaktīvas darbības. Pretējā gadījumā tiks parādīts kļūdas ziņojums par nederīgu darbību.

Savienojums..; VariableFunction = Savienojums..; funkcijas izsaukums>vispārējais moduļa nosaukums>procedūras izsaukums>vispārējais moduļa nosaukums>

Ārēja savienojuma iespējas ar citu datu bāzi 1C ir diezgan plašas un ļauj veikt daudzus uzdevumus. Svarīgi ir spēt pareizi novērtēt instrumentus un izvēlēties optimālo risinājumu. Vairumā gadījumu šī prasme parādās tikai ar pieredzi vai pētot pieredzējušu speciālistu darba piemērus.


Atslēgvārdi: COM, savienojums, ārējais, OLE, Automatizācija, Savienojums, ComConnector, Srvr

Izmantojot 1C:Enterprise 8.0 COM savienojumus, lai piekļūtu datiem, salīdzinājumā ar automatizācijas servera izmantošanu ir šādas priekšrocības:

  1. Ātrāka savienojuma izveide, jo nav nepieciešams izveidot atsevišķu operētājsistēmas procesu, un visas darbības tiek veiktas zvanīšanas procesa ietvaros;

  2. Ātrāka piekļuve 1C:Enterprise objektu īpašībām un metodēm, jo ​​piekļuves organizēšanai nav nepieciešama starpprocesu komunikācija;
  3. Mazāks operētājsistēmas resursu patēriņš.

Kopumā darbs ar 1C:Enterprise 8.0, izmantojot COM savienojumu, ir līdzīgs darbam ar 1C:Enterprise servera automatizācijas režīmā. Galvenās atšķirības ir šādas:

  1. Automatizācijas servera gadījumā tiek palaista pilnvērtīga 1C:Enterprise 8.0 lietojumprogramma, bet COM savienojuma gadījumā tiek palaists salīdzinoši neliels procesā esošais COM serveris.

  2. Strādājot, izmantojot COM savienojumu, funkcionalitāte vienā vai otrā veidā, kas saistīta ar 1C:Enterprise 8.0 lietotāja interfeisa organizāciju, nav pieejama;
  3. Izmantojot COM savienojumu, 1C:Enterprise 8.0 konfigurācijas lietojumprogrammas modulis netiek izmantots. Tā lomu, strādājot ar COM savienojumu, veic ārējā savienojuma modulis.

1.1 COM savienojuma izveides procedūra

Lai organizētu piekļuvi 1C:Enterprise 8.0 datiem, izmantojot COM savienojumu, tiek veikta šāda darbību secība:

  1. tiek izveidots COM objekts ar identifikatoru V8.COMConnector, ar kura palīdzību tiek izveidots savienojums;

  2. tiek izsaukta iepriekš izveidotā V8.COMConnector objekta Connect metode. Savienojuma metode atgriež saiti uz COM savienojuma objektu ar 1C:Enterprise 8.0 informācijas bāzi;
  3. Izmantojot saņemto COM savienojuma objektu, tiek piekļūts tās informācijas bāzes derīgajām metodēm, īpašībām un objektiem, ar kuru tiek izveidots savienojums.

Svarīgs! Tā kā COM savienojumā nav lietotāja interfeisa, COM savienojumā nevar izmantot visus objektus, rekvizītus un metodes.

1C: uzņēmuma objekti, kas pieejami ārēji, izmantojot COM savienojumu:

  1. Eksportēti ārējā savienojuma moduļa mainīgie un procedūras/funkcijas

  2. Eksportētie mainīgie un parasto moduļu procedūras/funkcijas
  3. Visu moduļu iekļaušana un izslēgšana, iestatot parasto moduļu īpašības

  4. Kopējo moduļu fragmentu iekļaušana un izslēgšana, izmantojot priekšprocesoru
  5. Globālais konteksts 1C: Enterprise 8.0, izņemot objektus, kas ir cieši saistīti ar klienta lietojumprogrammu (TextDocument, TabularDocument, ...)

1.2 Ārējā savienojuma modulis

Kā jau minēts, lietojumprogrammas moduļa pienākumus, strādājot ar COM savienojumu, veic ārējais savienojuma modulis. Šim modulim var būt notikumu apstrādātāja procedūras When SystemStarts() un WhenSystemCompletes(), kas var ietvert darbības, kas tiek veiktas attiecīgi pēc savienojuma inicializācijas un pārtraukšanas.

Procedūras, funkcijas un globālie mainīgie, kas definēti ārējā savienojuma modulī ar atslēgvārdu Eksportēšana, tāpat kā lietojumprogrammas moduļa gadījumā, kļūst par globālā konteksta daļu.

1.3. Kopīgie moduļi

Kopējiem moduļiem ir ieviesti rekvizīti "Klients", "Serveris" un "Ārējais savienojums". Tie paredzēti, lai konfigurācijā noteiktu moduļu izmantošanu klienta - servera versijā un COM savienojuma režīmā.

1.4 Objekts "V8.COMConnector"

Vienīgais uzdevums, ko atrisina V8.COMConnector COM objekts, ir COM savienojuma izveide ar 1C:Enterprise 8.0 informācijas bāzi. Izmantojot vienu V8.COMConnector objekta gadījumu, var izveidot neierobežotu skaitu savienojumu. Objektam V8.COMConnector ir viena savienojuma metode, kas paredzēta COM savienojuma izveidei ar 1C:Enterprise 8.0 informācijas bāzi.

<СтрокаСоединенияИБ>

Savienojuma līnija ar informācijas drošības sistēmu ir formas Parametrs=Vērtība fragmentu ķēde. Fragmenti ir atdalīti viens no otra ar ";". Ja vērtība satur atstarpes, tā ir jāiekļauj dubultpēdiņas (").

Parastie parametri:

Usr - lietotājvārds;
Pwd - parole.

Faila versijai ir definēts šāds parametrs:

Fails - informācijas bāzes direktorijs.

Klienta-servera opcijai ir definēti šādi parametri:

Srvr — 1C:Uzņēmuma servera nosaukums;
Ref - servera informācijas bāzes nosaukums.

Savienojuma metode izveido COM savienojumu ar 1C:Enterprise 8.0 informācijas bāzi un atgriež saiti uz COM savienojuma objektu.

// Tiek izveidots savienotāja objekts
V8 = jauns COMObject("V8.COMConnector");
// tiek izveidots COM savienojuma objekts
Savienojums = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Direktors"";")

1.5 COM savienojuma objekts

COM savienojums ar 1C:Enterprise informācijas bāzi nodrošina pilnīgu piekļuvi tās globālajam kontekstam (skatiet “Programmas moduļa izpildes konteksts”). Tāpēc COM savienojuma metodes var būt: sistēmas konstantes, objektu konfiguratorā norādītās vērtības, kurām piekļūst, izmantojot pārvaldniekus (piemēram, konstantes, uzskaitījumi, direktoriji, dokumenti, dokumentu žurnāli, atskaites, apstrāde, tipu plāni raksturlielumu, plānu kontu, aprēķinu veidu plānu, reģistru), kā arī ārējā pieslēguma modulī ar atslēgvārdu Eksportēt deklarētos mainīgos.

Turklāt COM savienojumam ir papildu NewObject metode, ko var izmantot, lai izveidotu noteikta veida vērtības.

tk = Savienojums. NewObject ("Vērtību tabula");

Virknes metode Ļauj iegūt 1C:Enterprise vērtību virknes attēlojumus.

Skats = Connection.String(Data.UnikālaisIdentifier());

1.6. Iezīmes darbam ar COM savienojumu

Automatizācijā un COM savienojumā TRUE un FALSE ir šādas vērtības: -1 (mīnus viens) un 0.

Ir iespējams organizēt COM savienojumu kopu. Tajā pašā laikā saņēmējā serverī 1C:Enterprise tiek izveidoti vairāki COM savienojuma objekti IEPRIEKŠĒ, un savienojuma izveide prasa vēl mazāk laika, jo nav nepieciešams izveidot jaunu objektu.

Ir ieviests jauns Query Builder objekts, kas paredzēts vaicājuma tekstu ģenerēšanai, pamatojoties uz norādītajiem iestatījumiem. Šis objekts atbalsta atskaišu veidotāja funkcionalitāti, kas nav saistīta ar atskaites izvadīšanu izklājlapas dokumentā un citus uzdevumus, kas saistīti ar lietotāja interfeiss. Šo objektu var izmantot serverī 1C:Enterprise un COM savienojumā.

Palaižot iebūvēto valodu serverī 1C:Enterprise, varat izmantot COM objektus.

COM kļūdas tiek pārveidotas par iegulto valodu izņēmumiem.

Ja konfigurācija mēģina izveidot nederīgu objektu, piem. izklājlapas dokuments, ārējā savienojuma modulī, koplietotā modulī vai objekta modulī COM savienojums var netikt izveidots vai var tikt pārtraukts kā izņēmums.

Viena no iespējām datu apmaiņai starp 1C datu bāzēm ir apmaiņa, izmantojot COM savienojumu.

Izmantojot COM savienojumu, varat izveidot savienojumu no vienas 1C datu bāzes ar otru un lasīt vai rakstīt datus. Šo metodi var izmantot gan datu bāzu klienta-servera versijās, gan failu datu bāzēs. Šajā rakstā mēs aplūkosim šāda veida savienojuma piemērus. Piemēros izmantota platforma 8.2.

Lietojumprogrammai 1C varat izveidot divu veidu COM objektus. Šis V82.Pieteikums Un V82.COMConnector. Gadījumā, ja V82.Pieteikums Tiek palaista gandrīz pilnvērtīga lietojumprogrammas 1C kopija. lietošanas gadījumā V82.COMConnector Tiek palaista neliela servera daļa.
Darbības ātrums šajā gadījumā ir lielāks, taču dažas funkcijas var nebūt pieejamas. Jo īpaši darbs ar formām un kopējiem moduļiem, kuriem nav iestatīts īpašums strādāt ar ārējiem savienojumiem. Lielākoties jums vajadzētu izmantot V82.COMConnector un tikai funkcionalitātes trūkuma gadījumā V82.Pieteikums. Darbības ātruma atšķirības var būt īpaši pamanāmas liela apjoma datu bāzēs.

Tātad sāksim

  1. Izveidosim COM objektu
    • Priekš V82.Pieteikums Savienojums = New COMObject("V82.Application" );
    • Priekš V82.COMConnector Savienojums = jauns COMObject("V82.COMConnector" );
  2. Izveidosim savienojuma virkni
    • datu bāzes servera versijai ConnectionString = "Srvr = " "ServerName" ";Ref = " "Pamatnosaukums" ;
    • datu bāzes faila versijai ConnectionString = "File = " "PathKBase" "; Usr = lietotājvārds; Pwd = parole";
  3. Savienojuma izveide ar datu bāzi Mēģināt izveidot savienojumu = savienojums. Connect(ConnectionString) ; Izņēmuma ziņojums = New MessageToUser; Ziņojums. Teksts = + ErrorDescription() ; Ziņojums. Ziņot() ; EndAttempt ;
  4. Atvienošanās no datu bāzes Savienojums = Undefined ;

    Objektam V82.Pieteikums Savienojums ir jāpārtrauc, pretējā gadījumā paliks nepilnīga sesija, kas pēc tam būs manuāli jāizdzēš. Gadījumā, ja V82.COMConnector savienojums tiek pārtraukts automātiski, kad tiek pabeigta procedūra, kurā tika izveidots savienojums.Un ir vēl viens mazs punkts.

    Lietotājam, kuram tiek izveidots savienojums, tā iestatījumos ir jāatspējo izvēles rūtiņa “Pieprasīt apstiprinājumu, aizverot programmu”.

Tagad saliksim visu kodu kopā

Savienojums = New COMObject("V82.Application" ); //Savienojums = Jauns COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Serveris1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Fails = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Mēģināt izveidot savienojumu = savienojums. Connect(ConnectionString) ; Izņēmuma ziņojums = New MessageToUser; Ziņojums. Teksts = "Nevarēja izveidot savienojumu ar datu bāzi"+ DescriptionError() ; Ziņojums. Ziņot() ; EndAttempt ; Savienojums = Undefined ;

Savienojuma veidam V82.Pieteikums metode tiek izmantota sākotnēji izveidotajam COM objektam un V82.COMConnector metode tiek piemērota savienojumam. turpinās darbs ar pieprasījumu standarta līdzekļi 1C. kodā tas izskatās šādi:

Pieprasījums = savienojums. NewObject("Pieprasījums" ); // Priekš V82.COMConnector Pieprasījums = savienojums. NewObject("Pieprasījums" ); // Priekš V82.Pieteikums Pieprasīt. Teksts = "ATLASĪT | Organizāciju amati. Kods, | Organizāciju amati.Nosaukums|NO | Direktorija. Organizāciju amati AS Organizāciju amati"; Rezultāts = pieprasījums. Palaist(); Paraugs = Rezultāts. Izvēlieties() ; Ardievu atlase. Next() Loop EndCilpa ;

Versijai 1C: Enterprise 8.3 viss paliek nemainīgs, izņemot to, ka, veidojot COM objektus, ir jāizmanto "V83.COMConnector" vai "V83.Lietojumprogramma".




Tops