Windows napaka: napaka pri izvajanju funkcije, rešimo jo v minuti. Napaka sistema Windows: napaka pri izvajanju funkcije, rešimo jo v minuti Preverjanje konfiguracije usodna napaka 1s 7.7

Kaj je torej smisel mojega članka?

1. Obstaja strežnik (x64), z nameščen Office 2016 (x64), obstaja 1C 8.3.8 tudi x64 (kar pomeni 1C strežnik). Uporabniki se povezujejo prek tankega odjemalca in spletnega odjemalca.

2. Obstaja veliko tipskih pogodb in računov, ki jih izda (pripravi) komerciala. Obstaja pisava, odstavek itd., Seveda je vse zasnovano v Wordu, Excelu 2016 (x64), seveda ni želje, da bi vse to narisali v 1C, vendar obstaja želja, da bi to potisnili v ActiveDocument formatne postavitve

Zdi se, da je odločitev banalna :) , ne bom opisal celotnega mehanizma, kako se to naredi, kako se podatki polnijo iz 1C v postavitev ActiveDocument - mislim, da to dobro poznate brez mene. Toda med delom se je izkazalo, da na področju objektov COM ni vse tako gladko, in sicer:

2. Katero možnost je bolje izbrati: ActiveDocument ali BinaryData? Čeprav se zame sliši, kaj izbrati Vodka With Beer ali Beer With Vodka :) . Ena figa, dokumente morate izpolniti s podatki iz 1C in jih prenesti stranki.

No, v redu, preskočimo besedilo, izberem ActiveDocument, celotnega algoritma ne bom opisoval, le naštel bom "pasti" in njihovo rešitev. Vse naslednje je moja osebna izmišljotina in nikakor ne trdi, da je končna resnica. Morda ste te težave rešili ali pa jih rešite drugače.

1. Kamen " prvi". Metoda SaveAs ne deluje (za MSWord in MSExcel). Ko poskušate napisati BinaryData, se 1C preprosto zruši. Pogledamo fragment seznama:

MSWord = Layout.Get(); Poskus dokumenta = MSWord.Application.Documents(1); Dokument.Aktiviraj(); //Nato nekako pridobite podatke in izpolnite Wordov dokument //Pridobite pot v začasnem imeniku, da tja shranite datoteko TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //kamen se začne tukaj MyDocumentInBinaryData = New BinaryData(NameTime); //no, tukaj ta kamen premaga 1C :) MSWord.Application.Quit();

Najlepša hvala.

Ustvarite mape
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
rešil problem. Tema zaprta.

Kakšen je razlog? Razlog je v tem, da koda

MSWord = Layout.Get();

Vedno prikliče primerek predmeta COM (x32), ne glede na to, kakšna bitnost Officea je nameščena. Ste se kdaj vprašali, zakaj datotek s pripono docx, xlsx ni mogoče vstaviti v postavitev ActoveDocument

to je mogoče preveriti tudi prek upravitelja opravil, a dejstvo je, da postavitev ActiveDocument implicitno kliče primerek COM (x32) in je zato treba vse nadaljnje manipulacije izvajati ob upoštevanju te funkcije.

1. Strežnik in vsa programska oprema morata biti x32. Potem vam ni treba storiti ničesar (v smislu prepisovanja kode)

2. Bodisi prepišite kodo na tak način

// pridobi ime začasne datoteke TempFile = GetTemporaryFileName("doc"); // ta koda bo natančno poklicala primerek COM zahtevane bitnosti, v našem primeru x64 Word = New COMObject("Word.Application"); word.displayalerts = 0; DokumentN = Word.Application.Documents.Add(); DocumentH.SaveAs(TimeFile,0); Word.Quit(); // potem je vse kot prej Layout = PrintControl.PrintFormLayout("Document.Equipment Transfer Certificate."+LayoutName); MSWord = Layout.Get(); Poskus dokumenta = MSWord.Application.Documents(1); Dokument.Aktiviraj(); // tukaj naredite nekaj, vnesite podatke // tukaj ponovno shranimo našo datoteko iz COM x62 v COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentH = MSWord.Application.Documents.Open(TimeFile); DokumentH.Aktiviraj(); MSWord.Application.Selection.Paste(); DocumentH.SaveAs(TimeFile,0); DokumentN.Zapri(); msword = nedefinirano; Izjema // Če pride do napake, se prikažejo podatki o napaki in objekt se zapre. Info = ErrorInfo(); General PurposeClientServer.NotifyUser("Napaka - "+Information.Description+" koda napake - "+Abbr(Information.SourceString)); MSWord.Application.Quit(); Konec poskusa;

