Réception de données via une connexion com à partir de 1 s. V8 : connexion COM. Réception et comparaison de l'énumération via une connexion COM

Question : Analyser un site à l'aide de COM IE 11


Bonne journée.!
La question est malheureusement bien connue, il faut prendre les informations sur le site. Mais il y a des nuances :
1. Il n'y a aucun moyen d'accéder directement à la page d'autorisation (allez d'abord sur la page d'accueil, cliquez sur le lien Connexion, obtenez le formulaire d'autorisation et connectez-vous ensuite seulement).
2. Vous devez visiter le site Web via barre de recherche recherchez des données, puis lisez-les et recherchez à nouveau (les données peuvent être en russe et en anglais, c'est-à-dire si les données à rechercher sont en russe, vous devez alors rechercher dans la « version russe » du site, et ceci est un autre lien vers une autre page. C’est le même problème avec l’anglais).

Finalement:
- allez sur la page d'accueil - connectez-vous - recherchez des données - (allez sur une autre version du site, si nécessaire) - prenez-les.

Problème:
Les données ne sont pas lues dans la propriété "document" lorsque vous suivez un lien.
Cela se produit à deux moments :
- lorsque l'on suit le lien pour se connecter (ce n'est pas un bouton, mais juste un lien) ;
- lorsque nous changeons la langue du site (également un lien).

Note
Si, avant de suivre un lien au stade de l'autorisation, vous recevez un lien, fermez le com et rouvrez-le avec la transition via la méthode IE.navigate("link"), alors les données de la propriété "document" se déroulent normalement. Mais vous ne pourrez pas faire la même chose en changeant la langue du site, car... Je dois me reconnecter et en plus, je ne voudrais pas résoudre ce problème exactement comme ça.

Voici le code :

&Sur la procédure client SetWaitingIE(IE, SecondCall=False) If NOT IE.Busy Then D = CurrentDate() + 3; While D >= CurrentDate() Boucle If IE.Busy Then Abort ; fin si; Fin du cycle ; fin si; Tandis que IE.Busy Loop EndLoop; Pendant que IE.ReadyState< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>Fin de cycle « complète » ; Exception si SecondCall Then Return ; Sinon, lien = IE.LocationURL ; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(Lien); SetExpectIE(IE, True); fin si; FinTentative ; EndProcedure &OnClient Function PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Tentative d'éléments = IE.Document.GetElementsByName("username"); Si Elements.Length = 1 Alors pour chaque El des éléments, boucle El.Value = Login ; Fin du cycle ; fin si; Elements = IE.Document.GetElementsByName("mot de passe"); Si Elements.Length = 1 Alors pour chaque El des éléments, boucle El.Value = Mot de passe ; Fin du cycle ; fin si; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Autorisé = Vrai ; Exception Si CN > 3 Alors renvoie False ; fin si; IE.Quit(); IE.Navigate(Lien); SetWaitingIE(IE); MF = MF + 1 ; Si PerformUserAuthorization (IE, Link, Login, Mot de passe, SCH) Then Return True ; fin si; FinTentative ; Retour autorisé ; EndFunction &OnClient Procédure Upload(Command) SpTables = GetListTablesForUpload(); Si SpTables = False Then Return ; fin si; IE = GetCOM("InternetExplorer.Application"); Pour chaque ligne de SpTable.SOURCE_LIST Cycle RA = Row.ID ; Ressource = String.RESOURCE ; IE.Navigate (Ressource); SetWaitingIE(IE); Essayez If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("ClassName"); Si Classes.Length = 1 Alors pour chaque classe à partir des classes Loop Resource = Class.All(0).Href; Avorter; Fin du cycle ; Essayer IE.Quit(); IE = IE.Navigate (Ressource); SetWaitingIE(IE); Rapport d'exception("La connexion au site "" +String.NAME + "" a échoué !"); Avorter; FinTentative ; Sinon Report("La connexion au site "" +String.NAME + "" a échoué !"); Avorter; fin si; fin si; If NOT PerformUserAuthorization(IE, Resource, String.LOGIN, String.PASSWORD) Then Report("L'autorisation de l'utilisateur sur le site "" + String.NAME + "" n'a pas été complétée!"); Avorter; fin si; Ressource = IE.LocationURL ; Liste de personnes = SpTable.FACE_CODES.FindLines(New Structure("SOURCE", RA)); ListeNotFound = Nouveau tableau; Pour chaque personne de la liste des personnes, cycle PersonName = Person.NAME_IN_SITE; C'est le russe = CharacterCode(PersonName, 1) >= 1040; TechResource = ?(C'est le russe, StrReplace(Resource, "en_US", "ru_RU"), StrReplace(Resource, "ru_RU", "en_US")); Si TekResurs<>IE.LocationURL Puis RootClasses = IE.Document.GetElementsByClassName("ClassName"); Si RootClasses.Length = 1 Alors pour chaque RootClass de RootClasses Loop Classes = RootClass.Children; Avorter; Fin du cycle ; AmGroup = Faux ; RuGroup = Faux ; Pour chaque classe à partir d'une boucle de classes If HPreg(Class.ClassName) = "dropdown-header" Then AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Europe") > 0; Sinon, HPreg(Class.ClassName)<>"sélectionné" Alors si AmGroup et Find(Class.All(0).InnerText, "English") > 0 OU RuGroup et Find(Class.All(0).InnerText, "Russia") > 0 Then IE.Navigate(Class .Tous(1).Href); SetWaitingIE(IE); Avorter; fin si; fin si; Fin du cycle ; fin si; fin si; IE.Document.GetElementById("ID").Value = PersonName; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); Essayer de SetExpect(IE); //Circuit les données reçues ExceptionListNotFound.Add(Person); Continuer; FinTentative ; Fin du cycle ; Rapport d'exception("Erreur :" + Symbols.PS + ErrorDescription()); Avorter; FinTentative ; Fin du cycle ; IE.Quit(); Fin de la procédure

