Organisation d'échange avec la base d'une succursale (magasin de détail) dans un réseau commercial via XML (échange universel). Échange programmé à l'aide des outils standards 1C 8.3, exemple de création d'un plan d'échange

Systèmes automatisés Dans la plupart des cas, les systèmes de gestion sont constitués de bases de données distinctes et ont souvent une structure géographiquement répartie. Dans le même temps, un échange de données correctement mis en œuvre est une condition nécessaire pour travail efficace de tels systèmes.

La mise en place initiale de l'échange peut nécessiter un certain nombre d'actions, non seulement en termes de programmation, mais aussi de conseil, même s'il s'agit de sources homogènes, comme c'est le cas des produits de la plateforme 1C:Enterprise. Pourquoi la mise en place de l'échange 1C (ou, comme on l'appelle aussi, la synchronisation des données dans 1C 8.3) peut devenir la tâche la plus longue et la plus coûteuse d'un projet d'intégration, nous le verrons dans cet article.

L'échange de données dans l'environnement 1C permet de :

  • Éliminer la double saisie des documents ;
  • Automatiser les processus commerciaux associés ;
  • Optimiser l'interaction entre les départements distribués ;
  • Mettre à jour rapidement les données pour le travail des spécialistes des différents départements ;
  • "Délimiter" différents types comptabilité.*

*Dans les cas où les données d'un type de comptabilité diffèrent sensiblement d'un autre, il est nécessaire d'assurer la confidentialité des informations et de « délimiter » les flux d'informations. Par exemple, l'échange de données entre 1C UT et 1C Comptabilité ne nécessite pas de télécharger des données de gestion dans la base de données comptable réglementaire, c'est-à-dire la synchronisation dans 1C sera incomplète ici.

Si l'on imagine le processus standard de mise en œuvre de l'échange de données primaires, lorsqu'au moins un de ses objets est un produit 1C, alors on peut distinguer les étapes suivantes :

  • Coordination de la composition de l'échange ;
  • Définition du transport (protocoles d'échanges) ;
  • Fixer des règles ;
  • Planification.

Identification de la composition de l'échange 1C

Les objets d'échange peuvent être divisés en « source » et « destinataire ». En même temps, ils peuvent remplir deux rôles en même temps, ce que l’on appellera un échange bidirectionnel. La source et la destination sont déterminées logiquement en fonction du besoin ou Fonctionnalité systèmes.*

*Par exemple, lors de l'intégration de « WA : Financier » - une solution de tenue de comptabilité financière et de gestion des processus de trésorerie, développée sur la base de « 1C : Enterprise », les experts de WiseAdvice le recommandent comme système maître. Cela est dû à la disponibilité d'outils de contrôle permettant de respecter les règles de la politique d'application, et, par conséquent, de garantir l'efficacité de la solution.

Ensuite, sur la base des exigences reçues et enregistrées des utilisateurs, une liste de données à échanger est créée, son volume, les exigences relatives à la fréquence d'échange sont déterminés et le processus de traitement des erreurs et de gestion des situations exceptionnelles (collisions) est prescrit.

Parallèlement, en fonction du parc de systèmes existants et de la structure de l'entreprise, le format d'échange est déterminé :

Distribué base d'informations

  • RIB implique un échange entre configurations identiques Bases de données 1C, avec une structure de gestion claire « maître-esclave » pour chaque paire d'échanges. En tant qu'élément d'une plateforme technologique, RIB, en plus des données, peut transmettre des modifications de configuration et des informations administratives de la base de données (mais uniquement du maître à l'esclave).

Échange de données universel en 1C

  • Un mécanisme qui permet de configurer l'échange de bases de données 1C, aussi bien avec des configurations sur la plateforme 1C:Enterprise qu'avec des systèmes tiers. L'échange s'effectue par transfert de données au format XML universel conformément aux « Plans d'échange ».

Données d'entreprise

  • Le dernier développement de 1C, conçu pour mettre en œuvre l'échange de données au format XML entre les produits créés sur la plateforme 1C:Enterprise avec n'importe quel système d'automatisation. L'utilisation d'EnterpriseData simplifie les modifications associées à l'échange. Auparavant, lorsqu'une nouvelle configuration était incluse dans un système, il était nécessaire de mettre en œuvre un mécanisme d'importation et d'exportation de données, tant pour celui-ci que pour les systèmes existants. Désormais, les systèmes prenant en charge EnterpriseData ne nécessitent aucune modification, n'ayant qu'un seul point d'entrée-sortie.

Définition du transport (protocoles d'échange)

Le système de la plateforme 1C:Enterprise 8 offre un large éventail de possibilités pour organiser les échanges avec n'importe quel ressources d'informationsà travers généralement accepté normes universelles(xml, fichiers texte, Excel, connexion ADO, etc.). Par conséquent, lors de la détermination du transport pour l'échange de données, vous devez vous fier aux capacités de base de données du système tiers.

Synchronisation des répertoires

Le principe de base d'une synchronisation efficace des annuaires est la présence d'un point d'entrée unique. Mais s’il s’agit de travailler avec des annuaires historiquement remplis selon des règles différentes, il est nécessaire de définir clairement les champs de synchronisation pour amener l’échange à un « dénominateur commun ».*

*A ce stade, il peut être nécessaire d'effectuer des travaux de normalisation des données de référence du côté de la source de données. En fonction de l'état des annuaires et de leur volume, le processus de comparaison des éléments, de reconnaissance, d'identification des erreurs et des doublons, ainsi que de remplissage des champs manquants et d'attribution des champs de synchronisation, peut nécessiter le travail de tout un groupe d'experts, tant au niveau du côté de l'intégrateur (le propriétaire de la technique de normalisation des données de base) et du côté du client.

Définir des règles

La possibilité d'afficher les données des systèmes sources dans les récepteurs dépend de règles d'échange correctement définies. Les règles, présentées au format XML, régulent la correspondance des détails clés des objets source-récepteur. La solution 1C:Data Conversion est conçue pour automatiser la création de règles de mise en œuvre des échanges ponctuels et permanents.

Ne garantit aucune perte de données pendant l'échange Plan d'échange. Celui-ci fait partie intégrante de toute configuration sur la plateforme 1C:Enterprise, qui décrit en détail la procédure d'échange 1C : composition des données (documents avec détails « identifiants ») et nœuds (bases d'informations récepteur-émetteur), ainsi que l'activation du RIB pour directions d'échange sélectionnées.

Toute modification des données saisies dans le Plan d'échange est enregistrée et reçoit le signe « modifié ». Jusqu'à ce que les données modifiées correspondent dans les nœuds récepteur-émetteur, le signe ne sera pas réinitialisé et le système enverra des messages de contrôle aux deux nœuds. Après avoir téléchargé les données et confirmé leur pleine conformité dans les deux systèmes, le signe est réinitialisé.

Calendrier d'échange en 1C

Pour automatiser les échanges réguliers, la fréquence de téléchargement des données est définie. La fréquence des échanges dépend des besoins et des capacités techniques. De plus, les configurations sur la plateforme 1C:Enterprise vous permettent de configurer l'échange de données lorsqu'un événement se produit.

Après avoir examiné le processus standard de mise en œuvre d’un échange, prêtons attention aux facteurs qui nécessiteront des améliorations à différentes étapes :

  • Configurations de bases de données non standard et fortement modifiées ;
  • Différentes versions de la plateforme 1C:Enterprise ;
  • Pas mis à jour depuis longtemps, non versions actuelles configurations ;
  • Objets d'échange ayant préalablement subi des modifications ;
  • La nécessité de règles de change non standard ;
  • Un ensemble et une composition de détails très différents dans les ouvrages de référence existants.

Étant donné que même les actions standard pour mettre en œuvre l'échange de données primaires nécessitent des connaissances spécialisées, il est recommandé de les réaliser avec la participation de spécialistes 1C. Ce n'est qu'après avoir terminé toutes les étapes décrites ci-dessus que vous pourrez procéder à la configuration de l'échange dans la configuration. Regardons l'intégration des bases de données en utilisant l'exemple de 1C:UPP et 1C:Retail (l'échange avec 1C:UT se met en place selon le même schéma). La synchronisation standard comprend également l'échange SCP - SCP, typique des systèmes d'automatisation à grande échelle des plus grandes entreprises industrielles.

Dans le sous-menu « Service », sélectionnez « Échange de données avec les produits de la plateforme... » (la sélection de l'échange direct avec « Retail » entraîne souvent des erreurs au niveau de l'objet COM). Faisons attention au message de service " Cette opportunité pas disponible."


Pour résoudre ce problème, vous devez sélectionner « Configurer les communications »


...et cochez la case. Ensuite, ignorez le message d'erreur.


Dans les paramètres de synchronisation des données, sélectionnez « Créer un échange avec « Retail »...



Avant de configurer les paramètres de connexion via local ou répertoire réseau Vous devez vous assurer qu'il y a de l'espace sur le disque pour le répertoire. Bien qu'en règle générale, il n'occupe pas plus de 30 à 50 Mo, dans des cas exceptionnels, il peut nécessiter jusqu'à 600 Mo. Vous pouvez créer le répertoire souhaité directement depuis le configurateur.



Lors d'une connexion via un annuaire réseau, on ignore la proposition de configurer la connexion via une adresse FTP et par email en cliquant sur « Suivant ».


Dans les paramètres, nous saisissons manuellement les préfixes - symboles bases de données (généralement BP, UPP, RO), nous fixons les règles et la date de début du téléchargement des données. Le préfixe sera indiqué dans le nom des documents pour indiquer la base de données dans laquelle ils ont été créés. Si les règles de téléchargement ne sont pas modifiées, les données seront téléchargées par défaut selon tous les paramètres disponibles.



Nous créons un fichier de paramètres d'échange pour « Retail » afin de ne pas répéter nos actions. Si vous devez envoyer des données immédiatement après avoir configuré la synchronisation, cochez la case.


Pour automatiser le processus d'échange, vous devez établir un calendrier.


Menu "Détail".


Cochez la case et sélectionnez « Synchronisation ».


Nous effectuons la configuration « inverse » en sélectionnant Production Enterprise Management.




Chargez le fichier de paramètres créé dans UPP.


On met une coche, le système récupère automatiquement l'adresse.





Nous agissons de la même manière qu'en UPP.









Comparaison des données de test (il est recommandé d'effectuer une comparaison manuelle des données sur étape préparatoire, puisque ces emplois peuvent devenir les plus exigeants en main-d'œuvre dans le processus de mise en œuvre de l'échange). La fenêtre de comparaison s'ouvre par double-cliquez souris.



En cas d'erreur de synchronisation, « Détails... » sera remplacé par « Jamais... ».


« Détails » ouvre le journal avec des informations mises à jour sur l'échange.


Prêt.

Les plans d'échange dans 1C 8.3 sont un objet de métadonnées de configuration utilisé pour implémenter la synchronisation des données dans le système 1C 8.

Un plan d'échange peut être comparé à un annuaire, dont les éléments sont des nœuds de base d'informations. Cependant, le travail avec les plans d'échange présente de nombreuses nuances, dont nous parlerons ci-dessous.

En règle générale, l'échange dans 1C est construit à l'aide de règles d'échange spéciales, formées à l'aide de la configuration.

Comme indiqué précédemment, le plan d'échange est très similaire au plan d'échange habituel et nous n'examinerons donc que les principales différences entre les échanges.

Comment travailler avec le plan d'échange

Le plan d'échange peut stocker des informations et des modifications apportées aux éléments du plan d'échange, ainsi que des informations sur le numéro. message actuel. En général, le plan de travail est le suivant :

  1. Nous modifions les données (répertoires, documents, etc.) dans la base de données - le plan d'échange mémorise les modifications. Soit par inscription automatique, soit par code de programme (par exemple, la méthode Exchange Plans.RegisterChanges).
  2. Le moment venu, nous obtenons une liste des éléments modifiés - la méthode ReadChanges() et téléchargeons ces données.
  3. Lors du chargement/téléchargement, pour éviter les collisions, nous vérifions les numéros de message par rapport au plan d'échange. S'ils ne correspondent pas, nous annulons l'échange de données ; s'ils correspondent, nous annulons l'enregistrement des modifications et augmentons le numéro du message.

Obtenez 267 leçons vidéo sur 1C gratuitement :

Base d'informations distribuée

Si cet indicateur est défini dans les paramètres, alors ce plan d'échange est une base d'informations distribuée (RIB).

— un système géographiquement distribué basé sur la même configuration 1C 8.3. En plus des modifications de données, RIB peut également transmettre des modifications de configuration, ce qui est très pratique, par exemple lors de la mise à jour d'une version de configuration.

Composition du plan d'échange

Le paramètre avec lequel le développeur gère l'ensemble des objets à échanger :

Un plan d'échange peut avoir 3 états d'objet :

  1. Non inclus dans le plan d'échange- en conséquence, pour un tel objet vous ne pourrez en aucun cas configurer l'échange de données selon ce plan d'échange.
  2. Refuser l’enregistrement automatique- cela signifie qu'il est nécessaire d'enregistrer les modifications pour un nœud donné uniquement en utilisant le code du programme selon certaines conditions, en règle générale . La méthode Exchange Plans.RegisterChanges() est utilisée.
  3. Autoriser l'enregistrement automatique— si cette case est cochée, alors toute modification de l'élément apparaîtra automatiquement dans la liste des modifications du plan d'échange.

Plans d'échange et performances 1C

En raison des caractéristiques systémiques de la mise en œuvre des plans d'échange, il n'est pas recommandé d'abuser du téléchargement des modifications selon les plans d'échange. Le fait est que lors de la lecture des modifications, toutes les tables de modifications sont verrouillées. Ceux. Lors du déchargement, le plan d'échange ne permet pas d'enregistrer de nouvelles modifications, et bloque donc les éléments eux-mêmes - répertoires, documents, etc.


Mots clés : distribué, URDB, XML, enregistrement, nœud, nœud, auto-enregistrement, initial, image, POP3, SMTP, MailMessage, périphérique, central, réplication, échange

Avis de non-responsabilité et conditions d'utilisation

Toutes les marques mentionnées accidentellement dans cet article appartiennent à leurs propriétaires respectifs.
Cet article est publié sous une licence Creative Commons Attribution-Partage dans les mêmes conditions 3.0 Unported.
http://creativecommons.org/licenses/by-sa/3.0/

Permettez-moi de noter immédiatement que tout ce qui suit s'applique à la version de la plate-forme 8.0.7.36 et supérieure.

Étape 1 : Créer un plan d'échange

Nous créons un plan d'échange dans la configuration. Appelons-le, par exemple, « DistributedBase ». Obligatoire dans
Dans les propriétés du plan d'échange, cochez la case "Infobase distribuée".

Sur l'onglet «Autre», cliquez sur le bouton «Composition» pour déterminer quels objets seront inclus dans l'échange. Par
Par défaut, vous pouvez activer tous les objets ("Actions" - "Activer tout"). Un point important est le paramètre
"Inscription automatique". En général, il doit être activé pour tous les objets.

Remarque : lors de l'ajout de nouveaux objets à la configuration, ils ne sont pas inclus dans le plan d'échange. Ceux. après
Pour ajouter un objet, il faut l'ajouter au plan d'échange.

Si vous souhaitez que certains objets ne participent pas à l'échange, excluez-les simplement de la liste
projet d'échange. Mais alors le contrôle de l’intégrité référentielle reste entièrement du ressort de votre conscience. Si, à
par exemple, un certain document n'est pas inclus dans le plan d'échange, mais le registre sur lequel il effectue des mouvements est inclus,
alors dans la base de données réceptrice il est tout à fait possible de recevoir des mouvements de registre sans document enregistreur, ce qui
D'accord, ce n'est pas bon.

En principe, ces actions suffisent pour que le RDB fonctionne en mode « manuel ». Pour ce faire, nous lançons
Entreprise, ouvrez notre plan d'échange via le menu "Opérations". En termes d'échange, il est toujours présent
nœud prédéfini "avec un point". Ceci est une description du nœud actuel. Il faut l'ouvrir et le remplir. Dans notre
Dans ce cas, les champs « Code » et « Nom » seront disponibles. Attribuons le code "AA" à notre nœud et appelons-le
"Central". Ajoutons un nœud au plan d'échange. Attribuons-lui le code "BB" et appelons-le "Périphérique".

Nous pouvons maintenant créer une image de la base périphérique. Cela se fait en cliquant sur le bouton "Créer une initiale".
image". Dans la liste des nœuds, il faut sélectionner base périphérique. L'image de la base de données est créée sous la forme d'une sécurité de l'information prête à l'emploi
dans le catalogue ou sur le serveur 1C:Enterprise. (contrairement à la version 7.7, où l'image de sécurité des informations a été créée sous forme de fichier
déchargement). Ensuite, la base de données créée peut être déplacée vers l'emplacement souhaité en copiant simplement le fichier 1CV8.1CD
(pour la version fichier), ou via le Configurateur en téléchargeant et en téléchargeant des données.

Si vous ouvrez le plan d'échange dans le système périphérique de sécurité de l'information, vous verrez que le nœud est « avec un point », c'est-à-dire actuel
le nœud « Périphérique » est devenu un nœud et l'icône du nœud « Central » est devenue rouge, c'est-à-dire nœud
"Central" est le nœud principal par rapport au nœud actuel.

L'échange en mode « manuel » peut se faire à l'aide des boutons « Écrire les modifications » et « Lire »
modifications". Dans le premier cas, il vous sera demandé de sélectionner un fichier dans lequel les modifications seront écrites, dans le second
- le fichier à partir duquel les modifications seront lues. L'échange s'effectue au format XML. Les modifications sont enregistrées pour
nœud sélectionné.

Étape 2 : Téléchargez les modifications dans un fichier XML et envoyez-les par e-mail

Nous avons donc créé un plan d'échange, créé un système périphérique de sécurité de l'information et même appris à transférer des données entre
socles. Notre tâche consiste désormais à apprendre aux bases de données à échanger par courrier électronique.

Nous ajoutons deux détails au plan d'échange : Adresse email de type "string" et de type "Execute Exchange"
"booléen". Dans l'adresse e-mail, nous stockerons l'adresse e-mail du nœud, c'est-à-dire l'adresse à laquelle nous serons
envoyer des messages d'échange. Props ExecuteExchange est nécessaire pour désactiver rapidement l'automatique
envoi-envoi de messages.

Rendons la procédure pour travailler avec le courrier électronique universelle, c'est-à-dire rendons cela possible
utiliser comme MAPI (envoi-réception via client de messagerie, par exemple, MS Outlook), et
accès direct aux serveurs SMTP/POP3.

Ajoutons plusieurs constantes à la configuration :

Quelque part, sous une forme générale, nous proposons une édition des valeurs de ces constantes.

Ajoutons un module commun, appelons-le "rbDistributedBase". Nous y écrivons :

Procédure rbSendExchangeMessages() Exporter UseSMTP = Constants.UseSMTPExchange.Receive(); //Nous créons d'abord un objet Mail, qui, selon les paramètres, sera de type InternetMail, //si l'accès direct aux serveurs est utilisé, ou Mail si MAPI est utilisé. Si vous utilisez SMTP, alors //Pour un objet de type InternetMail, créez et remplissez un profil de messagerie. MailProfile = Nouveau profil InternetMail ; MailProfile.SMTPServerAddress = Constants.SMTPExchangeServerAddress.Get(); MailProfile.SMTPPort = Constants.SMTPExchangeServerPort.Receive(); MailProfile.SMTPUser = Constants.SMTPExchangeServerUser.Receive(); MailProfile.SMTP Mot de passe = Constants.SMTPExchangeUserPassword.Receive(); MailProfile.WaitTime = Constants.ServerWaitTime.Get(); Mail = Nouveau InternetMail(); Tentative de Mail.Connect(MailProfile); Rapport d'exception(" EXCHANGE : Erreur de connexion à profil de messagerie! Échec de l'échange !" + ErrorDescription(), MessageStatus.VeryImportant); Return; EndAttempt; Sinon Mail = Nouveau courrier(); Tentative de Mail.Connect(); Rapport d'exception("" + ErrorDescription(), MessageStatus.VeryImportant); Retour; FinTentative ; fin si; // Ensuite, sélectionnez tous les nœuds du plan d'échange, à l'exception de celui en cours, //qui ont l'attribut Perform Exchange défini. SelectionNodes = ExchangePlans.DistributedBase.Select(); While SelectNodes.Next() Boucle sinon SelectNodes.PerformExchange Then Continue ; fin si; Si SelectionNodes.Link = ExchangePlans.DistributedBase.ThisNode() Alors continuez ; fin si; ElectronicAddress = AbbrLP (SelectionNodes.ElectronicAddress); Si EmailAddress = "" Alors continuez ; fin si; //En utilisant les objets XMLRecord et MessageRecord, nous enregistrons les modifications //pour le nœud sélectionné dans le fichier XML. Noeud = SelectionNodes.Link ; XMLEnregistrement = NouveauXMLRecord(); MessageFileName = TemporaryFileDirectory() + "Message_" + AbbreviatedLP(ExchangePlans.DistributedBase.ThisNode().Code) + "_" + AbbreviatedLP(Node.Code) + ".xml "; EntryXML.OpenFile(MessageFileName); MessageRecord = ExchangePlans.CreateMessageRecord(); MessageRecord.StartRecord(XMLRecord, Node); ExchangePlans.WriteChanges(WriteMessage); WriteMessage.FinishRecord(); WriteXML.Close(); //Ensuite, nous créons une nouvelle lettre, y attachons le fichier XML résultant et //envoyer à l'adresse spécifiée dans l'adresse e-mail du nœud. Fichier = Nouveau fichier (MessageFileName); Objet du message = "1C:Exchange" + Abbr.LP(ExchangePlans.DistributedBase.ThisNode().Code) + "_" + Abbr.LP(Node.Code); Si UseSMTP Then MailMessage = New InternetMailMessage ; MailMessage.Sujet = MessageSujet ; MailMessage.Attachments.Add(MessageFileName, File.Name); MailMessage.Recipients.Add(EmailAddress); Mail.Send(MailMessage); Sinon MailMessage = nouveau MailMessage ; MailMessage.Sujet = MessageSujet ; MailMessage.Attachments.Add(MessageFileName); MailMessage.Recipients.Add(EmailAddress); Mail.Send(MailMessage, False); fin si; Si Constants.OutputExchangeMessages.Get() Alors Rapport(" EXCHANGE : message d'échange pour le nœud" + Node.Name + " envoyé ! ", MessageStatus.Information); EndIf; DeleteFiles(MessageFileName); EndCycle; Mail.Disconnect(); EndProcedure

Je recommande de l'ajouter à l'interface panneau supplémentaire, sur l'un des boutons dont un appel à ceci
procédures. Il ne reste plus qu'à lancer l'Enterprise, configurer adresse e-mail la sécurité des informations périphériques,
cochez la case "Exchange", cliquez sur le bouton de procédure sur le panneau et exécutez pour recevoir du courrier pour
email spécifié adresses. Vous devriez recevoir une lettre avec le sujet "1C:Exchange AA_BB" et un fichier joint
"Message_AA_BB.xml".

La moitié du travail est donc accompli : nous avons appris au G8 à envoyer des messages d'échange RDB par courrier électronique.
mail.

Étape 3. Recevez les mises à jour par e-mail et enregistrez-les dans la sécurité des informations

Faisons maintenant la procédure inverse : recevoir les mises à jour par email et les enregistrer dans la sécurité de l'information.

Aux paramètres de session, ajoutez le paramètre « Distributed Database Exchange in Progress » de type booléen. Je vais l'expliquer ci-dessous
rendez-vous.

Ajoutons la procédure suivante au module commun rbDistributedBase :

Procédure rbGetExchangeMessages() Exporter UseSMTP = Constants.UseSMTPExchange.Receive(); //comme dans la procédure rbSendExchangeMessages(), créez d'abord un objet Mail Si vous utilisez SMTP, alors MailProfile = New InternetMailProfile ; MailProfile.POP3ServerAddress = Constants.POP3ExchangeServerAddress.Get(); MailProfile.POP3Port = Constants.POP3ExchangeServerPort.Get(); MailProfile.User = Constants.POP3ExchangeServerUser.Get(); MailProfile.Password = Constants.UserPasswordPOP3Exchange.Receive(); MailProfile.WaitTime = Constants.ServerWaitTime.Get(); Mail = Nouveau InternetMail(); Tentative de Mail.Connect(MailProfile); Rapport d'exception(" EXCHANGE : Erreur de connexion au profil de messagerie ! |Échec de l'échange !", MessageStatus.VeryImportant); Return; EndAttempt; Sinon Mail = New Mail(); Tentative de Mail.Connect(); Rapport d'exception(" EXCHANGE : Erreur de connexion au profil de messagerie de l'utilisateur ! |Échec de l'échange !", MessageStatus.VeryImportant); Return; EndAttempt; EndIf; MessageArray = New Array; Si UseSMTP Then AllMessages = Mail.Select(False); Sinon AllMessages = Mail.Select(False, False); EndIf; //Sélectionnez parmi toutes les lettres celles qui ont pour sujet « 1C:Exchange ». //Petite mais importante remarque : //nous pensons que toutes les lettres reçues avec le sujet "1C:Exchange" sont destinées //exactement pour le nœud courant, //ceux. que différents nœuds en termes d'échange ont des adresses email DIFFÉRENTES. Pour chaque message de tous les messages, cycle si Lion (Message. Sujet, 8)<>"1C: Exchange" puis continuez ; fin si; TryMessageArray.Add(Message); //Enregistrez la pièce jointe de l'e-mail sur le disque. //Nous laisserons pour l'instant la vérification minutieuse de la pièce jointe en coulisses. Pièce jointe = Message.Pièces jointes ; MessageFileName = TemporaryFileDirectory() + Attachment.Name; ExchangeData = Attachment.Data; ExchangeData.Write(MessageFileName); //En utilisant les objets XMLReader et MessageReader, nous lisons les données //mises à jour à partir du fichier enregistré. Avant d'enregistrer les mises à jour en matière de sécurité de l'information //définit le paramètre de session Échange de base de données distribué en cours sur True. //Ensuite, nous lisons les changements dans la sécurité des informations : Exchange Plans.ReadChanges(ReadMessage). //En même temps, nous sauvegardons les messages dans un tableau afin de pouvoir ensuite les supprimer tous en même temps. ReadXML = nouveau ReadXML(); ReadXML.OpenFile(MessageFileName); MessageReader = ExchangePlans.CreateMessageReader(); ReadMessage.StartReading(ReadingXML); SessionParameters.DistributedBaseExchange en cours = True ; ExchangePlans.ReadChanges(ReadMessage); ReadMessage.FinishReading(); ReadXML.Close(); Si Constants.OutputExchangeMessages.Get() Alors Rapport(" ÉCHANGE : Échange de données accepté",MessageStatus.Information); EndIf; Rapport d'exception(" EXCHANGE : Erreur lors de la réception des données d'échange :" + ErrorDescription(), MessageStatus.VeryImportant); EndAttempt; // Une fois la lecture des données d'échange terminée, retournez //le paramètre de session DistributedBase Exchange est en cours est défini sur False. SessionParameters.DistributedBaseExchange en cours = False ; Tentative de suppression de fichiers (MessageFileName); Exception //si ça ne marche pas, eh bien FinTentative ; Fin du cycle ; Si vous utilisez SMTP, Mail.DeleteMessages(MessageArray); fin si; Mail.Disconnect(); Fin de la procédure

Maintenant, à quoi sert le paramètre de session Distributed Database Exchange In Progress.
Le fait est que lors de la lecture de données à l'aide de la méthode ExchangePlans.ReadChanges(), un appel est effectué
procédures de gestionnaire pour l'événement BeforeWrite() des objets modifiés/ajoutés. Et si lors de l'enregistrement
de tout objet dans la procédure du gestionnaire, le paramètre Rejection sera défini sur True, puis
lors de l'exécution d'ExchangePlans.ReadChanges(), une exception se produira et, par conséquent, l'échange
ne sera pas exécuté. La valeur du paramètre de session DistributedBase Exchange In Progress peut être
analysées dans les procédures du gestionnaire afin d’éviter une telle situation.
Avec la sortie de l'édition 12 (même si je peux me tromper sur les versions), la pertinence de cette méthode est quelque peu
obsolèteA, puisque les objets ont désormais la propriété Options d'échange, de qui, dans le sien. Cette propriété est définie sur True lorsque
sauvegarde des données via le plan de partage.

Maintenant, dans l'interface de notre panneau, nous ajoutons un autre bouton sur lequel nous suspendons un appel à celui-ci.
procédures. Lançons l'Enterprise et profitons-en.
Presque tout est fait, il n'en reste qu'un peu : faire fonctionner nos procédures mode automatique.
Étape 4. Configuration de l'échange automatique

Nous sommes donc presque proches du but de notre histoire. Il ne reste plus qu'une étape : lancer
effectuer automatiquement les procédures d'échange. Commençons.

Ajoutons une constante, DistributedBase Autoexchange Interval, de type Number(5,0).

Ajoutons le paramètre Perform Distributed Database Exchange aux paramètres utilisateur. Pour la configuration
La « gestion commerciale » se fait ainsi :

* Dans le plan des types de caractéristiques "Paramètres utilisateur" nous ajouterons un paramètre prédéfini
caractéristique Effectuer un échange de bases de données distribuées de type booléen.
* Sous la forme de l'élément de répertoire "Utilisateurs", nous mettons en place une modification de ce paramètre (comme ceci
peut être fait dans le module formulaire, par analogie avec d'autres paramètres).

Ajoutez la procédure au module rbDistributedBase :

Procédure rbPerformExchange(user) Exporter Si npGetDefaultValue(user, "") Then rbGetExchangeMessages(); rbSendExchangeMessages(); fin si; Fin de la procédure

au module applicatif :

Procédure CheckConnectionAutoExchange() Exporter Si npGetDefaultValue(chCurrentUser, " Exécuter l'échange de bases de données distribuées") Et Constants.DistributedBaseAutoExchangeInterval.Get() > 0 Puis ConnectWaitHandler(" Exécuter l'échange automatique", Constants.DistributedBaseAutoExchangeInterval.Get()); Sinon, DisableWaitHandler(" Exécuter l'échange automatique"); EndIf; EndProcedure Procédure ExecuteAutoExchange() Exporter rbExchange(glCurrentUser); DisableWaitHandler(" Exécuter l'échange automatique"); Si npGetDefaultValue(chCurrentUser, " Exécuter l'échange de bases de données distribuées") Et Constants.DistributedBaseAutoExchangeInterval.Get() > 0 Puis ConnectWaitHandler(" Exécuter l'échange automatique", Constants.DistributedBaseAutoExchangeInterval.Get()); EndIf; EndProcedure Procédure DisableAutoExchange() Export DisableWaitHandler(" Exécuter l'échange automatique" ); Fin de la procédure

Ajoutez les lignes suivantes à la procédure WhenSystemStart() du module applicatif :

(après avoir connecté un équipement commercial)
...
SessionParameters.DistributedBaseExchange en cours = False ; CheckAutoExchangeConnection();

Ajoutons quelques boutons supplémentaires à notre panneau pour contrôler le processus : ajoutons une procédure à une
CheckConnectAutoExchange(), de l'autre - DisableAutoExchange()

Nous lançons l'entreprise, configurons les propriétés des utilisateurs et l'intervalle d'échange automatique et c'est tout !

Désormais, lors de l'entrée dans la base de données sous cet utilisateur le plus configuré, le gestionnaire sera lancé
en attente d'ExecuteAutoExchange(). Bien entendu, vous devez également configurer un utilisateur dans la base de données périphérique
Pour échange.

Encore une petite remarque importante :

Dans toute la beauté que nous avons créée, il y a un problème : un changement de configuration. À
Lorsque la base périphérique reçoit un message contenant des changements de configuration, elle
sera accepté, mais une exception se produira. Dans ce cas, la configuration modifiée sera
chargé. Pour mettre à jour la configuration de la base de données, vous devez expulser tous les utilisateurs, accédez à
configurateur et mettez à jour la configuration de la base de données (c'est une bonne idée de télécharger les données avant de faire cela). À
Malheureusement, c’est un mal nécessaire. Vous pouvez vous simplifier la vie en écrivant un court fichier bat
quelque chose comme ça:

1cv8.exe CONFIG /F<путь к ИБ>/N<Пользователь>/P<Пароль>/Mise à jourIBCfg

Et encore une remarque :

Malheureusement, les fichiers XML ne sont pas compacts, mais heureusement, ils sont parfaitement compressés. Possible dans
procédures d'envoi et de réception de messages, ajout de l'emballage et du déballage des fichiers. COLOR="#666666">Cela peut être fait soit avec un archiveur externe, soit en utilisant VK, par exemple Wheel.AddIn
(http://1c.proclub.ru/modules/mydownloads/personal.php?cid=81&lid=2714) .
Avec la sortie de la 10ème (semble-t-il) édition, la proposition précédente est quelque peu dépassée, puisque la plateforme
Il existait des outils de compression de fichiers intégrés utilisant l'algorithme ZIP. Ceux. il est désormais possible de compresser des fichiers
sans utiliser VK.

La technologie des bases d'informations distribuées (RIB) vous permet de créer un système géographiquement distribué basé sur les configurations 1C Enterprise. Cela permet d'avoir quelque chose en commun espace d'information même avec les services qui ne disposent pas d'un canal de communication fiable, combinant une grande autonomie des nœuds avec la capacité d'échanger rapidement des informations. Dans nos articles nous examinerons les fonctionnalités et la mise en œuvre pratique de ce mécanisme sur la plateforme 8.2

Tout d’abord, demandons-nous : pourquoi l’autoéchange ? Technologies modernes, combiné avec des produits peu coûteux et Internet rapide, vous permettent d'organiser le travail à distance sans aucune difficulté. Le choix des méthodes est toujours aussi large : RDP, clients légers et web, agrégation de réseaux avec Aide VPN- il y a quelque chose à penser. Cependant, toutes ces méthodes présentent un inconvénient important : une forte dépendance à la qualité du canal de communication.

Même avec un fonctionnement idéal du fournisseur local, il est impossible de garantir une disponibilité à 100 % du canal de communication. Les problèmes avec le fournisseur de réseau fédérateur, le manque d’alimentation électrique, les dommages physiques à la ligne de communication et bien d’autres facteurs rendent cette tâche insurmontable. Dans le même temps, l'inaccessibilité de la base d'informations dans un entrepôt ou un magasin de détail éloigné entraîne des pertes assez importantes. Et enfin, n’oublions pas qu’il existe des endroits (par exemple les zones industrielles en périphérie des villes) où fournir un canal de communication de haute qualité s’avère coûteux et/ou problématique.

Le mécanisme RIB permet de s'affranchir de ces défauts, chaque service dispose de sa propre copie de la base d'informations avec laquelle vous pouvez travailler de manière autonome même en l'absence totale de communication avec le monde extérieur. Et la petite quantité d'informations transmises vous permet d'utiliser n'importe quel canal de communication, y compris l'Internet mobile, pour l'échange.

RIB sur la plateforme 8.2 n'est pas quelque chose de fondamentalement nouveau, représentant la poursuite du développement Plate-forme URIB 7.7, ce n'est que maintenant que cette technologie est devenue plus accessible et plus simple. Contrairement au composant RIB, qui devait être acheté séparément, le RIB fait partie intégrante de nombreux configurations typiques et fonctionne entièrement en mode utilisateur, vous permettant de vous passer du Configurateur même au stade de la configuration.

À ce stade, il serait temps de passer à la partie pratique, mais nous devrons faire encore une digression. Le fait est que le passage à la plateforme 8.2, qui semble déjà intervenu, a en fait conduit à l'émergence de deux types de configurations : basées sur une application managée, « native » pour la plateforme 8.2, et adaptée de la 8.1, poursuivant utiliser des technologies et des mécanismes obsolètes. Une partie importante des configurations (Comptabilité d'entreprise, Paie et Gestion RH) étant adaptées ou transitoires, elles ne peuvent être écartées, c'est pourquoi la première partie de notre article sera consacrée à ces configurations (essentiellement la plateforme 8.1), tandis que dans la seconde nous examinerons la mise en place d'un échange automatique pour les configurations basées sur une application gérée (plateforme 8.2).

Considérons une tâche pratique : mettre en place l'échange automatique via FTP pour la configuration Enterprise Accounting 2.0. Malgré le fait que RIB permet l'échange en utilisant E-mail ou des ressources de fichiers partagés, nous vous recommandons d'utiliser FTP comme solution la plus simple et la plus manière fiable communications. Vous pouvez lire comment configurer votre propre serveur FTP ou utiliser le service FTP de n'importe quel fournisseur d'hébergement.

Tout d'abord, nous devons configurer les nœuds d'échange. Pour cela, lancez la configuration avec les droits d'administrateur et sélectionnez Transactions - Plans d'échange.

Dans la liste qui apparaît, sélectionnez Complet planifier ou Par organisation, si les enregistrements de plusieurs entreprises sont conservés dans une seule base de données et que l'échange ne doit être effectué que pour l'une d'entre elles. Dans la fenêtre qui s'ouvre, il y a déjà un nœud - le nœud central, nous devons le modifier en indiquant le code et le nom.

Ensuite, nous créerons un autre nœud pour la branche, en le remplissant de la même manière (pour ajouter, cliquez sur le cercle vert avec un plus). L'étape suivante consiste à créer une image initiale pour ce nœud, qui est une base d'informations prête à l'emploi en mode fichier. Pour ce faire, cliquez sur clic-droit souris sur le nœud souhaité et sélectionnez dans la liste déroulante Créer une image de départ.

Maintenant passons à autre chose Service - Base d'informations distribuées (DIB) - Configurer les nœuds RIB.

Dans la fenêtre qui s'ouvre, cliquez sur le bouton Ajouter et configurer nouvel échange, indiquant l'hôte distant, le type d'échange (via FTP) et les paramètres de connexion au serveur.

Signet Échange automatique permet de mettre en place un planning d'échange, d'échange par événements (début et fin de travail, etc.), ces paramétrages sont effectués pour l'utilisateur pour le compte duquel l'échange sera effectué, assurez-vous donc qu'il dispose des droits d'échange de données.

N'oubliez pas de spécifier le préfixe du nœud pour la numérotation des documents (sinon vous recevrez différents documents avec les mêmes numéros) dans Outils - Paramètres du programme ; ici, vous pouvez également configurer d'autres paramètres d'échange. Sur le même onglet, vous devez sélectionner un utilisateur pour effectuer les tâches d'échange ; si vous ne le faites pas, le planning ne fonctionnera pas. N'oubliez pas que les échanges ne seront effectués que si cet utilisateur connecté au programme.

Ceci termine la configuration du nœud central ; vous devez maintenant effectuer des paramètres similaires pour le nœud périphérique, en connectant l'image initiale en tant que système de sécurité de l'information existant. Après quoi, vous pouvez commencer à échanger des données. Pour contrôler, vous devez utiliser Moniteur de communication, il vous permet non seulement de surveiller le succès du téléchargement/téléchargement, mais affiche également les collisions survenues ou les mouvements retardés (si l'utilisateur qui a effectué l'échange n'a pas suffisamment de droits pour effectuer des actions dans la base de données). Disponibilité de cet instrument vous permet de résoudre rapidement et efficacement divers types de problèmes qui surviennent lors de l'échange automatique.

À ce stade, la configuration de l'échange peut être considérée comme terminée et vous pouvez commencer à travailler en mode distribué. Il vaut la peine de s'attarder spécifiquement sur la mise à jour ou la modification de la configuration. Ces actions ne sont disponibles que sur le nœud central ; toutes les modifications apportées seront automatiquement propagées aux nœuds périphériques lors du prochain échange. Pour effectuer des modifications automatiquement, la base de données périphérique doit être en mode exclusif, sinon vous devrez exécuter Configurateur et exécuter Mise à jour de la configuration de la base de données manuellement.

Si votre organisation emploie plus de 5 personnes, vous utilisez probablement les produits 1C. Presque toujours, les organisations installent plusieurs bases de données 1C, car chacune d'elles résout un certain nombre de problèmes. Par exemple, une entreprise est engagée dans la vente au détail et tient une comptabilité ; dans une telle situation, le client installe généralement UT (Trade Management) et BP (Enterprise Accounting). Même un simple entrepreneur individuel comptant plusieurs salariés peut très bien agir comme une telle entreprise !

Pourquoi devrais-je mettre en place un échange de données ?

Continuons à considérer la situation avec UT et BP. Imaginons qu'en ce moment notre échange ne soit pas configuré, quelles actions devons-nous effectuer pour refléter les transactions comptables dans les deux bases de données ? C'est vrai, nous allons d'abord remplir les données dans l'UT, puis nous devrons saisir les mêmes données dans le BP, car nous ne pouvons pas, par exemple, saisir la réception des marchandises dans l'UT, mais nous ne pouvons pas le faire dans le BP.

Même si vous décidez d'utiliser l'échange de données standard (mise en place d'un échange de données standard (synchronisation 1C)), cela ne signifie pas qu'il peut être configuré dans votre base de données. Des problèmes surviennent si, par exemple, vous n'avez pas mis à jour la base de données depuis longtemps (pour maintenir un échange standard, vos bases de données doivent être à jour) ou si les objets que vous allez transférer d'une base de données à une autre sont modifiés. (dans ce cas, l’échange standard ne fonctionnera pas correctement), sauf tout cela même si les versions des plateformes de bases de données diffèrent (7.7 – 8.3), alors l'échange de données devra très probablement également être modifié ou développé à partir de zéro.

Qui a besoin d'utiliser l'échange de données entre les bases de données 1C ?

Si les affirmations ci-dessous vous concernent, alors vous devez configurer l'échange entre vos configurations :

  • Vous disposez de plusieurs bases de données 1C
  • Nécessite un transfert rapide d'informations d'une base de données à une autre et vice versa
  • Besoin d'un échange automatique ou d'un échange en temps réel

Développement et configuration de l'échange de données entre configurations 1C

Un échange de données bien conçu vous permettra de :

  • Décharger et charger des objets d'une base de données à une autre
  • Échange entre différentes versions 1C
  • Échangez des données en temps réel
  • Réduire considérablement le coût des salaires des employés, car ils auront désormais plus de temps libre
  • Économisez votre temps et votre budget

Développement de règles d'échange de données à partir de l'exemple des bases de données UT et BP modifiées

Nous disposons de deux bases de données dans lesquelles le document « Réception de biens et services » est modifié, notamment dans les documents et parties tabulaires De nouveaux détails ont été ajoutés, certains détails standard ont été supprimés, de sorte que l'échange de données standard ne fonctionne pas. Nous avons développé une nouvelle règle d'échange et l'avons écrite dans un fichier.