Windows-fel: funktionsexekveringsfel, löst på en minut. Windows-fel: funktionsexekveringsfel, löst på en minut Konfigurationskontroll oåterställbart fel 1s 7.7

Så vad är poängen med min artikel?

1. Det finns en server (x64), med installerat Office 2016 (x64), det finns 1C 8.3.8 också x64 (vilket betyder 1C-server). Användare ansluter via både en tunn klient och en webbklient.

2. Det finns ett gäng standardkontrakt och fakturor utfärdade (utarbetade) av försäljningsavdelningen. Det finns ett typsnitt, ett stycke, etc., naturligtvis, allt är designat i Word, Excel 2016 (x64), naturligtvis finns det ingen önskan att rita allt detta i 1C, men det finns en önskan att lägga det i ActiveDocument-format layouter

Lösningen verkar banal :) , Jag kommer inte att beskriva hela mekanismen, hur det görs, hur data fylls från 1C till ActiveDocument-layouten - jag tror att du vet detta utmärkt utan mig. Men under arbetets gång visade det sig att allt inte är så smidigt inom COM-objektens område, nämligen:

2. Vilket alternativ är bättre att välja: ActiveDocument eller Binary Data? Även om det för mig låter ungefär som att välja Vodka With Beer eller Beer With Vodka :) . Ingen stor sak, du måste fylla dokumenten med data från 1C och överföra dem till kunden.

Nåväl, okej, låt oss hoppa över texterna, jag väljer ActiveDocument, jag kommer inte att beskriva hela algoritmen, jag kommer bara att lista fallgroparna och deras lösning. Allt som anges nedan är min personliga spekulation och påstår inte på något sätt vara den ultimata sanningen. Du kanske har löst dessa problem eller löst dem annorlunda.

1. Sten " först". SaveAs-metoden fungerar inte (för både MSWord och MSExcel). När du försöker skriva binära data kraschar 1C helt enkelt. Titta på listfragmentet:

MSWord = Layout.Get(); Prova Document = MSWord.Application.Documents(1); Document.Activate(); //Nästa, vi får på något sätt data och fyller i Word-dokumentet //Hämta sökvägen i den tillfälliga katalogen för att spara filen där TimeName = GetTemporaryFileName(.docx"); Document.SaveAs(NameTime); //sten börjar här MyDocumentInBinaryData = New BinaryData(NameTime); //tja, här är den här stenen utslagen av 1C :) MSWord.Application.Quit();

Tack så mycket.

Skapa mappar
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problemet löstes. Ämnet stängt.

Vad är anledningen? Anledningen är att koden

MSWord = Layout.Get();

Anropar alltid en instans av ett COM-objekt (x32) oavsett vilken bitness Office är installerat. Har du någonsin undrat varför du inte kan infoga filer med tillägget docx, xlsx i ActoveDocument-layouten?

detta kan också kontrolleras genom Task Manager, men faktum är att ActiveDocument-layouten implicit anropar en COM-instans (x32) och därför måste alla ytterligare manipulationer göras med hänsyn till denna funktion.

1. Antingen servern och all programvara måste vara x32. Då behöver du inte göra någonting (i betydelsen av att skriva om koden)

2. Skriv antingen om koden på detta sätt

// få namnet på den temporära filen TimeFile = GetTemporaryFileName("doc"); // den här koden kommer definitivt att anropa en COM-instans med det nödvändiga bitdjupet, i vårt fall x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // då är allt som förut Layout = Print Management Utskriftsformulär Layout ("Dokument. Equipment Transfer Act." + Layoutnamn); MSWord = Layout.Get(); Prova Document = MSWord.Application.Documents(1); Document.Activate(); // här gör vi något, fyll i data // här kommer vi att spara om vår fil från COM x62 till 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 = Odefinierat; Undantag // Om ett fel uppstår skrivs feldata ut och objektet stängs. Information = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Fel - "+Information.Description+" felkod - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Slutförsök;

