Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Siguranță
  • 1 a apărut o eroare irecuperabilă pe server. Eroare Windows: eroare de execuție a funcției, o putem rezolva într-un minut

1 a apărut o eroare irecuperabilă pe server. Eroare Windows: eroare de execuție a funcției, o putem rezolva într-un minut

Cred că fiecare dintre programatorii celor „șapte” a întâmpinat măcar o dată o astfel de eroare. Poate apărea fie în timpul „combinării 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 (într-un mod mai complicat) recurg la utilizarea utilitarului GComp, care „conform legendei” poate vindeca MD dacă este pur și simplu „dezasamblat” și apoi „asamblat” folosind programul. funcții. Într-adevăr, așa este. Dar nu în toate cazurile... Este doar un astfel de caz pe care aș dori să îl analizez în acest articol.

Deci, datele inițiale:

- „configurație ruptă”;

Utilitate MDDiags

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

Deoarece configuratorul chiar refuză să afișeze această „eroare fatală”, rulăm MDDiags pentru identificarea ei sau a acestora.

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

S-ar putea să aveți și alte erori, dar cred că veți putea rezolva cu ele, atunci când există o înțelegere generală despre cum să găsiți eroarea și cum să o remediați.

1. Eroare>(\\ Jurnal)

Utilitarul a arătat clar că eroarea este observată pentru 2 obiecte „\\ Jurnal \ Jurnal _ Numărul 212 „și” \\ Jurnal \ Jurnal _ Număr 860 ". Acum mergem laDeparte și uită-te la obiectele de acolo.


Vedem aici o mulțime de obiecte și un fișier „Container.Contents”. Stochează descriptorii acestor obiecte. După ce examinăm cu atenție conținutul fișierului, ne dăm seama că nu există descriptori pentru 2 dintre obiectele noastre.

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

Problema a fost rezolvată.

2. Eroare DOCUMENT.Factură primită (\\TextdText \User Help_Numărul 434 \Container.Cuprins)

Mergem din nou la MD pe poteca indicata. Deschiderea fisierului " Container. Cuprins „și priviți cu atenție conținutul său.

Cuvintele ciudate Cgtainer, Contentq, Prmgram atrag imediat privirea. Așa este, aceștia sunt identificatori scrisi greșit. Nu este greu de ghicit cum ar trebui să fie adevărat (dacă este dificil - mergi la următoarea ramură, deschide același fișier „Container.Contents” și vezi 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 „ghilimeleu” - îl corectăm (o astfel de eroare poate apărea atunci când descrierea unuia dintre elementele unui obiect (câmp, buton, listă de valori etc.) conține un ghilimele simple sau duble sau unele din „caracterele speciale”).

Alearga din nou MDDiags si vedem ca toate erorile anterioare au disparut, dar a aparut o alta eroare.

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

Lansăm utilitarul, selectăm MD-ul nostru rupt (deocamdată) și folderul în care ar trebui să fie pusă configurația dezasamblată de obiecte, apoi toate daws-ul implicit, singurul lucru este să setăm caseta de selectare „Șterge șabloanele de tabel goale” pe Fila „Parametri generali”, faceți clic pe „Decompilare”.

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

Utilitatea va colecta totul în siguranță.

Acum putem folosi Far Manager doar pentru a înlocui fișierul corespunzător din interiorul MD-ului „rupt” cu același din cel „tocmai compilat” (\\ Subconto \ Subconto_Number5870 \ WorkBook \ Dialog Stream).

Verificăm din nou configurația cu MDDiags.

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

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

P.S. Mulțumiri speciale dezvoltatorilor utilităților utilizate în exemplu - ne ajută pe toți să trăim așa...

Deci, ce rost are articolul meu?

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

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

Decizia este banala, se pare :) , nu voi descrie întregul mecanism, cum se face acest lucru, 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 BinaryData? Deși mie mi se pare ce să aleg Vodka cu bere sau bere cu vodcă :) ... O fig, trebuie să completați documentele cu date de la 1C și să le transferați către Client.

