Errore Windows: errore di esecuzione della funzione, risolto in un minuto. Errore Windows: errore esecuzione funzione, risolto in un minuto Errore irreversibile controllo configurazione 1s 7.7

Allora, qual è lo scopo del mio articolo?

1. C'è un server (x64), con Office installato 2016 (x64), c'è 1C 8.3.8 anche x64 (che significa server 1C). Gli utenti si connettono sia tramite un thin client che tramite un client web.

2. Esistono numerosi contratti e fatture standard emessi (preparati) dal reparto vendite. C'è un carattere, un paragrafo, ecc., ovviamente, tutto è progettato in Word, Excel 2016 (x64), naturalmente, non c'è il desiderio di disegnare tutto questo in 1C, ma c'è il desiderio di metterlo nel formato ActiveDocument layout

La soluzione sembra banale :) , Non descriverò l'intero meccanismo, come è fatto, come i dati vengono inseriti da 1C nel layout ActiveDocument - penso che tu lo sappia perfettamente senza di me. Ma durante il lavoro si è scoperto che non tutto è così fluido nel campo degli oggetti COM, vale a dire:

2. Quale opzione è meglio scegliere: ActiveDocument o Binary Data? Anche se a me sembra un po' come scegliere Vodka With Beer o Beer With Vodka :) . Nessun grosso problema, devi riempire i documenti con i dati di 1C e trasferirli al Cliente.

Bene, ok, saltiamo il testo, scelgo ActiveDocument, non descriverò l'intero algoritmo, elencherò solo le insidie ​​e la loro soluzione. Tutto quanto riportato di seguito è una mia speculazione personale e non pretende in alcun modo di essere la verità ultima. Potresti aver risolto questi problemi o risolverli in modo diverso.

1. Pietra " Primo". Il metodo SaveAs non funziona (sia per MSWord che per MSExcel). Quando si tenta di scrivere dati binari, 1C semplicemente si blocca. Guarda il frammento dell'elenco:

MSWord = Layout.Get(); Prova Document = MSWord.Application.Documents(1); Document.Activate(); //Successivamente, otteniamo in qualche modo i dati e compiliamo il documento Word //Ottimiamo il percorso nella directory temporanea per salvare lì il file TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //la pietra inizia qui MyDocumentInBinaryData = New BinaryData(NameTime); //beh, qui questa pietra viene eliminata da 1C :) MSWord.Application.Quit();

Molte grazie.

Creazione di cartelle
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
il problema è stato risolto. Argomento chiuso.

Qual è il motivo? Il motivo è che il code

MSWord = Layout.Get();

Chiama sempre un'istanza di un oggetto COM (x32) indipendentemente dal bit di Office installato. Ti sei mai chiesto perché non puoi inserire file con estensione docx, xlsx nel layout ActoveDocument?

questo può essere verificato anche tramite il Task Manager, ma il fatto è che il layout ActiveDocument chiama implicitamente un'istanza COM (x32) e quindi tutte le ulteriori manipolazioni devono essere fatte tenendo conto di questa funzionalità.

1. Il server e tutto il software devono essere x32. Quindi non devi fare nulla (nel senso di riscrivere il codice)

2. Riscrivi il codice in questo modo

// ottiene il nome del file temporaneo TimeFile = GetTemporaryFileName("doc"); // questo codice chiamerà sicuramente un'istanza COM con la profondità di bit richiesta, nel nostro caso x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Parola.Esci(); // quindi tutto è come prima Layout = Gestione stampa. Layout modulo di stampa ("Atto trasferimento documento. Attrezzatura." + Nome layout); MSWord = Layout.Get(); Prova Document = MSWord.Application.Documents(1); Document.Activate(); // qui facciamo qualcosa, inserisci i dati // qui salveremo nuovamente il nostro file da COM x62 a COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Non definito; Eccezione // Se si verifica un errore, i dati dell'errore vengono stampati e l'oggetto viene chiuso. Informazioni = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Errore - "+Information.Description+" codice errore - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Finetentativo;

Penso che qui sia tutto chiaro, prima abbiamo creato un'istanza COM con la profondità di bit richiesta, abbiamo creato un file vuoto e lo abbiamo salvato in una cartella temporanea, quindi lavoriamo con COM x32, lo riempiamo di dati e infine copiamo il contenuto dell'intero documento e salvarlo in un file precedentemente preparato.

Tutto è uguale, ma solo per Excel

