Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Sigurnost
  • Došlo je do nepopravljive greške na 1c serveru. Windows greška: greška u izvršavanju funkcije, riješena za minut

Došlo je do nepopravljive greške na 1c serveru. Windows greška: greška u izvršavanju funkcije, riješena za minut

Mislim da se svaki od "sedam" programera barem jednom susreo sa takvom greškom. Može se dogoditi ili tokom „spajanja konfiguracija“ ili tokom „testiranja i popravljanja sigurnosti informacija“.

Ali nisu svi pokušali "popraviti" konfiguraciju. U takvim slučajevima obično ili bjesomučno traže sigurnosne kopije, ili (kompleksnija metoda) pribjegavaju pomoći uslužnog programa GComp, koji “prema legendi” može izliječiti MD ako se jednostavno “rastavi” i potom “sastavi” pomoću funkcije programa. Zaista, tako je. Ali ne u svim slučajevima... To je upravo slučaj koji bih želeo da ispitam u ovom članku.

Dakle, početni podaci:

- "pokvarena konfiguracija";

Utility MDDiags

- DalekoMenadžer i plugin DocFilePretraživač za njega. Koristeći ovaj dodatak, možete ući u MD i raditi sa njegovim objektima.

Pošto konfigurator odbija čak ni da prikaže ovu "neispravljivu grešku", pokrećemo MDDiags da ih identifikuju.

Nakon pokretanja uslužnog programa, odaberite željenu konfiguraciju, zatim sve zadane postavke... pokrenite, analizirajte, dobijte rezultat.

Možda imate i druge greške, ali mislim da ćete ih moći shvatiti kada steknete opće razumijevanje kako pronaći grešku i kako je popraviti.

1. Greška>(\\Journal)

Uslužni program je jasno stavio do znanja da je greška uočena za 2 objekta "\\ Journal\Journal_Number 212" i "\\Journal\Journal_Number 860". Sada idemo naDaleko i pogledaj predmete tamo.


Ovdje vidimo mnogo objekata i jednu datoteku "Container.Contents". Pohranjuje deskriptore tih istih objekata. Nakon pažljivog proučavanja sadržaja datoteke, shvatili smo da nema deskriptora za naša 2 objekta.

Dodajte deskriptore kao što je prikazano na slici.

Problem riješen.

2. Greška DOCUMENT.Prijem fakture (\\Upisani tekst\UserHelp_Broj 434\Kontejner.sadržaj)

Ponovo idemo do MD naznačenom stazom. Otvorite fajl " Kontejner. Sadržaj “ i pažljivo pogledajte njegov sadržaj.

Čudne riječi Cgtainer, Contentq, Prmgram odmah vam upadaju u oči. Tako je, ovo su pogrešno napisani identifikatori. Nije teško pogoditi kako bi to trebalo biti ispravno (ako je teško, idite na sljedeću granu, otvorite isti fajl "Container.Contents" i pogledajte kako treba pisati).

3. GreškaDIRECTORY.Typical Operations(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Otvorite datoteku na navedenoj putanji i pažljivo pogledajte... Svi parametri moraju biti u navodnicima. Jedan od parametara ima "razmak" umjesto "navodnika" - ispravljamo ga (ova greška može nastati kada opis jednog od elemenata objekta (polja, gumba, liste vrijednosti, itd.) sadrži jednu ili dvostruki navodnik, ili neki drugi iz "posebnih znakova").

Pokrenimo ponovo MDDiags i vidimo da su sve prethodne greške nestale, ali se pojavila još jedna greška.

Sada je vrijeme da se okrenete uslužnom programu GComp i provjerite "legendu"...

Pokrećemo uslužni program, izaberemo naš pokvareni (za sada) MD, i folder u koji treba da stavimo konfiguraciju sortiranu po objektima, onda su svi checkboxovi po defaultu, jedino je da označimo kućicu "izbriši prazne šablone tablice" na na kartici "Opći parametri", kliknite na "Dekompiliraj" ".

Zatim, bez daljnjeg, idite na karticu "kompilacija", postavite izvorni direktorij na onaj u kojem ste upravo raščlanili konfiguraciju i naznačite putanju do novog MD-a.

Uslužni program će sve sigurno sastaviti.

Sada sve što treba da uradimo je da upotrebimo Far Manager da zamenimo odgovarajući fajl unutar „pokvarenog“ MD-a istim onim iz „tek sastavljenog“ (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Ponovo provjeravamo konfiguraciju pomoću MDDiags.

Čini se da je sve u redu. Sada ulazimo u konfigurator i radimo “testiranje i korekciju sigurnosti informacija” kako bismo bili sigurni da više nema grešaka.

To je sve. Pusti me da odem. I neka Sila bude s vama!)

P.S. Posebno zahvaljujemo programerima uslužnih programa korištenih u primjeru - oni nam svima pomažu da živimo toliko...

Dakle, koja je poenta mog članka?

1. Postoji server (x64), sa instaliranim Office 2016 (x64), postoji 1C 8.3.8 i x64 (što znači 1C server). Korisnici se povezuju putem tankog klijenta i web klijenta.

2. Postoji gomila standardnih ugovora i faktura koje izdaje (pripremi) odjel prodaje. Postoji font, pasus itd., Naravno, sve je dizajnirano u Wordu, Excelu 2016 (x64), naravno, nema želje da se sve to nacrta u 1C, ali postoji želja da se to stavi u ActiveDocument format rasporedi

Rešenje deluje banalno :) , neću opisivati ​​cijeli mehanizam, kako se to radi, kako se podaci iz 1C pune u ActiveDocument izgled - mislim da to savršeno dobro znate i bez mene. Ali tokom rada se pokazalo da nije sve tako glatko u domeni COM objekata, naime:

2. Koju opciju je bolje izabrati: ActiveDocument ili Binarni podaci? Iako mi to zvuči kao da biram Votku s pivom ili Pivo s votkom :) . Ništa strašno, potrebno je popuniti dokumente podacima iz 1C i prenijeti ih klijentu.

Pa dobro, preskočimo stihove, biram ActiveDocument, neću opisivati ​​cijeli algoritam, samo ću navesti zamke i njihova rješenja. Sve navedeno u nastavku je moja lična spekulacija i ni na koji način ne tvrdi da je konačna istina. Možda ste riješili ove probleme ili ih drugačije riješili.

1. Kamen" prvo". Metoda SaveAs ne radi (i za MSWord i za MSExcel). Kada pokušavate napisati binarne podatke, 1C se jednostavno ruši. Pogledajte fragment liste:

MSWord = Layout.Get(); Pokušajte Document = MSWord.Application.Documents(1); Document.Activate(); //Sljedeće, nekako dobivamo podatke i popunjavamo Word dokument //Nabavljamo putanju u privremenom direktoriju za spremanje datoteke tamo TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //kamen počinje ovdje MyDocumentInBinaryData = New BinaryData(NameTime); //pa, evo ovaj kamen je nokautirao 1C :) MSWord.Application.Quit();

Hvala puno.

Kreiranje foldera
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problem je riješen. Tema zatvorena.

Šta je razlog? Razlog je taj kod

MSWord = Layout.Get();

Uvek poziva instancu COM objekta (x32) bez obzira na to koji bitnost je Office instaliran. Jeste li se ikada zapitali zašto ne možete umetnuti datoteke sa ekstenzijom docx, xlsx u izgled ActoveDocumenta?

ovo se može provjeriti i kroz Task Manager, ali činjenica je da ActiveDocument raspored implicitno poziva COM instancu (x32) i stoga se sve dalje manipulacije moraju raditi uzimajući u obzir ovu mogućnost.

1. Server i sav softver moraju biti x32. Tada ne morate ništa raditi (u smislu ponovnog pisanja koda)

2. Ili prepišite kod na ovaj način

// dobijemo ime privremene datoteke TimeFile = GetTemporaryFileName("doc"); // ovaj kod će definitivno pozvati COM instancu potrebne dubine bita, u našem slučaju x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DokumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // onda je sve kao prije Layout = Print Management. Printing Form Layout ("Dokument. Zakon o prijenosu opreme." + Naziv Layouta); MSWord = Layout.Get(); Pokušajte Document = MSWord.Application.Documents(1); Document.Activate(); // ovdje radimo nešto, popunjavamo podatke // ovdje ćemo ponovo sačuvati našu datoteku iz COM x62 u COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DokumentN = MSWord.Application.Documents.Open(TimeFile); DokumentN.Aktiviraj(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Nedefinisano; Izuzetak // Ako dođe do greške, podaci o grešci se ispisuju i objekt se zatvara. Informacije = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Greška - "+Information.Description+" kod greške - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

