Maison / Travailler sur Internet / Connexion externe 1s. V8 : connexion COM. Établir une connexion OLE

Connexion externe 1s. V8 : connexion COM. Établir une connexion OLE

Une façon de transférer des données d'une configuration 1C à une autre est une connexion logicielle utilisant COM. De nombreuses entreprises utilisent plusieurs bases différentes, entre lesquelles il doit exister certaines connexions et dépendances. S'il est nécessaire non seulement de transférer des données, mais également d'effectuer certains traitements de données, une connexion COM sera le mécanisme optimal. La possibilité d'analyser les données d'une autre base de données 1C est utile à tout développeur.

Nous nous connectons via COM à la base de données 1C

Pour implémenter une connexion COM dans 1C, un mécanisme spécial appelé COMConnector est utilisé. Cet objet est installé avec la plate-forme et est utilisé pour relier les infobases. Il convient de noter que pour les versions 8.2 et 8.3, des objets de noms différents sont utilisés - "V82.COMConnector" et "V83.COMConnector", respectivement.

N'oubliez pas qu'une licence est dépensée pour la durée de la connexion COM à la base de données - vous ne devez pas vous laisser emporter par plusieurs connexions en même temps. Ceci est particulièrement important pour les organisations qui disposent d'un nombre limité de licences. Ce problème peut être résolu avec tâches routinières courir pendant l'absence connexions actives utilisateurs à l'infobase.

Pour pouvoir vous connecter à une autre base de données et demander les informations nécessaires, vous devez connaître les données suivantes :

  1. De quel type s'agit-il ? Fichier ou client-serveur ;
  2. Où est-il situé;
  3. Sous quel nom et mot de passe pouvez-vous le saisir ?
  4. Quelles sont les données qui vous intéressent.

À partir des trois premiers points, pour implémenter une connexion COM, vous devez former une chaîne de paramètres. Selon le type d'IB, il sera différent apparence. À l'aide de la chaîne reçue, une connexion est établie avec laquelle vous pouvez collecter des données à partir d'une autre base de données pour analyse et traitement par n'importe quelle méthode.

ConnectionParametersFileIB = "File=""Path_to_base"" ; Usr=""User_name"";Pwd=""Password""" ; ConnectionParametersClientServerIB = "Srvr=""Server_Name"" ; Ref=""Base_Name"" ; Usr=""User_Name"" ; Pwd=""Password""" ;

La fonction de connexion est simple et ne devrait pas poser de questions si tous les paramètres sont corrects. Pour accélérer le débogage et l'analyse erreurs possibles il est préférable d'inclure la connexion dans une construction Attempt. La fonction renverra une valeur de type "objet COM", avec laquelle vous devrez travailler, en obtenant les données nécessaires.

&AtServer Fonction ConnectToBase() export ConnectionParametersIB = "File=""E:\base 1c\ERP""; Usr=""Administrateur"";Pwd=""1"""; V83COMCon= Nouveau COMObject("V83.COMConnector"); Tentative de retour V83COMCon.Connect(ConnectionParametersIB); Rapport d'exception(ErrorDescription()); Retour Non défini ; fin de tentative ; EndFunctions

Grâce à une connexion COM, vous pouvez non seulement sélectionner des données, mais également les ajouter à la base de données à laquelle vous vous connectez. Rappelez-vous que nous pouvons transférer 4 types de données primitifs via un objet COM. D'autres types devront être spécifiés à l'aide des fonctions de recherche intégrées à la plateforme. Notez que les fonctions globales de la plate-forme sont également appelées via une connexion COM.

Nous recevons des données de la base de données 1C

Après avoir reçu l'objet souhaité, vous devez lire les données d'une autre base de données. Pour ce faire, nous appliquons une requête via une connexion COM dans 1C 8.3 en utilisant la valeur reçue du type "objet COM" de la fonction. Il est important de se connecter d'abord à la base de données, puis d'exécuter la requête. L'exécution se produit via la méthode NewObject avec l'indication du type de l'objet sous forme de chaîne - "Request" comme paramètre.

&OnServer Procedure TestCOMOnServer() Connection = ConnectToBase(); Si TypeValue(Connexion) Type("Undefined") Alors QueryBPO = Connection.NewObject("Query"); Query BPZO.Text = "SELECT the first 15 | User Directory. Name AS Name | FROM | User Directory AS User Directory" ; Sélection = RequêteBPO.Run().select(); While Sample.next() loop Report(Selection.Number); FinCycle ; Fin si; Fin de procédure >