TimeFile = GetTimeFileName("xls"); Excel = Nuovo COMObject("Excel.Applicazione"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); FoglioN = LibroN.Foglidilavoro(1); BookN.SaveAs(TimeFile, -4143); Excel.Esci(); Layout = PrintManagement.PrintFormLayout("Fattura Document.Attrezzature."+LayoutName); MSExcel = Layout.Get(); LibroN = MSExcel.Application.Workbooks.Open(TimeFile); FoglioN = LibroN.Foglidilavoro(1); Prova WBook = MSExcel.Application.Workbooks(1); Foglio = WBook.WorkSheets(1); Foglio.Attiva(); // facciamo qualcosa, riempiamolo con i dati da 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); PrenotaN.Salva(); PrenotaN.Chiudi(); Eccezione // Se si verifica un errore, i dati dell'errore vengono stampati e l'oggetto viene chiuso. Informazioni = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Errore - "+Information.Description+" codice errore - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Finetentativo;

Ecco qui " Primo“Ho deciso subito, su un server x64 con Office x64 funziona tutto esattamente come un orologio, senza errori e non c'è bisogno di creare cartelle e tutto il resto.

Calcolo " secondo". frammento di codice

TimeFile = GetTimeFileName("xls");

mangiare non è molto buono, perché scrive nella cartella: “c:\Users\ cosa c'è...”, in generale questa cartella è sempre nella lista nera di tutti i firewall, antivirus, ecc. ecc., su almeno aprire il centro di controllo sicurezza in Word o Excel. Guardiamo anche lì

Dovrai armeggiare con questo, altrimenti c'è la possibilità che appaiano errori "strani". Pertanto suggerisco quanto segue:

1. Aprire il Configuratore e aggiungere un nuovo Registro Informazioni

qui conserveremo la nostra Parola compiuta, File Excel già compilato, ovviamente:

NomeFormato: ID formato

DocumentOffice - Value Storage, qui conserviamo il nostro file finito

2. Aggiungiamo il codice sopra come segue:

MH = Registri di informazioni.TemporaryStorageOffice.CreateRecordManager(); MH.Oggetto = Selezione.Link; MZ.NomeLayout = NomeLayout; MZ.Leggi(); MH.Oggetto = Selezione.Link; MZ.NomeLayout = NomeLayout; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Scrivi(); EliminaFile(FileTempo);

Quello che facciamo è scrivere il file finito nel registro delle informazioni e quindi eliminare il file temporaneo stesso, risolvendo il problema “Word, Excel Security Center”. Non resta che mostrare questo file finito al Cliente (thin client e web client)

3. Pietra " terzo" - trasferendo un file al client, qui mi limiterò a postare tutto il codice, parte preso dal BSP, parte dalla configurazione demo “Managed Application”, parte da Internet, ma in generale ecco il codice (nella sua intero)

/////////////////////////////////////////////// // ////////////////////////// // PROCEDURE E FUNZIONI DEL SERVIZIO BSP &OnServer Funzione GetLayout() ObjectLink = DataStructure.Object; NomeLayout = DataStructure.NomeLayout; Chiave record = Registri informazioni.TemporaryOfficeStorage.CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Indirizzo = GetNavigationLink(RecordKey,"OfficeDocument"); Indirizzo di ritorno; EndFunction // Procedura &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Esporta; // Fine della procedura &Sulla procedura client dopo la ricezione dei file (file trasferiti, parametri aggiuntivi) Esporta se NON trasmessi File = Non definito Quindi Per ogni descrizione del ciclo dei file trasmessi OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Descrizione.Nome); FineCiclo; finisci se; EndProcedure &Procedura OnClient AfterDirectorySelection(SelectedFiles, CommandName) Esporta se SelectedFiles = Non definito Quindi restituisce; finisci se; Directory = File selezionati; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Se CommandName = "Fattura" Then LayoutName = "Fattura" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Fine della procedura &Sulla procedura client Apri file tramite estensione (nome comando) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Directory = GeneralPurposeCallServer.GetWorkingDirectory(); Se Directory = Non definito OR Directory = "" Allora Finestra di dialogo = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Selezione di una directory per l'archiviazione temporanea dei file"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Altrimenti SelectedFiles = Nuova matrice; SelectedFiles.Add(Directory); Eseguire l'elaborazione degli avvisi (OpAfterSelectingDirectory, SelectedFiles); finisci se; Fine della procedura &Sulla procedura client ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); finisci se; EndProcedure &OnClient Procedura Connected_PassFileToClient() Indirizzo = GetLayout(); Se indirizzo<>Non definito Quindi DisableWaitHandler("Connectable_PassFileToClient"); NumeroDocumento = DataStructure.NumeroDocumento; Directory = DataStructure.Directory; NomeLayout = DataStructure.NomeLayout; PercorsoFile = Directory+"\"+NomeLayout+"_No"+NumeroDocumento+".xls"; Descrizione = Nuova Descrizione del File Trasmesso (Percorso del File, Indirizzo); File trasferiti = Nuovo array; TransferredFiles.Add(Descrizione); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); finisci se; Fine della procedura &Sulla procedura server ExecutePrintServer() ObjectLink = DataStructure.Object; NomeLayout = DataStructure.NomeLayout; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Nuovo array; Matrice di oggetti.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Array oggetti,LayoutName,True); EndProcedure &Procedura OnClient Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedura Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; StrutturaDati = nuovaStruttura; DataStructure.Insert("Oggetto", Collegamento); DataStructure.Insert("NomeLayout", "Fattura"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Inizia l'installazione di FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // Fine StandardSubsystems.Print

