Une erreur irrécupérable s'est produite sur le serveur 1c entreprise. Erreur Windows : erreur d'exécution de la fonction, nous la résolvons en une minute. À quoi ressemble l'erreur d'exécution ?

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

1. Il y a un serveur (x64), avec Office 2016 (x64) installé, il y a 1C 8.3.8 également x64 (ce qui signifie serveur 1C). Les utilisateurs se connectent via le client léger et le client Web.

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

La décision est banale, semble-t-il :) , je ne décrirai pas tout le mécanisme de la façon dont cela est 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 vaut-il mieux choisir : ActiveDocument ou BinaryData ? Bien que pour moi, cela ressemble à quoi choisir Vodka avec bière ou bière avec vodka :) . Une figure, vous devez remplir les documents avec les données de 1C et les transférer au client.

Bon, d'accord, passons aux paroles, je choisis ActiveDocument, je ne décrirai pas tout l'algorithme, je listerai simplement les "pièges" et leur solution. Tout ce qui suit est ma fabrication personnelle et ne prétend en aucun cas être la vérité ultime. Peut-être avez-vous résolu ces problèmes ou les résolvez-vous différemment.

1. Pierre " première". La méthode SaveAs ne fonctionne pas (pour MSWord et MSExcel). Lorsque vous essayez d'écrire BinaryData, 1C plante simplement. Nous regardons le fragment de liste :

MSWord = Layout.Get(); Tentative de document = MSWord.Application.Documents(1); Document.Activate(); //Ensuite, obtenez les données et remplissez le document Word //Obtenez le chemin dans le répertoire temporaire pour y enregistrer le fichier TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //stone commence ici MyDocumentInBinaryData = New BinaryData(NameTime); // bien, ici cette pierre assomme 1C :) MSWord.Application.Quit();

Merci beaucoup.

Créer des dossiers
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
résolu le problème. Sujet clos.

Quelle est la raison? La raison est que le code

MSWord = Layout.Get();

Invoque toujours une instance d'un objet COM (x32) quel que soit le nombre de bits Office installé. Vous êtes-vous déjà demandé pourquoi les fichiers avec l'extension docx, xlsx ne peuvent pas être insérés dans la mise en page ActoveDocument

cela peut également être vérifié via le Gestionnaire des tâches, mais le fait est que la mise en page ActiveDocument appelle implicitement une instance de 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éécrire le code de telle manière

// récupère le nom du fichier temporaire TempFile = GetTemporaryFileName("doc"); // ce code appellera exactement une instance COM du nombre de bits requis, dans notre cas x64 Word = New COMObject("Word.Application"); word.displayalerts = 0 ; DocumentN = Word.Application.Documents.Add(); DocumentH.SaveAs(TimeFile,0); Word.Quit(); // alors tout est pareil Layout = PrintManagement.PrintFormLayout("Document.Equipment Transfer Certificate."+LayoutName); MSWord = Layout.Get(); Tentative de document = MSWord.Application.Documents(1); Document.Activate(); // faites quelque chose ici, remplissez les données // ici nous réenregistrons notre fichier de COM x62 à COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentH = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentH.SaveAs(TimeFile,0); DocumentN.Close(); msword = non défini ; Exception // Si une erreur se produit, les données d'erreur sont affichées et l'objet est fermé. Info = ErreurInfo(); Usage généralClientServer.NotifyUser("Erreur - Code d'erreur "+Information.Description+" - "+Abbr(Information.SourceString)); MSWord.Application.Quit(); fin de tentative ;

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'ensemble document et enregistrez-le dans un fichier préalablement préparé.

Tout de même, mais uniquement pour Excel

TempFile = GetTempFileName("xls"); Excel = New COMObject("Excel.Application"); Excel.DisplayAlerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookH.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintControl.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); WorkbookH = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Essayer WBook = MSExcel.Application.Workbooks(1); Feuille = WBook.WorkSheets(1); Leaf.Activate(); // faire quelque chose, remplir avec les données de 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookH.Save(); BookN.Close(); Exception // Si une erreur se produit, les données d'erreur sont affichées et l'objet est fermé. Info = ErreurInfo(); Usage généralClientServer.NotifyUser("Erreur - Code d'erreur "+Information.Description+" - "+Abbr(Information.SourceString)); MSExcel.Application.Quit(); fin de tentative ;