Par exemple, pour obtenir des informations sur les utilisateurs d'un certain service, nous définirons une condition dans la demande via des paramètres. Un paramètre va type simple- une chaîne, et la subdivision - un lien vers l'élément du répertoire "Structure de l'entreprise". Le résultat de la requête est une table avec des champs énumérés du type qu'ils existent dans la base de données à laquelle la connexion COM s'est produite. Si vous devez les convertir en d'autres types, utilisez les fonctions standard de la plate-forme :

  • Doubler();
  • Nombre();
  • Date de().
RequestBPO = Connection.NewObject("Request"); QueryBPO.Text = "SELECT first 15 | User Directory.Name AS Name |FROM | Directory.Users AS User Directory I WHERE | User Directory.Department = &DesiredDepartment | And UserDirectory.Name like ""%"" + &DesiredName+ ""%""" ; BPZO Request.SetParameter("Desired Department", Connection.Directories.Enterprise Structure.FindByCode("00-000023")); RequestBPO.SetParameter("RequiredName","Ekaterina"); Sélection = RequêteBPO.Run().select(); While Selection.next() loop Report(Selection.Name); FinCycle ;

Si vous devez transférer un tableau vers la base de données pour une sélection par plusieurs paramètres, par exemple des divisions, la commande NouvelObjet est également utilisée. De même, vous pouvez passer une liste ou un tableau de valeurs, en les remplissant avec des éléments d'une autre base de données via la connexion. Tous sont disponibles pour vous de rechercher. méthodes existantes objets et mécanismes de la plateforme.

RequestBPO = Connection.NewObject.("Request"); QueryBPO.Text = "SELECT first 15 | User Directory.Name AS Name | FROM | Directory.Users AS User Directory I WHERE | User Directory.Department In (&DesiredDepartment) | And UserDirectory.Name like ""%"" + &DesiredName+ ""%""" ; Subdivisions Array = Connection.NewObject("Array"); Tableau des départements.Add(Connection.Catalogs.EnterpriseStructure.FindByCode("00-000023")); Tableau des départements.Add(Connection.Catalogs.EnterpriseStructure.FindByCode("00-000038")); Tableau des départements.Add(Connection.Catalogs.EnterpriseStructure.FindByCode("00-000046")); Requête BPZO.SetParameter("Subdivision Désirée", Tableau de Subdivisions); RequestBPO.SetParameter("RequiredName","Ekaterina"); Sélection = RequêteBPO.Run().select(); While Selection.next() loop Report(Selection.Name); FinCycle ;

Lors du transfert de documents ou d'éléments de répertoires, la question se pose toujours de contrôler le transfert d'un objet spécifique. Avec les connexions COM, vous pouvez résoudre ces problèmes grâce à un identifiant unique. Vous devez trouver un objet dans la base de données enfichable par l'identifiant de l'IB actuel à l'aide de la fonction "GetLink", en utilisant l'identifiant comme une chaîne. S'il n'y en a pas, vous pouvez le créer à l'aide d'une connexion COM.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Si PAS ValueFilled(Connection.Catalogs.Users.GetReference(Connection.NewObject("UniqueIdentifier", StrIdent))) alors NewUser = Connection.Catalogs.Users.CreateItem(); NewUser.Name = Répertoires.Users.FindByCode("00-0000313").Name ; NewUser.Individual = Répertoires.Users.FindByCode("00-0000313").Individual ; NouvelUtilisateur.Write(); Fin si;

De plus, la connexion COM a le droit d'utiliser les procédures et les fonctions des modules 1C communs avec la propriété "Connexion externe" activée. En plus de cette condition, la fonction ou la procédure appelée doit être une fonction d'exportation et ne pas inclure d'actions interactives effectuées sur le serveur. Sinon, vous verrez une erreur concernant l'opération invalide.

Composé..; VariableFromFunction = Connexion.. ; appel de fonction>nom de module commun>appel de procédure>nom de module commun>

