Erreur Windows : erreur d’exécution de fonction, résolue en une minute. Erreur Windows : erreur d'exécution de fonction, résolue en une minute Erreur irrécupérable de vérification de configuration 1s 7.7

Alors, quel est l’intérêt de mon article ?

1. Il existe un serveur (x64), avec Bureau installé 2016 (x64), il existe 1C 8.3.8 également x64 (c'est-à-dire serveur 1C). Les utilisateurs se connectent via un client léger et un client Web.

2. Il existe un certain nombre de contrats et de factures types émis (préparés) par le service commercial. Il y a une police, un paragraphe, etc., bien sûr, tout est conçu en Word, Excel 2016 (x64), naturellement, il n'y a aucune envie de dessiner tout ça en 1C, mais il y a une envie de le mettre au format ActiveDocument mises en page

La solution semble banale :) , je ne décrirai pas tout le mécanisme, comment cela se fait, comment les données sont remplies de 1C dans la mise en page ActiveDocument - je pense que vous le savez parfaitement sans moi. Mais au cours des travaux, il s'est avéré que tout n'est pas aussi fluide dans le domaine des objets COM, à savoir :

2. Quelle option est préférable de choisir : ActiveDocument ou Binary Data ? Bien que pour moi, cela ressemble à choisir Vodka avec de la bière ou Bière avec de la vodka :) . Ce n'est pas grave, vous devez remplir les documents avec les données de 1C et les transférer au Client.

Bon, d'accord, sautons les paroles, je choisis ActiveDocument, je ne décrirai pas l'intégralité de l'algorithme, je vais juste lister les pièges et leur solution. Tout ce qui est indiqué ci-dessous est ma spéculation personnelle et ne prétend en aucun cas être la vérité ultime. Vous avez peut-être résolu ces problèmes ou les avez résolus différemment.

1. Pierre " d'abord". La méthode SaveAs ne fonctionne pas (pour MSWord et MSExcel). Lorsque vous essayez d'écrire des données binaires, 1C plante simplement. Regardez le fragment de liste :

MSWord = Layout.Get(); Essayez Document = MSWord.Application.Documents(1); Document.Activate(); //Ensuite, nous récupérons les données et remplissons le document Word //Obtenons le chemin dans le répertoire temporaire pour y enregistrer le fichier TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //la pierre commence ici MyDocumentInBinaryData = New BinaryData(NameTime); //Eh bien, ici cette pierre est renversée par 1C :) MSWord.Application.Quit();

Merci beaucoup.

Création de dossiers
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
le problème a été résolu. Sujet clos.

Quelle est la raison? La raison est que le code

MSWord = Layout.Get();

Appelle toujours une instance d’un objet COM (x32), quel que soit le nombre de bits qu’Office est installé. Vous êtes-vous déjà demandé pourquoi vous ne pouvez pas insérer de fichiers avec l'extension docx, xlsx dans la mise en page ActoveDocument ?

cela peut également être vérifié via le Gestionnaire des tâches, mais le fait est que la disposition ActiveDocument appelle implicitement une instance COM (x32) et donc toutes les manipulations ultérieures doivent être effectuées en tenant compte de cette fonctionnalité.

1. Soit le serveur et tous les logiciels doivent être x32. Ensuite, vous n’avez rien à faire (dans le sens de réécrire le code)

2. Soit réécrivez le code de cette façon

// récupère le nom du fichier temporaire TimeFile = GetTemporaryFileName("doc"); // ce code appellera définitivement une instance COM de la profondeur de bits requise, dans notre cas x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0 ; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // alors tout est comme avant Layout = Print Management.Printing Form Layout ("Document. Equipment Transfer Act." + Layout Name); MSWord = Layout.Get(); Essayez Document = MSWord.Application.Documents(1); Document.Activate(); // ici nous faisons quelque chose, remplissons les données // ici nous allons réenregistrer notre fichier de COM x62 vers COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DocumentN.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Non défini ; Exception // Si une erreur se produit, les données d'erreur sont imprimées et l'objet est fermé. Informations = ErreurInfo(); GeneralPurposeClientServer.NotifyUser("Erreur - "+Information.Description+" code d'erreur - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); FinTentative ;

Je pense que tout est clair ici, nous avons d'abord créé une instance COM de la profondeur de bits requise, créé un fichier vide et l'avons enregistré dans un dossier temporaire, puis nous travaillons avec COM x32, le remplissons de données et enfin copions le contenu de l'intégralité document et enregistrez-le dans un fichier préalablement préparé.

Tout est pareil, mais uniquement pour Excel