Voici " première"Stone j'ai résolu, sur un serveur x64 avec Office x64, tout fonctionne comme sur des roulettes, aucune erreur et aucun besoin de créer des dossiers et tout.

Un rocher " seconde". extrait de code

TempFile = GetTempFileName("xls");

il n'est pas très bon, car il écrit dans le dossier: "c:\Users\ what's there....", en général, ce dossier est toujours blacklisté par tous les pare-feu, antivirus, etc., etc., au moins ouvrez le Centre de contrôle de sécurité Word ou Excel. Regardons là aussi

vous devez jouer avec, sinon il y a une possibilité d'erreurs "étranges". Par conséquent, je suggère ce qui suit :

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

ici nous stockerons notre mot fini, fichiers excel déjà rempli, bien sûr :

LayoutName - ID de mise en page

Office Document - Value Store, c'est là que nous conservons notre fichier fini

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

MZ =RegistersInformation.TemporaryStorageOffice.CreateRecordManager(); MZ.Objet = Sélection.Référence ; MZ.LayoutName = LayoutName ; MZ.Read(); MZ.Objet = Sélection.Référence ; MZ.LayoutName = LayoutName ; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TempFile)); MZ.Write(); SupprimeFichiers(TempFile);

Ce que nous faisons, nous écrivons le fichier fini dans le registre d'informations, puis supprimons le fichier temporaire lui-même, résolvons le problème "Word, Excel Security Center". Il ne reste plus qu'une chose à montrer au Client (client léger et web) ce fichier fini

3. Pierre " troisième"- transférant le fichier au client, ici je vais juste poster tout le code, j'ai pris quelque chose du BSP, quelque chose de la configuration de démonstration "Managed Application", quelque chose d'Internet, mais en général, voici le code (entièrement )

