Contacts

Comment trouver une erreur lors du transfert de données. Exemple de règle de conversion d'objet Il existe toujours plusieurs solutions

Le but de cette règle d'échange est de transférer les soldes des règlements mutuels de BP 2 vers UT11.

Création pas à pas d'une règle d'échange à l'aide de la configuration "Conversion de données" (les métadonnées doivent être chargées) :

1) Créez une règle d'upload d'un objet, pour cela allez dans l'onglet « Règles d'upload de données », cliquez sur ajouter. Dans la fenêtre qui apparaît, sélectionnez l'objet exemple, ce sera un registre autocomptable. Nous changeons la méthode d'échantillonnage en un algorithme arbitraire.

2) Passons à l’écriture du code lui-même car Il n’existe pas de registre d’auto-comptabilité à l’UT, il faut donc le convertir. Tout d'abord, nous avons besoin d'une requête qui, selon nos paramètres, renverra les soldes pour les règlements mutuels. Dans le gestionnaire d'événements "Avant le traitement", nous écrivons la requête suivante :

Texte de requête = "SÉLECTIONNER
| Soldes autonomes.Compte,
| Self-supportingRemains.Subconto1 AS Subconto1,
| ISNULL(SUM(Self-AccountingRemaining.AmountRemainingDt),0) AS AmountRemainingDt,
| ISNULL(SUM(Self-accountingRemains.AmountRemainingCt),0) AS AmountRemainingCt,
| MAXIMUM(Soldes comptables analytiques.Sous-compte2.Date) AS Date du document de règlement,
| MAXIMUM (Soldes auto-comptables. Sous-compte2. Numéro) AS Numéro de pièce comptable
|DE
| Registre comptable. Autosuffisant. Soldes (&OnDate, Account = &account,) AS Soldes autosuffisants
|OÙ
<>&groupe et
| Soldes autonomes. Sous-compte 1. Parent<>&groupe 1
|GROUPER PAR
| Soldes autonomes.Compte,
| Soldes autonomes. Sous-compte 1,
| Restes autoportants.Subconto2
|COMMANDER PAR
| Sous-conto1
|COMMANDE AUTOMATIQUE";

Ma tâche était de limiter les groupes de contreparties pour lesquels les règlements mutuels sont téléchargés.

Nous déterminons les valeurs des variables qui seront utilisées à l'avenir.

OnDate = date("20130101");
TD = DateActuelle();
group = Directories.Counterparties.FindByName("Acheteurs");
group1 = Répertoires. Contreparties. Rechercher par nom("Retours des INDIVIDUS");

Nous créons une table que nous transmettrons plus tard à la règle de conversion de valeur.

TZ = Nouveau ValueTable();
TK.Columns.Add("Contrepartie");
TK.Columns.Add("Montant");
TK.Columns.Add("MontantREGLE");
TK.Columns.Add("CalculationDocument");
TK.Columns.Add("Date du document de règlement");
TK.Columns.Add("Numéro du document de règlement");
TK.Columns.Add("Partenaire");
TK.Columns.Add("Devise de règlement mutuel");
TK.Columns.Add("Date de paiement");

Nous définissons les paramètres, appelons la requête, remplissons le tableau et appelons la règle de conversion.

requête = nouvelle requête (RequestText);
request.SetParameter("group", groupe); request.SetParameter("group1",group1);
request.SetParameter("OnDate",OnDate);
request.SetParameter("Compte", Plans comptables. Auto-comptabilité. Calculs avec d'autres fournisseurs et entrepreneurs);//76.05
Récupérer = request.Run().Select();
TK.clear();
Boucle While Select.Next()
si Sample.SumRemainingCT = 0 ou Sample.SumRemainingCT = "" alors
continuer;
fin si;
si Sample.AmountRemainderCT< 0тогда
report(""+Sample.Subconto1+" valeur négative "+Sample.SumRemainingCT);
fin si;
LineTZ = TZ.Add();
Ligne TK.Counterparty = Selection.Subconto1 ;
LineTZ.sum = Selection.SumRemainingCT;//Selection.SumRemainingCT;
LineTZ.sumRegl = Sampling.SumRemainingCT;//Sampling.SumRemainingCT;
Ligne TK.Calculation Document Date = Sélection.Calculation Document Date ;
Ligne TK.Numéro de document de calcul = Sélection.Numéro de document de calcul ;
LineTZ.PaymentDate = TD ;
Fin du cycle ;
OutData = Nouvelle structure ;
OutgoingData.Insert("Date", CurrentDate());
OutgoingData.Insert("CalculationsWithPartners", TK);
OutgoingData.Insert("Type d'opération", "Soldes de la dette envers les fournisseurs");
OutgoingData.Insert("Comment", "Généré sur le crédit du compte 76.05");
report("76.05 Début du CRÉDIT");
UploadByRule(, OutgoingData, "Saisie des soldes pour le règlement mutuel_7605Credit");

Nous effectuons de la même manière la même opération pour les comptes nécessaires restants (leur description, ainsi que la règle toute faite, se trouvent en pièce jointe).

3) Passons à la création des règles de conversion d'objets ; pour cela, ouvrez l'onglet « Règles de conversion d'objets ». Ajoutons-y une nouvelle règle avec le nom "Soldes d'entrée par règlement mutuel_7605Credit", laissons l'objet source vide, définissons l'objet récepteur sur le document "Entrer les soldes", et dans l'onglet Paramètres, supprimons le drapeau "Rechercher l'objet récepteur par le identifiant interne de l'objet source".

Dans le gestionnaire d'événements "Avant le chargement", nous écrirons le code suivant :

Générer NewNumberOrCodeIfNotSpecified = true ;

Dans le gestionnaire d'événements "Après le chargement", nous écrirons :

exécuter(algorithms.AfterLoadInputRemainings);

il exécutera un algorithme avec le contenu suivant :

devise = Constants.RegulatedAccountingCurrency.Get();
objet.Owner = SessionParameters.CurrentUser ;
object.organization=parameters.organisation;
pour chaque page de la boucle object.calculationspartners
Page.SettlementDocument = Directories.Counterparty Agreements.empty link();
PageCurrencySettlements = devise ;
si ValueFilled (page.counterparty.partner) alors
p.partenaire = p.counterparty.partner;
sinon
partenaires = Directories.Partners.FindByName(page.counterparty.Name);
si le bureau<>Indéfini et bureaux<>Répertoires.Partners.emptylink() puis
p.partenaire = bureau ;

object2.Partner = bureau ;
objet2.Write();
sinon
exécuter (algorithmes.AddPartner);
fin si;

fin si;

fin de cycle ;

Cet algorithme sera exécuté côté récepteur (BP). En plus du transfert de soldes pour les règlements mutuels, il y a la tâche de transférer les contreparties, mais l'UT utilise des partenaires, donc après avoir généré le document, nous vérifions si toutes les contreparties et partenaires sont dans la base de données du destinataire ; si pour une raison quelconque ils n'y sont pas , puis nous les ajoutons.