TimeFile = GetTimeFileName("xls"); Excel = Nouveau COMObject("Excel.Application"); Excel.Displayalerts = 0 ; BookH = Excel.WorkBooks.Add(); FeuilleN = LivreN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); LivreN = MSExcel.Application.Workbooks.Open(TimeFile); FeuilleN = LivreN.WorkSheets(1); Essayer WBook = MSExcel.Application.Workbooks(1); Feuille = WBook.WorkSheets(1); Feuille.Activate(); // nous faisons quelque chose, remplissons-le avec les données de 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Exception // Si une erreur se produit, les données d'erreur sont imprimées et l'objet est fermé. Informations = ErreurInfo(); GeneralPurposeClientServer.NotifyUser("Erreur - "+Information.Description+" code d'erreur - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); FinTentative ;

Voici " d'abord«J'ai décidé, sur un serveur x64 avec Office x64, tout fonctionne exactement comme sur des roulettes, sans erreurs et il n'est pas nécessaire de créer des dossiers et tout le reste.

Pierre " deuxième". extrait de code

TimeFile = GetTimeFileName("xls");

manger n'est pas très bon, car il écrit dans le dossier : "c:\Users\ qu'est-ce qu'il y a...", en général, ce dossier est toujours sur la liste noire de tous les pare-feu, antivirus, etc., etc., à ouvrez au moins le centre de contrôle de sécurité dans Word ou Excel. Regardons là aussi

Vous devrez bricoler cela, sinon il y a une possibilité d'apparition d'erreurs « étranges ». C'est pourquoi je suggère ce qui suit :

1. Ouvrez le configurateur et ajoutez un nouveau registre d'informations

ici nous stockerons notre Parole finie, Fichiers Excel déjà rempli, bien sûr :

Nom de la mise en page - ID de la mise en page

DocumentOffice - Value Storage, ici nous gardons notre fichier fini

2. Nous ajoutons le code ci-dessus comme suit :

MH = Informations Registers.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Sélection.Link ; MZ.LayoutName = LayoutName ; MZ.Read(); MH.Object = Sélection.Link ; MZ.LayoutName = LayoutName ; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); Supprimer les fichiers (TimeFile);

Ce que nous faisons, c'est écrire le fichier terminé dans le registre d'informations, puis supprimer le fichier temporaire lui-même, résolvant ainsi le problème « Word, Excel Security Center ». Il ne reste plus qu'à montrer ce fichier terminé au Client (clients légers et web)

3. Pierre " troisième" - transférer un fichier vers le client, ici je posterai juste tout le code, certains extraits du BSP, certains de la configuration de démonstration « Application gérée », certains d'Internet, mais en général voici le code (dans son intégralité)

///////////////////////////////////////////// // ////////////////////////// // PROCÉDURES ET FONCTIONS DE SERVICE BSP &OnServer Function GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName ; Clé d'enregistrement = Registres d'informations.TemporaryOfficeStorage.CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Adresse = GetNavigationLink(RecordKey,"OfficeDocument"); Adresse de retour; EndFunction // &OnClient Procédure AfterApplicationStart(ReturnCode, ApplicationName) Exportation ; // Fin de la procédure &Sur la procédure client Après réception des fichiers (fichiers transférés, paramètres supplémentaires) Exporter si NON Fichiers transmis = Non défini Alors Pour chaque description du cycle de fichiers transmis OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Description.Name); Fin du cycle ; fin si; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Exporter si SelectedFiles = Undefined Then Return ; fin si; Répertoire = Fichiers sélectionnés ; GeneralPurposeServerCall.SaveWorkingDirectory(Répertoire); Si CommandName = "Facture" Then LayoutName = "Facture" EndIf ; DataStructure.Insert("Répertoire", Répertoire); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Fin de la procédure &Sur la procédure client Ouvrir les fichiers via l'extension (nom de la commande) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Répertoire = GeneralPurposeCallServer.GetWorkingDirectory(); Si Directory = Non défini OU Directory = "" Then Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Sélection d'un répertoire pour le stockage temporaire des fichiers"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Sinon SelectedFiles = Nouveau tableau; SelectedFiles.Add (Répertoire); Effectuer le traitement des alertes (OpAfterSelectingDirectory, SelectedFiles) ; fin si; Fin de la procédure &Sur la procédure client ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); fin si; EndProcedure &OnClient Procedure Connected_PassFileToClient() Adresse = GetLayout(); Si adresse<>Undefined Then DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber ; Répertoire = DataStructure.Directory ; LayoutName = DataStructure.LayoutName ; FilePath = Répertoire+"\"+LayoutName+"_No"+DocumentNumber+.xls"; Description = Nouvelle description du fichier transmis (chemin d'accès au fichier, adresse) ; TransferredFiles = Nouveau tableau ; TransferredFiles.Add(Description); StartReceiveFiles(NewDescriptionAlerts("AfterReceiveFiles", ThisObject), TransferredFiles, "", False); fin si; Fin de procédure &Sur la procédure serveur ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName ; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Nouveau tableau ; Tableau d'objets.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient Procédure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procédure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = nouvelleStructure ; DataStructure.Insert("Objet", Lien); DataStructure.Insert("LayoutName", "Facture"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Commencez à installer l'extension FileWorking (); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // Fin de StandardSubsystems.Print