Alcuni chiarimenti:

1. Innanzitutto, il nostro client funziona sia in modalità Thin che Web, quindi impostiamo in anticipo i seguenti valori nelle proprietà del Configuratore:

Per evitare problemi quando si lavora con il browser

2. Utilizziamo gestori di attesa per evitare problemi con la sincronizzazione delle chiamate (questo vale solo per la modalità Web)

3. Infine, abilitare l'estensione per lavorare con i file (ricordare che in modalità Thin Client, questa estensione è sempre abilitata). E attraverso il codice:

trasferiamo il file al Client utilizzando il meccanismo NavigationLink, riceviamo i seguenti messaggi nel browser (Thin funziona da solo):

Bene, sembra essere tutto. Spero che questo aiuti qualcuno...

Per quanto riguarda Word, file Excel inseriti come dati binari? qual è il problema?

1. Dobbiamo estrarre questi dati binari dal layout e riempirli con i dati da 1C e ATTENZIONE riscriverli sotto forma di dati binari (Vodka With Beer o Beer With Vodka)

2. O dobbiamo ottenere il layout BinaryData sul lato Client e compilarlo lì, MA l'oggetto COM è supportato solo dal browser IE e quindi balla con le impostazioni ActiveX, altri browser hanno abbandonato da tempo l'uso di ActiveX

Penso che ciascuno dei "sette" programmatori abbia riscontrato un errore del genere almeno una volta. Può verificarsi durante la "unione delle configurazioni" o durante il "test e la correzione della sicurezza delle informazioni".

Ma non tutti hanno provato a “aggiustare” la configurazione. In questi casi, di solito cercano freneticamente i backup o (un metodo più complesso) ricorrono all'aiuto dell'utilità GComp, che "secondo la leggenda" può curare MD se viene semplicemente "smontata" e quindi "assemblata" utilizzando le funzioni del programma. In effetti è così. Ma non in tutti i casi... È proprio il caso che vorrei esaminare in questo articolo.

Quindi i dati iniziali:

- "configurazione interrotta";

Utilità MDDiags

- LontanoManager e plug-in DocFileNavigatore a lui. Usando questo plugin, puoi entrare nell'MD e lavorare con i suoi oggetti.

Poiché il Configuratore si rifiuta anche di visualizzare questo "errore non correggibile", corriamo MDDiags per identificarlo o loro.

Dopo aver avviato l'utility, seleziona la configurazione desiderata, quindi tutte le impostazioni predefinite... esegui, analizza, ottieni il risultato.

Potresti avere altri errori, ma penso che sarai in grado di capirli una volta che avrai una comprensione generale di come trovare l'errore e come risolverlo.

1. Errore>(\\Rivista)

L'utilità ha chiarito che l'errore è stato osservato per 2 oggetti "\\ Giornale\Giornale_Numero 212" e "\\Giornale\Giornale_Numero 860". Ora passiamo aLontano e guarda gli oggetti lì.


Vediamo qui molti oggetti e un file "Container.Contents". Memorizza i descrittori di questi stessi oggetti. Dopo aver studiato attentamente il contenuto del file, capiamo che non esistono descrittori per i nostri 2 oggetti.

Aggiungi i descrittori come mostrato nella figura.

Problema risolto.

2. Errore DOCUMENT.Receipt Fattura (\\Testo digitato\Guida utente_Numero434\Contenitore.Contenuti)

Risaliamo MD lungo il sentiero indicato. Apri il file " Contenitore. Contenuti " e osserva attentamente il suo contenuto.