Répondre:

Le sujet est très intéressant, mais personnellement, malheureusement, je n'ai ni l'expérience ni même la possibilité de comprendre d'une manière ou d'une autre ce problème. Si vous pouvez trouver des informations sur ce sujet, partagez-les.
--- Une association messages, 29 avril 2016 ---

Si je comprends bien, il n'y a pas d'accès à la base de données SQL ?

--- Fusion des messages, 29 avril 2016 ---

Eh bien, s'il s'agit d'une analyse, alors quel type d'accès ?

Question : Connexion COM 1C 8.3 - 1C 8.3 Est-il possible d'entrer le débogueur dans la connexion


Je voulais demander aux membres du forum s'il est possible de déboguer lorsque je me connecte via une connexion COM en utilisant le traitement d'une base de données sur la plate-forme 8.3.6 (BP 3.0) vers le module de connexion externe d'une base de données auto-écrite (exécutant également sur la plateforme 8.3.6) et appeler les exportations à partir de celle-ci avec des procédures utilisant le traitement ? Les bases de données sont actuellement basées sur des fichiers et se trouvent sur un seul PC, mais une version serveur est prévue. Jusqu'à présent, j'utilisais les constructions ci-dessous pour transmettre du code arbitraire à exécuter via une connexion COM, ainsi que pour enregistrer les erreurs. Voici des fragments de procédures dans la base de données auto-écrite dans le module de connexion externe :

Fonction ExecuteIn(CodeExecute, Paramètre auxiliaire = "") Exporter
Vérification de sécurité(); // Protection contre les tentatives d'exécution de code malveillant lors d'une connexion externe pour le compte d'un autre utilisateur Réponse = "0" //Si rien ne doit être renvoyé, alors s'il n'y a pas d'erreur dans le code  // renvoie juste OK  //Parce que Le code transmis peut contenir des erreurs, nous envelopperons alors son exécution dans une tentative. Essayez d'exécuter (CodeExecute); // Exécuter le code sous forme de chaîne sur un autre ordinateur via une connexion COM (module de connexion externe Libra Base) Exception // s'il y a une erreur, alors renvoie son texte Réponse = ErrorDetailView (ErrorInfo ()); FinTentative ; Retourner la réponse ; EndFunction Fonction TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Protection contre les tentatives d'exécution de code malveillant lors d'une connexion externe pour le compte d'un autre utilisateur. OutParameter = "Il existe une connexion avec la base de la balance via une connexion COM !"; Renvoie Vrai ; FinFonction
Depuis BP 3.0, j'exécute le fragment suivant :
Tentative
Com = Nouveau COMObject("V83.COMConnector"); Connexion = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Test réussi ! Il y a une connexion à la base de données de la balance"); Erreur d'exception = ErrorDetailView (ErrorInfo ()); TellUser("Il n'y a pas de connexion COM à la base Libra ! Détails"+Erreur); Com=Indéfini ; Retour ; FinTentative ; Sortie = "" ; Dans = "1" ; Si Connection.Communication Test(In, Out) Then TellUser("Test de communication avec configuration de la balance réussi ! Réponse : "+Out); Sinon TellUser("Le test de communication avec la configuration de la balance a échoué ! Réponse : "+Out); Fin si ;
Je comprends, bien sûr, qu'il ne sera pas possible de saisir l'opérateur Execute(CodeString1C8), mais existe-t-il une telle possibilité lors de l'appel d'une procédure de module distant connexion externe depuis la base de données principale Connection.TestConnections(In, Out) pour saisir son code dans la même session de débogueur dans la fonction Security Check() de leur procédure appelante ?
J'ai déjà regardé la documentation que j'ai pu trouver sur cette question. J'ai défini les options pour activer le débogage et les points d'arrêt partout dans les deux configurations. J'ai lancé les deux configurateurs.
Est-il même possible dans cette situation de déboguer la procédure Security Check() plus loin du côté du module de connexion externe ?

Question : Mauvaise adresse IP dans la connexion COM