L'ajout de sous-traitants mettra en œuvre la règle de conversion pour le répertoire « Contreparties » ; vous pouvez la créer de la même manière que la règle précédente, mais permettre au système de comparer les champs nécessaires.

Un algorithme a été créé pour les partenaires et exécuté du côté du récepteur.

Afin d'exécuter l'algorithme côté récepteur, vous devez cocher le drapeau « Utilisé lors du chargement » dans le coin supérieur droit de la fenêtre de l'algorithme (lors de son édition).

Vous trouverez ci-dessous le code de l'algorithme « Ajouter un partenaire » :

nPartner = Directories.Partners.CreateItem();
nPartner.Name = page.counterparty.name ;
nPartner.Comment = "Créé lors du chargement depuis BP";
nPartner.NameFull = page.counterparty.NameFull;
nPartner.Supplier = ?(find(page.counterparty.AdditionalInformation,"Supplier")>0,true,false);
nPartner.Client = ?(find(page.counterparty.AdditionalInformation,"Client")>0,true,false);
OtherRelations = ?(find(page.counterparty.AdditionalInformation,"Other")>0,true,false);
npartenaire.Write();
p.partenaire = npartner.link;
contrepartie = Directories.Counterparties.FindByName(page.counterparty.Name);
object2 = contrepartie.GetObject();
object2.Partner = npartner.link;
objet2.Write();

Revenons à la règle de conversion d'objet. Il nous faut maintenant établir une correspondance entre les champs source et destination ; cela aurait pu être fait juste avant d'écrire le code. Afin de comparer les champs, dans la partie inférieure du tableau se trouve un bouton permettant d'appeler l'assistant « Synchronisation des propriétés ». Dans cet assistant, nous pouvons soit mapper les champs, soit les laisser sans source et sans destination. Dans notre cas, nous laissons tous les champs et MP sans source.

Une fois que les champs requis ont été sélectionnés dans le TC inférieur, pour chaque champ, nous définissons un indicateur dans la colonne « Obtenir à partir des données entrantes ». Cet indicateur indique que le système recherchera ce champ dans les données entrantes. Il est important que le nom du champ corresponde au nom dans les données entrantes, sinon un message s'affichera indiquant que le champ n'a pas été trouvé.

Le texte ne décrit pas toutes les nuances du processus.

Bonjour, chers lecteurs du blog. Un article sur la conversion a déjà été publié sur ce site
, cet article a montré
comment configurer un échange à l'aide de constructeurs qui créent des règles d'échange.
Cette méthode peut être utilisée lors de la conversion de bases de données de 1C version 7.7 vers 8.2.
Nous allons maintenant parler de la façon de transférer des données entre les configurations 1C 8.2, qui sont légèrement différentes les unes des autres.

L'objectif principal de cet article sera la conversion de la partie tabulaire du document, ce qui signifie que
nous travaillerons avec règles de conversion de groupe de propriétés - PKGS.

Préparation à la mise en place de PKGS - règles de conversion d'un groupe de propriétés

Nous transférerons le document « Réception de biens et services », qui présente des différences dans l'attribut Taux de TVA de la section tabulaire « Biens ».
dans la base de données source et récepteur. Dans la base de données source, cet attribut est du type « DirectoryLink.VAT Rates »,
et dans la base de données du destinataire - le type « TransferLink.VAT Rates ».

D'ailleurs, pour plus de commodité, vous pouvez définir

De plus, dans la base de données des destinataires, nous devons renseigner le détail « Compte BU », qui se trouve également
dans la section tabulaire « Biens » du document « Réception de biens et services ». Nous prendrons les données à remplir à partir des détails du « Comptabilité du compte ».
ouvrage de référence « Nomenclature » de la base réceptrice.

La situation est compliquée par le fait que nous allons travailler avec la partie tabulaire, nous devons donc configurer
règles de conversion de groupe de propriétés - PKGS. Nous devrons accéder à la ligne actuelle de la section tabulaire.

Création de règles de conversion pour un groupe de propriétés 1C

Nous avons déjà développé des règles de conversion pour le document « Réception de biens et services ».

Mais pour la partie tabulaire « Produits », il n'y a pas règles de conversion de propriété"Taux de TVA".
Vous devez ajouter une nouvelle règle de conversion de propriété en cliquant sur le bouton « Synchroniser les propriétés... ».

La boîte de dialogue « Paramétrage des règles de conversion de propriété (Réception de biens et services) » apparaîtra.

Vous devez répéter ce qui a été fait dans l'image et cliquer sur le bouton « OK ».

Même si nous avons créé règle de conversion pour un groupe de propriétés, mais ce n'est pas encore prêt.
N'oubliez pas que les détails de la section tabulaire « Taux de TVA » diffèrent par les types de valeurs.
Dans la base de données source, cet attribut est du type « DirectoryLink.VAT Rates »,
et dans la base de données du destinataire - le type « TransferLink.VAT Rates ». Il nous manque une règle ici
Conversion d'un répertoire en une énumération.

Gestionnaires d'événements pour les règles de conversion de groupe de propriétés

Pour configurer correctement la conversion de propriété, vous devez créer une nouvelle règle de conversion d'objet.

Dans la boîte de dialogue qui apparaît, nous indiquons que le répertoire « Taux de TVA » est converti en un virement du même nom.

Il n’y aura aucune règle de conversion de propriété pour cette règle.
Par conséquent, lors de l'enregistrement de cette règle, sélectionnez « Non » dans la boîte de dialogue qui apparaît.

Dans le dialogue avec la question « Créer des règles de téléchargement de données ? » Sélectionnons également « Non ».

En double-cliquant, nous ouvrirons une boîte de dialogue avec la configuration de la règle de conversion d'objet (PKO) « Taux de TVA ».
Ici, dans l'onglet « Gestionnaires d'événements », sélectionnez l'événement « Au déchargement » et définissez la « Source » et
« Link Node », c’est-à-dire ce qui sera transféré.

Si Source. Taux = 0 Alors
LinkNode = "Enchère0" ;
Sinon si source. Pari = 12 Alors
NodeLinks = "Pari12" ;
Sinon si source. Nom = « hors TVA » Alors
NodeLinks = "Sans TVA" ;
Fin si ;

Après avoir écrit le gestionnaire, cliquez sur le bouton « OK ».

Dans les informations sur les gestionnaires :

Source - Personnalisé - objet source téléchargé (lien ou données personnalisées).
Nœud de lien - nœud de lien XML initialisé. Peut être utilisé
par exemple, pour initialiser les propriétés d'autres objets.

Nous allons maintenant indiquer explicitement l'utilisation de cette règle de conversion d'objet lors du déchargement de l'attribut « Taux de TVA ».
Allez dans l’onglet « Conversion de propriétés (*) » du document « Réception de biens et services » et ouvrez la conversion
groupe de propriétés « Produits », double-cliquez sur la propriété « Taux de TVA » et dans la boîte de dialogue qui s'ouvre, dans le champ « Règle »
sélectionnez la règle de conversion pour l'objet « Taux de TVA ».