Mislim da je ovdje sve jasno, prvo smo kreirali COM instancu potrebne dubine bita, kreirali praznu datoteku i spremili je u privremenu mapu, zatim radimo sa COM x32, popunjavamo je podacima i na kraju kopiramo sadržaj cijele dokument i snimite ga u prethodno pripremljenu datoteku.

Sve je isto, ali samo za Excel

TimeFile = GetTimeFileName("xls"); Excel = Novi COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); ListN = KnjigaN.Radni listovi(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Dokument.Faktura za opremu."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); ListN = KnjigaN.Radni listovi(1); Pokušaj WBook = MSExcel.Application.Workbooks(1); List = WBook.WorkSheets(1); Sheet.Activate(); // uradimo nešto, ispunimo to podacima iz 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Izuzetak // Ako dođe do greške, podaci o grešci se ispisuju i objekt se zatvara. Informacije = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Greška - "+Information.Description+" kod greške - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Izvoli " prvo“Odlučio sam se za kamen, na x64 serveru sa Office x64, sve radi kao sat, bez grešaka i nema potrebe za kreiranjem foldera i svega ostalog.

kamen" sekunda". isječak koda

TimeFile = GetTimeFileName("xls");

jelo nije baš dobro, jer piše u folder: "c:\Users\ šta ima...", generalno, ovaj folder je uvek na crnoj listi svih firewall-a, antivirusa, itd itd., na barem otvorite sigurnosni kontrolni centar u Wordu ili Excelu. Pogledajmo i tamo

Morat ćete se pozabaviti ovim, inače postoji mogućnost pojave „čudnih“ grešaka. Stoga predlažem sljedeće:

1. Otvorite konfigurator i dodajte novi registar informacija

ovdje ćemo pohraniti naše gotove Word, Excel datoteke, već popunjene, naravno:

LayoutName - ID rasporeda

DocumentOffice - Skladište vrijednosti, ovdje čuvamo našu gotovu datoteku

2. Gornji kod dodajemo na sljedeći način:

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);

Ono što radimo je da upišemo gotovu datoteku u registar informacija, a zatim izbrišemo samu privremenu datoteku, rješavajući problem “Word, Excel sigurnosni centar”. Sve što ostaje je da se ovaj gotov fajl pokaže klijentu (tanki i web klijenti)

3. Kamen" treće" - prebacivanje datoteke na klijenta, ovdje ću samo postaviti sav kod, neki preuzet iz BSP-a, dio iz demo konfiguracije „Upravljane aplikacije“, neki s interneta, ali općenito evo koda (u njegovom u cijelosti)

/////////////////////////////////////////////// // ////////////////////////// // SERVISNE PROCEDURE I FUNKCIJE BSP &OnServer funkcija GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Ključ zapisa = Informacijski registri. TemporaryOfficeStorage. CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Adresa = GetNavigationLink(RecordKey,"OfficeDocument"); Povratna adresa; EndFunction // &OnClient procedura AfterApplicationStart(ReturnCode, ApplicationName) Export; // Kraj procedure &o proceduri klijenta nakon prijema datoteka (prenesenih datoteka, dodatnih parametara) Izvoz Ako NISU prenesene datoteke = nedefinirano Onda za svaki opis prenesenih datoteka ciklus OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication.Na ThisObject", ThisObject ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; endIf; EndProcedure &OnClient Procedura AfterDirectorySelection(SelectedFiles, CommandName) Export If SelectedFiles = Undefined then Return; endIf; Direktorij = Odabrani fajlovi; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Ako je CommandName = "Faktura" Tada LayoutName = "Faktura" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Kraj procedure &na klijentskoj proceduri Otvaranje datoteka putem ekstenzije (ime komande) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Direktorij = GeneralPurposeCallServer.GetWorkingDirectory(); Ako je Direktorij = Nedefinirano ILI Direktorij = "" Onda Dialog = Novi FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = NStr("ru = "Odabir direktorija za privremeno skladištenje datoteka"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = Novi niz; SelectedFiles.Add(Directory); Izvrši obradu upozorenja(OpAfterSelectingDirectory, SelectedFiles); endIf; Kraj procedure &na klijentskoj proceduri ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient procedura Connected_PassFileToClient() Adresa = GetLayout(); Ako Adresa<>Undefined Onda DisableWaitHandler("Connectable_PassFileToClient"); Broj dokumenta = DataStructure.DocumentNumber; Direktorij = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Opis = Novi opis prenesene datoteke (putanja do datoteke, adresa); TransferredFiles = Novi niz; TransferredFiles.Add(Opis); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Kraj procedure &na serverskoj proceduri ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Novi niz; Niz objekata.Dodaj(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Niz objekata,LayoutName,True); EndProcedure &OnClient procedura Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = novaStructure; DataStructure.Insert("Objekat", Veza); DataStructure.Insert("LayoutName", "Faktura"); ConnectWaitingHandler("Connectable_Print", 1, Tačno); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Počnite instalirati FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // Kraj StandardSubsystems.Print