Les possibilités de connexion externe avec une autre base de données en 1C sont assez étendues et peuvent vous permettre d'effectuer de nombreuses tâches. Il est important de pouvoir évaluer correctement les outils et choisir la meilleure solution. Dans la plupart des cas, cette compétence n'apparaît qu'avec l'expérience ou en étudiant des exemples de travail de professionnels expérimentés.

L'une des options d'échange de données entre les bases de données 1C est un échange via une connexion COM.

À l'aide d'une connexion COM, vous pouvez vous connecter d'une base de données 1C à une autre et lire ou écrire des données. Vous pouvez utiliser cette méthode à la fois dans les versions client-serveur des bases de données et dans les bases de données fichier. Dans cet article, nous analyserons des exemples de tels composés. Les exemples utilisent la plate-forme 8.2.

Vous pouvez créer deux types d'objets COM pour l'application 1C. Ce V82.Application Et Connecteur V82.COM. En cas de V82.Application une copie presque complète de l'application 1C est lancée. en cas d'utilisation Connecteur V82.COM une petite partie serveur est démarrée.
La vitesse de travail dans ce cas est plus élevée, mais certaines fonctions peuvent ne pas être disponibles. En particulier, travailler avec des formulaires et avec modules communs dont la propriété de travailler avec connexions externes. Vous devez utiliser principalement Connecteur V82.COM et seulement en cas de manque de fonctionnalité V82.Application. La différence de vitesse peut être particulièrement visible sur les grandes bases de données.

Alors, commençons

  1. Créons un objet COM
    • Pour V82.Application Connexion = New COMObject("V82.Application" ) ;
    • Pour Connecteur V82.COM Connexion = New COMObject("V82.COMConnector" ) ;
  2. Créons une chaîne de connexion
    • pour la version serveur de la base de données ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • pour la version de fichier de la base de données ConnectionString = "File = " "PathKBase" "; Usr = Nom d'utilisateur ; Pwd = Mot de passe";
  3. Se connecter à la base de données Tentative de connexion = Connexion. Connect(ConnectionString) ; Message d'exception = Nouveau message à l'utilisateur ; Message. Texte = + DescriptionErreurs() ; Message. Signaler() ; EndTry ;
  4. Déconnexion de la base Connexion = Non défini ;

    Pour objet V82.Application il est obligatoire de déconnecter la connexion, sinon une session incomplète restera suspendue, qu'il faudra alors supprimer manuellement. En cas de Connecteur V82.COM la connexion se termine automatiquement à la fin de la procédure au cours de laquelle la connexion a été établie. Et il y a encore un petit moment.

    Pour l'utilisateur sous lequel la connexion est établie, la case "Demander confirmation lors de la fermeture du programme" dans ses paramètres doit être désactivée.

Et maintenant, rassemblons tout le code

Connexion = New COMObject("V82.Application" ) ; //Connexion = Nouveau COMObject("V82.COMConnector"); ConnectionString = "Srvr = ""Server1C"";Ref = ""MaBase"" ; Usr = Peter ; Pwd = 123" ; //ConnectionString = "File = ""С:\MyBase"" ; Usr = Peter ; Pwd = 123" ; Tentative de connexion = Connexion. Connect(ConnectionString) ; Message d'exception = Nouveau message à l'utilisateur ; Message. Texte = "Impossible de se connecter à la base de données"+ DescriptionErreur() ; Message. Signaler() ; EndTry ; Connexion = Non défini ;

Pour le type de connexion V82.Application est appliquée à l'objet COM qui a été créé à l'origine, et pour Connecteur V82.COM la méthode est appliquée à la connexion. la poursuite du travail avec la demande va signifie standard 1C. dans le code ça ressemble à ça :

Demande = Connexion. NouvelObjet("Requête") ; // Pour Connecteur V82.COM Demande = Connexion. NouvelObjet("Requête") ; // Pour V82.Application Demande. Texte = "SÉLECTIONNER | Positions des organisations Code, | Positions des organisations Nom| DEPUIS | Répertoire. Positions des organisations AS Positions des organisations "; Résultat = Demande. Exécuter () ; Échantillon = Résultat. Choisir() ; Alors que la sélection. Suivant() Cycle FinCycle ;

Pour la version 1C:Enterprise 8.3, tout reste inchangé, sauf que lors de la création de COMObjects, vous devez utiliser "Connecteur V83.COM" ou V83.Application.

) C'est exact