Il existe un traitement qui transfère les documents via V83.ComConnector entre les serveurs. Le serveur 1 (version 1C 8.2.19.90) se connecte toujours au serveur 2 (version 8.3.8.2033). La ligne de connexion contenait l'adresse IP du serveur 2 et tout fonctionnait bien. Sur le serveur 1 lui-même, j'ai également vu la plateforme installée comme sur le serveur 2, version 8.3.9.2033 (si c'est important).

Le problème est que sur le serveur 2 l'adresse IP a changé, le traitement a bien sûr cessé de fonctionner, et lorsque j'ai saisi une nouvelle IP dans la ligne de connexion, le traitement génère une erreur dont la description est toujours l'ancienne IP (!) et le texte « Une tentative d'établissement de connexion a échoué, car la réponse requise n'a pas été reçue d'un autre ordinateur dans le délai requis, ou le connexion établie en raison d'une réponse incorrecte d'un ordinateur déjà connecté."

Ils ont tout redémarré, vidé les caches, etc., les admins jurent que tout va bien de leur côté, on peut se connecter d'un serveur à un autre via RDP, etc.

Qu'est-ce qui ne va pas, comment puis-je le résoudre ? J'ai cherché partout sur Internet et je n'ai pas trouvé une telle situation !

Répondre:() 100% sûr ! Le deuxième jour j'essaye, comme je l'ai écrit, je le regarde avec un débogueur, j'ai même créé un stupide traitement monocellulaire pour un test de connexion, cette erreur apparaît et c'est tout

Question : connexion COM aux différentes versions


Salut tout le monde.
J'ai une base de données appelée « Consolidation », qui collecte différentes données provenant de différentes bases de données et regroupe le tout dans une seule pile. Le problème est que vous devez vous connecter à ces bases de données via com, mais ce sont des versions différentes, donc à la fin j'obtiens une erreur comme
Erreur de connexion !(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Erreur lors de l'appel de la méthode contextuelle (Connect) : Une exception s'est produite (V83.COMConnector. 1 ) : Incompatibilité entre les versions client et serveur 1 C:Enterprise Client les versions diffèrent et le serveur (8.3.8.1964 - 8.3.6.2332), application client : connexion COM

J'ai établi une connexion, une autre tombe...

Je sais que d'une manière ou d'une autre, via le service de composants, vous pouvez créer « vos propres classes (connecteurs) » pour chaque version, puis créer un nouvel objet COM correspondant à la version plate-forme de la classe... peut-être que je me trompe.

Aidez-moi à surmonter ce problème...

Répondre:Ça y est... je retire la question..

Question : Erreur Com lors du traitement du remplissage


Bonjour.
8.2 Vente au détail 1.
Je me connecte en 8.1 Pas une conf typique.
Je me connecte via com à la base de données et essaie de créer un document, mais lors de l'appel de « CreateDocument() » ou « GetObject() » une erreur se produit dans la procédure TraitementRemplissage. voir fig.

J'essaie la même chose dans la base de données 8.1 elle-même, mais il n'y a pas d'erreur et je n'entre pas non plus dans le traitement de remplissage.
Qu'est-ce qui ne va pas ?

Répondre: turboq, un module de document mal écrit !

Ajouté après 5 minutes
Elle n'est pas appelée ! Elle essaie de compiler ! Mais comme lors de la connexion via ComConnector, le problème du mode de dialogue n'EXISTE PAS, le module de document ne peut pas être compilé.
Dans de tels cas, lorsqu'il est nécessaire de mettre en œuvre un travail avec une boîte de dialogue dans un module objet, utilisez les instructions du préprocesseur

Ce n'est pas votre erreur, mais une erreur dans le module document de la base de données à laquelle vous vous connectez.

Dans la base de données, le code est exécuté sur le client et il existe un mode dialogue, donc tout se passe sans erreur

N'utilisez pas ComConnector, V8.Application pour la connexion, les éléments de l'interface seront alors à votre disposition

Ajouté après 5 minutes
=======================================================================================================================
à partir de la description de la connexion externe (SP) J'ai souligné en gras ce que vous devriez lire sur ComConnections

Description:

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

  • Dans le cas d'un serveur Automation, une application 1C:Enterprise 8 à part entière est lancée, et dans le cas d'une connexion externe, un serveur COM en cours relativement petit est lancé.
  • Non disponible lorsque vous travaillez via une connexion externe Fonctionnalité, d'une manière ou d'une autre liée à l'organisation de l'interface utilisateur 1C:Enterprise 8 ;
  • Lors de l'exécution d'une connexion externe, le module d'application géré (module application régulière) configuration 1C:Entreprise 8. Son rôle lorsque l'on travaille avec une connexion externe est joué par le module de connexion externe.
L'utilisation d'une connexion externe présente les avantages suivants par rapport à l'utilisation d'un serveur Automation :
  • Configuration de connexion plus rapide puisqu'aucun processus distinct ne doit être créé système opérateur, et toutes les actions sont effectuées dans le cadre du processus appelant ;
  • Accès plus rapide aux propriétés et méthodes des objets 1C:Enterprise, puisque l'organisation d'un accès ne nécessite pas de communication interprocessus ;
  • Moins de consommation de ressources du système d'exploitation.
Pour organiser l'accès aux données 1C:Enterprise 8 via une connexion externe, la séquence d'actions suivante est effectuée :
  • un gestionnaire de connexion COM est créé, à l'aide duquel la connexion est établie ;
  • un appel est effectué à la méthode Connect du gestionnaire de connexions COM. La méthode Connect renvoie une connexion externe avec base d'informations 1C : Entreprise 8 ;
  • via une connexion externe, l'accès aux méthodes, propriétés et objets valides de l'infobase avec laquelle la connexion est établie est établi.
Important! En raison de l'absence d'interface utilisateur, tous les objets, propriétés et méthodes ne peuvent pas être utilisés dans une connexion externe.
La jointure externe fournit accès totalà son contexte global. Ainsi, une connexion externe comme ses méthodes peuvent avoir : des constantes système, des valeurs d'objets spécifiées dans le configurateur, dont l'accès s'effectue à l'aide de gestionnaires (par exemple, constantes, énumérations, répertoires, documents, journaux de documents, rapports , traitements, plans de types caractéristiques, plans comptables, plans de type calcul, registres), ainsi que les variables déclarées dans le module de connexion externe avec le mot clé Export.

Disponibilité:

L'intégration.

Question : connexion COM, plan de type caractéristiques


La tâche consiste à créer par programme un nouvel élément dans un plan connu de types de caractéristiques via une connexion COM. La connexion est établie, tout va bien ici.

J'écris comme ceci :

TypeDescriptionTech = Nouveau TypeDescription("DirectoryLink. Counterparties"); PurposeProperties = Connexion. Plans de types de caractéristiques. Objectifs des propriétés des catégories d'objets. RechercherParNom(« Répertoire « Particuliers » »); NewElement = Connexion. Plans de types de caractéristiques. Propriétés de l'objet. CreateItem(); NouvelÉlément. Nom = Nom de la propriété ; NouvelÉlément. PropertyAssignment = PropertyAssignment ; NouvelÉlément. ValueType = DescriptionTypesTech ;

La dernière ligne ne fonctionne pas. Et c'est compréhensible, il trouve un tel type pour la base de données où 1C est exécuté, mais j'ai besoin d'un type pour la base de données attachée. Comment l'obtenir?

Dans ma version, un élément avec le type de valeur « Liste personnalisée » est simplement créé. Cela fonctionne en principe, mais c'est en quelque sorte moche.

Plateforme 8.3. Une connexion COM est une condition préalable. Les solutions sans son utilisation n'ont aucun intérêt.

Répondre:

Rouleaux. Merci, ça a fonctionné.

Question : connexion COM. Problème de paramètre de requête


Bonne journée.
Problème de requête via la connexion COM.

Perem savoirs traditionnels ; ArrayItems = COM.NewObject("Array"); Pour chaque ligne du cycle TZNomenclature Nomenclature = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Tableau de nomenclature.Add(Nomenclature); Fin du cycle ; Si ArrayItems.Quantity()<>0 Puis Request = COM.NewObject("Request"); Request.Text = « SELECT | &Tableau de nomenclature) |Et inventaire et matériaux.ThisGroup = FALSE |Et registraire LINK Document.Setting SalesPrices) AS NomenclaturePricesSliceLast"; Request.SetParameter("Tableau d'éléments", Tableau d'éléments); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Tableau des valeurs"); TK = Request.Run().Upload(); Sinon TK = New ValueTable ; TK.Columns.Add("Nomenclature"); TK.Columns.Add("Prix"); TK.Columns.Add("Pourcentage"); TK.Columns.Add("Taux de TVA"); fin si;

