Comment trouver une erreur lors du transfert de données. Comment trouver une erreur lors du transfert de données Règles de conversion des objets 1c

Maison / Gèle

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 de téléchargement d'un objet ; pour cela, rendez-vous dans l'onglet « Règles de téléchargement de données », cliquez sur ajouter. Dans la fenêtre qui apparaît, sélectionnez l'objet exemple ; ce sera un registre auto-comptable. 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-supportingRemainings.Subconto1 AS Subconto1,
| ISNULL(SUM(Self-AccountingRemaining.AmountRemainingDt),0) AS AmountRemainingDt,
| ISNULL(SUM(Self-accountingRemains.AmountRemainingCt),0) AS AmountRemainingCt,
| MAXIMUM(Soldes auto-comptables.Subaccount2.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. Soldes autonomes (&OnDate, Compte = &compte,) AS Soldes autonomes.
|OÙ
<>&groupe et
| Soldes autonomes. Sous-compte 1. Parent.<>&groupe1
|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. 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("groupe", 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;
endif;
si Sample.AmountRemainderCT< 0тогда
report(""+Sample.Subconto1+" valeur négative "+Sample.SumRemainingCT);
endif;
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 de 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 :

GenerateNewNumberOrCodeIfNotSpecified = 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);
endif;

endif;

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 permettra 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. Nous devons maintenant établir une correspondance entre les champs source et destination ; cela aurait pu être fait immédiatement 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.

Imprimer (Ctrl+P)

Gestionnaire Avant d'enregistrer les données reçues

Procédure PKO_<ИмяПКО>_Avant d'enregistrer les données reçues dans le module général Gestionnaire Exchange via le format universel contient le texte du gestionnaire Avant d'enregistrer les données reçues pour un PKO spécifique. Le texte du gestionnaire peut être vide. Cependant, en pratique, il est toujours utilisé lors du chargement des données pour implémenter une logique supplémentaire qui doit être effectuée avant d'écrire un objet dans l'infobase. Par exemple, les modifications doivent-elles être chargées dans les données de sécurité des informations existantes ou doivent-elles être chargées en tant que nouvelles données.

Le gestionnaire contient les paramètres suivants :

  1. Données d'informationB– Tapez – DirectoryObject, DocumentObject. Un élément de données de la base d'informations correspondant aux données reçues. Si aucune donnée correspondante n'est trouvée, alors ce paramètre a la valeur Indéfini .
  2. Données reçues– Tapez – DirectoryObject ou DocumentObject. Élément de données formé par conversion de données XDTO. Enregistré si ces données sont nouvelles pour l'infobase (le paramètre IB Data contient la valeur Indéfini ). DANS sinon Données reçues remplacer Données d'informationB(toutes les propriétés de Données reçues transféré à Données d'informationB). Si le remplacement standard des données de sécurité des informations par les données reçues n'est pas requis, vous devez écrire votre propre logique de transfert, puis installer Données reçues signification Indéfini
  3. Conversion des propriétés. Taper - Tableau des valeurs. Contient les règles de conversion des propriétés de l'objet courant, initialisées dans le cadre de la session d'échange.
  4. Échange de composants. Une structure qui contient des composants d'échange : règles d'échange et paramètres d'échange. La procédure d'initialisation des composants d'échange se trouve dans le module Échange de donnéesXDTOServeur

Regardons quelques exemples pratiques que j'ai résolus dans une configuration avancée, afin de ne pas modifier la configuration de base des solutions d'application 1C typiques.

Ne remplacez pas les objets trouvés lors du chargement

Dans les règles de conversion des objets de l'édition 3.0, contrairement à l'édition 2.0, il n'y a pas de propriété « Ne pas remplacer les objets trouvés lors du chargement », grâce à laquelle les objets trouvés dans l'infobase du récepteur ne seront pas modifiés par la valeur des champs de synchronisation.

Dans les règles de conversion d'objets de l'édition 3.0, le paramètre Données d'informationB a la valeur indéfini si l'objet n'est pas trouvé. De plus, si le paramètre Données reçues a une signification indéfini puis à la sortie du gestionnaire, m ne sera pas remplacé.

L'employeur m'a demandé de modifier les règles de conversion entre les configurations standards de UT 11 et BP 3.0 afin que les données de l'annuaire des organismes et entrepôts du service comptable ne soient pas revendues lors des échanges avec UT. Ils vendaient notamment les détails complémentaires de ces annuaires au service comptable, à chaque fois que des éléments de ces annuaires étaient enregistrés dans l'UT pour envoi au service comptable.

J'ai effectué cette tâche dans l'extension de configuration comptable afin de ne pas modifier la configuration principale. La solution est présentée sur la Fig. 1. Si l'élément de répertoire existe (trouvé dans la source), alors le paramètre Données d'informationB est défini et que toutes les propriétés de Données reçues NON transféré à Données d'informationB devrait être installé Données reçues signification Indéfini

Fig. 3 Fragment code de programme dans l'extension de configuration

Si l'objet répertoire n'est pas trouvé, alors le paramètre Données d'informationB importe Incertain et puis J'appelle la procédure ContinuerAppeler pour continuer à appeler le gestionnaire d'événements à partir de la configuration extensible

Ne pas refléter les documents dans la comptabilité réglementée

On m'a demandé de permettre de ne pas refléter dans la comptabilité 3.0 certains documents d'expédition créés dans Trade Management 11. À cet effet, j'ai introduit un détail supplémentaire pour le document d'implémentation « Ne pas refléter les documents dans la comptabilité réglementée ». Si l'indicateur est activé, alors ce document doit être marqué pour suppression dans la base de données du récepteur (BP 3.0). La complexité de cette tâche réside dans le fait que dans le service comptable de l'entreprise, les documents ne contiennent pas de détails supplémentaires. J'ai décidé d'utiliser le champ de commentaire. Lors de l'envoi côté source (UT 11), je remplis l'attribut commentaires avec l'inscription appropriée, et sur le récepteur (BP), dans le gestionnaire, avant d'enregistrer les données reçues, je mets une marque pour suppression comme le montre la Fig. 2

Manuel sur la conversion de données 1C (édition 2) Règles de conversion d'objets

Comme nous le savons déjà, les règles de conversion d'objets sont utilisées pour faire correspondre les objets dans les configurations source et de destination. Naturellement, la règle spécifie l'objet source de données (c'est-à-dire, d'où obtenir les données) et l'objet récepteur de données (c'est-à-dire, où transférer ou écrire les données).

En plus d'eux, il existe un certain nombre de propriétés dont nous tenterons de révéler la signification.

Rechercher l'objet destination par l'identifiant interne de l'objet source- flag définissant la recherche d'objets dans le récepteur pour la version plateforme V8. Si ce flag est coché, alors la recherche d'un objet à modifier dans la base de données du récepteur s'effectue à l'aide de l'identifiant interne (unique) de l'objet. Cet identifiant n'est pas visible par l'utilisateur et le programme maintient l'unicité des identifiants dans l'infobase, de sorte qu'il n'y ait pas deux objets de l'infobase avec les mêmes identifiants.

Continuez la recherche dans les champs de recherche si l'objet récepteur n'est pas trouvé par identifiant- le drapeau détermine la poursuite de la recherche d'un objet dans la base d'informations du récepteur si la recherche par identifiant unique n'aboutit pas à un résultat positif.

Ne remplacez pas les objets existants dans le récepteur lors du chargement, mais créez-en uniquement de nouveaux et remplissez-les *- le drapeau détermine s'il est nécessaire de modifier les détails de l'objet dans l'infobase du récepteur si l'objet a été trouvé avec succès par un identifiant unique ou par des champs de recherche.

Ne créez pas de nouvel objet dans le récepteur s'il n'est PAS trouvé *- le drapeau détermine si un nouvel objet doit être créé dans l'infobase du récepteur s'il n'a pas été trouvé par un identifiant unique ou par des champs de recherche.

Lors du transfert d'un objet par référence, NE PAS créer un nouvel objet, mais transférer uniquement la référence- le drapeau détermine si un nouvel objet doit être créé dans l'infobase du récepteur s'il n'a pas été trouvé par un identifiant unique ou par des champs de recherche si l'objet est transféré par référence. Si l'objet n'est pas trouvé et qu'il est recherché par identifiant unique, alors seul le lien vers l'objet sera transféré (sans champs de recherche - un lien). Si l'objet est déchargé directement (c'est-à-dire que non seulement le lien vers l'objet est déchargé, mais également tous ses détails), alors l'indicateur n'affecte rien.

Ne pas décharger les objets de propriété source via des liens- le drapeau détermine s'il est nécessaire de décharger tous les objets vers lesquels l'objet source a des liens ou s'il suffit de décharger uniquement les informations sur les liens vers ces objets. Disons que vous téléchargez un ouvrage de référence produit. Si cette case n'est pas cochée pour le PKO correspondant, alors en plus de l'élément, tous les objets auxquels il fait référence seront déchargés. Si le drapeau est armé, les objets auxquels se réfère la nomenclature ne seront pas déchargés. Essayez de cocher cette case et d'afficher le fichier de téléchargement de données résultant, puis de le supprimer et de comparer les résultats. Vous comprendrez rapidement sa signification.

Je ne me souviens pas des objets déchargés- le flag détermine si le système doit mettre en CACHE les derniers objets déchargés lors du déchargement. La mise en cache vous permet d'accélérer le processus de téléchargement et de chargement des données.

Utiliser recherche rapide objet pendant le déchargement et le chargement- le drapeau détermine s'il faut utiliser une recherche rapide d'objets à télécharger. Il est logique de l'utiliser pour un petit nombre d'entrées de répertoire (le nombre d'entrées ne dépasse pas 1000 éléments). L'effet est obtenu si de nombreux objets ont le drapeau défini Ne déchargez pas les objets de propriété par référence. Avec ce schéma de téléchargement et de chargement de données, la vitesse augmente plusieurs fois.

Générer automatiquement un numéro ou un code s'il n'est pas spécifié- le flag détermine si le système doit générer automatiquement un nouveau code ou numéro d'objet s'il n'est pas renseigné avant l'enregistrement.

Échange en ligne

Décharger un objet (entièrement), uniquement s'il existe un lien vers celui-ci- le réglage détermine dans quelles circonstances l'objet doit être déchargé. Si la case est cochée, l'objet sera déchargé selon les règles suivantes :

  1. Selon les règles de déchargement, si un objet a déjà été déchargé, déchargez-le tel quel
  2. Selon les règles de déchargement, si l'objet n'a pas été déchargé, alors nous ne déchargeons pas
  3. Lors du téléchargement à l'aide d'un lien vers un objet, nous téléchargeons l'intégralité de l'objet

Par exemple, si vous n'avez pas besoin de transférer l'intégralité de l'élément d'un SI à un autre, mais uniquement celui vers lequel il existe des liens, alors la case à cocher fera l'affaire.

Ne remplacez pas un objet créé dans l'infobase du récepteur lors du chargement- le paramétrage détermine s'il est nécessaire de transférer (retour) un objet qui a été créé dans l'infobase avec laquelle l'échange est organisé. Autrement dit, si un document a été créé dans l'infobase 1 et est entré dans l'infobase 2 via un échange, doit-il alors être transféré vers l'infobase 1 lorsqu'il est modifié dans la base de données 2. Le paramètre vous permet de spécifier la priorité d'un objet lors de l'échange à l'endroit de ? sa création. Autrement dit, les modifications apportées à la base d'informations dans laquelle l'objet a été créé sont distribuées partout et les modifications apportées aux autres bases de données n'affectent pas cet objet dans la base de données 1.

Priorité de chargement de l'objet- le paramètre détermine la priorité de l'objet lors du chargement en cas de collision de modifications. La valeur par défaut et dans le cas d'une valeur vide est Au-dessus. Si une collision se produit, le programme analyse la priorité de l'objet téléchargé. Ce n'est que si la priorité de l'objet téléchargé est égale à Ci-dessus qu'il sera enregistré dans l'infobase du destinataire. Si la priorité est identique ou inférieure, le programme enregistrera les informations correspondantes sur la collision dans la base d'informations, mais ne modifiera pas l'objet.

Options des paramètres du champ de recherche-tableau avec options possibles paramètres du champ de recherche pour l’utilisateur. Le décideur détermine combinaisons possibles champs de recherche que l'utilisateur peut sélectionner lors de la configuration d'un échange. Tous les paramètres spécifiés par le développeur de règles doivent être traités dans le code du gestionnaire « Champs de recherche ». La variable SearchSettings dans le gestionnaire détermine l'option de correspondance sélectionnée par l'utilisateur (SettingNameForAlgorithm à partir de la ligne du tableau correspondante). Si l’utilisateur n’a sélectionné aucune option correspondante ou ne s’est vu proposer aucune option, alors les paramètres de recherche sont une chaîne vide.

Dans l'onglet "Avancé", vous pouvez modifier le nom de la règle, son inclusion dans un groupe spécifique, ainsi que la description de la règle.

On sait que les programmes 1C sont pratiques et outil multifonctionnel pour l'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 vous expliquerons 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 récepteur 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.

Figure 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 Politique 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.

Figure 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. Documents. 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 l'élément qui se trouve dans la base de données de réception ne se chargera pas. 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 typique 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 est réellement possible de trouver l'emplacement et la cause de cette erreur uniquement en déchargeant différents types objets. 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 la 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 Objet dans ce message. DANS dans ce cas cet objet est Onduleur poste à souder VDI 160R (Immobilisations). Déjà dans à l'heure actuelle une divergence peut être constatée. 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 Il s'est avéré qu'il s'agissait d'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 Moyens primaires 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. Nous exclurons donc ce document de la liste des objets transférés et le dé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 dans le mode application gérée. En particulier, dans une configuration typique Automatisation intégrée rev.1.1 vous pouvez travailler dans les deux modes application régulière, 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 variantes 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 des 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/uploade les données de la base d'informations conformément aux règles d'échange. Dans la plupart des configurations standards, 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 du fichier lors du téléchargement.

Certains documents (notamment dans les configurations standards) génèrent des mouvements sur plusieurs registres. Décharger toute cette économie rendra le résultat Fichier XML trop gros. 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 vous en aurez besoin BÉLIER 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 - grand nombre onglets remplis de contrôles. 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'objets », il y a 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 « Documents" (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» ouvrage 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 " Récepteur" 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 tout à fait vrai. DANS vrai travail Des problèmes surviennent, 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" Récepteur», 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(); endIf;

Avant de remplir les détails " Organisation"Il faut vérifier la valeur de l'attribut " Ceci est un 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 dans le 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 " Récepteur», à 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. Depuis création automatique refuser les règles de dé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 ;

endIf; Si sélection de données depuis Directory.Buyer Then NewRow = Data Selection.Add(); NewRow.Client = DataFetchFromDirectory.Link; Types de clients NewRow.ClientType = "Client" ;

endIf;

Si DataFetchFromDirectory.Supplier Then NewRow = DataFetch.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewString.ClientType = "Fournisseur" ;

Ç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 divisé. 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 avez dû remarquer 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 différents systèmes) il ne m'aidera pas beaucoup.

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 » ; endIf;

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.

© 2024 ermake.ru -- À propos de la réparation de PC - Portail d'information