Jag tror att allt är klart här, först skapade vi en COM-instans med önskat bitdjup, skapade en tom fil och sparade den i en tillfällig mapp, sedan arbetar vi med COM x32, fyller den med data och kopierar slutligen innehållet i hela dokument och spara det i en tidigare förberedd fil.

Allt är sig likt, men bara för 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); Försöker WBook = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // vi gör något, fyll det med data från 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Undantag // Om ett fel uppstår skrivs feldata ut och objektet stängs. Information = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Fel - "+Information.Description+" felkod - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Slutförsök;

Här har du " först"Jag bestämde mig för stenen, på en x64-server med Office x64 fungerar allt precis som en klocka, utan fel och det finns ingen anledning att skapa några mappar och allt annat.

Sten" andra". kodavsnitt

TimeFile = GetTimeFileName("xls");

äta är inte särskilt bra, eftersom det skriver till mappen: "c:\Users\ vad finns där...", i allmänhet är den här mappen alltid på den svarta listan över alla brandväggar, antivirus etc., etc., kl. öppna åtminstone säkerhetskontrollcentret i Word eller Excel. Låt oss titta där också

Du måste mixtra med detta, annars finns det en möjlighet att "konstiga" fel dyker upp. Därför föreslår jag följande:

1. Öppna konfiguratorn och lägg till ett nytt informationsregister

här kommer vi att lagra vårt färdiga ord, Excel-filer redan ifyllt såklart:

LayoutName - Layout ID

DocumentOffice - Value Storage, här behåller vi vår färdiga fil

2. Vi lägger till ovanstående kod enligt följande:

MH = Information Registers.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);

Det vi gör är att vi skriver den färdiga filen till informationsregistret och raderar sedan själva den tillfälliga filen, vilket löser problemet med "Word, Excel Security Center". Allt som återstår är att visa denna färdiga fil för klienten (tunna klienter och webbklienter)

3. Sten" tredje" - överföra en fil till klienten, här lägger jag bara upp all kod, en del hämtad från BSP, en del från "Managed Application" demokonfigurationen, en del från Internet, men i allmänhet är här koden (i dess helhet)

////////////////////////////////////////////// /////////////////////////// SERVICEPROCEDURER OCH FUNKTIONER BSP &OnServer Funktion GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Record Key = Informationsregister. TemporaryOfficeStorage. CreateRecordKey(New Structure("Objekt,LayoutName",ObjectLink,LayoutName)); // Adress = GetNavigationLink(RecordKey,"OfficeDocument"); Returadress; EndFunction // &OnClient Procedur AfterApplicationStart(ReturnCode, ApplicationName) Export; // Procedurens slut &På klienten Procedur efter mottagande av filer (Överförda filer, ytterligare parametrar) Exportera om INTE överförda filer = Odefinierat Sedan För varje beskrivning av de överförda filerna cykla OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; endIf; EndProcedure &OnClient Procedur AfterDirectorySelection(SelectedFiles, CommandName) Exportera Om SelectedFiles = Odefinierat Returnera sedan; endIf; Directory = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); If CommandName = "Invoice" Then LayoutName = "Invoice" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Slut på procedur &På klienten Procedur Öppna filer via tillägg (kommandonamn) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Directory = GeneralPurposeCallServer.GetWorkingDirectory(); Om Directory = Odefinierad ELLER Directory = "" Då Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Väljer en katalog för tillfällig lagring av filer", "ru"); Dialog.Show(OpAfterSelectingDirectory); Annars SelectedFiles = Ny Array; SelectedFiles.Add(Directory); Utför varningsbearbetning(OpAfterSelectingDirectory, SelectedFiles); endIf; Slut på procedur &På klienten Procedur ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Procedur Connected_PassFileToClient() Address = GetLayout(); Om Adress<>Undefined Then DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Directory = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Katalog+"\"+Layoutnamn+"_No"+DocumentNumber+".xls"; Description = Ny beskrivning av den överförda filen (sökväg till fil, adress); TransferredFiles = New Array; TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Slut på procedur &På servern Procedur ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = New Array; Array of Objects.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array, LayoutName, True); EndProcedure &OnClient Procedur Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedur Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Objekt", Länk); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Börja installera FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Några förtydliganden:

