Eroare Windows: eroare de execuție a funcției, rezolvată într-un minut. Eroare Windows: eroare de execuție a funcției, rezolvată într-un minut Eroare irecuperabilă de verificare a configurației 1s 7.7

Deci, ce rost are articolul meu?

1. Există un server (x64), cu instalat Office 2016 (x64), există 1C 8.3.8 și x64 (adică server 1C). Utilizatorii se conectează atât prin intermediul unui client subțire, cât și prin intermediul unui client web.

2. Există o grămadă de contracte standard și facturi emise (întocmite) de departamentul de vânzări. Există un font, un paragraf etc., bineînțeles, totul este conceput în Word, Excel 2016 (x64), firește, nu există dorința de a desena toate acestea în 1C, dar există dorința de a le pune în format ActiveDocument machete

Soluția pare banală :) , nu voi descrie întregul mecanism, cum se realizează, cum sunt completate datele din 1C în aspectul ActiveDocument - cred că știți acest lucru perfect fără mine. Dar în timpul lucrului s-a dovedit că nu totul este atât de lin în domeniul obiectelor COM, și anume:

2. Ce opțiune este mai bine să alegeți: ActiveDocument sau Binary Data? Deși pentru mine sună ceva de genul a alege Vodka With Beer sau Beer With Vodka :) . Nu e mare lucru, trebuie să completați documentele cu date de la 1C și să le transferați către Client.

Ei bine, să omitem versurile, aleg ActiveDocument, nu voi descrie întregul algoritm, voi enumera doar capcanele și soluția lor. Tot ceea ce este afirmat mai jos este speculația mea personală și în niciun caz nu pretinde a fi adevărul suprem. Este posibil să fi rezolvat aceste probleme sau să le fi rezolvat diferit.

1. Piatra " primul„. Metoda SaveAs nu funcționează (atât pentru MSWord, cât și pentru MSExcel). Când încercați să scrieți date binare, 1C pur și simplu se blochează. Uitați-vă la fragmentul de listă:

MSWord = Layout.Get(); Încercați Document = MSWord.Application.Documents(1); Document.Activate(); //În continuare, obținem cumva datele și completăm documentul Word //Obține calea în directorul temporar pentru a salva fișierul acolo TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //piatra începe aici MyDocumentInBinaryData = New BinaryData(NameTime); //Ei bine, aici această piatră este eliminată de 1C :) MSWord.Application.Quit();

Mulţumesc mult.

Crearea folderelor
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problema a fost rezolvata. Subiect închis.

Care este motivul? Motivul este că codul

MSWord = Layout.Get();

Apelează întotdeauna o instanță a unui obiect COM (x32), indiferent de ce bitness este instalat Office. V-ați întrebat vreodată de ce nu puteți introduce fișiere cu extensia docx, xlsx în aspectul ActoveDocument?

acest lucru poate fi verificat și prin Task Manager, dar adevărul este că aspectul ActiveDocument apelează implicit o instanță COM (x32) și, prin urmare, toate manipulările ulterioare trebuie făcute ținând cont de această caracteristică.

1. Fie serverul și toate programele trebuie să fie x32. Atunci nu trebuie să faci nimic (în sensul rescrierii codului)

2. Fie rescrie codul în acest fel

// obțineți numele fișierului temporar TimeFile = GetTemporaryFileName("doc"); // acest cod va apela cu siguranță o instanță COM cu adâncimea de biți necesară, în cazul nostru x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // apoi totul este ca înainte Layout = Print Management. Printing Form Layout ("Document. Actul de transfer de echipamente." + Nume layout); MSWord = Layout.Get(); Încercați Document = MSWord.Application.Documents(1); Document.Activate(); // aici facem ceva, completăm datele // aici ne vom salva fișierul din COM x62 în 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 = nedefinit; Excepție // Dacă apare o eroare, datele de eroare sunt tipărite și obiectul este închis. Informații = ErrorInfo(); GeneralPurposeClientServer.NotifyUser(„Eroare - „+Information.Description+” cod de eroare - „+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndTempt;