Cliquez sur le bouton « OK ».

Il ne reste plus qu'à paramétrer les comptes comptables conformément aux valeurs​​qui sont définies pour le poste.
Allons dans l'onglet « Règles de conversion d'objet », trouvons l'objet « Réception de biens et services » et
Un double-clic dessus ouvrira la boîte de dialogue des règles de conversion d'objets (OCR).
Allons dans l'onglet « Gestionnaires d'événements » pour l'événement « Après le chargement » et écrivons ce qui suit :

Pour chaque LineTCH From Object. Cycle des produits
LigneTC. CompteCompteBU = LineTC. Nomenclature. CompteCompteBU ;
Fin du cycle ;

Chargeons maintenant ces règles à la source en utilisant le traitement externe "Universal Data Interchange in XML Format" - "V8Exchan82.epf".
Téléchargeons les données dans un fichier XML. Ensuite, ouvrez le même traitement dans la base de données du récepteur, sélectionnez le fichier XML de téléchargement et chargez les données.

À propos, le traitement « Échange universel de données au format XML » peut être ouvert via l'élément de menu.
"Services" | "Autres échanges de données" | "Échange universel de données au format XML". Un peu de choses ont été écrites à ce sujet dans une note à ce sujet.

On sait que les programmes 1C constituent un outil pratique et multifonctionnel d'automatisation comptable, adapté aux entreprises d'une grande variété d'industries et de domaines d'activité. Cependant, cet outil est complexe et, malheureusement, divers types d'erreurs surviennent souvent lors de son utilisation. Dans cet article, nous allons vous montrer comment rechercher et résoudre une erreur survenue lors de la migration des données à l'aide des règles créées par Technologies de conversion de données 2.0. Que dois-je faire si le téléchargement échoue ou s'il est impossible de charger les données dans la base de données de réception ? Notre article a pour objectif de répondre à ces questions.

Ainsi, si vous avez acheté des règles de conversion de données, ouvert le traitement pour le transfert, défini tous les paramètres, mais que le téléchargement est interrompu et qu'un message d'erreur apparaît dans les messages de service, voici quelques techniques qui peuvent vous aider à trouver et à éliminer l'erreur.

Tout d'abord, vérifiez les versions de votre programme avec celles spécifiées dans les règles. Avec une légère différence entre les versions source aucun problème ne se pose, mais si votre version est nettement en retard par rapport aux dernières versions, les règles ne fonctionneront pas. Version de configuration destinataire doit être identique à celui précisé dans le règlement.

Comment puis-je voir à quelles versions s'appliquent les règles ? Ouvrez simplement le fichier de règles avec n'importe quel éditeur (par défaut, il peut s'agir d'Internet Explorer ou du Bloc-notes) et regardez les premières lignes - elles contiennent les versions de la source et de la destination.

Fig. 1. Afficher les règles

Ce qu'il faut faire? Si vous en avez l'opportunité, mettez à jour le programme source vers la version spécifiée dans les règles de conversion. Si vous ne pouvez pas mettre à jour le programme, vous ne pourrez pas travailler avec ces règles.

Mais peut-être avez-vous déjà fait tout cela et le téléchargement se produit toujours avec des erreurs ? Essayez ensuite de trouver l'élément problématique qui empêche le programme de se charger correctement.

Nous démontrerons l'algorithme d'actions lors de la recherche d'erreurs en utilisant l'exemple du transfert de données de KA 1.1 vers BP 3.0.

Procédez comme suit : désactivez toutes les règles de transfert et déchargez les différents groupes de règles un par un. Ceux. essayez d'abord de décharger uniquement Réglementation comptable, alors seulement Soldes entrants, seulement Annuaires etc. (Fig.2). Le plus souvent, des problèmes surviennent lors du déchargement des documents, alors que d'autres types d'objets sont déchargés normalement, utilisons donc leur exemple pour envisager d'autres actions. Vous devez maintenant répéter le processus avec un téléchargement alterné avec chaque règle de conversion de document. Ceux. à leur tour, téléchargez uniquement les rapports préalables, uniquement la lettre de crédit transférée, etc. selon la liste, comme le montre la Fig. 3.

Fig.2. Déchargement séquentiel de groupes d'objets

Figure 3. Déchargement des types d'objets un par un

Supposons donc que le téléchargement soit interrompu lorsque toutes les règles de téléchargement sont sélectionnées. Documentation. Vous avez téléchargé tous les types de documents un par un, parcouru toutes les positions une par une et calculé que l'erreur ne se produisait que lors du téléchargement, par exemple, de documents. Exploitation (comptabilité et comptabilité fiscale). Ensuite, vous devez progressivement réduire la période de téléchargement afin de trouver le document problématique. Tout d’abord, téléchargez par trimestre, mois, semaine jusqu’à ce que vous trouviez le jour où le téléchargement échoue.

Ce qu'il faut faire? Si vous parvenez à trouver le document spécifique à l’origine de l’erreur et que vous pouvez voir quel est le problème le plus probable, tant mieux. Réparez le document si possible, ou ne le migrez tout simplement pas : il est beaucoup plus facile de réparer un document que d'effectuer toute la migration manuellement. Pour effectuer un transfert excluant un seul document, utilisez la sélection dans la fenêtre adjacente. Dans la colonne "Type de comparaison", définissez "Différent", dans "Valeur", sélectionnez le document problématique et poursuivez le téléchargement comme d'habitude.

Figure 4. Sélection d'un document lors du téléchargement

D'accord, mais que se passe-t-il si le téléchargement s'effectue correctement, mais que les données ne peuvent pas être chargées dans une autre base de données ? Tout d'abord, prenez votre temps et vérifiez à nouveau si vous avez tout fait correctement et si les versions du programme correspondent. Contrairement à la source, la version finale du récepteur doit correspondre strictement à celle spécifiée dans les règles, sinon vous obtiendrez toujours une erreur.

Ce qu'il faut faire? Les erreurs au stade du chargement ne peuvent le plus souvent être corrigées qu'au stade du déchargement, la procédure pour trouver le problème sera donc la même que celle décrite ci-dessus, à une seule exception près - après chaque déchargement, il sera nécessaire de répéter le chargement afin de trouver que l'élément qui se trouve dans la base de données de réception n'est pas en cours de téléchargement. Suivez la même séquence : migrez d'abord un groupe de vues d'objets, puis des vues spécifiques à des dates spécifiques, et enfin éliminez l'élément problématique qui empêche le chargement réussi.

Lorsque le traitement standard ne peut pas effectuer le téléchargement correctement et que le processus s'arrête, un message d'erreur apparaît toujours dans les messages du service. Dans certains cas, il n'est possible de trouver l'emplacement et la cause de cette erreur qu'en déchargeant différents types d'objets un par un. Cependant, ce n’est pas la seule solution. Souvent, la cause de l'erreur est déjà indiquée dans le message de service ; il vous suffit de le lire correctement.