Dans le même temps, j'ai vu plus d'une fois des publications simplement "décoller" qui ne rapportent même pas 10 points.
Pourquoi est-ce arrivé? Probablement parce que quelqu'un les aimait manifestement.


Je parle de cela et dis que ce serait bien de ne pas lire l'article par note pour comprendre à quel point vous en avez besoin, ou pour l'évaluer pas si primitivement +/-. Quant à ce que j'ai aimé, je le corrigerais comme ceci: elle a tellement marqué du fait que les étoiles se sont formées de cette manière et que beaucoup de gens se sont rassemblés sur le site et que beaucoup l'ont aimé, vous comprenez vous-même que c'est une question de chance. dès que l'article sort page d'accueil alors il ne peut déjà être trouvé que sur demande, et donc tout le monde passe par des votes. Et pour soutenir sur la page principale, pour autant que je sache, ils permettent juste des commentaires constants = promotion de l'article.
C'est pour cela qu'ils installent des boutiques dans les rues de passage - après tout, ce n'est souvent pas la qualité et la pertinence du produit qui compte, mais la perméabilité du lieu, les passants achètent souvent ce qu'ils jetteront le lendemain, juste pour le plaisir de la démarche. C'est une maladie bien connue - la shopomanie. Ou simplement augmenter le flux augmente la probabilité d'avoir le bon acheteur.

Et les avantages et les inconvénients ... ne sont qu'une sorte de "merci" pour le temps et le travail consacrés


Ceux. Est-ce qu'un moins compte aussi comme "merci" ? Je voulais donc connaître votre attitude quant à savoir s'il est nécessaire de le mettre dans de tels cas, et à quel point les autres pensent-ils être intéressants? Que ce soit pour le mettre quand l'article est nuisible/mauvais ou quand il est simplement inutile/vide pour vous.
À mon avis, l'article ressemble à une simple augmentation de la note, car :
1. Le problème avec les types que j'ai donné a été généralement ignoré par l'auteur, bien qu'il n'ait pas été trop paresseux pour écrire un tas de commentaires.
2. Il y a une inexactitude manifeste dans l'article : on dit que c'est le seul moyen

V82 = Nouveau COMobject("V82.ComConnector"); Code = EntrepreneurCOM.Code ;


mais je le fais calmement à l'aide d'un traitement comme celui-ci:

Notifier (Base.Directories.Counterparties.FindBy Name("LLC").Code);


et tout va bien ! Et je choisis la connexion V82.ComConnector
Il est quelque peu étrange que l'auteur ne se soucie pas du tout que son article contienne de tels problèmes qui ont été signalés, mais il ne réagit en aucune façon.
3. Mais il y a toujours un problème lorsque l'erreur "La classe n'existe pas" apparaît
4. Mais il y a un problème lorsque 8.2 est installé, puis 8.1 est installé - essayez d'échanger via OLE / COM avec un échange UT-BP typique !
5. Pourriez-vous indiquer le traitement principal sur le site qui vous permet de vous connecter universellement via OLE / COM afin que les débutants ne perdent pas de temps, vous écrivez pour eux! Au fait, pour une raison quelconque, sa photo s'affiche avec vous, pourquoi le ferait-elle?. Et du coup, 2 mots sur le fond, et 6 autres en coulisses.

En général, je ne vous jette pas de boue, mais signale des lacunes spécifiques, mais il n'y a pas de réaction. Si c'est l'expérience que vous partagez, alors elle est en quelque sorte erronée et incomplète.
Je veux dire, si l'auteur avait le désir de rassembler tous les problèmes, alors il pourrait au moins écouter l'expérience de quelqu'un d'autre, et ne pas casser les commentaires. Immédiatement, il y a une situation où celui qui l'a lu en sait plus que l'auteur, on lui dit (parfois à tort), et il se défend aussi. Du coup, toutes les informations ne sont pas dans l'article, mais dans les commentaires ! Drôle! Cela arrive souvent, mais en même temps, vous n'avez pas besoin de vous reposer sur ce que vous vouliez le mieux - je montre comment c'est mieux, et d'autres le montrent ! Incluez ceci dans l'article et cela en vaudra la peine, tout le monde n'est pas intéressé à lire cette escarmouche.


Mots clés : COM, connexion, externe, OLE, Automation, Connect, ComConnector, Srvr