1. För det första arbetar vår klient genom både tunt och webbläge, så i förväg ställer vi in ​​följande värden i konfiguratorns egenskaper:

För att undvika problem när du arbetar med webbläsaren

2. Vi använder väntehanterare för att undvika problem med samtalssynkronisering (detta gäller endast webbläge)

3. Och slutligen, aktivera tillägget för att arbeta med filer (kom ihåg att i tunn klientläge är det här tillägget alltid aktiverat). Och genom koden:

vi överför filen till klienten med hjälp av NavigationLink-mekanismen, vi får följande meddelanden i webbläsaren (Tunn fungerar av sig själv):

Tja, det verkar vara allt. Hoppas detta hjälper någon...

Angående Word, Excel-filer infogade som binära data? vad är problemet?

1. Vi måste antingen ta ut denna binära data från layouten och fylla den med data från 1C och OBS, skriva ner den igen i form av binära data (Vodka med öl eller öl med vodka)

2. Antingen måste vi hämta BinaryData-layouten på klientsidan och fylla den där, MEN COM-objektet stöds endast av IE-webbläsaren och sedan med danser med ActiveX-inställningar, andra webbläsare har länge övergett användningen av ActiveX

Jag tror att var och en av de "sju" programmerarna har stött på ett sådant fel minst en gång. Det kan inträffa antingen under "sammanslagning av konfigurationer" eller under "testning och fixering av informationssäkerhet."

Men alla försökte inte "fixa" konfigurationen. I sådana fall söker de vanligtvis frenetiskt efter säkerhetskopior, eller (en mer komplex metod) tar hjälp av GComp-verktyget, som "enligt legenden" kan bota MD om det helt enkelt "demonteras" och sedan "monteras" med hjälp av programmets funktioner. Det är verkligen så. Men inte i alla fall... Det är just detta som jag skulle vilja undersöka i den här artikeln.

Så, de första uppgifterna:

- "trasig konfiguration";

Verktyg MDDiags

- LångtChef och plugin DocFileWebbläsare till honom. Med detta plugin kan du gå in i MD:n och arbeta med dess objekt.

Eftersom konfiguratorn vägrar att ens visa detta "okorrigerbara fel" kör vi MDDiags för att identifiera den eller dem.

Efter att ha startat verktyget, välj önskad konfiguration, sedan alla standardinställningar... kör, analysera, få resultatet.

Du kan ha andra fel, men jag tror att du kommer att kunna reda ut dem när du har en allmän förståelse för hur du hittar felet och hur du åtgärdar det.

1. Fel>(\\Tidning)

Verktyget gjorde det klart att felet observerades för 2 objekt "\\ Journal\Journal_Number 212" och "\\Journal\Journal_Number 860". Låt oss nu gå tillLångt och titta på föremålen där.


Vi ser här många objekt och en fil "Container.Contents". Den lagrar beskrivningar av samma objekt. Efter att noggrant studerat innehållet i filen förstår vi att det inte finns några deskriptorer för våra 2 objekt.

Lägg till beskrivningar som visas i figuren.

Problemet löst.

2. Fel DOCUMENT.Kvittofaktura (\\TypadText\Användarhjälp_Number434\Behållare.Innehåll)

Vi går igen till MD längs den angivna vägen. Öppna filen " Behållare. Innehåll " och titta noga på dess innehåll.

De märkliga orden Cgntainer, Contentq, Prmgram fångar dig omedelbart. Det stämmer, det här är felstavade identifierare. Det är inte svårt att gissa hur det ska vara korrekt (om det är svårt, gå till nästa gren, öppna samma "Container.Contents"-fil och se hur det ska skrivas).