//////////////////////////////////////////////// / //////////////////////////// // PROCÉDURES ET FONCTIONS DE SERVICE DE BSP &AtServer Function GetLayout() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName ; RecordKey = DataRegisters.Office TemporaryStorage.CreateRecordKey(Nouvelle Structure("Object,LayoutName",ObjectReference,LayoutName)); // Adresse = GetNavigationLink(RecordKey,"OfficeDocument"); Adresse de retour; EndFunction // Procédure &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Export ; // EndProcedure &OnClient Procedure AfterFilesReceived(SubmittedFiles, AdditionalParameters) Export If NOT SubmittedFiles=Undefined Then For Each Description From SubmittedFiles Loop OpAfterApplicationStart = NewAlertDescription("AfterApplicationStart", ThisObject, Description.Name); StartApplicationStart(OpAfterApplicationStart, Description.Name); FinCycle ; Fin si; EndProcedure &OnClient Procedure AfterDirectory Selection(SelectedFiles,CommandName) Export If FilesSelected = Undefined Then Return; Fin si; Répertoire = fichiers sélectionnés ; Usage généralCallServer.SaveWorkingDirectory(Directory); Si CommandName = "Facture" Then LayoutName = "Facture" EndIf ; DataStructure.Insert("Catalogue", Répertoire); ConnectWaitingHandler("Connected_TransferFileToClient",5,True); EndProcedure &OnClient Procedure OpenFilesViaExtension(CommandName) OpAfterCatalog Selection = New AlertDescription("AfterCatalog Selection", ThisObject, CommandName); Répertoire = Usage généralCallServer.GetWorkingDirectory(); Si Directory = Undefined OR Directory = "" Then Dialog = NewFileChoiceDialog(FileChoiceDialogMode.CatalogChoice); Dialog.Title = НStr("ru = "Sélectionnez un répertoire pour le stockage temporaire des fichiers"", "ru"); Dialog.Show(Sélection OpAfterCatalog); Sinon SelectedFiles = Nouveau tableau ; SelectedFiles.Add(Directory); ExecuteAlertProcessing(OpAfterSelectingCatalog, SelectedFiles); Fin si; EndProcedure &OnClient Procedure HandleConnectionFileWorkingExtensions(ExtensionConnected,AdditionalParameters) Export If ExtensionConnected Then OpenFilesViaExtension(AdditionalParameters.CommandName); Fin si; EndProcedure &AtClient Procédure Connected_PassFileClient() Adresse = GetLayout(); Si adresse<>Undefined Then DisableWaitingHandler("Connected_PassFileClient"); DocumentNumber = DataStructure.DocumentNumber ; Répertoire = DataStructure.Catalog ; LayoutName = DataStructure.LayoutName ; PathToFile = Directory+"\"+LayoutName+"_#"+DocumentNumber+".xls" ; Description = Nouvelle description du fichier en cours de transfert (chemin d'accès au fichier, adresse) ; TransferredFiles = Nouveau tableau ; Fichierstransférés.Ajouter(Description); StartReceiveFiles(NewNotificationDescription("AfterReceivedFiles", ThisObject), TransferredFiles, "", False); Fin si; EndProcedure &AtServer Procedure ExecutePrintServer() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName ; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ArrayObjects = Nouveau tableau ; ArrayObjects.Add(ObjectReference); Documents.InvoiceEquipment.PrintInvoice(ArrayObjects,LayoutName,True); EndProcedure &OnClient Procedure Connected_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connected_ExecutePrintCommand(Command) Reference = Items.List.CurrentData.Reference; DataStructure = Nouvelle structure ; DataStructure.Insert("Objet", Lien); DataStructure.Insert("LayoutName", "Facture"); ConnectWaitingHandler("Connected_PerformPrint", 1, Vrai); CommandDescription = PrintControlClient.PrintCommandDescription(Command.Name,FormName); StartInstallingFileWorkingExtensions(); StartFileExtensionConnection(New AlertDescription("ProcessFileExtensionConnection",ThisObject,New Structure("CommandName",CommandDescription.Identifier)))); EndProcedure // Fin de StandardSubsystems.Print

Quelques explications :

1. Tout d'abord, le client travaille pour nous à la fois en mode Thin et Web, nous définissons donc à l'avance les valeurs suivantes dans les propriétés du configurateur :