Quelques précisions :

1. Premièrement, notre client fonctionne à la fois en mode Thin et Web, nous définissons donc au préalable les valeurs suivantes dans les propriétés du configurateur :

Pour éviter les problèmes lorsque vous travaillez avec le navigateur

2. Nous utilisons des gestionnaires d'attente pour éviter les problèmes de synchronisation des appels (cela ne s'applique qu'au mode Web)

3. Et enfin, connectez l'extension pour travailler avec les fichiers (rappelez-vous qu'en mode Thin Client, cette extension est toujours activée). Et grâce au code :

nous transférons le fichier au Client à l'aide du mécanisme NavigationLink, nous recevons les messages suivants dans le navigateur (Thin fonctionne tout seul) :

Eh bien, cela semble être tout. J'espère que cela aidera quelqu'un...

Concernant Word, les fichiers Excel insérés en données binaires ? quel est le problème?

1. Nous devons soit extraire ces données binaires de la mise en page et les remplir avec les données de 1C et ATTENTION les réécrire sous forme de données binaires (Vodka avec bière ou bière avec vodka)

2. Soit il faut récupérer la mise en page BinaryData côté client et la remplir là, MAIS l'objet COM n'est pris en charge que par le navigateur IE puis avec les danses avec les paramètres ActiveX, les autres navigateurs ont depuis longtemps abandonné l'utilisation d'ActiveX

Je pense que chacun des "sept" programmeurs a rencontré une telle erreur au moins une fois. Cela peut se produire soit lors de la « fusion de configurations », soit lors du « test et correction de la sécurité des informations ».

Mais tout le monde n’a pas essayé de « corriger » la configuration. Dans de tels cas, ils recherchent généralement frénétiquement des sauvegardes ou (une méthode plus complexe) recourent à l'aide de l'utilitaire GComp, qui « selon la légende » peut guérir MD s'il est simplement « démonté » puis « assemblé » à l'aide de les fonctions du programme. En effet, il en est ainsi. Mais pas dans tous les cas… C’est exactement le cas que je voudrais examiner dans cet article.

Ainsi, les données initiales :

- "configuration cassée" ;

Utilitaire MDDiags

- LoinDirecteur et plugin Fichier DocNavigateur à lui. En utilisant ce plugin, vous pouvez accéder à l'intérieur du MD et travailler avec ses objets.

Puisque le Configurateur refuse même d'afficher cette "erreur non corrigible", nous exécutons MDDiags pour l'identifier ou les identifier.

Après avoir lancé l'utilitaire, sélectionnez la configuration souhaitée, puis tous les paramètres par défaut... exécutez, analysez, obtenez le résultat.

Vous pouvez avoir d'autres erreurs, mais je pense que vous serez en mesure de les comprendre une fois que vous aurez compris comment trouver l'erreur et comment la corriger.

1. Erreur>(\\Journal)

L'utilitaire a clairement indiqué que l'erreur avait été observée pour 2 objets "\\ Journal\Journal_Number 212" et "\\Journal\Journal_Number 860". Passons maintenant àLoin et regardez les objets là-bas.


On voit ici de nombreux objets et un fichier "Container.Contents". Il stocke les descripteurs de ces mêmes objets. Après avoir étudié attentivement le contenu du fichier, nous comprenons qu'il n'existe aucun descripteur pour nos 2 objets.

Ajoutez des descripteurs comme indiqué dans la figure.

Problème résolu.

2. Erreur DOCUMENT.Reçu facture (\\Texte saisi\Aide utilisateur_Numéro434\Récipient.Contenu)

Nous retournons à MD par le chemin indiqué. Ouvrez le fichier " Récipient. Contenu " et examinez attentivement son contenu.