Lors de l'utilisation de connexions COM 1C:Enterprise 8.0 pour accéder aux données, il existe les avantages suivants par rapport à l'utilisation du serveur Automation :

  1. Configuration de connexion plus rapide car aucun processus séparé ne doit être créé système opérateur, et toutes les actions sont exécutées dans le processus appelant ;

  2. Accès plus rapide aux propriétés et méthodes des objets 1C:Enterprise, puisque l'organisation de l'appel ne nécessite pas l'organisation de la communication interprocessus ;
  3. Moins de consommation des ressources du système d'exploitation.

En général, travailler avec 1C:Enterprise 8.0 via une connexion COM est similaire à travailler avec 1C:Enterprise en mode serveur Automation. Les principales différences sont les suivantes :

  1. Dans le cas d'un serveur Automation, une application 1C:Enterprise 8.0 à part entière est lancée, et dans le cas d'une connexion COM, un serveur COM in-process relativement petit est lancé.

  2. Lorsque vous travaillez via la connexion COM ne sont pas disponibles Fonctionnalité d'une manière ou d'une autre liée à l'organisation de l'interface utilisateur 1C : Enterprise 8.0 ;
  3. Lorsque vous travaillez avec une connexion COM, le module d'application de configuration 1C:Enterprise 8.0 n'est pas utilisé. Son rôle lorsque vous travaillez avec une connexion COM est joué par le module de connexion externe.

1.1 Comment établir une connexion COM

Pour organiser l'accès aux données 1C:Enterprise 8.0 via une connexion COM, la séquence d'actions suivante est effectuée :

  1. un objet COM est créé avec l'identifiant V8.COMConnector , à l'aide duquel la connexion est établie ;

  2. la méthode Connect de l'objet V8.COMConnector créé précédemment est appelée. La méthode Connect renvoie une référence à un objet de connexion COM avec base d'informations 1C : Entreprise 8.0 ;
  3. via l'objet de connexion COM reçu, un appel est effectué vers méthodes acceptables, propriétés et objets de l'infobase avec laquelle la connexion est établie.

Important! En raison de l'absence d'interface utilisateur dans une connexion COM, tous les objets, ainsi que les propriétés et les méthodes, ne peuvent pas être utilisés dans une connexion COM.

1C : Objets d'entreprise accessibles de l'extérieur via une connexion COM :

  1. Variables exportées et procédures/fonctions du module de liaison externe

  2. Variables exportées et procédures/fonctions des modules communs
  3. Inclure et exclure des modules entiers en définissant des propriétés de module partagé

  4. Inclusion et exclusion de fragments de modules communs à l'aide du préprocesseur
  5. Contexte global 1C:Enterprise 8.0, à l'exception des objets associés de manière rigide à l'application cliente (TextDocument, SpreadsheetDocument, ...)

1.2 Module de connexion externe

Comme indiqué précédemment, les fonctions du module d'application lorsqu'il travaille via une connexion COM sont exécutées par le module de connexion externe. Ce module peut avoir des procédures de gestionnaire d'événements AtStartSystemWork() et AtShutdownSystem(), qui peuvent contenir des actions à effectuer lors de l'initialisation et de la fin de la connexion, respectivement.

Procédures, fonctions et variables globales définies dans un module de jointure externe avec mot-clé Les exportations deviennent, comme dans le cas d'un module applicatif, une partie du contexte global.

1.3 Modules généraux

Les propriétés "Client", "Server" et "ExternalConnection" ont été introduites pour les modules communs. Ils sont destinés à définir dans la configuration l'utilisation des modules en version client-serveur et en mode de connexion COM.

1.4 Objet "V8.COMConnector"

La seule tâche résolue par l'objet COM V8.COMConnector consiste à établir une connexion COM avec l'infobase 1C:Enterprise 8.0. Avec une seule instance de l'objet V8.COMConnector, un nombre illimité de connexions peut être établi. L'objet V8.COMConnector a une seule méthode Connect pour Paramètres COM-connexions à l'infobase 1C:Enterprise 8.0.

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

La chaîne de connexion IB est une chaîne de fragments de la forme Paramètre=Valeur. Les fragments sont séparés les uns des autres par ";". Si la valeur contient caractères d'espacement, alors il doit être entouré de guillemets doubles (").

