Windows-feil: funksjonsutførelsesfeil, løst på et minutt. Windows-feil: funksjonsutførelsesfeil, løst på et minutt Konfigurasjonssjekk uopprettelig feil 1s 7.7

Så hva er poenget med artikkelen min?

1. Det er en server (x64), med installert Office 2016 (x64), det er 1C 8.3.8 også x64 (som betyr 1C-server). Brukere kobler til både via en tynnklient og en nettklient.

2. Det er en haug med standardkontrakter og fakturaer utstedt (utarbeidet) av salgsavdelingen. Det er en font, et avsnitt, etc., selvfølgelig, alt er designet i Word, Excel 2016 (x64), selvfølgelig er det ikke noe ønske om å tegne alt dette i 1C, men det er et ønske om å sette det i ActiveDocument-format oppsett

Løsningen virker banal :) , Jeg vil ikke beskrive hele mekanismen, hvordan det gjøres, hvordan data fylles fra 1C inn i ActiveDocument-oppsettet - jeg tror du vet dette utmerket uten meg. Men under arbeidet viste det seg at ikke alt er så glatt i riket av COM-objekter, nemlig:

2. Hvilket alternativ er bedre å velge: ActiveDocument eller Binary Data? Selv om det for meg høres noe ut som å velge Vodka With Beer eller Beer With Vodka :) . Ingen big deal, du må fylle dokumentene med data fra 1C og overføre dem til klienten.

Vel, ok, la oss hoppe over tekstene, jeg velger ActiveDocument, jeg vil ikke beskrive hele algoritmen, jeg vil bare liste opp fallgruvene og løsningen deres. Alt nevnt nedenfor er min personlige spekulasjon og hevder på ingen måte å være den ultimate sannheten. Du kan ha løst disse problemene eller løst dem annerledes.

1. Stein" først". SaveAs-metoden fungerer ikke (for både MSWord og MSExcel). Når du prøver å skrive binære data, krasjer 1C ganske enkelt. Se på oppføringsfragmentet:

MSWord = Layout.Get(); Prøv Document = MSWord.Application.Documents(1); Document.Activate(); //Deretter får vi på en eller annen måte dataene og fyller ut Word-dokumentet //Hent banen i den midlertidige katalogen for å lagre filen der TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //stein begynner her MyDocumentInBinaryData = New BinaryData(NameTime); //vel, her er denne steinen slått ut av 1C :) MSWord.Application.Quit();

Takk så mye.

Opprette mapper
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problemet ble løst. Emne lukket.

Hva er grunnen? Årsaken er at koden

MSWord = Layout.Get();

Kaller alltid en forekomst av et COM-objekt (x32) uavhengig av hvilken bitness Office er installert. Har du noen gang lurt på hvorfor du ikke kan sette inn filer med utvidelsen docx, xlsx i ActoveDocument-oppsettet?

dette kan også sjekkes gjennom Task Manager, men faktum er at ActiveDocument-oppsettet implisitt kaller en COM-instans (x32) og derfor må alle videre manipulasjoner gjøres med denne funksjonen i betraktning.

1. Enten serveren og all programvare må være x32. Da trenger du ikke gjøre noe (i betydningen å skrive om koden)

2. Enten omskriv koden på denne måten

// få navnet på den midlertidige filen TimeFile = GetTemporaryFileName("doc"); // denne koden vil definitivt kalle en COM-instans med den nødvendige bitdybden, i vårt tilfelle x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // da er alt som før Layout = Print Management.Utskriftsskjema Layout ("Document. Equipment Transfer Act." + Layout Name); MSWord = Layout.Get(); Prøv Document = MSWord.Application.Documents(1); Document.Activate(); // her gjør vi noe, fyll inn dataene // her vil vi lagre filen vår på nytt fra COM x62 til 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 = Udefinert; Unntak // Hvis det oppstår en feil, skrives feildata ut og objektet lukkes. Informasjon = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Feil - "+Information.Description+" feilkode - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Sluttforsøk;