Mislim, da je tukaj vse jasno, najprej smo ustvarili primerek COM zahtevane bitne globine, ustvarili prazno datoteko in jo shranili v začasno mapo, nato deluje s COM x32, jo napolni s podatki in na koncu kopira vsebino celotnega dokument in ga shrani v predhodno pripravljeno datoteko.

Vse isto, vendar samo za Excel

TempFile = GetTempFileName("xls"); Excel = New COMObject("Excel.Application"); excel.displayalerts = 0; BookH = Excel.WorkBooks.Add(); ListN = KnjigaN.Delovni Listi(1); BookH.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintControl.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); WorkbookH = MSExcel.Application.Workbooks.Open(TimeFile); ListN = KnjigaN.Delovni Listi(1); Poskušam WBook = MSExcel.Application.Workbooks(1); List = WBook.WorkSheets(1); Leaf.Activate(); // narediti nekaj, izpolniti s podatki iz 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookH.Save(); KnjigaN.Zapri(); Izjema // Če pride do napake, se prikažejo podatki o napaki in objekt se zapre. Info = ErrorInfo(); General PurposeClientServer.NotifyUser("Napaka - "+Information.Description+" koda napake - "+Abbr(Information.SourceString)); MSExcel.Application.Quit(); Konec poskusa;

Izvoli " prvi"Stone sem rešil, na strežniku x64 z Officeom x64 vse deluje kot po maslu, brez napak in ni potrebe po ustvarjanju nobenih map in vsega.

Kamen " drugo". delček kode

TempFile = GetTempFileName("xls");

tam ni zelo dobro, ker piše v mapo: "c:\Users\ what's there ....", na splošno je ta mapa vedno na črnem seznamu vseh požarnih zidov, protivirusnih programov itd. itd., vsaj odprite Word Security Control Center ali Excel. Poglejmo tudi tja

s tem se je treba poigrati, sicer obstaja možnost "čudnih" napak. Zato predlagam naslednje:

1. Odprite konfigurator in dodajte nov register informacij

tukaj bomo shranili našo končano Besedo, datoteke excel seveda že zapolnjeno:

LayoutName - ID postavitve

Office Document – ​​Value Store, tukaj hranimo našo končano datoteko

2. Dodamo zgoraj napisano kodo, kot sledi:

MH = RegistersInformation.TemporaryStorageOffice.CreateRecordManager(); MZ.Object = Selection.Reference; MZ.LayoutName = LayoutName; MZ.Read(); MZ.Object = Selection.Reference; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TempFile)); MZ.Write(); Izbriši datoteke (začasna datoteka);

Kaj naredimo, končano datoteko zapišemo v register informacij in nato izbrišemo samo začasno datoteko, rešimo težavo "Word, Excel Security Center". Preostane le še ena stvar, da to končano datoteko pokažete odjemalcu (tankemu in spletnemu odjemalcu)

3. Kamen " tretji" - prenos datoteke v stranko, tukaj bom samo objavil celotno kodo, nekaj sem vzel iz BSP, nekaj iz demo konfiguracije "Managed Application", nekaj iz interneta, ampak na splošno je tukaj koda (v celoti )