Pour éviter les problèmes lors de l'utilisation du 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, nous connectons l'extension pour travailler avec des fichiers (rappelez-vous qu'en mode Client léger, cette extension est toujours activée). Et par code :

nous transférons le fichier au Client en utilisant le mécanisme NavigationLink, nous obtenons les messages suivants dans le navigateur (Slim fonctionne tout seul) :

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

Concernant Word, des fichiers Excel à insérer sous forme de BinaryData ? 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 écrire à nouveau sous la forme de données binaires (vodka avec bière ou bière avec vodka)

2. Soit il faut récupérer le layout BinaryData côté Client et le remplir là, MAIS l'objet COM n'est supporté que par le navigateur IE et ensuite avec des danses avec les paramètres ActiveX, les autres navigateurs ont depuis longtemps abandonné l'utilisation d'ActiveX

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

Mais tout le monde n'a pas essayé de "réparer" la configuration. Dans de tels cas, ils recherchent généralement frénétiquement des sauvegardes ou (de manière plus compliquée) recourent à l'aide de l'utilitaire GComp, qui "selon la légende" peut guérir MD s'il est simplement "désassemblé" puis "assemblé" en utilisant les fonctions du programme. En effet, ça l'est. Mais pas dans tous les cas... C'est justement un tel cas que je voudrais analyser dans cet article.

Donc, données initiales :

- "configuration cassée" ;

Utilitaire MDDiags

- Loindirecteur et plugin docfileNavigateur à lui. Avec ce plugin, vous pouvez entrer dans le MD et travailler avec ses objets.

Comme le configurateur refuse même d'afficher cette "erreur fatale", nous lançons MDDiags pour le ou les découvrir.

Après avoir démarré 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 traiter quand ce sera compréhension commune comment trouver l'erreur et comment la corriger.

1. Erreur>(\\Journal)

L'utilitaire a précisé que l'erreur est observée pour 2 objets "\\ Journal \ Journal _ Numéro 212" et "\\ Journal \ Journal _ Numéro 860". Allez maintenant àLoin et regardez les objets qui s'y trouvent.


Nous voyons ici beaucoup d'objets et un seul fichier "Container.Contents". Il stocke les descripteurs de ces mêmes objets. Après avoir examiné attentivement le contenu du fichier, nous comprenons qu'il n'y a pas de descripteurs pour nos 2 objets.

Ajoutez des descripteurs comme indiqué dans la figure.

Problème résolu.

2. Erreur DOCUMENT.Facture (\\Texte saisi\Aide de l'utilisateur_Numéro434\récipient.Contenu)

Revenons à MD chemin spécifié. Ouverture du dossier récipient. contenu et regardez de plus près 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.TypicalOperations(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Ouvrez le fichier au chemin spécifié et regardez attentivement... Tous les paramètres doivent être entre guillemets. Un des paramètres a un "espace" au lieu d'un "guillemet" - corrigez-le (cette erreur peut se produire lorsque la description d'un des éléments de l'objet (champs, boutons, liste de valeurs, etc.) contient un simple ou un double citation, ou certains de "caractères spéciaux").

On recommence MDDiags et voir que tout erreurs précédentes a 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é (jusqu'à présent), et le dossier où nous devons mettre la configuration analysée en objets, puis toutes les cases à cocher par défaut, la seule chose est de cocher la case "supprimer les modèles de table vides" sur le " Paramètres communs", cliquez sur "Décompiler".

Ensuite, sans plus tarder, allez dans l'onglet "compilation", définissez le répertoire source sur celui dans lequel la configuration vient d'être parsée et indiquez le chemin vers le nouveau MD.

L'utilitaire collectera tout en toute sécurité.

Il ne nous reste plus qu'à utiliser Far Manager pour remplacer le fichier correspondant à l'intérieur du MD "cassé" par le même que celui "juste construit" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Vérifiez à nouveau la configuration avec MDDiags.

Tout semble OK. Maintenant, nous allons dans le configurateur et faisons "tester et corriger la sécurité des informations" pour nous assurer qu'il n'y a plus d'erreurs.

C'est tout. Permettez-moi de tirer ma révérence. Et que la Force soit avec vous !

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

Bonne journée!. La dernière fois que nous avons compris comment résoudre "Erreur lors de l'application des transformations. Vérifiez l'exactitude des chemins des transformations spécifiées", aujourd'hui, je vais vous parler d'une autre conséquence à cause de cela. Le sujet de la publication sera la situation où vous ne pouvez pas installer la plate-forme 1C et vous recevrez un message : Erreur Windows : erreur d'exécution de la fonction, nous décidons en une minute, je suis sûr que le sujet sera utile à beaucoup.

À quoi ressemble l'erreur d'exécution ?

Comme je l'ai écrit ci-dessus, cela se produit sur mon serveur de terminaux Windows Server 2012 R2 lorsque j'essaie d'installer la plate-forme 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

Après quoi, vous recevrez la notification suivante :

Comme dans la plupart des cas avec la plate-forme 1C, tout est résolu avec un petit correctif 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 avec n'importe quel éditeur de texte, faites un clic droit dessus et sélectionnez "Ouvrir avec", puis un éditeur qui vous convient.

Trouvez le paramètre dans le fichier 1CEStat.cfg, vous devez le supprimer et enregistrer le fichier.

Si vous regardez les journaux dans l'observateur d'événements, vous verrez les événements suivants.

ID d'événement 1013 : Produit : 1C:Enterprise 8.2 (8.2.19.130) -- Erreur Windows : erreur d'exécution de la 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 :

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.

2022 wisemotors.com. Comment ça fonctionne. Fer. Exploitation minière. Crypto-monnaie.