3. FelKATALOG.Typiska operationer(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Öppna filen på den angivna sökvägen och titta noga... Alla parametrar måste stå inom citattecken. En av parametrarna har ett "mellanslag" istället för ett "citat" - vi korrigerar det (detta fel kan uppstå när beskrivningen av ett av elementen i ett objekt (fält, knapp, värdelista, etc.) innehåller en enda eller dubbelt citat, eller någon av "specialtecken").

Låt oss starta igen MDDiags och vi ser att alla tidigare fel har försvunnit, men ett annat fel har dykt upp.

Nu är det dags att vända sig till GComp-verktyget och kolla "legenden"...

Vi startar verktyget, väljer vår trasiga (för nu) MD och mappen där vi ska placera konfigurationen sorterad efter objekt, då är alla kryssrutor som standard, det enda är att markera kryssrutan "radera" tomma mallar tabeller" på fliken "Allmänna parametrar", klicka på "Dekompilera".

Gå sedan, utan vidare, till fliken "kompilering", ställ in källkatalogen till den där du precis analyserade konfigurationen och ange sökvägen till den nya MD:n.

Verktyget kommer att montera allt på ett säkert sätt.

Nu måste vi bara Far Manager ersätt motsvarande fil inuti den "trasiga" MD:n med samma från den "nyss monterade" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Vi kontrollerar konfigurationen igen med hjälp av MDDiags.

Allt verkar vara OK. Nu går vi in ​​i konfiguratorn och gör ”testning och korrigering av informationssäkerhet” för att säkerställa att det inte blir fler fel.

Det är allt. Låt mig ta ledigt. Och må Kraften vara med dig!)

P.S. Särskilt tack till utvecklarna av verktygen som används i exemplet - de hjälper oss alla att leva så mycket...

God eftermiddag!. Förra gången vi tittade på hur man löser "Fel vid tillämpning av transformationer. Kontrollera riktigheten av vägarna för de angivna transformationerna," idag kommer jag att berätta om en annan konsekvens av det. Ämnet för publikationen kommer att vara en situation när du inte kan installera 1C-plattformen och du kommer att få ett meddelande: Windows-fel: funktionskörningsfel, vi löser det på en minut, jag är säker på att ämnet kommer att vara användbart för många.

Hur ser ett funktionskörningsfel ut?

Som jag skrev ovan får jag det här problemet på en Windows Server 2012 R2-terminalserver när jag försöker installera 1C 8.2-plattformen. Efter att ha kört filen setup.exe visas installationsguidens fönster och omedelbart ett ytterligare fönster med meddelandet:

Windows-fel: funktionskörningsfel

För vilket du kommer att få detta meddelande:

Som i de flesta fall med 1C-plattformen kan allt lösas med en liten korrigering i konfigurationsfilerna. Aktivera först visa dolda mappar, eftersom filen vi behöver inte är synlig som standard. Hitta sedan mappen på C:\-enheten Programdata.

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

Filen 1CEStat.cfg kan öppnas med vilken som helst textredigerare, högerklicka på den och välj "Öppna med" och sedan en bekväm redigerare.

I filen 1CEStat.cfg, hitta parametern, du måste ta bort den och spara filen.

Om du tittar på loggarna i händelsevisaren kommer du att se händelser som dessa.

Händelsekod 1013: Produkt: 1C:Enterprise 8.2 (8.2.19.130) -- Windows-fel: Funktionskörningsfel.

Händelse-ID 11708: Produkt: 1C:Enterprise 8.2 (8.2.19.130) -- Installationsoperationen misslyckades.

Efter att vi tog bort parametern ADMINISTRATIONFUNC=0 har vi redan fått:

Händelse-ID 1033: Windows Installer har installerat produkten. Produkt: 1C:Enterprise 8.2 (8.2.19.130). Version: 8.2.19.130. Språk: 1049. Tillverkare: 1C. Installation avslutad med status: 1603.




Topp