Les mots étranges Cgntainer, Contentq, Prmgram attirent immédiatement votre attention. C'est vrai, ce sont des identifiants mal orthographiés. Il n'est pas difficile de deviner comment cela devrait être correct (si c'est difficile, passez à la branche suivante, ouvrez le même fichier « Container.Contents » et voyez comment il doit être écrit).

3. ErreurANNUAIRE.Opérations typiques(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Ouvrez le fichier au chemin spécifié et regardez attentivement... Tous les paramètres doivent être mis entre guillemets. L'un des paramètres comporte un « espace » au lieu d'un « guillemet » - nous le corrigeons (cette erreur peut survenir lorsque la description d'un des éléments d'un objet (champ, bouton, liste de valeurs, etc.) contient un seul ou double citation, ou l'un des "caractères spéciaux").

Relançons MDDiags et on voit que toutes les erreurs précédentes ont disparu, mais une autre erreur est apparue.

Il est maintenant temps de se tourner vers l'utilitaire GComp et de vérifier la « légende »...

Nous lançons l'utilitaire, sélectionnons notre MD cassé (pour l'instant), et le dossier où nous devons mettre la configuration triée par objets, puis toutes les cases sont par défaut, la seule chose est de cocher la case « supprimer » modèles vierges tables" dans l'onglet "Paramètres généraux", cliquez sur "Décompiler".

Puis, sans plus attendre, allez dans l'onglet « compilation », définissez le répertoire source sur celui dans lequel vous venez d'analyser la configuration et indiquez le chemin d'accès au nouveau MD.

Le service public assemblera tout en toute sécurité.

Il ne nous reste plus qu'à Gestionnaire lointain remplacez le fichier correspondant à l'intérieur du MD « cassé » par le même que celui « juste assemblé » (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Nous vérifions à nouveau la configuration en utilisant MDDiags.

Tout semble aller bien. Maintenant, nous allons dans le configurateur et effectuons des « tests et corrections de la sécurité des informations » pour nous assurer qu'il n'y a plus d'erreurs.

C'est tout. Laissez-moi prendre congé. Et que la Force soit avec vous !)

P.S. Un merci spécial aux développeurs des utilitaires utilisés dans l'exemple - ils nous aident tous tellement à vivre...

Bon après-midi!. La dernière fois, nous avons examiné comment résoudre "Erreur lors de l'application des transformations. Vérifiez l'exactitude des chemins des transformations spécifiées", je vais vous parler aujourd'hui d'une autre conséquence qui en résulte. Le sujet de la publication sera une situation où vous ne pourrez pas installer la plateforme 1C et vous recevrez un message : Erreur Windows : erreur d'exécution de la fonction, nous le résolvons en une minute, je suis sûr que le sujet sera utile à beaucoup.

A quoi ressemble une erreur d’exécution de fonction ?

Comme je l'ai écrit ci-dessus, je rencontre ce problème sur un serveur de terminaux Windows Server 2012 R2 lorsque j'essaie d'installer la plateforme 1C 8.2. Après avoir exécuté le fichier setup.exe, la fenêtre de l'assistant d'installation apparaît, et immédiatement une fenêtre supplémentaire avec le message :

Erreur Windows : erreur d'exécution de la fonction

Pour lequel vous recevrez cette notification :

Comme dans la plupart des cas avec la plateforme 1C, tout peut être résolu avec une petite correction dans les fichiers de configuration. Tout d'abord, activez l'affichage des dossiers cachés, car le fichier dont nous avons besoin n'est pas visible par défaut. Ensuite, sur le lecteur C:\, recherchez le dossier Données de programme.

C:\ProgramData\1C\1CEStat\1CEStat.cfg

Le fichier 1CEStat.cfg peut être ouvert à l'aide de n'importe quel éditeur de texte, faites un clic droit dessus et sélectionnez « Ouvrir avec », puis un éditeur pratique.

Dans le fichier 1CEStat.cfg, recherchez le paramètre, vous devez le supprimer et enregistrer le fichier.

Si vous consultez les journaux dans l'observateur d'événements, vous verrez des événements comme ceux-ci.

Code d'événement 1013 : Produit : 1C:Enterprise 8.2 (8.2.19.130) -- Erreur Windows : erreur d'exécution de fonction.

ID d'événement 11708 : Produit : 1C:Enterprise 8.2 (8.2.19.130) -- L'opération d'installation a échoué.

Après avoir supprimé le paramètre ADMINISTRATIONFUNC=0, nous avons déjà reçu :

ID d'événement 1033 : Windows Installer a installé le produit. Produit : 1C : Entreprise 8.2 (8.2.19.130). Version : 8.2.19.130. Langue : 1049. Fabricant : 1C. Installation terminée avec le statut : 1603.




Haut