Regardons l'exemple du déchargement de KA 1.1. L'utilisateur se décharge de la base de données source Soldes entrants au début de 2018. Le processus de déchargement est interrompu et le programme affiche plusieurs messages de service, dont les suivants :

Erreur dans le gestionnaire d'événements BeforeProcessingUploadRules
PVD = Restant_Matériaux
Gestionnaire = AvantProcessingDataUpload
DescriptionErrors = Erreur lors de l'obtention de la valeur de la propriété de l'objet (par nom de propriété source)
PKO = Nomenclature (Répertoire : Nomenclature)
PKS = 15 (Article --> Article)
Objet = Onduleur poste à souder VDI 160R (Immobilisation)
ReceiverProperty = Article (Chaîne)
DescriptionErrors = Champ objet introuvable (Article)
ModulePosition = Processing.UniversalXMLDataExchange.ObjectModule(8283)
CodeMessage = 13
ModulePosition = Processing.UniversalXMLDataExchange.ObjectModule(1694)
CodeMessage = 31

On pourrait aller jusqu'au bout et décharger un à un différents types de soldes (restes d'immobilisations, soldes d'actifs incorporels, etc.) et constater que l'erreur se produit lors du déchargement selon la règle. Matériaux_restants. Ou vous pouvez voir immédiatement le nom de la règle dans le message d'erreur. Écoutez, la toute première ligne de la transcription de l'erreur dans le message dit exactement ceci. DVP - règle de téléchargement de données. La règle de téléchargement des données est égale à Remaining_Materials. Nous n’avons rien à chercher, le programme lui-même vous indique où l’erreur s’est produite.

Riz. 5.1. Message d'erreur de service

On peut tout aussi bien en trouver la raison. En ligne DescriptionErreursécrit Pas un message très clair pour l'utilisateur. Cependant, nous pouvons comprendre que l’erreur réside dans certaines propriétés de l’objet. Quel objet ? Celui indiqué dans la ligne Un objet dans ce message. Dans ce cas, cet objet est Onduleur poste à souder VDI 160R (Immobilisations). Déjà à ce moment, vous pouvez remarquer une divergence. Règle de téléchargement de données appelé Restes de matériaux, en ligne Règle de conversion d'objet (OCR)écrit Nomenclature, pourquoi le type d'objet est-il écrit comme Immobilisations? Examinons la base de données source et vérifions si nous avons vraiment trouvé le bon objet.

Dans les soldes du compte 10.09 « Inventaires et fournitures ménagères » nous retrouvons notre objet problématique - subconto Onduleur pour poste à souder VDI 160R(voir Fig. 5.2)

Riz. 5.2. Bilan du compte 10.09 pour 2018

Si vous ouvrez ce sous-conto, vous pouvez immédiatement voir que Onduleur pour poste à souder VDI 160R est en effet un outil de base, pas une nomenclature (voir Fig. 5.3). Ce qui reste Onduleur pour poste à souder VDI 160R s'est avéré être une erreur tout à fait évidente sur le compte 10.09 qui doit être corrigée.

Riz. 5.3. Carte immobilisation Poste à souder inverseur VDI 160R

L'erreur de déchargement dans ce cas se produit en raison d'un type d'objet incorrect. Selon la règle de déchargement des matériaux restants, ils doivent être déchargés Nomenclature- matériaux, carburant, inventaire, etc. Ces objets ont un certain ensemble de propriétés, qui sont transférées vers une autre base de données selon la règle de conversion. Pour les objets de type La chose principale l'ensemble des propriétés sera complètement différent. Il n'existe aucun moyen de décharger un tel objet selon la règle de déchargement des matériaux. Le programme identifie l'objet comme Nomenclature mais n'y trouve pas les propriétés nécessaires et, par conséquent, ne peut pas le convertir pour l'écrire dans un fichier. C'est ce que disait le message Erreur lors de l'obtention de la valeur de la propriété de l'objet (par nom de propriété source).

Dans cet exemple, le problème peut être résolu assez facilement - dans nos règles il y a un paramètre Ne pas décharger le solde si la quantité est nulle. Lors de son installation, les balances avec une quantité nulle ne seront tout simplement pas déchargées. Comme vous pouvez le voir dans le bilan présenté dans la figure 5.2, les soldes de ce sous-conto n'ont aucune quantité, c'est-à-dire ce résidu problématique peut être facilement éliminé en utilisant le paramètre spécifié.

Dans d'autres cas, lorsqu'il n'existe aucun moyen d'exclure un objet à l'aide d'un filtre ou d'un paramètre, l'utilisateur devra corriger l'erreur dans la base de données source avant de migrer les données.

Un exemple d'erreur.

Regardons un exemple d'une autre erreur découverte lors du transfert de données.

Lors de la première tentative de téléchargement de documents, l'utilisateur a vu le texte suivant dans les messages système. Un message d'erreur nous permet d'ignorer le mécanisme de recherche du moment où une erreur s'est produite et de passer à sa correction. De tels messages n'apparaissent pas toujours et vous devez parfois rechercher une erreur en utilisant la méthode de déchargement un par un. Nous avons déjà expliqué ci-dessus comment lire un tel message.

Figure 6.1. Message d'erreur

Ainsi, le programme lui-même nous indique le document problématique - il s'agit de la facture à l'acheteur IPBP-000008, ce qui signifie que nous accédons immédiatement au document et essayons de découvrir quelle est l'erreur.

Comme vous pouvez le voir sur la figure 6.2, dans ce document, dans la section tabulaire « Biens et services », dans l'une des lignes, le groupe d'articles est défini, et non l'article lui-même, ce qui en soi est une erreur. Bien entendu, les règles de conversion de ce document ne précisent pas comment convertir un objet de cette partie tabulaire groupe de nomenclature, c'est un élément d'un type complètement différent de lui-même nomenclature, et le programme n'a aucune information sur la façon de déplacer un élément autre que ce qui est spécifié dans les règles. Par conséquent, le processus de conversion ne le reconnaît pas, ne peut pas le convertir et génère une erreur.

Figure 6.2. Document avec une erreur

Comment et pourquoi cela a été établi ne nous intéresse pas pour le moment. Nous décidons de ne pas migrer le document, ce qui signifie que nous l'excluons de la liste des objets migrés. Trouver la règle de téléchargement de documents Facture de paiement à l'acheteur, sélectionnez-le, accédez à la sélection, définissez Field - Link, Comparison Type - Not Equal, Value - notre document problématique. Ainsi, nous exclurons ce document de la liste des objets transférés et le téléchargement devrait se dérouler normalement.

Figure 6.3. Définition des préférences pour l'exclusion de documents

Après cela, vous pouvez continuer le téléchargement d'une manière qui vous convient - transférer tous les documents en même temps ou transférer uniquement les factures pour paiement, à l'exception du document trouvé, puis transférer le reste - l'ordre de transfert des données peut être quelconque.

