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
Atbilde:
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.
- Ā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ņš.
- 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.
Ā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
Atbilde:
Jautājums: Com savienojums no failu datu bāzes uz failu datu bāzi
Atbilde:
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:
- Kāda veida tas ir - fails vai klients-serveris;
- Kur tas atrodas;
- Kādu vārdu un paroli var izmantot, lai pieteiktos?
- 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; EndFunctionIzmantojot 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().
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:
- Ā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;
- Ā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ņš.
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:
- 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.
- 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;
- 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:
- tiek izveidots COM objekts ar identifikatoru V8.COMConnector, ar kura palīdzību tiek izveidots savienojums;
- 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;
- 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:
- Eksportēti ārējā savienojuma moduļa mainīgie un procedūras/funkcijas
- Eksportētie mainīgie un parasto moduļu procedūras/funkcijas
- Visu moduļu iekļaušana un izslēgšana, iestatot parasto moduļu īpašības
- Kopējo moduļu fragmentu iekļaušana un izslēgšana, izmantojot priekšprocesoru
- 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
- Izveidosim COM objektu
- Priekš V82.Pieteikums Savienojums = New COMObject("V82.Application" );
- Priekš V82.COMConnector Savienojums = jauns COMObject("V82.COMConnector" );
- 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";
- 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 ;
- 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".