Nekoliko pojašnjenja:

1. Prvo, naš klijent radi i kroz Thin i Web način rada, tako da unaprijed postavljamo sljedeće vrijednosti u svojstvima konfiguratora:

Da biste izbjegli probleme pri radu sa pretraživačem

2. Koristimo rukovaoce čekanja kako bismo izbjegli probleme sa sinhronizacijom poziva (ovo se odnosi samo na web način rada)

3. I na kraju, omogućite ekstenziju za rad sa datotekama (zapamtite da je u modu tankog klijenta ova ekstenzija uvijek omogućena). I kroz kod:

prenosimo datoteku klijentu pomoću mehanizma NavigationLink, primamo sljedeće poruke u pretraživaču (Thin radi sam):

Pa, izgleda da je to sve. Nadam se da će ovo nekome pomoći...

Što se tiče Worda, Excel datoteke umetnute kao binarni podaci? šta je problem?

1. Moramo ili izvući ove binarne podatke iz izgleda i ispuniti ih podacima iz 1C i PAŽNJA ih ponovo zapisati u obliku binarnih podataka (Vodka s pivom ili Pivo s votkom)

2. Ili moramo dobiti raspored BinaryData na strani klijenta i popuniti ga tamo, ALI COM objekat podržava samo IE pretraživač i onda sa plesovima sa ActiveX postavkama, drugi pretraživači su odavno napustili upotrebu ActiveX-a

Dobar dan!. Prošli put kada smo pogledali kako riješiti "Greška pri primjeni transformacija. Provjerite ispravnost putanja navedenih transformacija", danas ću vam reći o još jednoj posljedici zbog toga. Tema publikacije bit će situacija kada ne možete instalirati 1C platformu i dobit ćete poruku: Windows greška: greška u izvršavanju funkcije, rješavamo za minut, siguran sam da će tema biti korisna mnogima.

Kako izgleda greška u izvršavanju funkcije?

Kao što sam gore napisao, ovaj problem dobijam na Windows Server 2012 R2 terminal serveru kada pokušam da instaliram 1C 8.2 platformu. Nakon pokretanja datoteke setup.exe, pojavljuje se prozor čarobnjaka za instalaciju i odmah dodatni prozor sa porukom:

Windows greška: greška u izvršavanju funkcije

Za koje ćete dobiti ovo obavještenje:

Kao iu većini slučajeva sa 1C platformom, sve se može riješiti malom ispravkom u konfiguracijskim datotekama. Prvo, uključite prikaz skrivenih foldera, jer datoteka koja nam je potrebna nije vidljiva po defaultu. Zatim, na disku C:\ pronađite fasciklu ProgramData.

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

Datoteku 1CEStat.cfg možete otvoriti bilo kojim uređivačem teksta, kliknite desnim tasterom miša na nju i izaberite „Otvori pomoću“, a zatim i pogodan uređivač.

U datoteci 1CEStat.cfg pronađite parametar, morate ga obrisati i sačuvati datoteku.

Ako pogledate dnevnike u pregledniku događaja, vidjet ćete događaje poput ovih.

Šifra događaja 1013: Proizvod: 1C:Enterprise 8.2 (8.2.19.130) -- Windows greška: greška u izvršavanju funkcije.

ID događaja 11708: Proizvod: 1C:Enterprise 8.2 (8.2.19.130) -- Operacija instalacije nije uspjela.

Nakon što smo uklonili parametar ADMINISTRATIONFUNC=0, već smo dobili:

ID događaja 1033: Windows Installer je instalirao proizvod. Proizvod: 1C:Enterprise 8.2 (8.2.19.130). Verzija: 8.2.19.130. Jezik: 1049. Proizvođač: 1C. Instalacija završena sa statusom: 1603.

Najbolji članci na ovu temu