Cred că totul este clar aici, mai întâi am creat o instanță COM cu adâncimea de biți necesară, am creat un fișier gol și l-am salvat într-un folder temporar, apoi lucrăm cu COM x32, o umplem cu date și în final copiam conținutul întregului document și salvați-l într-un fișier pregătit anterior.

Totul este la fel, dar numai pentru Excel

TimeFile = GetTimeFileName("xls"); Excel = New COMObject ("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Încercarea WBook = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // facem ceva, îl umplem cu date din 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Excepție // Dacă apare o eroare, datele de eroare sunt tipărite și obiectul este închis. Informații = ErrorInfo(); GeneralPurposeClientServer.NotifyUser(„Eroare - „+Information.Description+” cod de eroare - „+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndTempt;

Poftim " primul„Am decis piatra, pe un server x64 cu Office x64, totul funcționează exact ca un ceas, fără erori și nu este nevoie să creez foldere și orice altceva.

piatra" al doilea". fragment de cod

TimeFile = GetTimeFileName("xls");

mâncatul nu este foarte bun, pentru că scrie în folder: „c:\Users\ what's there...”, în general, acest folder este întotdeauna pe lista neagră a tuturor firewall-urilor, antivirusurilor etc., etc., la deschide cel puțin centrul de control al securității în Word sau Excel. Să ne uităm și acolo

Va trebui să reușești cu asta, altfel există posibilitatea să apară erori „ciudate”. Prin urmare, sugerez următoarele:

1. Deschideți configuratorul și adăugați un nou registru de informații

aici vom stoca Cuvântul nostru terminat, Fișiere Excel deja completat, desigur:

LayoutName - ID aspect

DocumentOffice - Value Storage, aici păstrăm fișierul nostru final

2. Adăugăm codul de mai sus după cum urmează:

MH = Registre de informații.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Read(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); DeleteFiles(TimeFile);

Ceea ce facem este să scriem fișierul terminat în registrul de informații și apoi să ștergem fișierul temporar în sine, rezolvând problema „Word, Excel Security Center”. Tot ce rămâne este să arăți acest fișier finalizat Clientului (clienți subțiri și web)

3. Piatra " al treilea" - transferând un fișier către client, aici voi posta tot codul, unele preluate din BSP, altele din configurația demo „Aplicație gestionată”, altele de pe Internet, dar în general aici este codul (în integral)

//////////////////////////////////////////////////////////////////// ////////////////////////// // PROCEDURI ȘI FUNCȚII DE SERVICIU BSP &OnServer Funcție GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = Registre de informații TemporaryStorageOffice.CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Adresă = GetNavigationLink(RecordKey,"OfficeDocument"); Adresa expeditorului; EndFunction // &OnClient Procedure AfterApplicationStart(ReturnCode, ApplicationName) Export; // Sfârșitul procedurii &Pe Procedura client după primirea fișierelor (fișiere transferate, parametri suplimentari) Exportați dacă NU sunt transmise fișiere = nedefinite Apoi pentru fiecare descriere a fișierelor transmise Ciclul OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name. ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; endIf; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Exportă dacă SelectedFiles = Nedefinit, apoi returnează; endIf; Director = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); If CommandName = "Factură" Atunci LayoutName = "Factură" EndIf; DataStructure.Insert("Director", Director); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Sfârșitul procedurii &Pe procedura client Deschideți fișiere prin extensie (numele comenzii) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Director = GeneralPurposeCallServer.GetWorkingDirectory(); Dacă Director = Nedefinit SAU Director = "" Atunci Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Selectarea unui director pentru stocarea temporară a fișierelor"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Altfel SelectedFiles = Noua matrice; SelectedFiles.Add(Director); Efectuați procesarea alertelor (OpAfterSelectingDirectory, SelectedFiles); endIf; Sfârșitul procedurii &În procesul de procedură clientConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Procedure Connected_PassFileToClient() Address = GetLayout(); Dacă Adresa<>Nedefinit Apoi DisableWaitHandler ("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Director = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Director+"\"+LayoutName+"_Nu"+DocumentNumber+".xls"; Descriere = Noua Descriere a Fișierului Transmis (Cale către Fișier, Adresă); TransferredFiles = New Array; TransferredFiles.Add(Descriere); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Sfârșitul procedurii &Pe serverul procedurii ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Matrice nouă; Array of Objects.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Obiect", Link); DataStructure.Insert("LayoutName", "Factura"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Începeți instalarea FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Câteva precizări:

1. În primul rând, clientul nostru funcționează atât prin modul Thin, cât și prin Web, așa că în prealabil setăm următoarele valori în proprietățile Configuratorului:

Pentru a evita problemele când lucrați cu browserul

2. Folosim operatori de așteptare pentru a evita problemele legate de sincronizarea apelurilor (acest lucru se aplică doar modului Web)

3. Și, în sfârșit, activați extensia pentru lucrul cu fișiere (rețineți că în modul Thin Client, această extensie este întotdeauna activată). Și prin cod:

transferăm fișierul către Client folosind mecanismul NavigationLink, primim următoarele mesaje în browser (Thin funcționează de la sine):

Ei bine, asta pare să fie tot. Sper că asta ajută pe cineva...

În ceea ce privește fișierele Word, Excel introduse ca date binare? care este problema?

1. Fie trebuie să scoatem aceste Date Binare din aspect și să le umplem cu datele de la 1C și ATENȚIE să le scriem din nou sub formă de Date Binare (Vodcă cu bere sau bere cu vodcă)

2. Fie trebuie să obținem aspectul BinaryData pe partea Client și să îl completăm acolo, DAR obiectul COM este suportat doar de browser-ul IE și apoi cu dansuri cu setări ActiveX, alte browsere au abandonat de mult utilizarea ActiveX

Cred că fiecare dintre cei „șapte” programatori a întâlnit măcar o dată o astfel de eroare. Poate apărea fie în timpul „imbinarii configurațiilor”, fie în timpul „testării și remedierii securității informațiilor”.

Dar nu toată lumea a încercat să „repare” configurația. În astfel de cazuri, de obicei fie caută frenetic copii de rezervă, fie (o metodă mai complexă) apelează la ajutorul utilitarului GComp, care, „conform legendei”, poate vindeca MD dacă este pur și simplu „dezasamblat” și apoi „asamblat”. ” folosind funcțiile programului. Într-adevăr, așa este. Dar nu în toate cazurile... Este exact cazul pe care aș dori să îl examinez în acest articol.

Deci, datele inițiale:

- „configurație ruptă”;

Utilitate MDDiags

- DeparteAdministratorși plugin DocFileBrowser către el. Folosind acest plugin, puteți intra în interiorul MD și puteți lucra cu obiectele acestuia.

Deoarece Configuratorul refuză chiar să afișeze această „eroare necorecabilă”, rulăm MDDiags să-l identifice sau pe ei.

După lansarea utilitarului, selectați configurația dorită, apoi toate setările implicite... rulați, analizați, obțineți rezultatul.

Este posibil să aveți și alte erori, dar cred că le veți putea da seama după ce veți înțelege cum să găsiți eroarea și cum să o remediați.

1. Eroare>(\\Jurnal)

Utilitarul a arătat clar că eroarea a fost observată pentru 2 obiecte „\\ Journal\Journal_Number 212” și „\\Journal\Journal_Number 860". Acum să trecem laDeparte și uită-te la obiectele de acolo.


Vedem aici multe obiecte și un fișier „Container.Contents”. Stochează descriptorii acelorași obiecte. După ce am studiat cu atenție conținutul fișierului, înțelegem că nu există descriptori pentru cele 2 obiecte ale noastre.

Adăugați descriptori așa cum se arată în figură.

Problema rezolvata.

2. Eroare DOCUMENT.Chitanța factură (\\TextdText\User Help_Număr434\Container.Cuprins)

Mergem din nou spre MD pe poteca indicata. Deschideți fișierul " Container. Cuprins „și priviți cu atenție conținutul acestuia.

Cuvintele ciudate Cgtainer, Contentq, Prmgram iti atrag imediat privirea. Așa este, aceștia sunt identificatori scrisi greșit. Nu este dificil să ghiciți cum ar trebui să fie corect (dacă este dificil, mergeți la următoarea ramură, deschideți același fișier „Container.Contents” și vedeți cum ar trebui să fie scris).

3. EroareDIRECTORUL.Operaţii tipice(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Deschideți fișierul la calea specificată și priviți cu atenție... Toți parametrii trebuie încadrați între ghilimele. Unul dintre parametri are un „spațiu” în loc de un „ghilime” - îl corectăm (această eroare poate apărea atunci când descrierea unuia dintre elementele unui obiect (câmp, buton, listă de valori etc.) conține un singur sau citat dublu, sau oricare dintre „caracterele speciale”).

Hai să lansăm din nou MDDiagsși vedem că toate erorile anterioare au dispărut, dar a apărut o altă eroare.

Acum este timpul să apelați la utilitarul GComp și să verificați „legenda”...

Lansăm utilitarul, selectăm MD-ul nostru spart (deocamdată) și folderul în care ar trebui să punem configurația sortată pe obiecte, apoi toate casetele de selectare sunt implicite, singurul lucru este să bifați caseta de selectare „Ștergere”. șabloane goale tabele" în fila "Parametri generali", faceți clic pe "Decompilare".

Apoi, fără alte prelungiri, accesați fila „compilare”, setați directorul sursă la cel în care tocmai ați analizat configurația și indicați calea către noul MD.

Utilitarul va asambla totul în siguranță.

Acum trebuie doar să Manager îndepărtatînlocuiți fișierul corespunzător din interiorul MD-ului „rupt” cu același fișier din cel „tocmai asamblat” (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Verificăm din nou configurația folosind MDDiags.

Totul pare să fie OK. Acum intrăm în configurator și facem „testarea și corectarea securității informațiilor” pentru a ne asigura că nu mai există erori.

Asta e tot. Lasă-mă să-mi iau concediu. Și Fie ca Forța să fie cu tine!)

P.S. Mulțumiri speciale dezvoltatorilor utilităților folosite în exemplu - ne ajută pe toți să trăim atât de mult...

Bună ziua!. Ultima dată ne-am uitat la cum să rezolvăm „Eroarea la aplicarea transformărilor. Verificați corectitudinea căilor transformărilor specificate”, astăzi vă voi spune despre o altă consecință datorată acesteia. Subiectul publicației va fi o situație în care nu puteți instala platforma 1C și veți primi un mesaj: Eroare Windows: eroare de execuție a funcției, rezolvăm într-un minut, sunt sigur că subiectul va fi util pentru mulți.

Cum arată o eroare de execuție a funcției?

După cum am scris mai sus, am această problemă pe un server de terminal Windows Server 2012 R2 când încerc să instalez platforma 1C 8.2. După rularea fișierului setup.exe, apare fereastra asistentului de instalare și imediat o fereastră suplimentară cu mesajul:

Eroare Windows: eroare de execuție a funcției

Pentru care veți primi această notificare:

Ca în majoritatea cazurilor cu platforma 1C, totul poate fi rezolvat cu o mică corecție în fișierele de configurare. Mai întâi, activați afișarea folderelor ascunse, deoarece fișierul de care avem nevoie nu este vizibil în mod implicit. Apoi, pe unitatea C:\, găsiți folderul ProgramData.

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

Fișierul 1CEStat.cfg poate fi deschis folosind orice editor de text, faceți clic dreapta pe el și selectați „Deschide cu”, apoi un editor convenabil.

În fișierul 1CEStat.cfg, găsiți parametrul, trebuie să îl ștergeți și să salvați fișierul.

Dacă te uiți la jurnalele în vizualizatorul de evenimente, vei vedea evenimente ca acestea.

Cod eveniment 1013: Produs: 1C:Enterprise 8.2 (8.2.19.130) -- Eroare Windows: Eroare de execuție a funcției.

ID eveniment 11708: Produs: 1C:Enterprise 8.2 (8.2.19.130) -- Operația de instalare a eșuat.

După ce am eliminat parametrul ADMINISTRATIONFUNC=0, am primit deja:

ID eveniment 1033: Windows Installer a instalat produsul. Produs: 1C:Enterprise 8.2 (8.2.19.130). Versiune: 8.2.19.130. Limba: 1049. Producator: 1C. Instalare finalizată cu starea: 1603.




Top