Ei bine, să sărim peste versuri, aleg ActiveDocument, nu voi descrie tot algoritmul, voi enumera doar capcanele și soluțiile lor. Toate cele de mai jos sunt născocirile mele personale și nu pretind în niciun caz a fi adevărul suprem. Poate ai rezolvat aceste probleme sau ai rezolvat-o altfel.

1. Piatra " primul". Metoda SaveAs nu funcționează (atât pentru MSWord, cât și pentru MSExcel). Când încerc să scriu date binare, 1C se blochează. Vezi fragmentul listării:

MSWord = Layout.Get (); Document încercat = MSWord.Application.Documents (1); Doc.Activate (); // Apoi, într-un fel, obținem datele și completăm documentul Word // Obține calea în directorul temporar pentru a salva fișierul acolo TimeName = GetTemporaryFileName (". Docx"); Document.SaveAs (NameTem); // stone MyDocumentInBinaryData începe aici = New BinaryData (NameTem); // ei bine, aici piatra asta bate 1C :) MSWord.Application.Quit ();

Mulțumesc mult.

Creați foldere
C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop
C: \ Windows \ System32 \ config \ systemprofile \ Desktop
a rezolvat problema. Subiectul este închis.

Care este motivul? Motivul este că codul

MSWord = Layout.Get ();

Invocă întotdeauna o instanță de obiect COM (x32), indiferent de bitul care este instalat Office. V-ați întrebat vreodată de ce nu puteți introduce fișiere cu extensii 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. Sau rescrieți 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; DocumentH = Word.Application.Documents.Add (); DocumentH.SaveAs (TimeFile, 0); Word.Quit (); // atunci totul este conform vechiului Layout = Print Management. Print Form Layout ("Document. Actul de transfer de echipamente." + Nume layout); MSWord = Layout.Get (); Document încercat = MSWord.Application.Documents (1); Doc.Activate (); // faceți ceva aici, completați datele // aici ne vom salva fișierul din COM x62 în COM x64 MSWord.Application.Selection.WholeStory (); MSWord.Application.Selection.Copy (); DocumentH = MSWord.Application.Documents.Open (TimeFile); Doc.activate (); MSWord.Application.Selection.Paste (); DocumentH.SaveAs (TimeFile, 0); Doc.Închidere (); MSWord = Nedefinit; Excepție // Dacă apare o eroare, datele de eroare sunt afișate și obiectul este închis. Information = InformationObject (); General PurposeClientServer.NotifyUser ("Eroare -" + Informații. Descriere + "cod de eroare -" + Abreviere (Informație. SourceString)); MSWord.Application.Quit (); Sfârșitul încercărilor;

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 funcționează cu COM x32, am completat-o ​​cu date și, în final, am copiat conținutul întregului document și salvați-l într-un fișier pregătit anterior.

Totul este la fel, dar numai pentru Excel

TimeFile = GetTemporaryFileName ("xls"); Excel = New COMObject ("Excel.Application"); Excel.Displayalerts = 0; WorkbookH = Excel.WorkBooks.Add (); SheetH = Book.WorkSheets (1); BookH.SaveAs (TimeFile, -4143); Excel.Ieșire (); Layout = Print Management. Print Form Layout ("Document. Factura echipament." + Nume layout); MSExcel = Layout.Get (); BookH = MSExcel.Application.Workbooks.Open (TimeFile); SheetH = Book.WorkSheets (1); Se încearcă WBook = MSExcel.Application.Workbooks (1); Sheet = WBook.WorkSheets (1); Sheet.Activate (); // face ceva, completează-l cu date din 1C MSExcel.Application.WorkBooks (1) .WorkSheets (1) .Cells.Copy (SheetN.Cells); BookH.Save (); Cartea H. Închidere (); Excepție // Dacă apare o eroare, datele de eroare sunt afișate și obiectul este închis. Information = InformationObject (); General PurposeClientServer.NotifyUser ("Eroare -" + Informații. Descriere + "cod de eroare -" + Abreviere (Informație. SourceString)); MSExcel.Application.Quit (); Sfârșitul încercărilor;

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