Le problème vient précisément de l'article ou d'un tableau d'articles ; si vous les définissez comme paramètre, la requête renvoie des prix vides ; si vous ne spécifiez pas du tout ce paramètre, alors la requête renvoie les données correctes.
Dans la console de requêtes de cette même base de données externe, tout est traité sans problème.
Qu'est-ce qui ne va pas ?

Répondre:

Essayez de le faire via VremTable. Créez un tableau de valeurs avec des colonnes resp. par exemple, remplissez-le, insérez-le dans la demande, puis appliquez-le avec une connexion interne.

Question : connexion Com de la base de données de fichiers à la base de données de fichiers


Bonjour. J'ai une base de données de fichiers 8.3, à partir de laquelle j'essaie de me connecter à une autre base de données de fichiers en utilisant une connexion com :

Répertoire = "C:\Utilisateurs\1C\Workflow (test)" ; Utilisateur = « Administrateur » ; Mot de passe = "" ; Paramètres de connexion = "File="+Directory+";Usr="+User+";Pwd="+Password+";"; V83 = Nouveau COMObject("V83.COMConnecteur"); Tentative de connexion = V83.Connect(ConnectionParameters); Rapport d'exception("Impossible de se connecter au flux de documents !"); FinTentative ;


Une exception est levée, sans description de l'erreur.
Les deux bases de données sont forcées de se lancer dans la version 8.3. Le répertoire et l'utilisateur sont spécifiés correctement. Quelle pourrait être la raison?