Paramètres communs :

usr - nom d'utilisateur ;
pwd - mot de passe.

Le paramètre suivant est défini pour la variante de fichier :

Fichier - répertoire de l'infobase.

Pour la version client-serveur, les paramètres suivants sont définis :

Srvr - 1C : Nom du serveur d'entreprise ;
Ref - nom de l'infobase sur le serveur.

La méthode Connect établit une connexion COM avec l'infobase 1C:Enterprise 8.0 et renvoie une référence à l'objet de connexion COM.

// Un objet connecteur est créé
V8 = Nouveau COMObject("V8.COMConnector");
// crée un objet de connexion COM
Connexion = V8.Connect("File=""c:\InfoBases\Trade""; Usr =""Director"";")

1.5 Objet "Connexion COM"

La connexion COM à l'infobase 1C:Enterprise fournit un accès complet à son contexte global (voir "Contexte d'exécution module logiciel"). Ainsi, une connexion COM peut avoir comme méthodes : des constantes système, des valeurs d'objets spécifiés dans le configurateur, auxquels on accède à l'aide de gestionnaires (par exemple, des constantes, des énumérations, des répertoires, des documents, des journaux de documents, des rapports, des traitements, des plans de types de caractéristiques, des plans de comptes, des plans de types de calcul, des registres), ainsi que des variables déclarées dans le module de connexion externe avec le mot-clé Export.

De plus, la connexion COM a méthode supplémentaire NewObject, avec lequel vous pouvez créer des valeurs de certains types.

ts = Connexion. NouvelObjet("ValeurTable");

Méthode String Vous permet d'obtenir des représentations sous forme de chaîne de valeurs 1C:Enterprise.

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

1.6. Fonctionnalités de travail avec la connexion COM

En Automation et sur une connexion COM, TRUE et FALSE ont respectivement les valeurs -1 (moins un) et 0.

Il est possible d'organiser un pool de connexions COM. Dans le même temps, plusieurs objets de connexion COM sont créés sur l'hôte sur le serveur 1C:Enterprise dans ADVANCE, et l'établissement d'une connexion prend encore moins de temps, car il n'est pas nécessaire de créer un nouvel objet.

Un nouvel objet Query Builder a été implémenté, conçu pour générer des textes de requête basés sur paramètres spécifiés. Cet objet prend en charge la fonctionnalité de générateur de rapport qui n'est pas liée à l'affichage d'un rapport dans un document de feuille de calcul et d'autres tâches liées à l'interface utilisateur. Cet objet peut être utilisé sur le serveur 1C:Enterprise et dans une connexion COM.

L'utilisation d'objets COM est disponible lorsque le langage intégré est exécuté sur le serveur 1C:Enterprise.

Les erreurs COM sont traduites en exceptions 1C:Enterprise.

Si la configuration tente de créer un objet non valide, tel que feuille de calcul, dans un module de connexion externe, dans un module général ou dans un module objet, la connexion COM ne peut pas être établie ou terminée comme une exception.

Imprimer (Ctrl+P)

L'une des options d'échange de données entre les bases de données 1C est un échange via une connexion COM. À l'aide d'une connexion COM, vous pouvez vous connecter d'une base de données 1C à une autre et lire ou écrire des données. Vous pouvez utiliser cette méthode à la fois dans les versions client-serveur des bases de données et dans les bases de données fichier. Cet article traite de ce type de connexions sur la plate-forme 8.3

connexion com

Vous pouvez créer deux types d'objets COM pour l'application 1C. Ce sont d'anciennes connexions V83.Application et connexions com Connecteur V83.COM . En cas de V83.Application une copie presque complète de l'application 1C est lancée. En cas d'utilisation Connecteur V83.COM une petite partie serveur est démarrée. La vitesse de travail dans ce cas est plus élevée, mais certaines fonctions peuvent ne pas être disponibles. En particulier, travailler avec des formulaires et avec des modules communs pour lesquels la propriété de travailler avec des connexions externes n'est pas définie. Vous devez utiliser principalement Connecteur V83.COM et seulement en cas de manque de fonctionnalité V83.Application. La différence de vitesse peut être particulièrement visible sur les grandes bases de données. Pour la plate-forme 8.2 est utilisé V82.Application ou V82.COMConnecteur