Jeg tror alt er klart her, først opprettet vi en COM-forekomst av den nødvendige bitdybden, opprettet en tom fil og lagret den i en midlertidig mappe, deretter jobber vi med COM x32, fyller den med data og kopierer til slutt innholdet i hele dokument og lagre det i en tidligere forberedt fil.

Alt er det samme, men bare for 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.Avslutt(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Prøver WBook = MSExcel.Application.Workbooks(1); Ark = WBook.WorkSheets(1); Ark.Aktiver(); // vi gjør noe, fyll det med data fra 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Unntak // Hvis det oppstår en feil, skrives feildata ut og objektet lukkes. Informasjon = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Feil - "+Information.Description+" feilkode - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Sluttforsøk;

Værsågod " først"Jeg bestemte meg for steinen, på en x64-server med Office x64 fungerer alt akkurat som smurt, uten feil, og det er ikke nødvendig å lage noen mapper og alt annet.

Stein" sekund". kodebit

TimeFile = GetTimeFileName("xls");

å spise er ikke veldig bra, fordi den skriver til mappen: “c:\Users\ what's there...”, generelt er denne mappen alltid på svartelisten over alle brannmurer, antivirus osv., etc., kl. minst åpne sikkerhetskontrollsenteret i Word eller Excel. La oss se der også

Du må fikle med dette, ellers er det en mulighet for at "rare" feil vises. Derfor foreslår jeg følgende:

1. Åpne konfiguratoren og legg til et nytt informasjonsregister

her vil vi lagre vårt ferdige ord, Excel-filer allerede fylt ut, selvfølgelig:

LayoutName - Layout ID

DocumentOffice - Value Storage, her beholder vi vår ferdige fil

2. Vi legger til koden ovenfor som følger:

MH = Informasjonsregister.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Les(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Skriv(); DeleteFiles(TimeFile);

Det vi gjør er å skrive den ferdige filen til informasjonsregisteret og deretter slette selve den midlertidige filen, og løse problemet med "Word, Excel Security Center". Alt som gjenstår er å vise denne ferdige filen til klienten (tynn- og nettklienter)

3. Stein" tredje" - overfører en fil til klienten, her vil jeg bare legge ut all koden, noen hentet fra BSP, noen fra "Managed Application" demokonfigurasjonen, noen fra Internett, men generelt er her koden (i sin helhet)

////////////////////////////////////////////// /////////////////////////// SERVICEPROSEDYRER OG FUNKSJONER BSP &OnServer-funksjon GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Record Key = Informasjonsregistre. TemporaryOfficeStorage. CreateRecordKey(New Structure("Objekt,LayoutName",ObjectLink,LayoutName)); // Adresse = GetNavigationLink(RecordKey,"OfficeDocument"); Returadresse; EndFunction // &OnClient-prosedyre AfterApplicationStart(ReturnCode, ApplicationName) Export; // Slutt på prosedyren &På klienten Prosedyre etter mottak av filer (overførte filer, tilleggsparametere) Eksporter hvis IKKE overførte filer = Udefinert Deretter For hver beskrivelse av de overførte filene, syklus OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; slutt om; Sluttprosedyre &OnClient-prosedyre AfterDirectorySelection(SelectedFiles, CommandName) Eksporter Hvis SelectedFiles = Udefinert, så returner; slutt om; Directory = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); If CommandName = "Invoice" Then LayoutName = "Invoice" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Slutt på prosedyre &På klienten Prosedyre Åpne filer gjennom utvidelse (kommandonavn) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Directory = GeneralPurposeCallServer.GetWorkingDirectory(); Hvis Directory = Udefinert ELLER Directory = "" Da Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Velger en katalog for midlertidig lagring av filer", "ru"); Dialog.Show(OpAfterSelectingDirectory); Ellers SelectedFiles = Ny Array; SelectedFiles.Add(Directory); Utfør varselbehandling (OpAfterSelectingDirectory, SelectedFiles); slutt om; Slutt på prosedyre &På klienten Prosedyre ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); slutt om; EndProcedure &OnClient-prosedyre Connected_PassFileToClient()-adresse = GetLayout(); Hvis adresse<>Undefined Then DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Directory = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Beskrivelse = Ny beskrivelse av den overførte filen (bane til fil, adresse); TransferredFiles = New Array; TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); slutt om; Slutt på prosedyre &På serverprosedyre 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-prosedyre Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient-prosedyre Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Objekt", Link); DataStructure.Insert("LayoutName", "Faktura"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Begynn å installere FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Noen få avklaringer:

1. For det første fungerer klienten vår gjennom både tynn- og nettmodus, så på forhånd angir vi følgende verdier i konfiguratoregenskapene:

For å unngå problemer når du jobber med nettleseren

2. Vi bruker ventehåndterere for å unngå problemer med samtalesynkronisering (dette gjelder kun nettmodus)

3. Og til slutt, koble til utvidelsen for å jobbe med filer (husk at i tynnklientmodus er denne utvidelsen alltid aktivert). Og gjennom koden:

vi overfører filen til klienten ved hjelp av Navigation Link-mekanismen, vi mottar følgende meldinger i nettleseren (Thin fungerer av seg selv):

Vel, det ser ut til å være alt. Håper dette hjelper noen...

Angående Word, Excel-filer satt inn som binære data? hva er problemet?

1. Vi må enten trekke ut disse binære dataene fra oppsettet og fylle dem med data fra 1C og OBS, skrive dem ned igjen i form av binære data (Vodka With Beer eller Beer With Vodka)

2. Enten må vi få BinaryData-oppsettet på klientsiden og fylle det ut der, MEN COM-objektet støttes kun av IE-nettleseren og deretter med danser med ActiveX-innstillinger, andre nettlesere har for lengst forlatt bruken av ActiveX

Jeg tror at hver av de "syv" programmererne har støtt på en slik feil minst én gang. Det kan oppstå enten under "sammenslåing av konfigurasjoner" eller under "testing og fiksing av informasjonssikkerhet."

Men ikke alle prøvde å "fikse" konfigurasjonen. I slike tilfeller søker de vanligvis febrilsk etter sikkerhetskopier, eller (en mer kompleks metode) tyr til hjelp av GComp-verktøyet, som "ifølge legenden" kan kurere MD hvis det bare "demonteres" og deretter "monteres" ved hjelp av funksjonene til programmet. Det er faktisk slik. Men ikke i alle tilfeller... Det er akkurat dette tilfellet jeg vil undersøke i denne artikkelen.

Så de første dataene:

- "ødelagt konfigurasjon";

Nytte MDDiags

- Langtsjef og plugin DokFileNettleser til ham. Ved å bruke denne plugin, kan du gå inn i MD og jobbe med objektene.

Siden konfiguratoren nekter å vise denne "ukorrigerbare feilen", kjører vi MDDiagså identifisere den eller dem.

Etter å ha startet verktøyet, velg ønsket konfigurasjon, deretter alle standardinnstillingene... kjør, analyser, få resultatet.

Du kan ha andre feil, men jeg tror du vil kunne finne ut av dem når du har en generell forståelse av hvordan du finner feilen og hvordan du kan fikse den.

1. Feil>(\\Tidsskrift)

Verktøyet gjorde det klart at feilen ble observert for 2 objekter "\\ Journal\Journal_Number 212" og "\\Journal\Journal_Number 860". La oss nå gå tilLangt og se på gjenstandene der.


Vi ser her mange objekter og en fil "Container.Contents". Den lagrer beskrivelser av de samme objektene. Etter å ha studert innholdet i filen nøye, forstår vi at det ikke er noen beskrivelser for våre 2 objekter.

Legg til beskrivelser som vist i figuren.

Problem løst.

2. Feil DOKUMENT. Kvitteringsfaktura (\\TypedText\Brukerhjelp_Number434\Container.Innhold)

Vi går igjen til MD langs den angitte stien. Åpne filen " Container. Innhold " og se nøye på innholdet.

De merkelige ordene Cgntainer, Contentq, Prmgram fanger umiddelbart oppmerksomheten din. Det stemmer, dette er feilstavede identifikatorer. Det er ikke vanskelig å gjette hvordan det skal være riktig (hvis det er vanskelig, gå til neste gren, åpne den samme "Container.Contents"-filen og se hvordan den skal skrives).

3. FeilKATALOG.Typiske operasjoner(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Åpne filen på den angitte banen og se nøye... Alle parametere må stå i anførselstegn. En av parameterne har et "mellomrom" i stedet for et "sitat" - vi retter det (denne feilen kan oppstå når beskrivelsen av et av elementene i et objekt (felt, knapp, liste over verdier, etc.) inneholder en enkelt eller dobbelt anførselstegn, eller noen av "spesialtegnene").

La oss starte igjen MDDiags og vi ser at alle tidligere feil har forsvunnet, men en annen feil har dukket opp.

Nå er det på tide å gå til GComp-verktøyet og sjekke "legenden" ...

Vi starter verktøyet, velger vår ødelagte (for nå) MD og mappen der vi skal plassere konfigurasjonen sortert etter objekter, så er alle avmerkingsboksene som standard, det eneste er å merke av for "slett" tomme maler tabeller" på fanen "Generelle parametere", klikk "Dekompiler".

Deretter, uten videre, gå til "kompilering" -fanen, sett kildekatalogen til den du nettopp analyserte konfigurasjonen i og angi banen til den nye MD-en.

Verktøyet vil montere alt trygt.

Nå må vi bare Far Manager erstatt den tilsvarende filen inne i den "ødelagte" MD-en med den samme fra den "nyoppstilte" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Vi sjekker konfigurasjonen på nytt ved å bruke MDDiags.

Alt ser ut til å være i orden. Nå går vi inn i konfiguratoren og gjør "testing og korrigering av informasjonssikkerhet" for å sikre at det ikke er flere feil.

Det er alt. La meg ta min permisjon. Og må Kraften være med deg!)

P.S. Spesiell takk til utviklerne av verktøyene som ble brukt i eksemplet - de hjelper oss alle å leve så mye...

God ettermiddag!. Sist gang vi så på hvordan du løser "Feil ved bruk av transformasjoner. Sjekk riktigheten av banene til de spesifiserte transformasjonene", i dag vil jeg fortelle deg om en annen konsekvens på grunn av det. Temaet for publikasjonen vil være en situasjon når du ikke kan installere 1C-plattformen, og du vil motta en melding: Windows-feil: feil ved kjøring av funksjon, vi løser det på et minutt, jeg er sikker på at emnet vil være nyttig for mange.

Hvordan ser en funksjonsutførelsesfeil ut?

Som jeg skrev ovenfor, får jeg dette problemet på en Windows Server 2012 R2-terminalserver når jeg prøver å installere 1C 8.2-plattformen. Etter å ha kjørt setup.exe-filen, vises installasjonsveiviservinduet, og umiddelbart et ekstra vindu med meldingen:

Windows-feil: feil ved kjøring av funksjon

som du vil motta dette varselet for:

Som i de fleste tilfeller med 1C-plattformen, kan alt løses med en liten korreksjon i konfigurasjonsfilene. Først, slå på visning av skjulte mapper, siden filen vi trenger ikke er synlig som standard. Finn deretter mappen på C:\-stasjonen Programdata.

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

Filen 1CEStat.cfg kan åpnes ved å bruke hvilken som helst tekstredigerer, høyreklikk på den og velg "Åpne med", og deretter en praktisk editor.

Finn parameteren i filen 1CEStat.cfg, du må slette den og lagre filen.

Hvis du ser på loggene i hendelsesvisningen, vil du se hendelser som disse.

Hendelseskode 1013: Produkt: 1C:Enterprise 8.2 (8.2.19.130) -- Windows-feil: Feil ved kjøring av funksjon.

Hendelses-ID 11708: Produkt: 1C:Enterprise 8.2 (8.2.19.130) -- Installasjonsoperasjonen mislyktes.

Etter at vi fjernet parameteren ADMINISTRATIONFUNC=0, har vi allerede mottatt:

Hendelses-ID 1033: Windows Installer har installert produktet. Produkt: 1C:Enterprise 8.2 (8.2.19.130). Versjon: 8.2.19.130. Språk: 1049. Produsent: 1C. Installasjon fullført med status: 1603.




Topp