Répondre:

J'écris la ligne de code V82 = New COMObject(" V83.COMConnector"); et le reste du code est comme ci-dessous, sans modifications.

Lorsque les versions des plateformes source et destination sont différentes, une erreur se produit.

On ne sait pas quelle version de la bibliothèque enregistrer et où l'enregistrer ?

Je pense que je dois enregistrer la bibliothèque, version 8.2.18.61, et je le fais via un fichier bat

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

msk-test1c:1641 -- il s'agit du serveur 8.3.5.1098
V82 = Nouveau COMObject("V82. COMConnector"); Rapport ("Connectez-vous à Comptabilité 3.0..."); Tentative de connexion = V82. Connect("srvr = ""msk-test1c:1641""; ref = ""db_test""; usr = ""Administrateur""; pwd = ""123"""); Notifier ("Connexion hourra établie!"); Rapport d'exception("Aucune connexion à la base de données !"); Rapport (DescriptionErreur()); //Infos = InformationsÀ propos de l'erreur(); // Rapport("Description= "" + Info.Description + """); // Rapport ("NomModule= "" + Nom du module Info. + """); // Rapport ("LineNumber=" + Info.LineNumber); // Rapport ("SourceLine= "" + Info.SourceString + """); Retour; EndAttempt;

Où enregistrer la bibliothèque, sur le client, sur le serveur 8.2, sur le serveur 8.3 ? Figure ci-dessous.
(pour la version client-serveur, et pour la version fichier de la base de données 1C)

Répondre: Il y avait une tâche pour communiquer avec un terminal via un service Web. La base est, disons, légère. Aussi 0,5 ou plus rapide ?

C'est difficile à dire, je n'ai pas assez de données. Nous étions satisfaits de 0,5 seconde, moins le client 1C inutile sur une machine tierce, moins la synchronisation des versions de la bibliothèque après la mise à jour du moteur 1C, moins le foutu comsafearray, les noms et types de champs normaux... Il a pensé à nous de de l’autre côté (un système qui s’intègre à 1C) « ils ne comprendront pas » quand il s’avère qu’ils doivent réécrire leurs appels 1C vers un nouveau « modèle de communication système ». Mais après avoir essayé une fois une fonction dans la base de données de test, on nous taquine maintenant en disant « passons au service dès que possible ».

Question : Comment utiliser TypeContains pour les objets Com ?


Si Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Then There IsNomenclature = True; fin si;

"Props" a été reçu d'une connexion COM avec une autre base de données 1c. Une erreur se produit lors de la comparaison :

(ExternalProcessing.Coefficient Recalculation.Form.Form.Form(183)) : Erreur lors de l'appel de la méthode contextuelle (ContainsType)
Si Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Alors
à cause de:
Une exception s'est produite (1C:Enterprise 8.3.8.1964) : incompatibilité de type (numéro de paramètre « 1 »)

Je soupçonne qu'il devrait être comparé au type en com ? Comment vérifier correctement le type ?

Répondre:

Ça ne roule pas. J'ai résolu le problème comme ceci :
Dans la base de données du récepteur dans le module général avec la case connexion externe cochée, le code est :

Fonction CheckAttributeType(Attribute, Type) Exporter Retour Attribute.Type.ContainsType(Type(Type)); FinFonction

Dans la base de données à partir de laquelle je me connecte, j'appelle la procédure via Com :

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Attribut, "DirectoryLink.Nomenclature")

Imprimer (Ctrl+P)

L'une des options d'échange de données entre les bases de données 1C est l'é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. Cette méthode peut être utilisée aussi bien dans les versions client-serveur des bases de données que dans les bases de données fichiers. Cet article traite de ces types de connexions sur la plateforme 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 V83.COMConnecteur . En cas de V83.Application Une copie presque complète de l'application 1C est lancée. En cas d'utilisation V83.COMConnecteur Une petite partie serveur est lancée. Dans ce cas, la vitesse de fonctionnement est plus élevée, mais certaines fonctions peuvent ne pas être disponibles. En particulier, travailler avec des formulaires et des modules communs pour lesquels la propriété de travailler avec des connexions externes n'est pas définie. La plupart du temps, vous devriez utiliser V83.COMConnecteur et seulement en cas de manque de fonctionnalité V83.Application. La différence de vitesse de fonctionnement peut être particulièrement visible sur les bases de données volumineuses. Pour la plateforme 8.2 utilisée V82.Application ou V82.COMConnector

Établir une connexion OLE

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

Établir une connexion COM

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

Chaîne de connexion