O piatra " al doilea". fragment de cod

TimeFile = GetTemporaryFileName ("xls");

nu este foarte bine, pentru că există o înregistrare în folder: „c:\Utilizatori\ce este acolo....”, în general, acest folder se află întotdeauna în lista neagră a tuturor firewall-urilor, antivirusurilor etc. Excel . Să ne uităm și mergem acolo

va trebui să te joci cu asta, altfel există posibilitatea unor erori „ciudate”. Prin urmare, sugerez următoarele:

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

aici vom stoca fișierele Word, Excel deja completate, bineînțeles:

LayoutName - ID aspect

Office Document - Values ​​​​Magazin, aici păstrăm fișierul nostru finalizat

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

MZ = Registre de informații. Stocare temporarăOffice.CreateRecordManager (); MV.Object = Sample.Ref; MV.LayoutName = LayoutName; MZ.Read (); MV.Object = Sample.Ref; MV.LayoutName = LayoutName; MV.DokumentOffice = NewValueStore (New BinaryData (TimeFile)); MZ.Scrie (); DeleteFiles (TimeFile);

Ceea ce facem, scriem fișierul terminat în registrul de informații și apoi ștergem în sine fișierul temporar, rezolvăm problema „Word, Excel Security Center”. Mai rămâne un singur lucru pentru a afișa acest fișier finalizat Clientului (client thin și web)

3. Piatra " al treilea"- transferând fișierul către client, aici voi așeza tot codul, am luat ceva din BSP, ceva din configurația Demo" Aplicație gestionată ", ceva de pe Internet, dar, în general, aici este codul ( în întregime)