Il convient de noter ici que la possibilité de sélectionner des objets existe dans le traitement Échange de données XML générique pas dans toutes les configurations typiques. Plus précisément, une telle fonctionnalité est absente en mode application gérée. En particulier, dans une configuration typique Automatisation intégrée rev.1.1 vous pouvez travailler à la fois en mode application standard et en mode application gérée, ou, comme on dit aussi, en mode formulaires gérés. Dans le premier cas, les sélections en traitement standard sont possibles (voir Fig. 4), dans le second, non. Ensuite, vous devez utiliser les versions modifiées du traitement (voir Fig. 6.3). Si la configuration est utilisée en mode compatibilité plateforme 8.2 (c'est notamment KA 1.1 Et UPP 1.3), alors un traitement est nécessaire Échange de données XML générique versions 2.1.7 . Si le mode de compatibilité n'est pas utilisé, comme dans la configuration Comptabilité d'entreprise édition 3.0, alors vous devez travailler avec le traitement des versions 2.1.8 . Ces soins ont également des capacités supplémentaires pour remplir les sélections du journal de bord (plus de détails), ils ne sont donc pas inclus dans toutes les options de livraison, mais ils peuvent toujours être achetés soit dans le cadre de forfaits marqués comme avec sélection selon l'histoire de vie, ou séparément.

Voici à quoi ressemble, en général, le processus de recherche et d'élimination d'une erreur survenue lors du transfert de données 1C.

Vous pouvez trouver d’autres documents utiles dans la section Articles ou sur notre site Web principal.

© Anna Balyasnikova, dernières modifications avril 2018

La migration de données entre différentes configurations n'est pas une tâche triviale. Comme toujours, il existe plusieurs solutions, mais toutes ne sont pas optimales. Essayons de comprendre les nuances du transfert de données et choisissons une stratégie universelle pour résoudre ces problèmes.

Le problème de la migration des données (nous parlons uniquement des produits de l'entreprise 1C) d'une solution à une autre ne s'est pas posé hier. La société 1C comprend parfaitement les difficultés rencontrées par les développeurs lors de la création de migrations. Elle essaie donc par tous les moyens d'aider avec des outils.

Lors du développement de la plate-forme, la société a introduit un certain nombre d'outils universels, ainsi que des technologies simplifiant le transfert de données. Ils sont intégrés à toutes les solutions standards et le problème des migrations entre configurations identiques est globalement résolu. La victoire est une fois de plus confirmée par l'intégration étroite des solutions standards.

Avec les migrations entre solutions non standard, la situation est un peu plus compliquée. Un large choix de technologies permet aux développeurs de choisir indépendamment la manière optimale de résoudre un problème de leur point de vue.

Examinons-en quelques-uns :

  • échanger via des fichiers texte ;
  • utilisation de plans d'échange;
  • etc.

Chacun d’eux a ses propres avantages et inconvénients. Pour résumer, le principal inconvénient sera sa verbosité. La mise en œuvre indépendante d'algorithmes de migration entraîne des coûts de temps importants, ainsi qu'un long processus de débogage. Je ne veux même pas parler d’un soutien supplémentaire à de telles décisions.

La complexité et le coût élevé du support ont incité la société 1C à créer une solution universelle. Des technologies qui permettent de simplifier au maximum le développement et l’accompagnement des migrations. En conséquence, l’idée a été mise en œuvre sous la forme d’une configuration distincte – « Conversion de données ».

Conversion de données - solution standard, configuration indépendante. Tout utilisateur disposant d'un abonnement « ITS:Prof » peut télécharger ce package entièrement gratuitement depuis le site d'assistance aux utilisateurs ou le disque ITS. L'installation est effectuée de manière standard - comme toutes les autres solutions standards de 1C.

Parlons maintenant un peu des avantages de la solution. Commençons par le plus important : la polyvalence. La solution n'est pas adaptée à des configurations/versions de plateforme spécifiques. Il fonctionne aussi bien avec les configurations standard que personnalisées. Les développeurs disposent d'une technologie universelle et d'une approche standardisée pour créer de nouvelles migrations. La polyvalence de la solution permet de préparer des migrations même pour des plateformes autres que 1C:Enterprise.

Le deuxième gros avantage concerne les aides visuelles. Des migrations simples sont créées sans programmation. Oui, oui, sans une seule ligne de code ! Rien que pour cela, cela vaut la peine de consacrer du temps à apprendre la technologie une fois, puis d’utiliser des compétences inestimables à plusieurs reprises.

Le troisième avantage que je noterais est l'absence de restrictions sur la distribution des données. Le développeur choisit lui-même la méthode de transmission des données à la configuration du récepteur. Deux options sont disponibles dès le départ : le téléchargement vers un fichier XML et la connexion directe à l'infobase (COM/OLE).

Étudier l'architecture

Nous savons déjà que la conversion de données peut faire des merveilles, mais les avantages techniques ne sont pas encore tout à fait clairs. La première chose que vous devez comprendre est que toute migration (conversion) de données est basée sur des règles d’échange. Les règles d'échange sont un fichier XML standard décrivant la structure dans laquelle les données de sécurité des informations seront téléchargées. Le service de traitement qui télécharge/télécharge les données analyse les règles d'échange et effectue le téléchargement en fonction de celles-ci. Lors du chargement, le processus inverse se produit.

La configuration « CD » est une sorte de constructeur visuel à l'aide duquel le développeur crée des règles d'échange. Il ne sait pas comment télécharger les données. Un traitement de service externe supplémentaire inclus dans le package de distribution sur CD en est responsable. Il en existe plusieurs (XX dans le nom du fichier est le numéro de version de la plateforme) :

  • MDXXExp.epf- le traitement vous permet de télécharger une description de la structure de l'infobase dans un fichier XML. La description de la structure est chargée sur le CD pour une analyse plus approfondie et la création de règles d'échange.
  • V8ExchanXX.epf- télécharge/télécharge les données de la base d'informations conformément aux règles d'échange. Dans la plupart des configurations typiques, le traitement est présent immédiatement (voir l'élément de menu « Service »). Le traitement est universel et n’est lié à aucune configuration/règle spécifique.

Bon, maintenant, sur la base de tout ce qui précède, définissons les étapes de développement d’une nouvelle conversion :

  1. Définition de la tâche. Il est nécessaire de bien comprendre quelles données doivent être transférées (à partir de quels objets de configuration) et, surtout, où les transférer.
  2. Préparation des descriptions des structures de configuration (Source/Sink) pour un chargement ultérieur sur le CD. Le problème est résolu par le traitement du service MDXXExp.epf.
  3. Chargement des descriptions préparées des structures dans la sécurité de l'information.
  4. Création de règles d'échange à l'aide d'un outil visuel CD.
  5. Effectuer un téléchargement/téléchargement conformément aux règles de conversion de données créées à l'aide du traitement V8ExchanXX.epf.
  6. Débogage des règles d'échange (si nécessaire).

La conversion la plus simple

Pour la démonstration, nous aurons besoin de deux configurations déployées. J'ai décidé d'opter pour l'option : « Trade Management » 10ème édition et une petite solution écrite maison. La tâche sera de transférer les données de la configuration standard « UT ». Par souci de concision, appelons la solution auto-écrite « Sink » et la gestion commerciale « Source ». Commençons par résoudre le problème en transférant des éléments du répertoire « Nomenclature ».

Tout d'abord, examinons le schéma de conversion des données et relisons la liste des actions à effectuer. Ensuite, nous lançons la configuration « Source » et y ouvrons le traitement du service MD82Exp.epf.

L'interface de traitement ne dispose pas d'une multitude de paramètres. L'utilisateur doit uniquement indiquer les types d'objets de métadonnées qui ne seront pas inclus dans la description de la structure. Dans la plupart des cas, ces paramètres n'ont pas besoin d'être modifiés, car Il n'y a pas d'intérêt particulier à décharger les mouvements à l'aide de registres d'accumulation (à titre d'exemple).

Il est plus correct de former le mouvement tout en conservant les documents dans le récepteur. Tous les mouvements seront effectués par le document lui-même après le transfert. Le deuxième argument en faveur des paramètres par défaut est la réduction de la taille des fichiers lors du téléchargement.

Certains documents (notamment dans les configurations standards) génèrent des mouvements sur plusieurs registres. Le déchargement de tout cela rendra le fichier XML résultant trop volumineux. Cela peut compliquer le transport et le chargement ultérieurs dans la base du récepteur. Plus le fichier de données est volumineux, plus il faudra de RAM pour le traiter. Au cours de ma pratique, j'ai eu l'occasion de rencontrer des fichiers téléchargés d'une taille indécente. Ces fichiers refusaient complètement d'être analysés à l'aide d'outils standard.

Nous laissons donc tous les paramètres par défaut et téléchargeons la description de la configuration dans un fichier. Nous répétons une procédure similaire pour la deuxième base.

Ouvrez le CD et sélectionnez dans le menu principal « Répertoires » -> « Configurations ». Le répertoire stocke les descriptions des structures de toutes les configurations pouvant être utilisées pour créer des conversions. Nous chargeons la description de la configuration une fois, puis nous pouvons l'utiliser plusieurs fois pour créer différentes conversions.

Dans la fenêtre du répertoire, cliquez sur le bouton « Ajouter» et dans la fenêtre qui apparaît, sélectionnez le fichier décrivant la configuration. Cochez la case « Charger dans une nouvelle configuration » et cliquez sur le bouton « Charger ». Nous effectuons des actions similaires avec la description de la structure de la deuxième configuration.

Vous êtes maintenant prêt à créer des règles d'échange. Dans le menu principal du CD, sélectionnez « Répertoires » -> « Conversions ». Ajoutez un nouvel élément. Dans la fenêtre de création d'une nouvelle conversion, vous devez préciser : la configuration source (sélectionner UT) et la configuration destination (sélectionner « Récepteur »). Ensuite, ouvrez l'onglet « Avancé » et remplissez les champs suivants :

  • nom du fichier de règles d'échange - les règles d'échange créées seront enregistrées sous ce nom. Vous pouvez modifier le nom du fichier à tout moment, mais il est préférable de le définir maintenant. Cela permettra de gagner du temps à l'avenir. J'ai nommé les règles de l'exemple de démonstration : « rules-ut-to-priemnik.xml ».
  • name - le nom de la conversion. Le nom peut être absolument n'importe quoi, je me suis limité à « Demo. UT au récepteur.

Voilà, cliquez sur « Ok ». Immédiatement, une fenêtre apparaît devant nous nous demandant de créer automatiquement toutes les règles. Accepter une offre aussi alléchante donnera au maître l'ordre d'analyser automatiquement la description des configurations sélectionnées et de générer indépendamment des règles d'échange.

Mettons tout de suite les points sur les « i ». L'assistant ne pourra rien générer de grave. Il ne faut cependant pas écarter cette possibilité. S'il est nécessaire d'établir un échange entre des configurations identiques, alors les services d'un spécialiste seront très utiles. Pour notre exemple, le mode manuel est préférable.

Examinons de plus près la fenêtre « Paramètres des règles d'échange ». L'interface peut sembler un peu déroutante - un grand nombre d'onglets remplis de commandes. En fait, tout n'est pas si difficile, on commence à s'habituer à cette folie après quelques heures de travail avec l'application.

A ce stade, nous nous intéressons à deux onglets : « Règles de conversion des objets » et « Règles de chargement des données ». Dans un premier temps, nous devons configurer les règles de correspondance, c'est-à-dire comparer des objets de deux configurations. Sur la seconde, déterminez les objets possibles qui seront disponibles pour l'utilisateur pour le téléchargement.

Dans la seconde moitié de l'onglet « Règles de conversion d'objet », il y a un panneau supplémentaire avec deux onglets : « Conversion de propriété » et « Conversion de valeurs" Le premier sélectionnera les propriétés (détails) de l'objet sélectionné, et le second est nécessaire pour travailler avec des valeurs prédéfinies (par exemple, des éléments de répertoire prédéfinis ou des éléments d'énumération).

Très bien, créons maintenant des règles de conversion pour les répertoires. Vous pouvez effectuer cette action de deux manières : utiliser l'assistant de synchronisation d'objets (le bouton « ») ou ajouter manuellement une correspondance pour chaque objet.

Pour gagner de la place, nous utiliserons la première option. Dans la fenêtre de l'assistant, décochez le groupe « Documentation" (nous ne nous intéressons qu'aux annuaires) et élargir le groupe " Annuaires" Nous parcourons soigneusement la liste et examinons les noms des ouvrages de référence qui peuvent être comparés.

Dans mon cas, il existe trois répertoires de ce type : Nomenclature, Organisations et Entrepôts. Il existe également un répertoire appelé Clients, qui a le même objectif que « Contreparties"à partir de la configuration" Utah" Certes, le maître ne pouvait pas les comparer en raison de leurs noms différents.

Nous pouvons résoudre ce problème nous-mêmes. On retrouve dans la vitrine « Correspondances d'objets" livre de référence " Clientèle", et dans la colonne "Source" sélectionnez le répertoire "Contreparties". Cochez ensuite la case dans la colonne « Type » et cliquez sur le bouton « Ok ».

L'assistant de synchronisation d'objets proposera de créer automatiquement des règles de conversion des propriétés de tous les objets sélectionnés. Les propriétés seront comparées nommément et pour notre démonstration cela sera tout à fait suffisant, nous en convenons. La prochaine question sera une proposition visant à créer des règles de téléchargement. Acceptons-le également.

La base des règles de change est prête. Nous avons sélectionné les objets à synchroniser et les règles de conversion des propriétés et les règles de téléchargement ont été créées automatiquement. Sauvegardons les règles d'échange dans un fichier, puis ouvrons la « Source » IB (dans mon cas, c'est UT) et lançons le traitement du service dedans. V8Exchan82.epf.

Tout d'abord, dans la fenêtre de traitement, sélectionnez les règles d'échange que nous avons créées. Nous répondons à la question des règles de chargement par l’affirmative. Le traitement analysera les règles d'échange et construira une arborescence d'objets du même nom disponibles pour le téléchargement. Pour cet arbre, nous pouvons mettre en place toutes sortes de sélections ou de nœuds d'échange, en changeant ceux dont nous avons besoin pour sélectionner les données. Nous voulons télécharger absolument toutes les données, il n'est donc pas nécessaire d'installer des filtres.

Après avoir terminé le processus de téléchargement des données dans un fichier, accédez à IB " Destinataire" Nous y ouvrons également le traitement V8Exchan82.epf, seulement cette fois nous allons dans l'onglet « Chargement des données ». Sélectionnez le fichier de données et cliquez sur le bouton « Télécharger ». Ça y est, les données ont été transférées avec succès.

Problèmes du monde réel

La première démo pourrait être trompeuse. Tout semble assez simple et logique. En fait, ce n'est pas vrai. Dans le travail réel, des problèmes surviennent qui sont difficiles voire totalement impossibles à résoudre en utilisant uniquement des moyens visuels (sans programmation).

Afin de ne pas être déçu par la technologie, j'ai préparé plusieurs problèmes réels. Vous les rencontrerez certainement au travail. Ils n’ont pas l’air si triviaux et vous font considérer la conversion de données sous un nouvel angle. Examinez attentivement les exemples présentés et n'hésitez pas à les utiliser comme extraits pour résoudre de vrais problèmes.

Tâche n°1. Remplissez les détails manquants

Supposons que nous devions transférer le répertoire " Contreparties" Le récepteur dispose à cet effet d'un répertoire « Clients » similaire. Il est tout à fait adapté au stockage de données, mais il a des accessoires » Organisation», qui permet de séparer les contreparties selon leur appartenance à l'organisation. Par défaut, toutes les contreparties doivent appartenir à l'organisation actuelle (cela peut être obtenu à partir de la constante du même nom).

Il existe plusieurs solutions au problème. Nous examinerons la possibilité de remplir les détails " Organisation"directement dans la base de données" Destinataire", c'est à dire. au moment du chargement des données. L'organisation actuelle est stockée dans une constante, il n'y a donc aucun obstacle à l'obtention de cette valeur. Ouvrons la règle de conversion d'objet (ci-après dénommée PKO) " Clientèle» (double-cliquez sur l'objet) et dans l'assistant de configuration des règles, rendez-vous dans la section « Gestionnaires d'événements ». Dans la liste des gestionnaires, nous trouverons « Après le téléchargement”.

Décrivons le code permettant d'obtenir l'organisation actuelle puis de l'attribuer aux détails. Au moment où le gestionnaire « Après chargement » est déclenché, l'objet sera entièrement formé, mais pas encore écrit dans la base de données. Personne ne nous interdit de le modifier à notre discrétion :

Si PAS Object.ThisGroup Then Object.Organization = Constants.CurrentOrganization.Get(); fin si;

Avant de remplir les détails " Organisation"Il faut vérifier la valeur de l'attribut " Ce groupe" Pour l'ouvrage de référence " Clientèle"La fonctionnalité hiérarchique est définie, il est donc nécessaire de vérifier le groupe. Remplissez tous les détails de la même manière. Assurez-vous de lire l'aide pour les autres options de gestionnaire " Après le chargement" Par exemple, parmi eux il y a le paramètre « Refus" Si vous lui attribuez la valeur « True », alors l'objet ne sera pas écrit dans la base de données. Ainsi, il devient possible de limiter les objets pouvant être écrits au moment du chargement.

Tâche n°2. Détails du registre d'information

Dans l'annuaire " Contreparties"Configurations UT, détails disponibles" Acheteur" Et " Fournisseur" Les deux détails sont du type " Booléen» et servent à déterminer le type de contrepartie. En BI " Destinataire», à l'annuaire « Clientèle"Il n'y a pas de détails similaires, mais il existe un registre d'informations" Types de clients" Il remplit une fonction similaire et peut stocker plusieurs attributs pour un client. Notre tâche est de transférer les valeurs des détails dans des entrées distinctes dans le registre d'informations.

Malheureusement, les moyens visuels seuls ne peuvent pas non plus y faire face. Commençons petit, créons un nouveau logiciel pour le registre d’informations » Types de clients" Ne citez rien comme source. Évitez de créer automatiquement des règles de téléchargement.

L'étape suivante consiste à créer les règles de téléchargement. Allez dans l'onglet approprié et cliquez sur le bouton " Ajouter" Dans la fenêtre d'ajout des règles d'upload, renseignez :

  • Méthode d'échantillonnage. Remplacer par « Algorithme arbitraire » ;
  • Règle de conversion. Sélectionnez le registre d'information « Types de clients » ;
  • Code (nom) de la règle. Notez-le comme « Déchargement des types de clients » ;

Vous devez maintenant écrire du code pour sélectionner les données à télécharger. Le paramètre « Échantillonnage de données" Nous pouvons placer une collection contenant un ensemble de données préparé. Paramètre " Échantillonnage de données" peut prendre diverses valeurs - résultat de requête, sélection, collections de valeurs, etc. Nous l'initialisons sous forme d'un tableau de valeurs à deux colonnes : client et type de client.

Vous trouverez ci-dessous le code du gestionnaire d'événements " Avant le traitement" Il initialise le paramètre « Échantillonnage de données» suivi du remplissage des données du répertoire « Contreparties" Ici, vous devez faire attention à remplir la colonne " Type de client" En « UT » nos attributs sont de type « Booléen », et le destinataire est une énumération.

À ce stade, nous ne pouvons pas les convertir au type requis (ce n'est pas dans l'UT), donc pour l'instant nous les laisserons sous forme de chaînes. Vous n'êtes pas obligé de le faire, mais je souhaite immédiatement montrer comment convertir un type manquant dans la source.

DataFetch = Nouveau ValueTable(); DataSelection.Columns.Add("Client"); DataSelection.Columns.Add("ClientType"); SelectingDataFromDirectory = Directories.Accounts.Select(); Pendant la boucle SelectingDataFromDirectory.Next() si SelectingDataFromDirectory.ThisGroup puis continuez ; fin si; Si sélection de données depuis Directory.Buyer Then NewRow = Data Selection.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewRow.ClientType = "Client" ; fin si; Si DataFetchFromDirectory.Supplier Then NewRow = DataFetch.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewString.ClientType = "Fournisseur" ; fin si; Fin du cycle ;

Sauvegardons la règle de téléchargement des données et revenons à l'onglet " Règles de conversion d'objets" Ajoutons pour le registre d'information « Types de clients» Règles de conversion de propriété : client et type de client. Nous laisserons la source vide, et dans le gestionnaire d’événements « Avant le déchargement » nous écrirons :

//Pour la propriété « Client » Value = Source.Client; //Pour la propriété « ClientType » If Source.Client = "Buyer" Then Expression = "Enumerations.ClientTypes.Buyer" ElseIf Source.Client = "Supplier" Then Expression = "Enumerations.ClientTypes.Supplier"; fin si;

Dans la liste, les détails sont renseignés en fonction de l'échantillon de données sélectionné. Nous passons simplement le client sous forme de lien, et écrivons le type de client dans le paramètre « Expression" Les données de ce paramètre seront interprétées dans le récepteur et, une fois exécutées, l'accessoire sera rempli avec la valeur correcte de l'énumération.

Ça y est, les règles d'échange sont prêtes. L'exemple considéré s'est avéré assez universel. Une approche similaire est souvent utilisée lors de la migration de données à partir de configurations créées sur la plateforme 7.7. Un exemple frappant en est le transfert de détails périodiques.

Tâche n°3. Astuces avec les pièces de table

Vous rencontrez souvent des tâches qui nécessitent de publier des lignes d'une section de tableau dans plusieurs. Par exemple, dans la configuration initiale, les services et les biens sont enregistrés dans une seule partie tabulaire, et dans le récepteur, le stockage de ces entités est séparé. Encore une fois, le problème ne peut être résolu par des moyens visuels. Ici, il convient de prendre comme base la solution du deuxième problème.

Nous établissons une règle pour le déchargement des données, spécifions un algorithme arbitraire et dans le gestionnaire « Avant le déchargement », nous écrivons une requête pour obtenir des données de la partie tabulaire.

Pour gagner de la place, je ne fournirai pas le code (vous pouvez toujours vous référer aux sources) de la requête - il n'y a rien d'inhabituel là-dedans. Nous trions la sélection résultante et plaçons les résultats triés dans le paramètre déjà familier " Échantillonnage de données" Il est encore une fois pratique d'utiliser une table de valeurs comme collection :

DataFetch = Nouveau ValueTable(); //Il y aura une autre partie de tableau ici Data Selection.Columns.Add("Products"); //Ici, il y aura également une partie tabulaire Data Selection.Columns.Add("Services"); SelectionData.Columns.Add("Lien");

Tâche n°4. Transférer des données vers une opération

Si une organisation utilise plusieurs systèmes comptables, il sera alors tôt ou tard nécessaire de migrer les données avec la génération ultérieure de transactions.

Dans la configuration " PA"il existe un document universel" Opération» et il est idéal pour former plus de fils. Il n’y a qu’un seul problème : le document est rédigé de manière astucieuse et les données ne peuvent pas y être transférées aussi facilement.

Vous trouverez un exemple d'une telle conversion dans le code source de l'article. La quantité de code s'est avérée assez importante, il ne sert donc à rien de la publier conjointement avec l'article. Permettez-moi simplement de dire que le téléchargement utilise à nouveau un algorithme arbitraire dans les règles de téléchargement des données.

Tâche n°5. Synchronisation des données sur plusieurs détails

Nous avons déjà vu plusieurs exemples, mais nous n'avons pas encore parlé de synchronisation des objets lors de la migration. Imaginons que nous devions transférer des contreparties et que certaines d'entre elles se trouvent probablement dans la base de données des destinataires. Comment transférer des données et éviter l'apparition de doublons ? À cet égard, CD propose plusieurs façons de synchroniser les objets transférés.

Le premier est par identifiant unique. De nombreux objets possèdent un identifiant unique qui garantit l'unicité au sein d'une table. Par exemple, dans le répertoire « Contreparties« Il ne peut pas y avoir deux éléments avec les mêmes identifiants. CD effectue des calculs pour cela et pour tous les PCO créés, une recherche par identifiant est immédiatement activée par défaut. Lors de la création du PCO, vous auriez dû faire attention à l'image d'une loupe à côté du nom de l'objet.

La synchronisation à l'aide d'un identifiant unique est une méthode fiable, mais elle n'est pas toujours adaptée. Lors de la fusion de répertoires " Contreparties» (de plusieurs systèmes différents) cela ne servira pas à grand chose.

Dans de tels cas, il est plus correct de synchroniser les objets selon plusieurs critères. Il est plus correct de rechercher des contreparties par INN, KPP, Nom ou de diviser la recherche en plusieurs étapes.

La conversion des données ne limite pas le développeur dans la définition des critères de recherche. Regardons un exemple abstrait. Supposons que nous devions synchroniser les répertoires " Contreparties» à partir de différentes bases d’informations. Préparons le PKO et dans les paramètres des règles de conversion d'objet, cochez la case " Continuez à chercher dans les champs de recherche si l'objet récepteur n'est pas trouvé par identifiant" Avec cette action, nous avons immédiatement défini deux critères de recherche : par un identifiant unique et des champs personnalisés.

Nous avons le droit de choisir nous-mêmes les domaines. En cochant TIN, KPP et Nom, nous indiquerons immédiatement plusieurs critères de recherche. Confortable? Tout à fait, mais encore une fois, cela ne suffit pas. Et si nous voulons modifier les critères de recherche ? Par exemple, nous recherchons d’abord la combinaison TIN+KPP, et si nous ne trouvons rien, nous commençons à tenter notre chance avec le nom.

Un tel algorithme est tout à fait réalisable. Dans le gestionnaire d'événements " Champs de recherche« on peut préciser jusqu'à 10 critères de recherche et pour chacun d'eux définir sa propre composition de champs de recherche :

Si SearchOptionNumber = 1 alors SearchPropertyNameString = « TIN, KPP » ; SinonIfSearchOptionNumber = 2 ThenSearchPropertyNameString = « Nom » ; fin si;

Il y a toujours plusieurs solutions

Toute tâche a plusieurs solutions, et le transfert de données entre différentes configurations ne fait pas exception. Chaque développeur a le droit de choisir sa propre solution, mais si vous devez constamment développer des migrations de données complexes, alors je vous recommande fortement de faire attention au « ». Vous devrez peut-être investir des ressources (du temps) dans la formation au début, mais cela sera plus que payant sur le premier projet plus ou moins sérieux.

À mon avis, la société 1C ignore injustement le sujet de l'utilisation de la conversion de données. Durant toute l'existence de la technologie, un seul livre a été publié à ce sujet : « 1C : Entreprise 8. Conversion de données : échange entre solutions applicatives ». Le livre est assez ancien (2008), mais il convient tout de même de s'y familiariser.

La connaissance des plateformes reste nécessaire

"est un outil universel, mais si vous envisagez de l'utiliser pour créer des migrations de données à partir de configurations développées pour la plateforme 1C:Enterprise 7.7, vous devrez alors passer du temps à vous familiariser avec le langage intégré. La syntaxe et l'idéologie de la langue sont très différentes, vous devrez donc passer du temps à apprendre. Sinon le principe reste le même.



Avez-vous aimé l'article? Partagez-le