////////////////////////////////////////////////// / ///////////////////////////// // STORITVENI POSTOPKI IN FUNKCIJE BSP &AtServer Funkcija GetLayout() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = DataRegisters.Office TemporaryStorage.CreateRecordKey(Nova struktura("Object,LayoutName",ObjectReference,LayoutName)); // Naslov = GetNavigationLink(RecordKey,"OfficeDocument"); Povratni naslov; EndFunction // &OnClient Procedure AfterApplicationStart(ReturnCode, ApplicationName) Export; // EndProcedure &AtClient Procedure AfterFilesReceived(SubmittedFiles, AdditionalParameters) Export If NOT SubmittedFiles=Undefined Then For Every Description From SubmittedFiles Loop OpAfterApplicationStart = NewAlertDescription("AfterApplicationStart", ThisObject, Description.Name); StartApplicationStart(OpAfterApplicationStart, Description.Name); EndCycle; EndIf; EndProcedure &OnClient Procedure AfterDirSelect(SelectedFiles,CommandName) Export If FilesSelected = Undefined Then Return; EndIf; Imenik = Izbrane datoteke; General PurposeCallServer.SaveWorkingDirectory(Directory); If CommandName = "Invoice" Then LayoutName = "Invoice" EndIf; DataStructure.Insert("Katalog", Imenik); ConnectWaitingHandler("Connected_TransferFileToClient",5,True); EndProcedure &OnClient Procedure OpenFilesViaExtension(CommandName) OpAfterCatalog Selection = New AlertDescription("AfterCatalog Selection", ThisObject, CommandName); Imenik = General PurposeCallServer.GetWorkingDirectory(); If Directory = Undefined ALI Directory = "" Then Dialog = NewFileChoiceDialog(FileChoiceDialogMode.CatalogChoice); Dialog.Title = НStr("ru = "Izberite imenik za začasno shranjevanje datotek"", "ru"); Dialog.Show(OpAfterCatalog Selection); Else SelectedFiles = Nova matrika; SelectedFiles.Add(Directory); ExecuteAlertProcessing(OpAfterSelectingCatalog, SelectedFiles); EndIf; EndProcedure &OnClient Procedure HandleFileWorkingExtensionConnection(ExtensionConnected,AdditionalParameters) Export If ExtensionConnected Then OpenFilesViaExtension(AdditionalParameters.CommandName); EndIf; EndProcedure &AtClient Procedure Connected_PassFileClient() Address = GetLayout(); Če je naslov<>Undefined Then DisableWaitingHandler("Connected_PassFileClient"); DocumentNumber = DataStructure.DocumentNumber; Imenik = DataStructure.Catalog; LayoutName = DataStructure.LayoutName; PathToFile = Imenik+"\"+LayoutName+"_#"+DocumentNumber+".xls"; Opis = Nov opis datoteke, ki se prenaša (pot do datoteke, naslov); TransferredFiles = Nova matrika; TransferredFiles.Add(Description); StartReceiveFiles(NewNotificationDescription("AfterReceivedFiles", ThisObject), TransferredFiles, "", False); EndIf; EndProcedure &AtServer Procedure ExecutePrintServer() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ArrayObjects = Nova matrika; ArrayObjects.Add(ObjectReference); Documents.InvoiceEquipment.PrintInvoice(ArrayObjects,LayoutName,True); EndProcedure &OnClient Procedure Connected_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connected_ExecutePrintCommand(Command) Reference = Items.List.CurrentData.Reference; DataStructure = Nova struktura; DataStructure.Insert("Object", Link); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connected_PerformPrint", 1, True); CommandDescription = PrintControlClient.PrintCommandDescription(Command.Name,FormName); Začetek nameščanjadatotečnihdelovnihrazširitev(); StartFileExtensionConnection(New AlertDescription("ProcessFileExtensionConnection",ThisObject,New Structure("CommandName",CommandDescription.Identifier)))); EndProcedure // End StandardSubsystems.Print

Nekaj ​​pojasnil:

1. Prvič, odjemalec deluje za nas v tankem in spletnem načinu, zato vnaprej nastavimo naslednje vrednosti v lastnostih konfiguratorja:

Da bi se izognili težavam pri delu z brskalnikom

2. Uporabljamo urejevalnike čakanja, da se izognemo težavam s sinhronizacijo klicev (to velja samo za spletni način)

3. In končno, povežemo razširitev za delo z datotekami (ne pozabite, da je v načinu tankega odjemalca ta razširitev vedno omogočena). In skozi kodo:

prenesemo datoteko odjemalcu z mehanizmom NavigationLink, dobimo v brskalniku naslednja sporočila (Slim deluje sam):

No, zdi se, da je to vse. Upam, da to komu pomaga ...

Glede datotek Word, Excel za vstavljanje v obliki BinaryData? v čem je problem?

1. Te BinaryData moramo izvleči iz postavitve in jih napolniti s podatki iz 1C ter jih POZOR ponovno zapisati v obliki BinaryData (Vodka With Beer ali Beer With Vodka)

2. Bodisi moramo pridobiti postavitev BinaryData na strani odjemalca in jo tam izpolniti, TODA objekt COM podpira samo brskalnik IE in nato s plesi z nastavitvami ActiveX, drugi brskalniki so že dolgo opustili uporabo ActiveX

Mislim, da je vsak od programerjev "sedmih" vsaj enkrat naletel na takšno napako. Pojavi se lahko med "združevanjem konfiguracije" ali med "testiranjem in popravkom IS".

Vendar niso vsi poskušali "popraviti" konfiguracije. V takšnih primerih običajno bodisi mrzlično iščejo varnostne kopije, bodisi (na bolj zapleten način) zatečejo k pomoči pripomočka GComp, ki "po legendi" lahko pozdravi MD, če ga preprosto "razstavite" in nato "sestavite" z uporabo programskih funkcij. Prav zares. Ampak ne v vseh primerih ... Prav tak primer bi rad analiziral v tem članku.

Torej začetni podatki:

- "pokvarjena konfiguracija";

Pripomoček MDDiags

- dalečvodja in vtičnik docfileBrskalnik njemu. S tem vtičnikom lahko greste v MD in delate z njegovimi predmeti.

Ker konfigurator noče prikazati niti te "usodne napake", poženemo MDDiags odkriti to ali njih.

Po zagonu pripomočka izberite želeno konfiguracijo, nato vse privzete nastavitve ... zaženite, analizirajte, dobite rezultat.

Morda imate druge napake, vendar menim, da jih boste lahko odpravili, ko boste dosegli skupno razumevanje, kako napako najti in kako jo popraviti.

1. Napaka>(\\Dnevnik)

Pripomoček je pojasnil, da je napaka opažena pri 2 predmetih "\\ Dnevnik \ Dnevnik _ Številka 212" in "\\ Dnevnik \ Dnevnik _ Številka 860". Zdaj pa pojdi nadaleč in si oglejte predmete tam.


Tukaj vidimo veliko predmetov in eno datoteko "Container.Contents". Shranjuje deskriptorje teh istih predmetov. Po natančnem pregledu vsebine datoteke ugotovimo, da za naša 2 predmeta ni deskriptorjev.

Dodajte deskriptorje, kot je prikazano na sliki.

Problem rešen.

2. Napaka DOCUMENT.Invoice (\\Tipkano besedilo\UserHelp_Številka434\posoda.vsebina)

Po označeni poti se vrnemo do MD. Odpiranje datoteke posoda. vsebino in si podrobneje oglejte njegovo vsebino.

Nenavadne besede Cgntainer, Contentq, Prmgram takoj padejo v oči. Tako je, to so napačno črkovani identifikatorji. Ni težko uganiti, kako bi moralo biti pravilno (če je težko, pojdite v naslednjo vejo, odprite isto datoteko "Container.Contents" in poglejte, kako naj bo napisano).