//Pour l'option client-serveur
Chaîne de connexion= « Srvr = « « Nom du serveur » « ;Ref = « « Nom de base » ;
//Pour l’option mode fichier :
Chaîne de connexion= "Fichier = ""CheminKBase" « ; 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" + DescriptionErreurs(); Message . Signaler();
FinTentative ;

Coupure

Connexion = Non défini ;
Pour objet V83.Application Il est nécessaire de mettre fin à la connexion, sinon il restera une session incomplète, qu'il faudra ensuite supprimer manuellement. En cas de V83.COMConnecteur la connexion est automatiquement interrompue lorsque la procédure au cours de laquelle la connexion a été établie est terminée. Et il y a encore un petit point. Pour l'utilisateur sous lequel la connexion s'effectue, la case « Demander une confirmation à la fermeture du programme » doit être décochée dans ses paramètres.

Méthode NouvelObjet()

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

Pour V83.COMConnecteur

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

ViewCOM =Connexion.NouvelObjet

Pour V83.Application

DemandeOLE = Connexion. NouvelObjet(" Demande ") ;
TableOLE = Connexion. NouvelObjet(« Tableau des valeurs ») ;
ArrayOLE = Connexion.NouvelObjet("Tableau" ) ;
ViewCOM =Connexion.NouvelObjet(« UniqueIdentifier », StringUID );

DemandeCOM . Texte ="CHOISIR
| Positions des organisations.Code,
| Postes des organisations.Nom
|DE | Répertoire.Positions des organisations
COMMENT POSITIONNER LES ORGANISATIONS”;

Résultat = DemandeCOM. Courir();
Échantillon = Résultat. Choisir () ;
Au revoir la sélection. Suivant()Faire du vélo
Fin du cycle ;
Vous pouvez également utiliser des gestionnaires d'objets de configuration :
AnnuaireCOM = Connexion. Annuaires. Nom du répertoire ;
DocumentCOM = Connexion. Documentation. Nom du document;
RegisterCOM = Connexion. Registres d'informations. Nom du registre ;

Réception et comparaison de l'é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 est aisée. Ces types peuvent être soit un type numérique, soit un type chaîne. Vous pouvez convertir la valeur d'un élément d'énumération en un type numérique comme ceci :

Article enum = Connection.Directories.Directory1.FindByCode(1).Props1;

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

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

