Betreten
Alle Computergeheimnisse für Anfänger und Profis
  • Ändern der Text- und Hintergrundfarbe
  • Erstellen Sie Ihre eigene Präsentation. So ändern Sie den Hintergrund in einer OpenOffice-Präsentation
  • So entfernen Sie Kopf- und Fußzeilen in Excel. Fügen Sie eine Kopf- und Fußzeile in Excel ein
  • Wie werden Abmessungen in AutoCAD festgelegt, geändert und skaliert?
  • FTP-Dienst – Dateiübertragung
  • Verwenden von Ebenen in AutoCAD Erstellen einer neuen Ebene in AutoCAD
  • Drei Säulen der Arbeit mit COM-Objekten. Das Arbeiten über eine COM-Verbindung ist einfacher als Sie denken. V8: COM-Verbindung Verbindung über COM 1s 8.3

    Drei Säulen der Arbeit mit COM-Objekten.  Das Arbeiten über eine COM-Verbindung ist einfacher als Sie denken.  V8: COM-Verbindung Verbindung über COM 1s 8.3

    Schlüsselwörter: COM, Verbindung, extern, OLE, Automatisierung, Connect, ComConnector, Srvr

    Bei der Verwendung von 1C:Enterprise 8.0 COM-Verbindungen für den Zugriff auf Daten ergeben sich folgende Vorteile gegenüber der Verwendung eines Automatisierungsservers:

    1. Schnellerer Verbindungsaufbau, da kein separater Betriebssystemprozess erstellt werden muss und alle Aktionen innerhalb des aufrufenden Prozesses ausgeführt werden;

    2. Schnellerer Zugriff auf die Eigenschaften und Methoden von 1C:Enterprise-Objekten, da für die Organisation eines Zugriffs keine Kommunikation zwischen Prozessen erforderlich ist;
    3. Weniger Verbrauch von Betriebssystemressourcen.

    Im Allgemeinen ähnelt die Arbeit mit 1C:Enterprise 8.0 über eine COM-Verbindung der Arbeit mit 1C:Enterprise im Serverautomatisierungsmodus. Die Hauptunterschiede sind wie folgt:

    1. Im Falle eines Automatisierungsservers wird eine vollwertige 1C:Enterprise 8.0-Anwendung gestartet, und im Falle einer COM-Verbindung wird ein relativ kleiner In-Process-COM-Server gestartet.

    2. Beim Arbeiten über eine COM-Verbindung stehen Funktionalitäten, die in irgendeiner Weise mit der Organisation der 1C:Enterprise 8.0-Benutzeroberfläche zusammenhängen, nicht zur Verfügung;
    3. Beim Betrieb einer COM-Verbindung wird das Konfigurationsanwendungsmodul 1C:Enterprise 8.0 nicht verwendet. Seine Rolle beim Arbeiten mit einer COM-Verbindung übernimmt das externe Verbindungsmodul.

    1.1 Vorgehensweise zum Aufbau einer COM-Verbindung

    Um den Zugriff auf 1C:Enterprise 8.0-Daten über eine COM-Verbindung zu organisieren, wird die folgende Abfolge von Aktionen ausgeführt:

    1. Es wird ein COM-Objekt mit der Kennung V8.COMConnector erstellt, mit dessen Hilfe die Verbindung hergestellt wird;

    2. Die Connect-Methode des zuvor erstellten V8.COMConnector-Objekts wird aufgerufen. Die Connect-Methode gibt einen Link zu einem COM-Verbindungsobjekt mit der 1C:Enterprise 8.0-Infobase zurück;
    3. Über das empfangene COM-Verbindungsobjekt wird auf die gültigen Methoden, Eigenschaften und Objekte der Infobase zugegriffen, mit der die Verbindung hergestellt wird.

    Wichtig! Aufgrund der fehlenden Benutzeroberfläche in einer COM-Verbindung können nicht alle Objekte, Eigenschaften und Methoden in einer COM-Verbindung verwendet werden.

    1C:Enterprise-Objekte, auf die von außen über eine COM-Verbindung zugegriffen werden kann:

    1. Exportierte Variablen und Prozeduren/Funktionen des externen Join-Moduls

    2. Exportierte Variablen und Prozeduren/Funktionen allgemeiner Module
    3. Einschließen und Ausschließen ganzer Module durch Festlegen von Eigenschaften gemeinsamer Module

    4. Einschließen und Ausschließen von Fragmenten gemeinsamer Module mithilfe eines Präprozessors
    5. Globaler Kontext 1C:Enterprise 8.0, mit Ausnahme von Objekten, die eng mit der Client-Anwendung verknüpft sind (TextDocument, TabularDocument, ...)

    1.2 Externes Anschlussmodul

    Wie bereits erwähnt, werden die Aufgaben des Anwendungsmoduls beim Arbeiten über eine COM-Verbindung vom externen Verbindungsmodul wahrgenommen. Dieses Modul verfügt möglicherweise über die Ereignishandlerprozeduren When SystemStarts() und WhenSystemCompletes(), die Aktionen enthalten können, die bei der Initialisierung bzw. Beendigung der Verbindung ausgeführt werden.

    Prozeduren, Funktionen und globale Variablen, die in einem externen Join-Modul mit dem Schlüsselwort Export definiert werden, werden, wie im Fall eines Anwendungsmoduls, Teil des globalen Kontexts.

    1.3 Gemeinsame Module

    Für gängige Module wurden die Eigenschaften „Client“, „Server“ und „Externe Verbindung“ eingeführt. Sie sollen in der Konfiguration die Verwendung von Modulen in der Client-Server-Version und im COM-Verbindungsmodus festlegen.

    1.4 Objekt „V8.COMConnector“

    Die einzige Aufgabe, die das COM-Objekt V8.COMConnector löst, ist der Aufbau einer COM-Verbindung mit der Informationsbasis 1C:Enterprise 8.0. Mit einer Instanz des V8.COMConnector-Objekts kann eine unbegrenzte Anzahl von Verbindungen hergestellt werden. Das V8.COMConnector-Objekt verfügt über eine einzige Connect-Methode, die dazu dient, eine COM-Verbindung mit der 1C:Enterprise 8.0-Infobase herzustellen.

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

    Die Verbindungslinie zum Informationssicherheitssystem ist eine Kette von Fragmenten der Form Parameter=Wert. Fragmente werden durch „;“ voneinander getrennt. Wenn ein Wert Leerzeichen enthält, muss er in doppelte Anführungszeichen (") gesetzt werden.

    Gemeinsame Parameter:

    Usr – Benutzername;
    Pwd – Passwort.

    Für die Dateiversion ist folgender Parameter definiert:

    Datei - Infobase-Verzeichnis.

    Für die Client-Server-Option sind folgende Parameter definiert:

    Srvr – 1C:Enterprise-Servername;
    Ref – Name der Infobase auf dem Server.

    Die Connect-Methode stellt eine COM-Verbindung zur 1C:Enterprise 8.0-Infobase her und gibt einen Link zum COM-Verbindungsobjekt zurück.

    // Ein Connector-Objekt wird erstellt
    V8 = Neues COMObject("V8.COMConnector");
    // ein COM-Verbindungsobjekt wird erstellt
    Connection = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")

    1.5 COM-Verbindungsobjekt

    Eine COM-Verbindung zur 1C:Enterprise-Infobase bietet vollständigen Zugriff auf ihren globalen Kontext (siehe „Kontext zur Ausführung des Programmmoduls“). Daher kann eine COM-Verbindung als Methoden Folgendes haben: Systemkonstanten, im Konfigurator angegebene Werte von Objekten, auf die über Manager zugegriffen wird (z. B. Konstanten, Aufzählungen, Verzeichnisse, Dokumente, Dokumentprotokolle, Berichte, Verarbeitung, Pläne für Typen). von Merkmalen, Plankonten, Pläne von Berechnungsarten, Register) sowie im externen Verbindungsmodul mit dem Schlüsselwort Export deklarierte Variablen.

    Darüber hinaus verfügt die COM-Verbindung über eine zusätzliche NewObject-Methode, mit der Werte bestimmter Typen erstellt werden können.

    tk = Verbindung. NewObject("ValueTable");

    String-Methode Ermöglicht Ihnen, String-Darstellungen von 1C:Enterprise-Werten zu erhalten.

    View = Connection.String(Data.UniqueIdentifier());

    1.6. Merkmale der Arbeit mit einer COM-Verbindung

    In der Automatisierung und in einer COM-Verbindung haben TRUE und FALSE die folgenden Werte: -1 (minus eins) und 0.

    Es ist möglich, einen Pool von COM-Verbindungen zu organisieren. Gleichzeitig werden mehrere COM-Verbindungsobjekte im Voraus auf dem empfangenden Server 1C:Enterprise erstellt und der Verbindungsaufbau nimmt noch weniger Zeit in Anspruch, da kein neues Objekt erstellt werden muss.

    Es wurde ein neues Query Builder-Objekt implementiert, das darauf ausgelegt ist, Abfragetexte basierend auf den angegebenen Einstellungen zu generieren. Dieses Objekt unterstützt Berichtserstellungsfunktionen, die nicht mit der Ausgabe des Berichts in ein Tabellenkalkulationsdokument oder anderen Aufgaben im Zusammenhang mit der Benutzeroberfläche zusammenhängen. Dieses Objekt kann auf dem 1C:Enterprise-Server und in einer COM-Verbindung verwendet werden.

    Sie können COM-Objekte verwenden, wenn Sie die integrierte Sprache auf dem 1C:Enterprise-Server ausführen.

    COM-Fehler werden in eingebettete Sprachausnahmen umgewandelt.

    Wenn die Konfiguration versucht, ein ungültiges Objekt, z. B. ein Tabellenkalkulationsdokument, in einem externen Join-Modul, in einem allgemeinen Modul oder in einem Objektmodul zu erstellen, wird die COM-Verbindung möglicherweise nicht hergestellt oder ausnahmsweise beendet.

    Eine Möglichkeit, Daten von einer 1C-Konfiguration in eine andere zu übertragen, ist eine Softwareverbindung über COM. Viele Unternehmen nutzen mehrere unterschiedliche Datenbanken, zwischen denen bestimmte Verbindungen und Abhängigkeiten bestehen müssen. Wenn nicht nur Daten übertragen, sondern auch bestimmte Datenverarbeitungen durchgeführt werden müssen, ist eine COM-Verbindung der optimale Mechanismus. Die Möglichkeit, Daten aus einer anderen 1C-Datenbank zu analysieren, ist für jeden Entwickler nützlich.

    Wir verbinden uns über COM mit der 1C-Datenbank

    Um eine COM-Verbindung in 1C zu implementieren, wird ein spezieller Mechanismus namens COMConnector verwendet. Dieses Objekt wird zusammen mit der Plattform installiert und dient der Anbindung von Infobases. Es ist zu beachten, dass für die Versionen 8.2 und 8.3 Objekte mit unterschiedlichen Namen verwendet werden – „V82.COMConnector“ bzw. „V83.COMConnector“.

    Bedenken Sie, dass die Dauer der COM-Verbindung zur Datenbank eine Lizenz kostet – lassen Sie sich nicht von der gleichzeitigen Ausführung mehrerer Verbindungen mitreißen. Dies ist besonders wichtig für Organisationen, die über eine begrenzte Anzahl von Lizenzen verfügen. Dieses Problem kann mithilfe von Routineaufgaben gelöst werden, die ausgeführt werden, wenn keine aktiven Benutzerverbindungen zur Informationsdatenbank bestehen.

    Um eine Verbindung zu einer anderen Datenbank herstellen und die erforderlichen Informationen anfordern zu können, müssen Sie folgende Daten kennen:

    1. Um welchen Typ handelt es sich – Datei oder Client-Server;
    2. Wo befindet es sich?
    3. Mit welchem ​​Namen und Passwort können Sie sich anmelden?
    4. Welche Daten interessieren Sie?

    Um eine COM-Verbindung zu implementieren, müssen Sie ausgehend von den ersten drei Punkten eine Reihe von Parametern erstellen. Je nach Art der Informationssicherheit unterscheidet sich das Erscheinungsbild. Anhand der empfangenen Zeichenfolge wird eine Verbindung hergestellt, mit deren Hilfe Sie Daten aus einer anderen Datenbank zur Analyse und Verarbeitung mit beliebigen Methoden sammeln können.

    VerbindungsparameterFileIB = "File=""Path_to_database""; Usr=""User_name"";Pwd=""Password"""; VerbindungsparameterClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Password""";

    Die Verbindungsfunktion ist einfach und sollte bei korrekter Angabe aller Parameter keine Fragen aufwerfen. Um das Debuggen und die Analyse möglicher Fehler zu beschleunigen, ist es besser, die Verbindung in das „Try“-Konstrukt einzuschließen. Die Funktion gibt einen Wert vom Typ „COM-Objekt“ zurück, mit dem Sie arbeiten, um die erforderlichen Daten zu erhalten.

    &OnServer Function ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c Database\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Neues COMObject("V83.COMConnector"); Versuchen Sie, V83COMCon.Connect(IB Connection Parameters); Ausnahmebericht(ErrorDescription()); Rückgabe undefiniert; EndAttempt; EndFunction

    Über eine COM-Verbindung können Sie nicht nur Daten auswählen, sondern diese auch der Datenbank hinzufügen, zu der Sie eine Verbindung herstellen. Denken Sie daran, dass wir 4 primitive Datentypen über ein COM-Objekt übertragen können. Andere Typen müssen mithilfe der integrierten Suchfunktionen der Plattform angegeben werden. Bitte beachten Sie, dass globale Plattformfunktionen auch über eine COM-Verbindung aufgerufen werden.

    Wir erhalten Daten aus der 1C-Datenbank

    Nachdem Sie das gewünschte Objekt erhalten haben, müssen Sie Daten aus einer anderen Datenbank lesen. Dazu verwenden wir eine Anfrage über eine COM-Verbindung in 1C 8.3 unter Verwendung des von der Funktion empfangenen Werts vom Typ „COM-Objekt“. Es ist wichtig, zuerst eine Verbindung zur Datenbank herzustellen und dann die Anfrage auszuführen. Die Ausführung erfolgt über die NewObject-Methode, die den Objekttyp in Stringform als Parameter angibt – „Request“.

    &OnServer-Prozedur TestCOMOnServer() Connection = ConnectToBase(); If TypeValue(Connection) Type("Undefiniert") Then RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Select = RequestBPZO.Execute().select(); While Selection.next() Schleife Report(Selection.Number); EndCycle; endIf; Ende des Verfahrens >

    Um beispielsweise Informationen über Benutzer einer bestimmten Abteilung zu erhalten, legen wir in der Anfrage über Parameter eine Bedingung fest. Ein Parameter wird einen einfachen Typ haben – eine Zeichenfolge, und die Division wird ein Link zum Verzeichniselement „Enterprise Structure“ sein. Das Ergebnis der Abfrage ist eine Tabelle mit den aufgelisteten Feldern des Typs, der in der Datenbank vorhanden ist, zu der die COM-Verbindung hergestellt wurde. Wenn Sie sie in andere Typen konvertieren müssen, verwenden Sie die Standardplattformfunktionen:

    • Linie();
    • Nummer();
    • Datum von().
    RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department = &RequiredDepartment | And DirectoryUser.Name like ""%"" + &RequiredName+ ""%""" ; Request BPZO.SetParameter("Required Department", Connection. Directories. Enterprise Structure. Find By Code("00-000023")); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() Schleife Report(Selection.Name); EndCycle;

    Wenn Sie ein Array zur Auswahl basierend auf mehreren Parametern, beispielsweise Abteilungen, in die Datenbank übertragen müssen, wird auch der Befehl NewObject verwendet. Ebenso können Sie eine Werteliste oder -tabelle übergeben und diese über eine Verbindung mit Elementen einer anderen Datenbank füllen. Für die Suche stehen Ihnen alle vorhandenen Objektmethoden und Mechanismen der Plattform zur Verfügung.

    RequestBPZO = Connection.NewObject.("Request"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | Und DirectoryUser.Name wie ""%"" + &NecessaryName+ ""%" " "; Array of Departments = Connection.NewObject("Array"); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000023")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000038")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000046")); Request BPZO.SetParameter("Required Department", Array of Departments); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() Schleife Report(Selection.Name); EndCycle;

    Bei der Übertragung von Dokumenten oder Verzeichniselementen stellt sich immer die Frage, wie die Übertragung eines bestimmten Objekts gesteuert werden kann. Mit Hilfe von COM-Verbindungen können solche Probleme durch eine eindeutige Kennung gelöst werden. Sie müssen ein Objekt in der Plug-in-Datenbank anhand der Kennung aus der aktuellen Informationssicherheit mithilfe der Funktion „GetLink“ finden und dabei die Kennung als Zeichenfolge verwenden. Wenn keines gefunden wird, können Sie es über eine COM-Verbindung erstellen.

    StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Wenn NICHT ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) dann NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Name; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NewUser.Write(); endIf;

    Außerdem hat eine COM-Verbindung das Recht, Prozeduren und Funktionen von gängigen 1C-Modulen zu verwenden, wenn die Eigenschaft „Externe Verbindung“ aktiviert ist. Zusätzlich zu dieser Bedingung muss die aufgerufene Funktion oder Prozedur exportiert sein und darf keine interaktiven Aktionen enthalten, die auf dem Server ausgeführt werden. Andernfalls wird eine Fehlermeldung angezeigt, dass der Vorgang ungültig ist.

    Verbindung..; VariableFunction = Verbindung..; Funktionsaufruf>allgemeiner Modulname>Prozeduraufruf>allgemeiner Modulname>

    Die Möglichkeiten zur externen Verbindung mit einer anderen Datenbank in 1C sind recht umfangreich und können Ihnen die Ausführung vieler Aufgaben ermöglichen. Es ist wichtig, die Tools richtig bewerten und die optimale Lösung auswählen zu können. In den meisten Fällen zeigt sich diese Fähigkeit nur durch Erfahrung oder durch das Studium von Beispielen der Arbeit erfahrener Spezialisten.

    Drucken (Strg+P)

    Eine der Möglichkeiten zum Datenaustausch zwischen 1C-Datenbanken ist der Austausch über eine COM-Verbindung. Über eine COM-Verbindung können Sie eine Verbindung von einer 1C-Datenbank zu einer anderen herstellen und Daten lesen oder schreiben. Diese Methode kann sowohl in Client-Server-Versionen von Datenbanken als auch in Dateidatenbanken verwendet werden. In diesem Artikel werden diese Arten von Verbindungen auf Plattform 8.3 erläutert

    com-Verbindung

    Sie können zwei Arten von COM-Objekten für die 1C-Anwendung erstellen. Das sind alte Verbindungen V83.Anwendung und Com-Verbindungen V83.COMConnector . Im Falle von V83.Anwendung Eine fast vollständige Kopie der 1C-Anwendung wird gestartet. Im Falle einer Verwendung V83.COMConnector Ein kleiner Serverteil wird gestartet. Die Betriebsgeschwindigkeit ist in diesem Fall höher, einige Funktionen sind jedoch möglicherweise nicht verfügbar. Insbesondere das Arbeiten mit Formularen und allgemeinen Modulen, für die die Eigenschaft, mit externen Verbindungen zu arbeiten, nicht festgelegt ist. Meistens sollten Sie verwenden V83.COMConnector und nur bei mangelnder Funktionalität V83.Anwendung. Der Unterschied in der Betriebsgeschwindigkeit kann sich besonders bei Datenbanken mit großen Volumina bemerkbar machen. Für Plattform 8.2 verwendet V82.Application oder V82.COMConnector

    Stellen Sie eine OLE-Verbindung her

    Connection = New COMObject(“V83.Application” );

    Stellen Sie eine COM-Verbindung her

    Connection = New COMObject(“V83.COMConnector” );

    Verbindungszeichenfolge

    //Für die Client-Server-Option
    Verbindungszeichenfolge= „Srvr = „„ServerName“ „;Ref = „ „BaseName“ ;
    //Für Dateimodusoption:
    Verbindungszeichenfolge= „Datei =“„PathKBase“ „; Usr = Benutzername; Pwd = Passwort“;
    Versuchen
    Verbindung = Verbindung . Verbinden(ConnectionString) ;
    Ausnahme
    Message = New MessageToUser;
    Nachricht . Text = „Verbindung zur Datenbank konnte nicht hergestellt werden“ + BeschreibungFehler(); Nachricht . Etwas melden();
    EndAttempt ;

    Trennung

    Verbindung = Undefiniert ;
    Für Objekt V83.Anwendung Es ist notwendig, die Verbindung zu beenden, da sonst eine unvollständige Sitzung bestehen bleibt, die dann manuell gelöscht werden muss. Im Falle von V83.COMConnector Die Verbindung wird automatisch unterbrochen, wenn der Vorgang, mit dem die Verbindung hergestellt wurde, abgeschlossen ist. Und es gibt noch einen kleinen Punkt. Für den Benutzer, unter dem die Verbindung hergestellt wird, muss in seinen Einstellungen das Kontrollkästchen „Bestätigung beim Beenden des Programms anfordern“ deaktiviert werden.

    NewObject()-Methode

    Um ein neues Objekt zu erstellen, können Sie beispielsweise die Methode NewObject() verwenden:

    Für V83.COMConnector

    AnfrageCOM = Verbindung. NeuesObjekt( "Anfrage ") ;
    TableCOM = Verbindung. NeuesObjekt( „Wertetabelle“) ;
    ArrayCOM = Verbindung. NewObject(“Array” );

    ViewCOM =Connection.NewObject

    Für V83.Anwendung

    AnfrageOLE = Verbindung. NewObject(“ Anfrage ") ;
    TableOLE = Verbindung. NeuesObjekt(„Wertetabelle“) ;
    ArrayOLE = Connection.NewObject(„Array“ );
    ViewCOM =Connection.NewObject(„UniqueIdentifier“, StringUID);

    AnfrageCOM . Text ="WÄHLEN
    | Positionen von Organisationen. Code,
    | Positionen von Organizations.Name
    |VON | Verzeichnis.Positionen von Organisationen
    „Wie man Organisationen positioniert“;

    Ergebnis = RequestCOM. Laufen();
    Probe = Ergebnis. Wählen () ;
    Tschüss-Auswahl. Nächste()Zyklus
    EndCycle ;
    Sie können auch Konfigurationsobjektmanager verwenden:
    DirectoryCOM = Verbindung. Verzeichnisse. Verzeichnisname;
    DocumentCOM = Verbindung. Dokumentation. Dokumentname;
    RegisterCOM = Verbindung. Informationsregister. RegisterName ;

    Empfangen und Vergleichen der Aufzählung über COM-Verbindung

    Um die Werte der in der Konfiguration definierten Aufzählungselemente zu vergleichen, ist es notwendig, diese Elemente in einen der primitiven Typen umzuwandeln, deren Vergleich einfach ist. Solche Typen können entweder ein numerischer Typ oder ein Zeichenfolgentyp sein. Sie können den Wert eines Aufzählungselements wie folgt in einen numerischen Typ konvertieren:

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

    MöglicheWerte = Enum Element.Metadata().Enum Values;

    EnumerationElementNumber = MöglicheValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));

    Wenn EnumerationItemNumber = 0, dann Report( „Enumerationswert1“);

    ElseIfEnumerationItemNumber = 1 Dann Report("EnumerationValue2");

    endIf;

    Abrufen eines Objekts über COM anhand der Kennung

    Durch Konfigurationsobjektmanager erhalten wir ein COM-Objekt, zum Beispiel:
    DocumentCOM = Verbindung. Dokumentation. Dokumentname;

    Dann erhalten wir eine eindeutige Kennungszeichenfolge:

    StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

    Kennung = Neues U uniqueIdentifier(StringUID);
    MIT linkByIdentifier = Documents[DocumentName].GetLink(Identifier);

    Wenn Sie ein COM-Objekt nach Dokument und Kennung suchen müssen, müssen Sie wie folgt schreiben:

    WidCOM = Connection.NewObject(„UniqueIdentifier“, StringUID);
    LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

    Eine der Möglichkeiten zum Datenaustausch zwischen 1C-Datenbanken ist der Austausch über eine COM-Verbindung.

    Über eine COM-Verbindung können Sie eine Verbindung von einer 1C-Datenbank zu einer anderen herstellen und Daten lesen oder schreiben. Diese Methode kann sowohl in Client-Server-Versionen von Datenbanken als auch in Dateidatenbanken verwendet werden. In diesem Artikel betrachten wir Beispiele für diese Art der Verbindung. Die Beispiele verwenden Plattform 8.2.

    Sie können zwei Arten von COM-Objekten für die 1C-Anwendung erstellen. Das V82.Anwendung Und V82.COMConnector. Im Falle von V82.Anwendung Eine fast vollständige Kopie der 1C-Anwendung wird gestartet. im Falle einer Verwendung V82.COMConnector Ein kleiner Serverteil wird gestartet.
    Die Betriebsgeschwindigkeit ist in diesem Fall höher, einige Funktionen sind jedoch möglicherweise nicht verfügbar. Insbesondere das Arbeiten mit Formularen und allgemeinen Modulen, für die die Eigenschaft, mit externen Verbindungen zu arbeiten, nicht festgelegt ist. Meistens sollten Sie verwenden V82.COMConnector und nur bei mangelnder Funktionalität V82.Anwendung. Der Unterschied in der Betriebsgeschwindigkeit kann sich besonders bei Datenbanken mit großen Volumina bemerkbar machen.

    Also lasst uns anfangen

    1. Lassen Sie uns ein COM-Objekt erstellen
      • Für V82.Anwendung Connection = New COMObject("V82.Application" );
      • Für V82.COMConnector Connection = New COMObject("V82.COMConnector" );
    2. Lassen Sie uns eine Verbindungszeichenfolge erstellen
      • für die Serverversion der Datenbank ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
      • für die Dateiversion der Datenbank ConnectionString = "File = " "PathKBase" "; Usr = Benutzername; Pwd = Passwort";
    3. Verbindung zur Datenbank herstellen Verbindungsversuch = Verbindung. Connect(ConnectionString) ; Ausnahmemeldung = New MessageToUser; Nachricht. Text = + ErrorDescription() ; Nachricht. Etwas melden() ; EndAttempt ;
    4. Verbindung zur Datenbank wird getrennt Verbindung = Undefiniert ;

      Für Objekt V82.Anwendung Es ist notwendig, die Verbindung zu beenden, da sonst eine unvollständige Sitzung bestehen bleibt, die dann manuell gelöscht werden muss. Im Falle von V82.COMConnector Die Verbindung wird automatisch unterbrochen, wenn der Vorgang, mit dem die Verbindung hergestellt wurde, abgeschlossen ist. Und es gibt noch einen kleinen Punkt.

      Für den Benutzer, unter dem die Verbindung hergestellt wird, muss in seinen Einstellungen das Kontrollkästchen „Bestätigung beim Beenden des Programms anfordern“ deaktiviert werden.

    Lassen Sie uns nun den gesamten Code zusammenstellen

    Connection = New COMObject("V82.Application" ); //Connection = New COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "File = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Verbindungsversuch = Verbindung. Connect(ConnectionString) ; Ausnahmemeldung = New MessageToUser; Nachricht. Text = "Verbindung mit der Datenbank fehlgeschlagen"+ DescriptionError() ; Nachricht. Etwas melden() ; EndAttempt ; Verbindung = Undefiniert ;

    Für Verbindungstyp V82.Anwendung Die Methode wird für das ursprünglich erstellte COM-Objekt und für verwendet V82.COMConnector Die Methode wird auf die Verbindung angewendet. Anschließend wird die Anfrage mit Standard-1C-Tools bearbeitet. im Code sieht es so aus:

    Anfrage = Verbindung. NewObject("Request" ); // Für V82.COMConnector Anfrage = Verbindung. NewObject("Request" ); // Für V82.Anwendung Anfrage. Text = „AUSWÄHLEN | Positionen von Organisationen. Code, | Positionen von Organizations.Name|VON | Verzeichnis. Positionen von Organisationen AS Positionen von Organisationen"; Ergebnis = Anfrage. Laufen(); Probe = Ergebnis. Wählen() ; Tschüss-Auswahl. Next() Schleife EndLoop ;

    Für Version 1C:Enterprise 8.3 bleibt alles unverändert, außer dass Sie beim Erstellen von COM-Objekten verwenden müssen „V83.COMConnector“ oder „V83.Anwendung“.

    Wenn wir Daten aus mehreren Tabellen gleichzeitig sehen wollen, d.h. Um mehrere Tabellen zu einer zusammenzufassen, entsteht das Konzept, Tabellen und Beziehungen zwischen ihnen zu verbinden. Es gibt vier Arten von Verbindungen:

    • links;
    • Rechts,
    • intern;
    • vollständig.

    Wir werden jeden Typ anhand eines abstrakten Beispiels betrachten. Es gibt 2 Tabellen, in der ersten speichern wir beschreibende Informationen über den Artikel, in der zweiten über seine Salden:

    Um eine aus diesen Tabellen zu erhalten, müssen wir explizit angeben, welche Felder wir durch welche Bedingung und welchen Typ verbinden werden. Jetzt wird es klarer.

    Linke Verbindung

    Mit einem Left-Join teilen wir dem System mit, dass wir als Ergebnis alle Datensätze aus der linken Tabelle und die Datensätze aus der rechten sehen möchten, die die Verbindungsbedingung erfüllen. Angenommen, wir verbinden Tabellen über das Produktfeld mit der Gleichheitsbedingung, dann erhalten wir eine Tabelle wie:

    Request.Text =
    "WÄHLEN
    | Nomenklatur.Produkt,
    | Nomenklatur.Farbe AS FarbeNomenklatur,
    | Remains.Color AS ColorRemains,
    | Salden.Menge
    |VON

    ";

    Für den Stuhl gab es keine Treffer aus der Resttabelle, daher wurden die Felder mit NULL-Werten gefüllt, die von der ISNULL-Funktion verarbeitet werden müssen, siehe 1C 8 Query Language Functions.

    Der Left Join funktioniert ungefähr wie eine Schleife innerhalb einer Schleife – er nimmt den ersten Datensatz aus der linken Tabelle und durchläuft alle Datensätze aus der rechten Tabelle, um sicherzustellen, dass die Verbindungsbedingung erfüllt ist. Dann wird der zweite Datensatz aus der linken Tabelle übernommen und so weiter. Wenn plötzlich mehrere Datensätze aus der rechten Tabelle die Verbindungsbedingung erfüllen, werden mehrere Zeilen zur resultierenden Tabelle hinzugefügt (entsprechend der Anzahl erfolgreicher Verbindungen). Wie wir sehen können, ist die resultierende Tabelle nicht informativ und spiegelt die Daten nicht wider das eigentliche Wesentliche, daher ist es besser, diese Tabellen durch zwei Felder zu verbinden: Produkt und Farbe, nur werden wir dieses Mal mit NULL-Werten umgehen:

    Request.Text =
    "WÄHLEN
    | Nomenklatur.Produkt,
    | Nomenklatur.Farbe,
    | ISNULL(Remaining.Quantity, 0) AS Menge
    |VON
    | Nomenklatur AS-Nomenklatur
    | LINKS JOIN Reste AS Reste
    | Software Nomenclature.Product = Remaining.Product

    Richtige Verbindung

    Die rechte Verbindung unterscheidet sich im Wesentlichen nicht von der linken. Wenn Sie die Tabellen vertauschen, wird aus dem rechten Join ein linker Join; außerdem wandelt das System bei Verwendung des Konstruktors selbst alle rechten Joins in linke Joins um.

    Innerer Join

    Mithilfe eines Inner Join teilen wir dem System mit, dass wir als Ergebnis nur die Datensätze sehen möchten, die die Verbindungsbedingung sowohl aus der rechten als auch der linken Tabelle erfüllen. Daher ist die Anzahl der resultierenden Datensätze kleiner oder gleich der Anzahl der Datensätze der kürzesten Tabelle, die am Join teilnimmt. Wenden wir einen inneren Join auf die Felder „Produkt“ und „Farbe“ unserer Tabellen an:

    Request.Text =
    "WÄHLEN
    | Nomenklatur.Produkt,
    | Nomenklatur.Farbe,
    | Reste.Menge AS Menge
    |VON
    | Nomenklatur AS-Nomenklatur
    | INNER JOIN Reste AS Reste
    | Software Nomenclature.Product = Remaining.Product
    | Und Nomenclature.Color = Remaining.Color";

    Volle Verbindung

    Eine vollständige Verknüpfung führt zu allen Datensätzen aus beiden Tabellen. Die Datensätze, die die Verbindungsbedingung erfüllen, werden verbunden. Die Datensätze, die die Verbindungsbedingung nicht erfüllen, landen weiterhin im Abfrageergebnis, jedoch mit einigen NULL-Feldern. Complete ist wie eine linke und rechte Verbindung in einem.

    Zu diesem Thema kann es viele Probleme geben. Versuchen wir, eines davon zu lösen. Unsere Organisation ist Händler von zwei Möbelfabriken: „Zarya“ und „Rassvet“. Das Sortiment mit den Kosten jeder Fabrik wird in verschiedenen Tabellen gespeichert. Es ist notwendig, eine einzige Preisliste zu erstellen und Produkte zum Mindestpreis aufzunehmen:

    Lassen Sie uns einen vollständigen Join mit einer Auswahl aller Felder anwenden. Wir werden eine Verbindung nach Produkt herstellen:

    Request.Text =
    "WÄHLEN
    | NomenklaturZarya.Produkt AS ProduktZarya,
    | NomenklaturZarya.Preis AS PreisZarya,
    | Nomenklatur Rassvet. Produkt AS Produkt Rassvet,
    | NomenklaturRassvet.Price AS PriceRassvet
    |VON

    Das ist nicht genau das, was wir brauchen. Lassen Sie uns das Produktfeld zu einem zusammenfassen und NULL-Werte verarbeiten:

    Request.Text =
    "WÄHLEN
    //Die ISNULL-Konstruktion wurde im Abschnitt über die Funktionen der Abfragesprache besprochen
    //Wenn der Preis nicht definiert ist, initialisieren Sie ihn
    //warum 1000000 siehe Erklärung unten
    | ISNULL(NomenclatureZarya.Price, 1000000) AS PriceZarya,
    | ISNULL(NomenclatureRassvet.Price, 1000000) AS PriceRassvet
    |VON
    | NomenklaturZarya AS NomenklaturZarya
    | VOLLSTÄNDIGE VERBINDUNG NomenklaturDawn AS NomenklaturDawn
    | Software NomenclatureZarya.Product = NomenclatureDawn.Product";

    Es bleibt nur noch, den Mindestpreis zu wählen. Der endgültige Anfragetext sieht folgendermaßen aus:

    Request.Text =
    "WÄHLEN
    | ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS Produkt,
    | AUSWAHL
    | WENN ES ISNULL(NomenclatureZarya.Price, 1000000) > ISNULL(NomenclatureRassvet.Price, 1000000) gibt
    | THEN ISNULL(NomenclatureRassvet.Price, 1000000)
    | ELSE ISNULL(NomenclatureZarya.Price, 1000000)
    | ENDE ALS PREIS
    |VON
    | NomenklaturZarya AS NomenklaturZarya
    | VOLLSTÄNDIGE VERBINDUNG NomenklaturDawn AS NomenklaturDawn
    | Software NomenclatureZarya.Product = NomenclatureDawn.Product";

    Wenn der Preis nicht definiert ist (NULL), muss er mit einem Wert initialisiert werden, andernfalls schlägt der Vergleichsvorgang für mehr/weniger mit einem Fehler fehl. Wir initialisieren den Preis mit einem unrealistisch großen Betrag, sodass er bei der Vergleichsoperation „verliert“, weil wir entsprechend den Bedingungen des Problems den niedrigsten Preis auswählen.

    ← Funktionen der 1C-Abfragesprache 8 | Nimmt an 1C 8-Abfragen teil →