1c, le processus de travail en arrière-plan s'est terminé anormalement. Le processus de travail en arrière-plan s'est terminé anormalement. Concept de programmation asynchrone
Question : Le processus de travail en arrière-plan s'est écrasé...
Bonjour à tous et bonne semaine !)
Comptabilité d'entreprise, édition 3.0 (3.0.46.11).
Plateforme 8.3.9.2033.
Lors de la publication de documents en groupes, l'erreur « Le processus de travail en arrière-plan s'est terminé anormalement » se produit. Aucune raison n'est donnée...
Redémarrer le serveur SQL, le serveur 1C (on ne sait jamais) n'aide pas... Peut-être que quelqu'un a rencontré un problème similaire ??? Il est même difficile de dire quand cette erreur est apparue car nous n'avons pas utilisé l'exécution groupée (clôture du mois) depuis longtemps...
Répondre:() () Encore une fois bon après-midi) J'ai allumé le magazine technologique et j'ai trouvé ces choses intéressantes (peut-être savez-vous quel est le problème ?) :
Une tentative a été effectuée pour effectuer une opération sur un objet qui n'est pas un socket...
Le processus se termine. Appel sortant refusé...
Aucun serveur hébergeant le service n'a été trouvé...
Question : tâches en arrière-plan
Répondre:
Question : Comment transférer un fichier vers un travail en arrière-plan
Plateforme 8.3.6.2152
Vous devez transférer le fichier d'UV vers une tâche en arrière-plan pour un traitement ultérieur.
J'ai fait ceci :
&SurClient
Procédure Command1 (Command) FileDD = New BinaryData (FileName); StorageAddressForBackground = PlaceInTemporaryStorage(FileDD, UniqueIdentifier); Démarrer UploadLoadOnServer(StorageAddressForBackground) EndProcedure &OnServer Fonction StartUploadLoadOnServer(StorageAddressForBackground) Paramètres de la méthode = Nouveau tableau ; MethodParameters.Add(StorageAddressForBackground); Job = BackgroundTasks.Run("MyGeneralModule.MyBackground", MethodParameters); FinFonction
Dans le module général :
Procédure MyBackground(StorageAddress) Export FileDD = GetFromTemporaryStorage(StorageAddress); Si TypeValue(FileDD) = Type("BinaryData") Alors Inscription au Journal Inscription au Journal("Débogage", "Pas de DD"); Fin si ; Fin de la procédure J'ai essayé ceci : PlacedFiles = New Array ; PlacedFiles.Add(NewDescriptionofTransferFile(FileName)); PlacedFiles = Nouveau tableau ; Si NON PlaceFiles(PlaceFiles, PlaceFiles, False, UniqueIdentifier) Alors Return ; Fin si ; StorageAddressForBackground = PlacedFiles.Storage ; J'ai essayé ceci : StorageAddressForBackground = PlaceInTemporaryStorage(Undefined, UniqueIdentifier); PlaceFile (StorageAddressForBackground, FileName, False);
Il est normalement transféré de l'arrière-plan vers le client via un stockage temporaire, mais pour une raison quelconque, il n'est pas transféré du client vers l'arrière-plan.
Répondre: En général, tout s'est avéré assez simple. Il s'avère que vous pouvez bêtement transmettre des données binaires en tant que paramètre à un travail en arrière-plan. Pour que les amateurs non qualifiés puissent citer des références et leur dire que « c'est ainsi que cela était prévu », le code de travail est :
&SurClient
Procédure Command1 (Command) Démarrer UploadLoadOnServer (New BinaryData (FileName)) EndProcedure
Fonction &OnServer Paramètres de la méthode StartUploadLoadOnServer(DD) = Nouveau tableau ; MethodParameters.Add(DD); Job = BackgroundTasks.Run("MyGeneralModule.MyBackground", MethodParameters); EndFunctions Procédure MyBackground(FileDD) Exporter Si TypeValue(FileDD) = Type("BinaryData") Alors Inscription au Journal("Débogage", "Oui DD"); Sinon Inscription au Journal("Débogage", "Pas de DD"); Fin si ; Fin de la procédure
Question : Exécution d'un travail en arrière-plan sous l'utilisateur souhaité
Répondre:
Question : Débogage d'un travail en arrière-plan
Le travail en arrière-plan s'exécute avec une erreur. J'ai décidé de le déboguer.
Je le lance via un traitement externe avec une seule ligne :
BackgroundTasks.Run("MonModule.MaTâche");
Le point d'arrêt dans le module n'est pas atteint.
Le débogage sur le serveur est autorisé, le débogage est vérifié, la connexion automatique, les tâches en arrière-plan sont activées. Quel autre pourrait être le problème ?
Répondre: Dans les modules courants, il y avait un appel à des fonctions qui nécessitaient une exécution client plutôt que serveur. J'ai dû les mettre entre parenthèses #If Client Then. Celui d’arrière-plan a également fonctionné.
Question : Erreur lors de l'exécution d'un échange
Bonjour, dites-moi où creuser :
J'effectue un échange dans la base de données comptable. Environ trois douzaines de documents sont téléchargés depuis UT-shka via un échange standard. Ils réfléchissent longuement (environ une heure) et terminent par le message :
Le processus de travail en arrière-plan s'est écrasé
Probablement, aucune configuration sérieuse sur 1C 8.3 ou 8.2 ne peut se passer de l'utilisation de tâches de routine et d'arrière-plan. Ils sont très pratiques, puisqu’ils seront exécutés selon un planning clairement défini sans intervention de l’utilisateur ou du programmeur.
Par exemple, vous devez échanger des données avec un autre programme une fois par jour. À l'aide de tâches de routine et d'arrière-plan, 1C pourra effectuer ces actions de manière indépendante, par exemple en dehors des heures de travail. Cette méthode n’affectera en rien l’expérience utilisateur et permettra de gagner du temps.
Tout d'abord, voyons ce qu'ils signifient et quelle est leur différence :
- Tâche planifiée vous permet de lancer des actions spécifiques selon un planning préconfiguré.
- Travail en arrière-plan est un objet qui contient les actions à effectuer.
Supposons que notre entreprise vend quelque chose et dispose de son propre site Web sur lequel les prix sont indiqués. Nous souhaitons les télécharger une fois par jour pour maintenir leur pertinence.
Ouvrez la configuration et ajoutez une tâche planifiée.
Définition des propriétés
Examinons les paramètres les plus importants qui doivent être renseignés dans ses propriétés.
- Dans le champ " Nom de la méthode» sélectionne la procédure d'un module général spécifique qui sera directement exécutée. Il indiquera toutes les étapes de mise en ligne des prix sur notre site Internet. Veuillez noter que l'exécution aura lieu sur le serveur. C'est logique, car les opérations de routine sont effectuées sans la participation des utilisateurs.
- La tâche planifiée peut être désactivée ou activée selon les besoins. Il n'est pas nécessaire de modifier son emploi du temps à chaque fois. Pour cela, dans la palette des propriétés, cochez ou décochez le drapeau " Usage».
- Une autre chose importante est de déterminer si cette tâche de routine sera prédéterminé, ou non. Les tâches planifiées prédéfinies sont lancées automatiquement. Si cette fonctionnalité n'est pas installée, vous devrez alors les lancer par programme ou utiliser le traitement « Task Console » avec ITS.
- Vous pouvez également préciser nombre de répétitions et intervalle entre elles en cas de résiliation anormale. L'arrêt anormal fait référence aux situations dans lesquelles les tâches n'ont pas été terminées en raison d'une erreur.
Mise en place d'un planning
La dernière étape consiste à établir un calendrier pour notre téléchargement sur le site à l'aide du lien hypertexte correspondant dans la palette des propriétés.
Vous verrez un paramètre de planification typique dans 1C 8.3. Il n'y a rien de compliqué ici. Dans cet exemple, nous avons mis en place le lancement de notre mise en ligne de tarifs sur le site tous les jours de cinq à sept heures du matin. Dans le cas où la tâche planifiée n'a pas le temps d'être terminée avant 7h00, elle sera terminée dès le lendemain.
Bloquer les tâches planifiées
Exécutez l'utilitaire standard « Administration des serveurs d'entreprise 1C » et ouvrez les propriétés de l'infobase dans laquelle vous avez créé la tâche de routine (pour les versions client-serveur de 1C).
Dans la fenêtre qui s'ouvre (après avoir saisi votre login et votre mot de passe pour accéder aux informations de sécurité), vérifiez que la case « Le blocage des tâches de routine est activé » n'est pas cochée. Si vous rencontrez une situation dans laquelle la tâche ne fonctionne pas, vérifiez d'abord ce paramètre.
De la même manière, vous pouvez désactiver complètement les tâches de routine dans 1C 8.3. Pour désactiver des tâches en arrière-plan spécifiques, vous pouvez utiliser le traitement « Console des tâches en arrière-plan » intégré aux dernières versions.
Tâches en arrière-plan et planifiées en mode fichier
Dans ce mode, la mise en place et le lancement de ces tâches sont beaucoup plus difficiles à organiser. Le plus souvent, un compte supplémentaire est créé dont la session sera toujours ouverte.
Dans ce cas, les tâches de routine sont activées à l'aide de la méthode « RunTaskProcessing() ».
Vous pouvez également utiliser la construction suivante :
Comme nom de procédure, vous devez spécifier le nom de la procédure client qui sera exécutée. L'intervalle indique combien de secondes plus tard l'exécution aura lieu. Le paramètre « Une fois » n'est pas obligatoire. Il indique si cette procédure sera effectuée une ou plusieurs fois.
Suivi des erreurs dans les tâches en arrière-plan
Vous pouvez visualiser la progression des tâches en arrière-plan, ainsi que la présence d'éventuelles erreurs, dans le journal. Dans le filtre, sélectionnez l'application « Travail en arrière-plan » et, si nécessaire, sélectionnez l'importance qui vous intéresse, par exemple uniquement « Erreurs ».
Le journal affichera toutes les entrées correspondant à votre sélection, ainsi qu'un commentaire qui vous aidera à comprendre la raison de l'erreur.
Le problème n'est pas nouveau et est discuté de temps en temps sur divers forums 1C. La solution la plus simple et la plus populaire consiste à redémarrer le serveur 1C. Malheureusement, cette option n’est pas toujours acceptable ou fortement indésirable. Dans un tel cas, il existe des solutions plus délicates.
Ici l'une de ces méthodes sous la forme de brèves instructions étape par étape :
1. A l'aide de la console d'administration du serveur 1C, nous recherchons des problèmes fun nouveau travail dans la liste de connexions (par exemple, par l'heure de début de son fonctionnement, par rapport à l'heure de début d'un travail régulé dans la console des travaux). Nous définissonsle processus de travail dans lequel se trouve la connexion bloquée.
2. Ouvrez les propriétés de ce processus et marquez-le comme inutilisé (si un seul processus est utilisé, vous devez d'abord créer un nouveau processus de travail afin que toutes les connexions actives s'y reconnectent). Nous nous souvenons du numéro PID de ce processus.
3. Nous attendons que toutes les connexions actuelles passent du processus désactivé à l'un des processus utilisés. En fin de compte, seules les connexions problématiques devraient rester dans notre processus, que nous souhaitons supprimer.
4. Sur un ordinateur doté d'un serveur 1C, à l'aide du gestionnaire de tâches, recherchez le processus rphost.exe correspondant à l'aide du PID du processus de travail désactivé et supprimez-le.
5 . Juste au cas où, vous pouvez supprimer le flux de travail 1C que nous avons désactivé à l'aide de l'administrateur. console et, si nécessaire, créez-en une nouvelle.
6. Prêt. Vous pouvez vous connecter à la console des tâches et vérifier la fonctionnalité de la tâche planifiée.
Dans cet article, je décrirai mon expérience, jusqu'à présent modeste, dans l'organisation de l'échange de données via le format universel EnterpriseData.
Dans mon cas, l'échange est configuré entre les configurations « Trade Management 11.2 » (ci-après UT) et « Enterprise Accounting 3.0.43 » (ci-après BP). L'échange est à sens unique, de UT vers BP. Avant la mise à niveau de Trade Management 11.1 vers 11.2, l'échange de données était configuré à l'aide de la configuration Data Conversion 2.0. Cependant, après le passage à « 11.2 », des erreurs sont apparues dans « Trade Management » pour les utilisateurs. La procédure de mise à jour des règles de change a été réalisée, mais elle n'a donné aucun résultat. Le débogueur a montré que le problème venait de l'échange de données. Il a été décidé de supprimer le paramètre d'échange de données dans les deux configurations et de le reconfigurer.
« Trade Management » et « Enterprise Accounting » fonctionnent tous deux dans une version client-serveur. J'ai commencé à configurer la synchronisation avec UT. Je l'ai effectué de manière à ce que les données soient téléchargées de l'UT vers un fichier. C'est-à-dire une synchronisation via un répertoire réseau. Dans le BP, j'ai configuré l'échange de telle manière qu'aucune donnée ne soit téléchargée depuis le BP.
Erreur lors de l'appel de la méthode contextuelle (Verify) : erreur de validation des données XDTO :
La structure de l'objet "/Counterparty Bank Account/Bank" ne correspond pas au type : (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)KeyPropertiesBank
Vérification de la propriété "BIK":
forme : élément
nom : (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)BIK
taper:
Propriété requise manquante
Objet : Accord avec la contrepartie n°...
Pour analyser l'erreur, j'ai cliqué sur l'icône « Composition des données envoyées » et dans la liste des accords d'entrepreneur enregistrés pour l'envoi, j'ai trouvé l'accord pour lequel l'erreur est apparue. J'ai ouvert l'accord et je me suis souvenu du compte bancaire de la contrepartie spécifié dans l'accord. Ensuite, je suis passé aux comptes bancaires enregistrés pour l'expédition. Il s'est avéré que le compte requis ne figurait pas dans la liste des comptes enregistrés. J'ai refait le compte bancaire et le contrat problématiques. Après cela, j'ai enregistré manuellement le compte bancaire requis.
J'ai réessayé de synchroniser les données de UT. Cette fois, les données ont été téléchargées avec succès. Un fichier XML a été généré dans le dossier réseau contenant les données à transférer de l'UT vers le BP.
L'étape suivante consiste à charger les données du fichier dans le service comptable de l'entreprise. Dans la configuration « Enterprise Accounting », j'ai cliqué sur le bouton « Synchroniser », un formulaire de traitement ouvert avec le message « Analyse des données en cours ». Un peu plus tard, le message est devenu « Téléchargement des données en cours ». Dans le même temps, l'indicateur et le compteur ont montré que plus de 80 000 objets étaient en train d'être déchargés du bloc d'alimentation. Cela m'a dérouté, car j'ai indiqué dans les paramètres que rien ne devait être déchargé de l'alimentation. Le traitement a pris beaucoup de temps et s'est terminé avec l'erreur :
Événement : Échange de données
(GeneralModule.Long-runningOperations.Module(371)) : le processus de travail en arrière-plan s'est terminé anormalement
RaiseException(ErreurTexte);
Pour localiser l'erreur, j'ai essayé de modifier les paramètres de synchronisation et les options de fonctionnement de la base d'alimentation. En conséquence, lorsque j'ai converti la base de données en version fichier, le système a fonctionné correctement : un formulaire de comparaison de deux bases de données s'est ouvert. Après avoir fait correspondre les objets, la synchronisation initiale a réussi. Ensuite, j'ai rebasculé la base de données vers la version client-serveur.
Avec des tests plus approfondis de synchronisation, il a été nécessaire d'apporter quelques modifications aux règles de conversion des objets. Il est temps d'utiliser la configuration Data Conversion 3.0. L'aide à la configuration intégrée décrit son fonctionnement. Les articles sur le site Web de l'ITS ont également été utiles.
En conséquence, j'ai chargé les données suivantes dans « Data Conversion 3.0 » :
- Textes du module général "Gestionnaire d'échange de données via un format universel" à partir de deux bases de données
- Disposition des deux bases
- Description du format EnterpriseData (à partir de n'importe quelle base de données)
- Règles de conversion
Après le téléchargement, j'ai ouvert les règles de conversion des données, des objets et des propriétés dans « Data Conversion 3.0 ». J'ai apporté les modifications dont j'avais besoin. Ensuite j'ai utilisé le bouton "Décharger le module du gestionnaire d'échange". Le texte du module a été copié dans le presse-papiers. Il ne reste plus qu'à l'insérer dans la configuration.
Après avoir expérimenté la mise en place des règles dans "Data Conversion 3.0", j'ai conclu moi-même que dans le cas où les modifications apportées sont insignifiantes, il est plus simple de paramétrer les règles directement dans les configurations UT et BP, dans le module général "Gestionnaire d'échange de données via le format universel". Si les modifications sont sérieuses, comme par exemple l'ajout d'un nouvel objet à l'échange, alors vous devez utiliser la configuration " Conversion de données 3.0".
J'ai effectué la tâche d'ajouter le document « Commande au fournisseur » au plan d'échange en utilisant « Conversion de données 3.0". Dans la version standard de UT - BP ce document n'est pas inclus dans le plan d'échange.
Rappelons que les règles d'enregistrement des objets à télécharger sont toujours configurées dans la configuration "Data Conversion 2.0".
Ce sont les premières impressions de la synchronisation des données via le format universel EnterpriseData.
P.S. Si vous avez des questions ou vos propres observations sur l'échange de données via le format universel et les configurations" Conversion de données 3.0", écrivez dans les commentaires. Nous échangerons nos expériences.
- Synchronisation des données
- Format universel de données d'entreprise
- Conversion de données 3.0
- Conversion de données 2.0
- Gestion commerciale
- Comptabilité d'entreprise
Probablement, chaque programmeur 1C 8.3 a dû tôt ou tard configurer l'exécution de certaines tâches selon un calendrier. Ci-dessous, je vais donner une description détaillée de ces mécanismes, j'espère que ce sera une information utile pour les programmeurs 1C novices. C'est très pratique, car cela ne nécessite aucune action humaine, la tâche de routine est configurée une fois et fonctionne selon votre emploi du temps.
Vous trouverez des instructions détaillées à l’aide d’un exemple ci-dessous.
Que sont les tâches de routine et d'arrière-plan dans 1C
- Tâches planifiées est un mécanisme spécial 1C Enterprise 8.3 conçu pour effectuer une action spécifique selon un calendrier donné.
- Travail en arrière-plan- les objets générés par une tâche de routine qui exécutent directement l'action prévue sans la participation de l'utilisateur ou du programmeur 1C 8.2.
Le mécanisme des jobs planifiés et en arrière-plan fonctionne en mode client-serveur (SQL), grâce aux fonctionnalités du SGBD. Si vous disposez d'une base de données de fichiers, alors la tâche peut également être configurée, mais selon un principe légèrement différent.
Configuration des tâches d'arrière-plan en mode client-serveur 1C
Tout d’abord, créons un nouvel objet de métadonnées – une tâche de routine. J'appellerai ma tâche « Chargement des taux de change ». Regardons la palette des propriétés de cet objet de configuration :
Obtenez 267 leçons vidéo sur 1C gratuitement :
- Nom de la méthode— chemin vers la procédure qui sera exécutée dans un travail en arrière-plan selon un planning donné. La procédure doit être dans un module commun. Il est recommandé de ne pas utiliser de standards, mais de créer les vôtres. N'oubliez pas que les tâches en arrière-plan s'exécutent sur le serveur !
- Usage- un signe d'utilisation d'une tâche de routine.
- Prédéterminé— indique si la tâche de routine est prédéterminée. Si vous souhaitez que la tâche de routine fonctionne immédiatement après avoir été placée dans la base de données, spécifiez cet indicateur. Sinon, vous devrez utiliser le traitement Job Console ou exécuter le travail par programme.
- Nombre de tentatives lorsqu'une tâche se termine anormalement— combien de fois le travail en arrière-plan a été redémarré s'il a été exécuté avec une erreur.
- Intervalle de nouvelle tentative lorsque le travail se termine anormalement— à quelle fréquence le travail en arrière-plan sera redémarré s'il s'est terminé avec une erreur.
Et le paramètre le plus intéressant est Calendrier:
Ici, vous configurez l'intervalle de lancement de la procédure spécifié dans le champ « Nom de la méthode ». Disons que j'ai configuré
Attention! N'oubliez pas de désactiver le blocage de l'exécution des tâches de routine et d'arrière-plan au niveau du SGBD !
Cela peut être fait dans l'utilitaire d'administration de la version client-serveur ou lors de la création d'une nouvelle base de données :
Configuration des tâches de routine en mode fichier 1C
En mode fichier, la configuration de telles tâches est un peu plus difficile. Pour une telle tâche, une session distincte du programme 1C doit être lancée. Ce problème est souvent résolu en créant un utilisateur « technique » dont la session est toujours en cours d'exécution.
En mode fichier, un travail de routine est initialisé au lancement de la méthode « RunTaskProcessing() ».
Pour un utilisateur spécifique, vous pouvez configurer cette méthode pour qu'elle s'exécute en utilisant une autre méthode -
ConnectWaitHandler( <ИмяПроцедуры>, <Интервал>, <Однократно>).
- Nom de la procédure— le nom de la procédure connectée en tant que gestionnaire d'attente. Nom de la procédure exportée d'un module d'application géré (un module d'application standard) ou d'un module partagé global. La procédure doit être localisée sur le client.
- Intervalle— période entre les exécutions des opérations en secondes.
- Une fois- comment terminer la tâche, une fois ou non.
ConnectWaitHandler, 3600 ) ;
Une vidéo de deux minutes qui montre comment mettre en place une tâche de routine dans le configurateur 1C :