Établir une connexion OLE

Connexion = Nouveau COMObject("V83.Application" ) ;

Établir la connexion COM

Connexion = Nouveau COMObject("V83.COMConnector" ) ;

Chaîne de connexion

//Pour l'option client-serveur
StringConnectionStringConnection= "Srvr = " "NomServeur" ";Ref = " "NomBase" ;
//Pour l'option de mode fichier :
StringConnectionStringConnection= "Fichier = " "CheminBase" "; Usr = Nom d'utilisateur ; mot de passe = mot de passe »;
Tentative
Connexion = Connexion . Connecter(Chaîne de connexion) ;
Exception
Message = Nouveau MessageVersUtilisateur ;
Message . Texte = "Échec de la connexion à la base de données" + DescriptionErreur(); Message . Signaler();
EndTry ;

Rompre la connexion

Connexion = Non défini ;
Pour objet V83.Application il est obligatoire de déconnecter la connexion, sinon une session incomplète restera suspendue, qu'il faudra alors supprimer manuellement. En cas de Connecteur V83.COM la connexion se termine automatiquement à la fin de la procédure au cours de laquelle la connexion a été établie. Et il y a encore un petit moment. Pour l'utilisateur sous lequel la connexion est établie, la case "Demander confirmation lors de la fermeture du programme" dans ses paramètres doit être désactivée.

Méthode NewObject()

Pour créer un nouvel objet, vous pouvez utiliser la méthode NewObject(), par exemple :

Pour Connecteur V83.COM

DemandeCOM = Connexion. NouvelObjet( "Demande ") ;
TableCOM = Connexion. NouvelObjet( "Tableau des valeurs") ;
ArrayCOM = Connexion. NouvelObjet("Tableau") ;

WidCOM = Connexion.NouvelObjet

Pour V83.Application

RequêteOLE = Connexion. NouvelObjet(" Demande ") ;
TableOLE = Connexion. NouvelObjet("Tableau des valeurs") ;
ArrayOLE = Connexion.NouvelObjet("Déployer" ) ;
WidCOM = Connexion.NouvelObjet(“UniqueIdentifier”,StringUID);

DemandeCOM . Texte ="CHOISIR
| Positions des organisations Code,
| Positions des organisations Nom
| DEPUIS | Directory.PositionsOrganizations
AS Positions des organisations »;

Résultat = DemandeCOM. Exécuter () ;
Goûter = résultat. Choisir () ;
Alors que la sélection. Suivant()Cycle
FinCycle ;
Vous pouvez également utiliser les gestionnaires d'objets de configuration :
DirectoryCOM = Connexion. Livres de référence. NomRépertoire ;
DocumentCOM = Connexion. Documentation. Nom du document;
RegisterCOM = Connexion. RegistresInformations. RegisterName ;

Obtenir et comparer une énumération via une connexion COM

Pour comparer les valeurs des éléments d'énumération définis dans la configuration, il est nécessaire de convertir ces éléments en l'un des types primitifs, dont la comparaison ne pose pas de difficultés. Ces types peuvent être de type numérique ou de type chaîne. Vous pouvez convertir la valeur d'un élément d'énumération en un type numérique comme celui-ci

Élément d'énumération = Connection.Directories.Directory1.FindByCode(1).Attribute1 ;

PossibleValues ​​= EnumElement.Metadata().EnumValues ;

EnumElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumElement)));

Si EnumItemNumber = 0 Alors Report( "EnumValeur1");

SinonSi EnumItemNumber = 1 Alors Report("EnumValue2");

Fin si;

Obtenir un objet via COM par ID

Grâce aux gestionnaires d'objets de configuration, nous obtenons un objet com, par exemple :
DocumentCOM = Connexion. Documentation. Nom du document;

Ensuite, nous obtenons la chaîne d'identifiant unique :

StringUID = Connexion.string ( DocumentCOM.UniqueIdentifierDocumentCOM.UniqueIdentifier())

ID = Nouveau Y ID unique(StringUID);
AVEC linkByIdentifier = Documents[DocumentName].GetLink(Identifier);

Si vous avez besoin de trouver l'objet com par document par ID, alors vous devez écrire comme ceci :

Wicom = Connection.NewObjectConnection.NewObject(“UniqueIdentifier”,StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(UidCOM);