3. NapakaIMENIK.TypicalOperations(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Odprite datoteko na navedeni poti in pozorno poglejte... Vsi parametri morajo biti v narekovajih. Eden od parametrov ima namesto "narekovaja" "presledek" - popravite ga (takšna napaka se lahko pojavi, če opis enega od elementov objekta (polja, gumbi, seznam vrednosti itd.) vsebuje en sam oz. dvojni narekovaj ali kateri koli od "posebnih znakov").

Začnemo znova MDDiags in vidimo, da so vse prejšnje napake izginile, pojavila pa se je druga napaka.

Zdaj je čas, da se obrnete na pripomoček GComp in preverite "legendo" ...

Zaženemo pripomoček, izberemo naš pokvarjen (zaenkrat) MD in mapo, kamor naj postavimo konfiguracijo, razčlenjeno na objekte, nato vsa privzeta potrditvena polja, edina stvar je, da nastavimo »izbriši prazne predloge tabele" na zavihku "Splošne možnosti" kliknite "Decompile".

Nato brez odlašanja pojdite na zavihek "kompilacija", nastavite kot izvorni imenik tistega, v katerega je bila pravkar razčlenjena konfiguracija, in določite pot do novega MD.

Komunala bo vse varno pobrala.

Zdaj nam preostane le še Far Manager zamenjajte ustrezno datoteko znotraj "pokvarjenega" DM-ja z isto datoteko iz "pravkar izdelanega" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Ponovno preverite konfiguracijo z MDDiags.

Zdi se, da je vse v redu. Zdaj gremo v konfigurator in naredimo "testiranje in popravljanje informacijske varnosti", da se prepričamo, da ni več napak.

To je vse. Dovolite mi, da se priklonim. In naj bo Sila s teboj!

P.S. Posebna zahvala razvijalcem pripomočkov, uporabljenih v primeru - vsi nam pomagajo živeti toliko ...

Dober večer!. Nazadnje smo ugotovili, kako rešiti "Napaka pri uporabi transformacij. Preverite pravilnost poti navedenih transformacij", danes vam bom povedal še o eni posledici zaradi tega. Tema publikacije bo situacija, ko ne morete namestiti platforme 1C in boste prejeli sporočilo: Napaka sistema Windows: napaka pri izvajanju funkcije, se odločimo v minuti, prepričan sem, da bo tema koristna za mnoge.

Kako je videti napaka pri izvajanju?

Kot sem napisal zgoraj, se to zgodi na terminalskem strežniku Windows Server 2012 R2, ko poskušam namestiti platformo 1C 8.2. Po zagonu datoteke setup.exe se prikaže okno čarovnika za namestitev in takoj dodatno okno s sporočilom:

Napaka sistema Windows: napaka pri izvajanju funkcije

Po tem boste prejeli naslednje obvestilo:

Kot v večini primerov s platformo 1C je vse rešeno z majhnim popravkom v konfiguracijskih datotekah. Najprej vklopite prikaz skritih map, saj datoteka, ki jo potrebujemo, privzeto ni vidna. Nato na pogonu C:\ poiščite mapo ProgramData.

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

Datoteko 1CEStat.cfg lahko odprete s katerim koli urejevalnik besedil, z desno miškino tipko kliknite nanjo in izberite "Odpri z", nato pa urejevalnik, ki vam ustreza.

Poiščite parameter v datoteki 1CEStat.cfg, morate ga izbrisati in shraniti datoteko.

Če pogledate dnevnike v pregledovalniku dogodkov, boste videli naslednje dogodke.

ID dogodka 1013: Izdelek: 1C:Enterprise 8.2 (8.2.19.130) -- Napaka sistema Windows: napaka pri izvajanju funkcije.

ID dogodka 11708: Izdelek: 1C:Enterprise 8.2 (8.2.19.130) -- Namestitev ni uspela.

Ko smo odstranili parameter ADMINISTRATIONFUNC=0, smo dobili:

ID dogodka 1033: Windows Installer je namestil izdelek. Izdelek: 1C:Enterprise 8.2 (8.2.19.130). Različica: 8.2.19.130. Jezik: 1049. Proizvajalec: 1C. Namestitev končana s statusom: 1603.




Vrh