Si EnumerationItemNumber = 0 Alors rapport ( « Valeur d'énumération 1 »);

SinonSiEnumerationItemNumber = 1 Alors Rapport("EnumerationValue2");

fin si;

Récupérer un objet via COM par identifiant

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

Nous obtenons ensuite une chaîne d'identifiant unique :

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

Identifiant = Nouveau U uniqueIdentifier (StringUID);
AVEC linkByIdentifier = Documents[DocumentName].GetLink(Identifier);

Si vous avez besoin de rechercher un objet com par document par identifiant, alors vous devez écrire comme ceci :

WidCOM = Connexion.NewObject(« UniqueIdentifier », StringUID );
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Une façon de transférer des données d'une configuration 1C à une autre consiste à établir une connexion logicielle utilisant COM. De nombreuses entreprises utilisent plusieurs bases de données 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, alors 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 plateforme et est utilisé pour connecter les infobases. Il convient de noter que pour les versions 8.2 et 8.3, des objets avec des noms différents sont utilisés - respectivement « V82.COMConnector » et « V83.COMConnector ».

N'oubliez pas que la durée de la connexion COM à la base de données coûte une licence - ne vous laissez pas emporter par l'exécution simultanée de plusieurs connexions. Ceci est particulièrement important pour les organisations disposant d’un nombre limité de licences. Ce problème peut être résolu à l'aide de tâches de routine exécutées lorsqu'il n'y a aucune connexion utilisateur active à la base d'informations.

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. Quel nom et mot de passe pouvez-vous utiliser pour vous connecter ?
  4. Quelles sont les données qui vous intéressent?

A partir des trois premiers points, pour implémenter une connexion COM, vous devez créer une chaîne de paramètres. Selon le type de sécurité des informations, cela différera apparence. À l'aide de la chaîne reçue, une connexion est établie, à l'aide de laquelle vous pouvez collecter des données d'une autre base de données pour les analyser et les traiter en utilisant n'importe quelle méthode.

Paramètres de connexionFileIB = "File=""Path_to_database""; Usr=""User_name"";Pwd=""Password"""; Paramètres de connexionClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Password""";

La fonction de connexion est simple et ne devrait poser aucune question si tous les paramètres sont correctement spécifiés. Pour accélérer le débogage et l’analyse erreurs possibles il est préférable d'enfermer la connexion dans la construction « Try ». La fonction renverra une valeur de type « objet COM », avec laquelle vous travaillerez pour obtenir les données nécessaires.

&OnServer Function ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c database\ERP""; Usr=""Administrateur"";Pwd=""1"""; V83COMCon= Nouveau COMObject("V83.COMConnector"); Tentative de retour V83COMCon.Connect (paramètres de connexion IB) ; Rapport d'exceptions (ErrorDescription()); Retourner non défini ; FinTentative ; FinFonction

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. N'oubliez pas que nous pouvons transférer 4 types de données primitifs via un objet COM. D'autres types devront être précisés à l'aide des fonctions de recherche intégrées à la plateforme. Veuillez noter que les fonctions globales de la plateforme 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 utilisons une requête via une connexion COM dans 1C 8.3 en utilisant la valeur reçue de 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 s'effectue via la méthode NewObject, spécifiant le type d'objet sous forme de chaîne en tant que paramètre - « Demande ».

&OnServer Procédure TestCOMOnServer() Connexion = ConnectToBase(); Si TypeValue(Connection) Type("Undefined") 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() boucle Report(Selection.Number); Fin du cycle ; 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 sera d'un type simple - une chaîne, et la division sera un lien vers l'élément de répertoire "Structure d'entreprise". Le résultat de la requête est une table avec les champs répertoriés du type dans lequel ils existent dans la base de données à laquelle la connexion COM a été établie. Si vous devez les convertir en d'autres types, utilisez les fonctions standard de la plateforme :

  • Doubler();
  • Nombre();
  • Date de().
RequestBPZO = Connection.NewObject("Demande"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department = &RequiredDepartment | Et DirectoryUser.Name comme ""%"" + &RequiredName+ ""%""" ; Demande BPZO.SetParameter("Département requis", Connexion. Répertoires. Structure de l'entreprise. Rechercher par code("00-000023")); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() boucle Report(Selection.Name); Fin du cycle ;

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

RequestBPZO = Connection.NewObject.("Demande"); RequestBPZO.Text = "SELECT first 15 | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | Et DirectoryUser.Name comme ""%"" + &NecessaryName+ ""%" " " ; Tableau de départements = Connection.NewObject("Array"); Tableau de départements.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000023")); Tableau de départements.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000038")); Tableau de départements.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000046")); Demande BPZO.SetParameter("Département requis", Tableau de départements); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() boucle Report(Selection.Name); Fin du cycle ;

Lors du transfert de documents ou d'éléments de répertoire, la question du contrôle du transfert d'un objet précis se pose toujours. Grâce aux connexions COM, ces problèmes peuvent être résolus grâce à un identifiant unique. Vous devez rechercher un objet dans la base de données du plug-in par identifiant de la sécurité actuelle des informations à l'aide de la fonction « GetLink », en utilisant l'identifiant comme 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.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) alors NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Name; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NouvelUtilisateur.Write(); fin si;

De plus, une connexion COM a le droit d'utiliser des procédures et des 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 exportée et ne pas comporter d'actions interactives réalisées sur le serveur. Sinon, vous verrez une erreur indiquant que l’opération n’est pas valide.

Composé..; VariableFonction = Connexion.. ; appel de fonction>nom général du module>appel de procédure>nom général du module>

Les possibilités de connexion externe avec une autre base de données dans 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 solution optimale. Dans la plupart des cas, cette compétence n'apparaît qu'avec l'expérience ou en étudiant des exemples de travaux de spécialistes expérimentés.


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 d'un serveur Automation :

  1. Établissement de connexion plus rapide, car il n'est pas nécessaire de créer un processus de système d'exploitation distinct et toutes les actions sont effectuées au sein du processus appelant ;

  2. Accès plus rapide aux propriétés et méthodes des objets 1C:Enterprise, puisque l'organisation d'un accès ne nécessite pas de communication interprocessus ;
  3. Moins de consommation de 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 Automatisation du serveur. 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 en cours relativement petit est lancé.

  2. Lorsque vous travaillez via une connexion COM, les fonctionnalités liées d'une manière ou d'une autre à l'organisation de l'interface utilisateur 1C:Enterprise 8.0 ne sont pas disponibles ;
  3. Lors de l'exploitation d'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 Procédure d'établissement d'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 un lien vers un objet de connexion COM avec l'infobase 1C:Enterprise 8.0 ;
  3. Grâce à l'objet de connexion COM reçu, on accède aux méthodes, propriétés et objets valides 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, propriétés et méthodes ne peuvent pas être utilisés dans une connexion COM.

1C:Objets Entreprise accessibles en externe via une connexion COM :

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

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

  4. Inclure et exclure des fragments de modules communs à l'aide d'un préprocesseur
  5. Contexte global 1C:Enterprise 8.0, à l'exception des objets étroitement liés à l'application client (TextDocument, TabularDocument, ...)

1.2 Module de connexion externe

Comme déjà indiqué, les responsabilités du module d'application lorsqu'il travaille via une connexion COM sont assumées par le module de connexion externe. Ce module peut avoir des procédures de gestion d'événements When SystemStarts() et WhenSystemCompletes(), qui peuvent contenir des actions effectuées respectivement lors de l'initialisation et de la fin de la connexion.

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

1.3 Modules communs

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

1.4 Objet "V8.COMConnecteur"

La seule tâche résolue par l'objet COM V8.COMConnector consiste à établir une connexion COM avec la base d'informations 1C:Enterprise 8.0. Un nombre illimité de connexions peuvent être établies à l'aide d'une instance de l'objet V8.COMConnector. L'objet V8.COMConnector possède une seule méthode Connect, conçue pour établir une connexion COM avec l'infobase 1C:Enterprise 8.0.

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

La ligne de connexion avec le système de sécurité de l'information 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 des espaces, elle doit être entourée double citation (").

Paramètres communs :

Usr - nom d'utilisateur ;
Pwd - mot de passe.

Le paramètre suivant est défini pour la version du fichier :

Fichier - répertoire de la base d'informations.

Les paramètres suivants sont définis pour l'option client-serveur :

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

La méthode Connect établit une connexion COM à l'infobase 1C:Enterprise 8.0 et renvoie un lien vers l'objet de connexion COM.

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

1.5 Objet de connexion COM

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

De plus, la connexion COM dispose d'une méthode NewObject supplémentaire qui peut être utilisée pour créer des valeurs de certains types.

tk = Connexion. NouvelObjet("ValeurTable");

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

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

1.6. Caractéristiques du travail avec une connexion COM

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

Il est possible d'organiser un pool de connexions COM. Parallèlement, plusieurs objets de connexion COM sont créés À L'AVANCE sur le serveur de réception 1C:Enterprise et l'établissement d'une connexion prend encore moins de temps, puisqu'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 les paramètres spécifiés. Cet objet prend en charge la fonctionnalité de création de rapports qui n'est pas liée à la sortie d'un rapport dans une feuille de calcul et à d'autres tâches liées à interface utilisateur. Cet objet peut être utilisé sur le serveur 1C:Enterprise et dans une connexion COM.

Vous pouvez utiliser des objets COM lors de l'exécution du langage intégré sur le serveur 1C:Enterprise.

Les erreurs COM sont converties en exceptions de langage intégrées.

Si la configuration tente de créer un objet non valide, par ex. feuille de calcul, dans un module de connexion externe, dans un module partagé ou dans un module objet, la connexion COM peut ne pas s'établir ou être exceptionnellement interrompue.

L'une des options d'échange de données entre les bases de données 1C est l'é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. Cette méthode peut être utilisée aussi bien dans les versions client-serveur des bases de données que dans les bases de données fichiers. Dans cet article, nous examinerons des exemples de ce type de connexion. Les exemples utilisent la plateforme 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 lancée.
Dans ce cas, la vitesse de fonctionnement est plus élevée, mais certaines fonctions peuvent ne pas être disponibles. En particulier, travailler avec des formulaires et des modules communs pour lesquels la propriété de travailler avec des connexions externes n'est pas définie. La plupart du temps, vous devriez utiliser Connecteur V82.COM et seulement en cas de manque de fonctionnalité V82.Application. La différence de vitesse de fonctionnement peut être particulièrement visible sur les bases de données volumineuses.

Alors, commençons

  1. Créons un objet COM
    • Pour V82.Application Connexion = Nouveau COMObject("V82.Application" ) ;
    • Pour Connecteur V82.COM Connexion = Nouveau 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 fichier de la base de données ConnectionString = "File = " "PathKBase" "; Usr = Nom d'utilisateur; Pwd = Mot de passe";
  3. Connexion à la base de données Tentative de connexion = connexion. Connect(ConnectionString) ; Message d'exception = Nouveau MessageToUser ; Message. Texte = + DescriptionErreur() ; Message. Signaler() ; FinTentative ;
  4. Déconnexion de la base de données Connexion = Non défini ;

    Pour objet V82.Application Il est nécessaire de mettre fin à la connexion, sinon il restera une session incomplète, qu'il faudra ensuite supprimer manuellement. En cas de Connecteur V82.COM la connexion est automatiquement interrompue lorsque la procédure au cours de laquelle la connexion a été établie est terminée. Et il y a encore un petit point.

    Pour l'utilisateur sous lequel la connexion s'effectue, la case « Demander une confirmation à la fermeture du programme » doit être décochée dans ses paramètres.

Maintenant, rassemblons tout le code

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

Pour le type de connexion V82.Application la méthode est utilisée pour l'objet COM créé initialement et pour Connecteur V82.COM La méthode est appliquée à la connexion. poursuivre les travaux avec le produit de la demande moyens standards 1C. dans le code, cela ressemble à ceci :

Demande = Connexion. NouvelObjet("Demande" ) ; // Pour Connecteur V82.COM Demande = Connexion. NouvelObjet("Demande" ) ; // Pour V82.Application Demande. Texte = "SÉLECTIONNER | Positions des organisations.Code, | Postes des organisations.Nom|DE | Annuaire.Positions des Organisations AS Positions des Organisations"; Résultat = Demande. Courir(); Échantillon = Résultat. Choisir() ; Au revoir la sélection. Next() Boucle EndLoop ;

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




Haut