/////////////////////////////////////////////////////////////////////// /////////////////////////////// PROCEDURI ȘI FUNCȚII DE SERVICIU BSP & Funcția OnServer GetMayette () ObjectRef = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = Information Registers.Office TemporaryStorage.CreateRecordKey (Nouă structură ("Obiect, LayoutName", ObjectLink, LayoutName)); // Adresă = GetNavigationLink (KeyRecord, „Document Office”); Adresa expeditorului; EndFunction // & OnClient Procedure AfterApplicationStarting (ReturnCode, ApplicationName) Export; // EndProcedure & OnClient Procedure After ReceivingFiles (TransferredFiles, AdditionalParameters) Export If NOT TransferredFiles = Undefined Then For each Description From TransferredFiles Loop OpAfter Application Start = New Alert Description ("After Application Start", ThisName);, Description. StartApplicationLaunch (OpAfterApplicationLaunch, Description.Name); Sfârșitul ciclului; EndIf; EndProcedure & OnClient Procedure AfterDirectory Selection (SelectedFiles, CommandName) Export If SelectedFiles = Undefined Then Return; EndIf; Director = SelectedFiles; GeneralPurposeCallServer.SaveWorkingDirectory (Director); If CommandName = "Factură" Atunci LayoutName = "Factură" EndIf; Structura datelor. Inserare („Catalog”, Catalog); ConnectWaitingHandler ("Connectable_PassFileClient", 5, True); EndProcedure & OnClient Procedure OpenFiles ThroughExtension (CommandName) OpAfterDirectorySelection = NewNotificationDescription ("AfterDirectorySelection", ThisObject, CommandName); Director = SharedPurposeServerCall.GetWorkDirectory (); Dacă Director = Nedefinit SAU Director = "" Atunci Dialog = New FileChoose Dialogue (FileSelectionDialogueMode.CatalogSelection); Dialog.Header = НСтр ("ru =" Selectarea unui director pentru stocarea temporară a fișierelor "", "ru"); Dialogue.Show (selectare OpAfterCatalog); Altfel SelectedFiles = New Array; SelectedFiles.Add (Director); Executați procesarea alertelor (OpAfterDirectory Selection, SelectedFiles); EndIf; EndProcedure & OnClient Procedure HandleExtensionConnectionWork With Files (ExtensionConnected, AdditionalParameters) Export If ExtensionConnected Then OpenFiles Via Extension (AdditionalParameters.CommandName); EndIf; EndProcedure & OnClient Procedure Connect_PassFileClient () Adresă = GetLayout (); Dacă Adresa<>Nedefinit, apoi DisableWaitingHandler ("Connectable_PassFileClient"); DocumentNumber = DataStructure.DocumentNumber; Director = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Director + „\” + LayoutName + „_ Nu.” + DocumentNumber + „.xls”; Description = Descriere nouă a fișierului transferat (FilePath, Address); TransferredFiles = New Array; TransferredFiles.Add (Descriere); StartFilesReceived (NewAlertDescription ("AfterFilesReceived", ThisObject), TransferredFiles, "", False); EndIf; EndProcedure & AtServer Procedure ExecutePrintServer () ObjectRef = DataStructure.Object; LayoutName = DataStructure.LayoutName; Data Structure.Insert („DocumentNumber”, ObjectLink.Number); ArrayObjects = Matrice nouă; ArrayObjects.Add (ObjectRef); Documents.InvoiceEquipment.PrintInvoice (ArrayObjects, LayoutName, True); EndProcedure & OnClient Procedure Connectable_RunPrint () RunPrintServer (); EndProcedure // StandardSubsystems.Print & OnClient Procedure Connect_RunPrintCommand (Comandă) Link = Elements.List.CurrentData.Ref; Structură de date = Structură nouă; Data Structure.Insert („Obiect”, Link); Structura datelor. Inserare („Nume aspect”, „Factură”); ConnectWaitingHandler ("Connectable_RunPrint", 1, True); CommandDescription = PrintControlClient.PrintCommandDescription (Command.Name, FormName); StartSettingExtensionWorkWithFiles (); StartExtensionWorkWithFilesConnection (NewAlertDescription ("ProcessFileWorkExtensionConnection", ThisObject, New Structure ("CommandName", CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

O mica precizare:

1. În primul rând, clientul lucrează pentru noi atât prin modul Thin, cât și prin modul Web, prin urmare, în prealabil, în proprietățile Configuratorului, setați următoarele valori:

Pentru a nu exista probleme atunci când lucrați cu browserul

2. Folosim handlere de așteptare pentru a evita problemele cu sincronicitatea apelurilor (acest lucru se aplică numai modului Web)

3. Și în ultimul rând, conectăm 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 (Slim funcționează de la sine):

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

Despre fișierele Word, Excel de încorporat ca BinaryData? problema este care?

1. Fie trebuie să scoatem aceste BinaryData din layout și să-l umplem cu datele de la 1C și ATENTIE să le scriem din nou sub formă de BinaryData (Vodka 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 acceptat doar de browser-ul IE și apoi dansează cu setările ActiveX, alte browsere au abandonat de mult utilizarea ActiveX

O zi buna!. Ultima dată când am rezolvat cum se rezolvă „Eroarea la aplicarea transformărilor. Verificați căile transformărilor specificate”, astăzi vă voi spune despre încă o consecință care se datorează 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, ne hotărâm într-un minut, sunt sigură că subiectul va fi de folos multora.

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

După cum am scris mai sus, îl primesc pe un server terminal Windows Server 2012 R2 când încerc să instalez platforma 1C 8.2. Prin 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 este rezolvat cu o mică remediere în fișierele de configurare. În primul rând, 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 astfel de evenimente.

ID 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țiunea de instalare a eșuat.

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

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

Top articole similare