Le strane parole Cgtainer, Contentq, Prmgram attirano immediatamente la tua attenzione. Esatto, questi sono identificatori con errori di ortografia. Non è difficile indovinare come dovrebbe essere corretto (se è difficile, vai al ramo successivo, apri lo stesso file “Container.Contents” e vedi come dovrebbe essere scritto).

3. ErroreDIRECTORY.Operazioni tipiche(\\Subconto\Subconto_Number5870\WorkBook\Flusso di dialogo)

Apri il file nel percorso specificato e guarda attentamente... Tutti i parametri devono essere racchiusi tra virgolette. Uno dei parametri ha uno “spazio” invece di una “virgoletta” - lo correggiamo (questo errore può verificarsi quando la descrizione di uno degli elementi di un oggetto (campo, pulsante, elenco di valori, ecc.) contiene un singolo O doppia virgoletta o uno qualsiasi dei "caratteri speciali").

Lanciamo di nuovo MDDiags e vediamo che tutti gli errori precedenti sono scomparsi, ma è apparso un altro errore.

Ora è il momento di passare all'utilità GComp e controllare la "legenda"...

Lanciamo l'utility, selezioniamo il nostro MD rotto (per ora) e la cartella in cui dovremmo mettere la configurazione ordinata per oggetti, quindi tutte le caselle di controllo sono predefinite, l'unica cosa è selezionare la casella di controllo "elimina" modelli vuoti tabelle" nella scheda "Parametri generali", fare clic su "Decompila".

Quindi, senza ulteriori indugi, vai alla scheda “compilazione”, imposta la directory di origine su quella in cui hai appena analizzato la configurazione e indica il percorso del nuovo MD.

L'utilità assemblerà tutto in sicurezza.

Adesso non ci resta che farlo Direttore lontano sostituire il file corrispondente all'interno dell'MD “rotto” con lo stesso presente in quello “appena assemblato” (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Controlliamo nuovamente la configurazione utilizzando MDDiags.

Sembra che tutto sia a posto. Ora entriamo nel configuratore ed eseguiamo “test e correzione della sicurezza delle informazioni” per assicurarci che non ci siano più errori.

È tutto. Lasciami andare. E che la Forza sia con te!)

PS Un ringraziamento speciale agli sviluppatori delle utilità utilizzate nell'esempio: ci aiutano tutti a vivere così tanto...

Buon pomeriggio!. L'ultima volta che abbiamo visto come risolvere "Errore nell'applicazione delle trasformazioni. Controlla la correttezza dei percorsi delle trasformazioni specificate", oggi ti parlerò di un'altra conseguenza di ciò. L'argomento della pubblicazione sarà una situazione in cui non puoi installare la piattaforma 1C e riceverai un messaggio: Errore di Windows: errore di esecuzione della funzione, lo risolviamo in un minuto, sono sicuro che l'argomento sarà utile a molti.

Che aspetto ha un errore di esecuzione di una funzione?

Come ho scritto sopra, riscontro questo problema su un terminal server Windows Server 2012 R2 quando provo a installare la piattaforma 1C 8.2. Dopo aver eseguito il file setup.exe, viene visualizzata la finestra dell'installazione guidata e immediatamente una finestra aggiuntiva con il messaggio:

Errore di Windows: errore di esecuzione della funzione

Per cui riceverai questa notifica:

Come nella maggior parte dei casi con la piattaforma 1C, tutto si risolve con una piccola correzione nei file di configurazione. Innanzitutto, attiva la visualizzazione delle cartelle nascoste, poiché il file di cui abbiamo bisogno non è visibile per impostazione predefinita. Successivamente, nell'unità C:\, trova la cartella Dati del programma.

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

Il file 1CEStat.cfg può essere aperto utilizzando qualsiasi editor di testo, fai clic destro su di esso e seleziona "Apri con", quindi un comodo editor.

Nel file 1CEStat.cfg, trova il parametro, devi eliminarlo e salvare il file.

Se guardi i registri nel visualizzatore eventi, vedrai eventi come questi.

Codice evento 1013: Prodotto: 1C:Enterprise 8.2 (8.2.19.130) - Errore Windows: errore di esecuzione della funzione.

ID evento 11708: Prodotto: 1C:Enterprise 8.2 (8.2.19.130) - Operazione di installazione non riuscita.

Dopo aver rimosso il parametro ADMINISTRATIONFUNC=0, abbiamo già ricevuto:

ID evento 1033: Windows Installer ha installato il prodotto. Prodotto: 1C:Enterprise 8.2 (8.2.19.130). Versione: 8.2.19.130. Lingua: 1049. Produttore: 1C. Installazione completata con stato: 1603.




Superiore