Motta data via com-tilkobling fra 1s. V8: COM-tilkobling. Motta og sammenligne oppregning via COM-tilkobling
Spørsmål: Parsing av et nettsted ved hjelp av COM IE 11
Svar:
Spørsmål: COM-tilkobling 1C 8.3 - 1C 8.3 Er det mulig å legge inn feilsøkeren i forbindelsen
Jeg ønsket å spørre medlemmer av forumet om det i det hele tatt er mulig å feilsøke når jeg kobler til via en COM-tilkobling ved hjelp av behandling fra én database på plattform 8.3.6 (BP 3.0) til den eksterne tilkoblingsmodulen til en selvskrevet database (kjører også på plattform 8.3.6) og kalle eksporter fra den prosedyrer ved hjelp av behandling? Databasene er i dag filbaserte og ligger på én PC, men det er planlagt en serverversjon. Frem til dette tidspunkt brukte jeg konstruksjonene nedenfor for å overføre vilkårlig kode for utførelse over en COM-forbindelse, samt for å logge feil. Her er fragmenter av prosedyrer i den selvskrevne databasen i den eksterne tilkoblingsmodulen:
Funksjon ExecuteIn(CodeExecute, Auxiliary Parameter = "") Eksporter
Sikkerhetskontroll(); // Beskyttelse mot forsøk på å utføre ondsinnet kode ved ekstern tilkobling på vegne av en annen bruker Svar = "0" //Hvis ingenting må returneres, så hvis det ikke er noen feil i koden  //returnerer bare OK  //Fordi Den overførte koden kan inneholde feil, så vil vi pakke utføringen av den i et forsøk. Prøv å kjøre(CodeExecute); // Kjør koden som en streng på en annen datamaskin via en COM-tilkobling (Libra Base External Connection Module) Unntak   //hvis det er en feil, returner deretter teksten Response = ErrorDetailView(ErrorInfo()); EndAttempt ; Returner svar; EndFunction Funksjon TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Beskyttelse mot forsøk på å utføre ondsinnet kode ved ekstern tilkobling på vegne av en annen bruker. OutParameter = "Det er en forbindelse med vektbasen via COM-forbindelse!"; Returner True ; EndFunction
Fra BP 3.0 kjører jeg følgende fragment:
Forsøk
Com = New COMObject("V83.COMConnector"); Connection = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Test bestått! Det er en forbindelse til vektdatabasen"); Exception Error = ErrorDetailView(ErrorInfo()); TellUser("Det er ingen COM-forbindelse til Libra-basen! Detaljer"+Feil); Com=Udefinert ; Komme tilbake ; EndAttempt ; Ut = ""; I = "1"; If Connection.Communication Test(In, Out) Then TellUser("Kommunikasjonstest med skalakonfigurasjon vellykket! Svar: "+Out); Ellers TellUser("Kommunikasjonstest med skalakonfigurasjonen mislyktes! Svar: "+Ut); Slutt om ;
Jeg forstår selvfølgelig at det ikke vil være mulig å gå inn i Execute(CodeString1C8)-operatøren, men er det en slik mulighet når man kaller en ekstern modulprosedyre ekstern tilkobling fra hoveddatabasen Connection.TestConnections(In, Out) for å skrive inn koden i samme debugger-sesjon i Security Check()-funksjonen til anropsprosedyren deres?
Jeg har allerede sett på dokumentasjonen jeg kunne finne om dette problemet. Jeg angir alternativene for å aktivere feilsøking og bruddpunkter overalt i begge konfigurasjonene. Jeg lanserte begge konfiguratorene.
Er det til og med mulig i denne situasjonen å feilsøke Security Check()-prosedyren lenger på siden av den eksterne tilkoblingsmodulen?
Spørsmål: Feil IP-adresse i COM-tilkobling
Det er prosessering som overfører dokumenter via V83.ComConnector mellom servere. Server 1 (1C versjon 8.2.19.90) kobles alltid til Server 2 (versjon 8.3.8.2033). Tilkoblingslinjen inneholdt IP-adressen til server 2 og alt fungerte bra. På selve server 1 så jeg også den installerte plattformen som på server 2, versjon 8.3.9.2033 (hvis dette er viktig).
Problemet er at på Server 2 endret IP-adressen, behandlingen sluttet selvfølgelig å fungere, og når jeg la inn en ny IP i tilkoblingslinjen, genererer behandlingen en feil, hvis beskrivelse fortsatt er den gamle IP-en (!) og teksten "Et forsøk på å opprette en tilkobling var mislykket, fordi det nødvendige svaret ikke ble mottatt fra en annen datamaskin innen den nødvendige tiden, eller etablert forbindelse på grunn av feil svar fra en allerede tilkoblet datamaskin."
De restartet alt, tømte cacher osv., admins sverger at alt er ok fra deres side, du kan logge inn fra en server til en annen via RDP osv.
Hva kan være galt, hvordan kan jeg løse det? Jeg så over hele Internett og kunne ikke finne en slik situasjon!
Svar:() 100% sikker! Den andre dagen jeg prøver, som jeg skrev, ser jeg på det med en debugger, jeg opprettet til og med en dum enkeltcellebehandling for en tilkoblingstest, den feilen dukker opp og det er det
Spørsmål: COM-tilkobling til forskjellige versjoner
Hei alle sammen.
Jeg har en database ala "Consolidation", som samler forskjellige data fra forskjellige databaser og samler alt i en haug. Problemet er at du må koble til disse databasene via com, men de er forskjellige versjoner, så til slutt får jeg en feil som
Tilkoblingsfeil!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Feil ved oppkalling av kontekstmetoden (Connect) : Et unntak oppstod (V83.COMConnector. 1 ): Mismatch mellom klient- og serverversjoner 1 C:Enterprise Client versjoner er forskjellige og server (8.3. 8.1964 - 8.3. 6.2332), klientapplikasjon: COM-tilkobling
Jeg setter opp en tilkobling, en annen faller av...
Jeg vet at du på en eller annen måte, gjennom komponenttjenesten, kan lage "dine egne klasser (koblinger)" for hver versjon og deretter lage et nytt COM-objekt som tilsvarer plattformversjonen av klassen ... kanskje jeg tar feil.
Hjelp meg å løse dette problemet...
Svar: Det var det... jeg fjerner spørsmålet..
Spørsmål: Com-feil ved behandling av fylling
Hallo.
8.2 Detaljhandel 1.
Jeg kobler til 8.1 Ikke en typisk konf.
Jeg kobler til databasen via com og prøver å lage et dokument, men når jeg kaller "CreateDocument()" eller "GetObject()" oppstår det en feil i prosedyren Behandler Fylling. se fig.
Jeg prøver det samme i selve 8.1-databasen, men det er ingen feil, og jeg går heller ikke inn i Fyllingsbehandling.
Hva kan være galt?
Svar: turboq, en skjevt skrevet dokumentmodul!
Lagt til etter 5 minutter
Hun heter ikke! Hun prøver å kompilere! Men siden når du kobler til via ComConnector, eksisterer ikke dialogmodusproblemet, kan dokumentmodulen ikke kompileres.
For slike tilfeller, når det er nødvendig å implementere arbeid med en dialog i en objektmodul, bruk instruksjoner til forbehandleren
Dette er ikke din feil, men en feil i dokumentmodulen i databasen du kobler til.
I databasen kjøres koden på klienten og det er en dialogmodus, så alt skjer uten feil
Ikke bruk ComConnector, V8.Application for tilkobling, da vil grensesnittet være tilgjengelig for deg
Lagt til etter 5 minutter
=======================================================================================================================
fra beskrivelsen av den eksterne tilkoblingen (SP) Jeg fremhevet med fet skrift hva du bør lese om ComConnections
Beskrivelse:
Generelt er det å jobbe med 1C:Enterprise 8 via en ekstern tilkobling som å jobbe med 1C:Enterprise i serverautomatiseringsmodus. De viktigste forskjellene er som følger:
- Når det gjelder en automatiseringsserver, startes en fullverdig 1C:Enterprise 8-applikasjon, og i tilfelle en ekstern tilkobling startes en relativt liten COM-server i prosessen.
- Ikke tilgjengelig når du arbeider via en ekstern tilkobling funksjonalitet, på en eller annen måte relatert til organiseringen av 1C:Enterprise 8 brukergrensesnitt;
- Når du kjører en ekstern tilkobling, vil den administrerte applikasjonsmodulen (modul vanlig søknad) konfigurasjon 1C:Enterprise 8. Dens rolle når du arbeider med en ekstern tilkobling spilles av den eksterne tilkoblingsmodulen.
- Raskere tilkoblingsoppsett siden ingen separat prosess må opprettes operativsystem, og alle handlinger utføres i anropsprosessen;
- Raskere tilgang til egenskapene og metodene til 1C:Enterprise-objekter, siden organisering av en tilgang ikke krever kommunikasjon mellom prosesser;
- Mindre forbruk av operativsystemressurser.
- en COM-tilkoblingsbehandling opprettes, ved hjelp av hvilken forbindelsen opprettes;
- et anrop blir gjort til Connect-metoden til COM-tilkoblingsbehandleren. Connect-metoden returnerer en ytre forbindelse med informasjonsgrunnlag 1C:Enterprise 8;
- gjennom en ekstern tilkobling gjøres tilgang til gyldige metoder, egenskaper og objekter til infobasen som tilkoblingen er etablert med.
Den ytre skjøten gir full tilgang til sin globale kontekst. Derfor kan en ekstern tilkobling som dens metoder ha: systemkonstanter, verdier for objekter spesifisert i konfiguratoren, tilgang til som utføres ved hjelp av ledere (for eksempel konstanter, oppregninger, kataloger, dokumenter, dokumentlogger, rapporter , prosessering, planer for kjennetegnstyper, kontoplaner , beregningstypeplaner, registre), samt variabler deklarert i den eksterne koblingsmodulen med Eksporter nøkkelordet.
Tilgjengelighet:
Integrering.
Spørsmål: COM-tilkobling, kjennetegn type plan
Oppgaven er å programmatisk lage et nytt element i en kjent plan av karakteristiske typer via en COM-forbindelse. Forbindelsen er etablert, alt er bra her.
Jeg skriver slik:
TypeDescriptionTech = New TypeDescription("DirectoryLink. Motparter"); PurposeProperties = Tilkobling. Planer over typer kjennetegn. Formål med egenskapene til kategorier av objekter. Finn etter navn("Katalog "Enkeltpersoner""); NewElement = Tilkobling. Planer over typer kjennetegn. Objektegenskaper. CreateItem(); NewElement. Navn = Eiendomsnavn; NewElement. PropertyAssignment = PropertyAssignment; NewElement. ValueType = DescriptionTypesTech;
Den siste linjen fungerer ikke. Og dette er forståelig, den finner en slik type for databasen der 1C kjører, men jeg trenger en type for den vedlagte databasen. Hvordan få det?
I min versjon opprettes ganske enkelt et element med verditypen "Custom List". Det fungerer i prinsippet, men er liksom stygt.
Plattform 8.3. En COM-tilkobling er en forutsetning. Løsninger uten bruk er ikke av interesse.
Svar:
Rundstykker. Takk, det fungerte.
Spørsmål: COM-tilkobling. Spørreparameterproblem
Svar:
Spørsmål: Com-tilkobling fra fildatabase til fildatabase
Svar:
Skriv ut (Ctrl+P)
Et av alternativene for å utveksle data mellom 1C-databaser er utveksling via en COM-forbindelse. Ved å bruke en COM-tilkobling kan du koble fra en 1C-database til en annen og lese eller skrive data. Denne metoden kan brukes både i klient-serverversjoner av databaser og i fildatabaser. Denne artikkelen diskuterer disse typene tilkoblinger på plattform 8.3
com-tilkobling
Du kan opprette to typer COM-objekter for 1C-applikasjonen. Dette er oleforbindelser V83.Søknad og com-tilkoblinger V83.COMConnector . I tilfelle V83.Søknad En nesten fullverdig kopi av 1C-applikasjonen lanseres. Ved bruk V83.COMConnector En liten serverdel lanseres. Driftshastigheten i dette tilfellet er høyere, men noen funksjoner er kanskje ikke tilgjengelige. Spesielt arbeid med skjemaer og vanlige moduler der egenskapen til å jobbe med eksterne forbindelser ikke er satt. Stort sett bør du bruke V83.COMConnector og kun ved manglende funksjonalitet V83.Søknad. Forskjellen i driftshastighet kan være spesielt merkbar på store databaser. For plattform 8.2 brukt V82.Application eller V82.COMConnector
Etabler en OLE-forbindelse
Connection = New COMObject(“V83.Application” );
Etabler en COM-forbindelse
Connection = New COMObject(“V83.COMConnector” );
Tilkoblingsstreng
//For klient-server-alternativet
Tilkoblingsstreng= “Srvr = ““ServerName” “;Ref = “ “BaseName” ;
//For filmodusalternativ:
Tilkoblingsstreng= "Fil = ""PathKBase" "; Usr = Brukernavn; Pwd = Passord”;
Forsøk
Tilkobling = Tilkobling . Koble(ConnectionString) ;
Unntak
Message = New MessageToUser;
Beskjed . Tekst =
"Kunne ikke koble til databasen" +
Beskrivelsesfeil(); Beskjed . Å melde();
EndAttempt ;
Frakobling
Tilkobling = Udefinert;
For objekt V83.Søknad Det er nødvendig å avslutte tilkoblingen, ellers vil en ufullstendig økt forbli, som deretter må slettes manuelt. I tilfelle V83.COMConnector forbindelsen brytes automatisk når prosedyren som forbindelsen ble gjort i, er fullført. Og det er et lite poeng til. For brukeren som tilkoblingen opprettes under, må avmerkingsboksen "Be om bekreftelse ved lukking av programmet" være deaktivert i innstillingene.
NewObject()-metoden
For å lage et nytt objekt kan du bruke NewObject()-metoden, for eksempel:
Til V83.COMConnector
RequestCOM = Tilkobling. NewObject( "Be om ")
;
TableCOM = Tilkobling. NewObject( «Verditabell»)
;
ArrayCOM = Tilkobling. NewObject(“Array” ) ;
ViewCOM =Connection.NewObject
Til V83.Søknad
RequestOLE = Tilkobling. NewObject(“ Be om ")
;
TableOLE = Tilkobling. Nytt objekt(«Verditabell»)
;
ArrayOLE = Connection.NewObject("Array" );
ViewCOM =Connection.NewObject("UniqueIdentifier", StringUID);
RequestCOM . Tekst ="VELGE
| Organisasjoners posisjoner. Kode,
| Organisasjoners posisjoner.Navn
|FRA | Directory.Positions of Organisations
HVORDAN DU POSISJONER TIL ORGANISASJONER”;
Resultat = RequestCOM. Løpe();
Prøve = Resultat. Velg () ;
Bye Selection. Neste()Syklus
EndCycle ;
Du kan også bruke konfigurasjonsobjektbehandlere:
DirectoryCOM = Tilkobling. Kataloger. Katalognavn;
DocumentCOM = Tilkobling. Dokumentasjon. Dokumentnavn;
RegisterCOM = Tilkobling. Informasjonsregistre. RegisterName ;
Motta og sammenligne oppregning via COM-tilkobling
For å sammenligne verdiene til oppregningselementer definert i konfigurasjonen, er det nødvendig å konvertere disse elementene til en av de primitive typene, hvis sammenligning er enkel. Slike typer kan enten være en numerisk type eller en strengtype. Du kan konvertere verdien av et oppregningselement til en numerisk type slik:
Enum Element = Connection.Directories.Directory1.FindByCode(1).Props1;
PossibleValues = Enum Element.Metadata().Enum Values;
EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));
Hvis EnumerationItemNumber = 0, så Rapporter( «Tallverdi1»);
ElseIfEnumerationItemNumber = 1 Deretter Rapport("EnumerationValue2");
slutt om;
Henter et objekt via COM etter identifikator
Gjennom konfigurasjonsobjektbehandlere får vi et com-objekt, for eksempel:
DocumentCOM = Tilkobling. Dokumentasjon. Dokumentnavn;
Da får vi en unik identifikatorstreng:
StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())
Identifikator = Ny U uniqueIdentifier(StringUID);
MED linkByIdentifier = Dokumenter[Dokumentnavn].GetLink(Identifier);
Hvis du trenger å finne et com-objekt etter dokument etter identifikator, må du skrive slik:
WidCOM = Connection.NewObject("UniqueIdentifier", StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);
En måte å overføre data fra en 1C-konfigurasjon til en annen er en programvaretilkobling ved hjelp av COM. Mange bedrifter bruker flere ulike databaser, som det må være visse koblinger og avhengigheter mellom. Hvis det ikke bare er nødvendig å overføre data, men også å utføre visse databehandlinger, vil en COM-forbindelse være den optimale mekanismen. Evnen til å analysere data fra en annen 1C-database er nyttig for enhver utviklere.
Vi kobler oss til 1C-databasen via COM
For å implementere en COM-tilkobling i 1C, brukes en spesiell mekanisme kalt COMConnector. Dette objektet er installert sammen med plattformen og brukes til å koble sammen infobaser. Det skal bemerkes at for versjon 8.2 og 8.3 brukes objekter med forskjellige navn - henholdsvis "V82.COMConnector" og "V83.COMConnector".
Husk at varigheten av COM-tilkoblingen til databasen koster en lisens - ikke la deg rive med av samtidig utførelse av flere tilkoblinger. Dette er spesielt viktig for organisasjoner som har et begrenset antall lisenser. Dette problemet kan løses ved hjelp av rutineoppgaver som utføres når det ikke er noen aktive brukerforbindelser til informasjonsbasen.
For å kunne koble til en annen database og be om nødvendig informasjon, må du kjenne til følgende data:
- Hvilken type er det - fil eller klient-server;
- Hvor befinner det seg;
- Hvilket navn og passord kan du bruke for å logge på?
- Hvilke data er du interessert i?
Fra de tre første punktene, for å implementere en COM-tilkobling, må du opprette en streng med parametere. Avhengig av type informasjonssikkerhet vil den variere utseende. Ved hjelp av den mottatte strengen opprettes en forbindelse, ved hjelp av hvilken du kan samle inn data fra en annen database for analyse og behandling ved hjelp av hvilke som helst metoder.
Connection ParametersFileIB = "Fil=""Path_to_database""; Usr=""Brukernavn"";Pwd=""Passord"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Password""";Tilkoblingsfunksjonen er enkel og bør ikke reise noen spørsmål hvis alle parametere er spesifisert riktig. For å fremskynde feilsøking og analyse mulige feil det er bedre å omslutte forbindelsen i "Prøv"-konstruksjonen. Funksjonen vil returnere en verdi av typen "COM-objekt", som du vil jobbe med for å få de nødvendige dataene.
&OnServer-funksjon ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c database\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Nytt COMObject("V83.COMConnector"); Forsøk på retur V83COMCon.Connect(IB Connection Parameters); Unntaksrapport(ErrorDescription()); Returner Udefinert; Sluttforsøk; EndFunctionGjennom en COM-tilkobling kan du ikke bare velge data, men også legge dem til databasen du kobler til. Husk at vi kan overføre 4 primitive datatyper via et COM-objekt. Andre typer vil måtte spesifiseres ved hjelp av plattformens innebygde søkefunksjoner. Vær oppmerksom på at globale plattformfunksjoner også kalles opp via en COM-forbindelse.
Vi mottar data fra 1C-databasen
Etter at du har mottatt ønsket objekt, må du lese data fra en annen database. For å gjøre dette bruker vi en forespørsel via en COM-forbindelse i 1C 8.3 ved å bruke den mottatte verdien av typen "COM-objekt" fra funksjonen. Det er viktig å først koble til databasen og deretter utføre forespørselen. Utførelse skjer gjennom NewObject-metoden, som spesifiserer objekttypen i strengform som en parameter - "Request".
&OnServer-prosedyre TestCOMOnServer() Connection = ConnectToBase(); If TypeValue(Connection) Type("Undefined") Then RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "VELG første 15 | DirectoryUser.Name AS-navn |FROM | Directory.users AS DirectoryUser"; Select = RequestBPZO.Execute().select(); Mens Selection.next() loop Report(Selection.Number); EndCycle; slutt om; Slutt på prosedyre >For eksempel, for å få informasjon om brukere av en bestemt avdeling, vil vi sette en betingelse i forespørselen gjennom parametere. En parameter vil være av en enkel type - en streng, og divisjonen vil være en lenke til katalogelementet "Enterprise Structure". Resultatet av spørringen er en tabell med de oppførte feltene av typen de eksisterer i databasen som COM-tilkoblingen skjedde til. Hvis du trenger å konvertere dem til andre typer, bruk standard plattformfunksjoner:
- Linje();
- Antall();
- Dato().
Hvis du trenger å overføre en matrise til databasen for valg basert på flere parametere, for eksempel avdelinger, brukes også NewObject-kommandoen. På samme måte kan du sende en liste eller tabell med verdier, fylle dem med elementer fra en annen database gjennom en tilkobling. Alle er tilgjengelige for deg å søke eksisterende metoder plattformobjekter og mekanismer.
RequestBPZO = Connection.NewObject.("Request"); RequestBPZO.Text = "VELG de første 15 | DirectoryUser.Name AS-navn | FRA | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | Og DirectoryUser.Name som ""%"" + &NecessaryName+ ""%" " "; Array of Departments = Connection.NewObject("Array"); Array of Departments.Add(Connection.Directories.Enterprise Structure.Finn By Code("00-000023")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Finn By Code("00-000038")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Finn By Code("00-000046")); Request BPZO.SetParameter("Nødvendig avdeling", Array of Departments); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); Mens Selection.next() loop Report(Selection.Name); EndCycle;Ved overføring av dokumenter eller katalogelementer oppstår alltid spørsmålet om å kontrollere overføringen av et bestemt objekt. Ved hjelp av COM-tilkoblinger kan slike problemer løses gjennom en unik identifikator. Du må finne et objekt i plugin-databasen etter identifikator fra gjeldende informasjonssikkerhet ved å bruke "GetLink"-funksjonen, ved å bruke identifikatoren som en streng. Hvis en ikke blir funnet, kan du opprette den ved hjelp av en COM-tilkobling.
StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Hvis IKKE ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) så NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Name; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NewUser.Write(); slutt om;En COM-tilkobling har også rett til å bruke prosedyrer og funksjoner fra vanlige 1C-moduler med egenskapen "Ekstern tilkobling" aktivert. I tillegg til denne betingelsen, må den kalte funksjonen eller prosedyren eksporteres og ikke inkludere interaktive handlinger utført på serveren. Ellers vil du se en feilmelding om at operasjonen er ugyldig.
Sammensatt..; VariableFunction = Tilkobling..; funksjonsanrop>generelt modulnavn>prosedyrekall>generelt modulnavn>Mulighetene for ekstern tilkobling med en annen database i 1C er ganske omfattende og kan tillate deg å utføre mange oppgaver. Det er viktig å kunne vurdere verktøyene riktig og velge den optimale løsningen. I de fleste tilfeller vises denne ferdigheten bare med erfaring eller ved å studere eksempler på arbeidet til erfarne spesialister.
Nøkkelord: COM, tilkobling, ekstern, OLE, Automation, Connect, ComConnector, Srvr
Når du bruker 1C:Enterprise 8.0 COM-tilkoblinger for å få tilgang til data, er det følgende fordeler sammenlignet med å bruke en automatiseringsserver:
- Raskere forbindelsesetablering, siden det ikke er behov for å opprette en separat operativsystemprosess, og alle handlinger utføres i anropsprosessen;
- Raskere tilgang til egenskapene og metodene til 1C:Enterprise-objekter, siden organisering av en tilgang ikke krever kommunikasjon mellom prosesser;
- Mindre forbruk av operativsystemressurser.
Generelt er det å jobbe med 1C:Enterprise 8.0 via en COM-forbindelse som å jobbe med 1C:Enterprise i serverautomatiseringsmodus. De viktigste forskjellene er som følger:
- Når det gjelder en automatiseringsserver, startes en fullverdig 1C:Enterprise 8.0-applikasjon, og når det gjelder en COM-tilkobling, startes en relativt liten COM-server i prosessen.
- Når du arbeider via en COM-tilkobling, er funksjonalitet på en eller annen måte knyttet til organiseringen av 1C:Enterprise 8.0-brukergrensesnittet ikke tilgjengelig;
- Når du bruker en COM-tilkobling, brukes ikke 1C:Enterprise 8.0-konfigurasjonsapplikasjonsmodulen. Dens rolle når du arbeider med en COM-tilkobling spilles av den eksterne tilkoblingsmodulen.
1.1 Prosedyre for å etablere en COM-forbindelse
For å organisere tilgang til 1C:Enterprise 8.0-data via en COM-tilkobling, utføres følgende handlingssekvens:
- et COM-objekt opprettes med identifikatoren V8.COMConnector, ved hjelp av hvilken forbindelsen opprettes;
- Connect-metoden til det tidligere opprettede V8.COMConnector-objektet kalles. Connect-metoden returnerer en kobling til et COM-tilkoblingsobjekt med 1C:Enterprise 8.0 infobase;
- Gjennom det mottatte COM-tilkoblingsobjektet får man tilgang til de gyldige metodene, egenskapene og objektene til infobasen som tilkoblingen er etablert med.
Viktig! På grunn av mangelen på et brukergrensesnitt i en COM-forbindelse, kan ikke alle objekter, egenskaper og metoder brukes i en COM-forbindelse.
1C:Enterprise-objekter tilgjengelige eksternt via en COM-tilkobling:
- Eksporterte variabler og prosedyrer/funksjoner til den eksterne sammenføyningsmodulen
- Eksporterte variabler og prosedyrer/funksjoner til vanlige moduler
- Inkludere og ekskludere hele moduler ved å angi egenskaper for vanlige moduler
- Inkluderer og ekskluderer fragmenter av vanlige moduler som bruker en forprosessor
- Global kontekst 1C:Enterprise 8.0, med unntak av objekter som er tett knyttet til klientapplikasjonen (TextDocument, TabularDocument, ...)
1.2 Ekstern tilkoblingsmodul
Som allerede nevnt, utføres applikasjonsmodulens ansvar når du arbeider gjennom en COM-tilkobling av den eksterne tilkoblingsmodulen. Denne modulen kan ha hendelsesbehandlerprosedyrer When SystemStarts() og WhenSystemCompletes(), som kan inneholde handlinger utført ved henholdsvis initialisering og avslutning av tilkoblingen.
Prosedyrer, funksjoner og globale variabler definert i en ekstern sammenføyningsmodul med eksportnøkkelordet blir, som i tilfellet med en applikasjonsmodul, en del av den globale konteksten.
1.3 Vanlige moduler
Egenskapene "Client", "Server" og "External Connection" er introdusert for vanlige moduler. De er ment å bestemme i konfigurasjonen bruken av moduler i klient-serverversjonen og i COM-tilkoblingsmodus.
1.4 Objekt "V8.COMConnector"
Den eneste oppgaven som løses av V8.COMConnector COM-objektet er å etablere en COM-forbindelse med 1C:Enterprise 8.0-informasjonsbasen. Et ubegrenset antall tilkoblinger kan opprettes ved å bruke én forekomst av V8.COMConnector-objektet. V8.COMConnector-objektet har en enkelt Connect-metode, designet for å etablere en COM-forbindelse med 1C:Enterprise 8.0-infobasen.
<СтрокаСоединенияИБ>
Forbindelseslinjen med informasjonssikkerhetssystemet er en kjede av fragmenter av formen Parameter=Verdi. Fragmenter er atskilt fra hverandre med ";". Hvis verdien inneholder mellomrom, må den omsluttes av doble anførselstegn (").
Vanlige parametere:
Usr - brukernavn;
Pwd - passord.
Følgende parameter er definert for filversjonen:
Fil - infobase katalog.
Følgende parametere er definert for klient-server-alternativet:
Srvr - 1C:Enterprise servernavn;
Ref - navn på infobasen på serveren.
Connect-metoden etablerer en COM-tilkobling til 1C:Enterprise 8.0-infobasen og returnerer en kobling til COM-tilkoblingsobjektet.
// Et koblingsobjekt er opprettet
V8 = New COMObject("V8.COMConnector");
// et COM-tilkoblingsobjekt er opprettet
Connection = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")
1.5 COM-tilkoblingsobjekt
En COM-forbindelse til 1C:Enterprise infobase gir full tilgang til dens globale kontekst (se "Kontekst for programmodulutførelse"). Derfor kan en COM-tilkobling ha som sine metoder: systemkonstanter, verdier spesifisert i konfiguratoren av objekter som er tilgjengelig ved hjelp av ledere (for eksempel konstanter, oppregninger, kataloger, dokumenter, dokumentlogger, rapporter, behandling, planer for typer av egenskaper, plankontoer, planer for beregningstyper, registre), samt variabler deklarert i den eksterne koblingsmodulen med eksportnøkkelordet.
I tillegg har COM-tilkoblingen en ekstra NewObject-metode som kan brukes til å skape verdier av visse typer.
tk = Tilkobling. NewObject("Verditabell");
String method Lar deg få strengrepresentasjoner av 1C:Enterprise-verdier.
View = Connection.String(Data.UniqueIdentifier());
1.6. Funksjoner ved å jobbe med en COM-tilkobling
I automatisering og i en COM-forbindelse har TRUE og FALSE følgende verdier: -1 (minus én) og 0.
Det er mulig å organisere en pool av COM-tilkoblinger. Samtidig opprettes flere COM-tilkoblingsobjekter PÅ FORHÅND på mottaksserveren 1C:Enterprise og det tar enda kortere tid å etablere en tilkobling, siden det ikke er behov for å opprette et nytt objekt.
Et nytt Query Builder-objekt er implementert, designet for å generere spørringstekster basert på de angitte innstillingene. Dette objektet støtter rapportbyggerfunksjonalitet som ikke er relatert til å sende ut en rapport til et regnearkdokument og andre oppgaver relatert til brukergrensesnitt. Dette objektet kan brukes på 1C:Enterprise-serveren og i en COM-forbindelse.
Du kan bruke COM-objekter når du kjører det innebygde språket på 1C:Enterprise-serveren.
COM-feil konverteres til innebygde språkunntak.
Hvis konfigurasjonen forsøker å opprette et ugyldig objekt, f.eks. regnearkdokument, i en ekstern tilkoblingsmodul, i en delt modul eller i en objektmodul, kan COM-forbindelsen ikke etableres eller avbrytes som et unntak.
Et av alternativene for å utveksle data mellom 1C-databaser er utveksling via en COM-forbindelse.
Ved å bruke en COM-tilkobling kan du koble fra en 1C-database til en annen og lese eller skrive data. Denne metoden kan brukes både i klient-serverversjoner av databaser og i fildatabaser. I denne artikkelen skal vi se på eksempler på denne typen forbindelse. Eksemplene bruker plattform 8.2.
Du kan opprette to typer COM-objekter for 1C-applikasjonen. Dette V82.Søknad Og V82.COMConnector. I tilfelle V82.Søknad En nesten fullverdig kopi av 1C-applikasjonen lanseres. ved bruk V82.COMConnector En liten serverdel lanseres.
Driftshastigheten i dette tilfellet er høyere, men noen funksjoner er kanskje ikke tilgjengelige. Spesielt arbeid med skjemaer og vanlige moduler der egenskapen til å jobbe med eksterne forbindelser ikke er satt. Stort sett bør du bruke V82.COMConnector og kun ved manglende funksjonalitet V82.Søknad. Forskjellen i driftshastighet kan være spesielt merkbar på store databaser.
Så la oss komme i gang
- La oss lage et COM-objekt
- Til V82.Søknad Connection = New COMObject("V82.Application" ) ;
- Til V82.COMConnector Connection = New COMObject("V82.COMConnector" );
- La oss lage en tilkoblingsstreng
- for serverversjonen av databasen ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
- for filversjonen av databasen ConnectionString = "File = " "PathKBase" "; Usr = Brukernavn; Pwd = Passord";
- Kobler til databasen Forsøk på tilkobling = tilkobling. Connect(ConnectionString) ; Unntaksmelding = New MessageToUser; Beskjed. Tekst = + ErrorDescription() ; Beskjed. Å melde() ; EndAttempt ;
- Kobler fra databasen Tilkobling = Udefinert;
For objekt V82.Søknad Det er nødvendig å avslutte tilkoblingen, ellers vil en ufullstendig økt forbli, som deretter må slettes manuelt. I tilfelle V82.COMConnector forbindelsen brytes automatisk når prosedyren som forbindelsen ble gjort i, er fullført. Og det er et lite poeng til.
For brukeren som tilkoblingen opprettes under, må avmerkingsboksen "Be om bekreftelse ved lukking av programmet" være deaktivert i innstillingene.
La oss nå sette sammen all koden
Connection = New COMObject("V82.Application" ) ; //Connection = New COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Fil = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Forsøk på tilkobling = tilkobling. Connect(ConnectionString) ; Unntaksmelding = New MessageToUser; Beskjed. Tekst = "Kunne ikke koble til databasen"+ BeskrivelseFeil() ; Beskjed. Å melde() ; EndAttempt ; Tilkobling = Udefinert;
For tilkoblingstype V82.Søknad metoden brukes for COM-objektet som ble opprettet i utgangspunktet, og for V82.COMConnector metoden brukes på forbindelsen. videre arbeid med forespørselen fortsetter standard betyr 1C. i koden ser det slik ut:
Forespørsel = Tilkobling. NewObject("Request" ) ; // For V82.COMConnector Forespørsel = Tilkobling. NewObject("Request" ) ; // For V82.Søknad Be om. Tekst = "VELG | Organisasjoners posisjoner. Kode, | Organisasjoners posisjoner.Navn|FRA | Directory. Positions of Organizations AS Positions of Organizations"; Resultat = Forespørsel. Løpe(); Prøve = Resultat. Velg() ; Bye Selection. Neste() Loop EndLoop ;
For versjon 1C:Enterprise 8.3 forblir alt uendret bortsett fra at når du oppretter COM-objekter må du bruke "V83.COMConnector" eller "V83.Application".