Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Siguria
  • Ndodhi një gabim i pariparueshëm në serverin 1c. Gabim Windows: gabimi i ekzekutimit të funksionit, i zgjidhur në një minutë

Ndodhi një gabim i pariparueshëm në serverin 1c. Gabim Windows: gabimi i ekzekutimit të funksionit, i zgjidhur në një minutë

Unë mendoj se secili nga "shtatë" programuesit ka hasur në një gabim të tillë të paktën një herë. Mund të ndodhë ose gjatë "bashkimit të konfigurimeve" ose gjatë "testimit dhe rregullimit të sigurisë së informacionit".

Por jo të gjithë u përpoqën të "rregullojnë" konfigurimin. Në raste të tilla, ata zakonisht ose kërkojnë furishëm për kopje rezervë, ose (një metodë më komplekse) përdorin ndihmën e mjetit GComp, i cili "sipas legjendës" mund të kurojë MD nëse thjesht "çmontohet" dhe më pas "montohet" duke përdorur funksionet e programit. Në të vërtetë, është kështu. Por jo në të gjitha rastet... Është pikërisht ky rasti që do të doja të shqyrtoja në këtë artikull.

Pra, të dhënat fillestare:

- "konfigurim i prishur";

Shërbimet MDDiags

- LargMenaxheri dhe shtojca DocFileShfletuesi ndaj tij. Duke përdorur këtë shtojcë, mund të futeni brenda MD dhe të punoni me objektet e tij.

Meqenëse Konfiguruesi refuzon të shfaqë edhe këtë "gabim të pakorrigjueshëm", ne ekzekutojmë MDDiags për të identifikuar atë ose ata.

Pas nisjes së programit, zgjidhni konfigurimin e dëshiruar, pastaj të gjitha cilësimet e paracaktuara ... ekzekutoni, analizoni, merrni rezultatin.

Mund të keni gabime të tjera, por mendoj se do të jeni në gjendje t'i kuptoni pasi të keni një kuptim të përgjithshëm se si ta gjeni gabimin dhe si ta rregulloni atë.

1. Gabim>(\\ ditar)

Shërbimi e bëri të qartë se gabimi ishte vërejtur për 2 objekte "\\ Journal\Journal_Number 212" dhe "\\Journal\Journal_Number 860". Tani le të shkojmë teLarg dhe shikoni objektet atje.


Këtu shohim shumë objekte dhe një skedar "Container.Contents". Ai ruan përshkruesit e të njëjtave objekte. Pasi kemi studiuar me kujdes përmbajtjen e skedarit, kuptojmë se nuk ka përshkrues për 2 objektet tona.

Shtoni përshkruesit siç tregohet në figurë.

Problemi u zgjidh.

2. Gabim DOCUMENT.Fatura e faturës (\\Teksti i shtypur\Ndihma e përdoruesit_Numri 434\Enë.Përmbajtja)

Ne shkojmë përsëri në MD përgjatë shtegut të treguar. Hap skedarin " Enë. Përmbajtja " dhe shikoni me kujdes përmbajtjen e tij.

Fjalët e çuditshme Cgntainer, Contentq, Prmgram ju bien menjëherë në sy. Është e drejtë, këta janë identifikues të shkruar gabim. Nuk është e vështirë të merret me mend se si duhet të jetë e saktë (nëse është e vështirë, shkoni në degën tjetër, hapni të njëjtin skedar "Container.Contents" dhe shikoni se si duhet të shkruhet).

3. GabimDREJTORIA.Operacionet tipike(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Hapni skedarin në rrugën e specifikuar dhe shikoni me kujdes... Të gjithë parametrat duhet të mbyllen në thonjëza. Një nga parametrat ka një "hapësirë" në vend të një "citate" - ne e korrigjojmë atë (ky gabim mund të ndodhë kur përshkrimi i një prej elementeve të një objekti (fusha, butoni, lista e vlerave, etj.) përmban një të vetme ose citim i dyfishtë, ose ndonjë tjetër nga "personazhet speciale").

Le të nisë përsëri MDDiags dhe shohim që të gjitha gabimet e mëparshme janë zhdukur, por është shfaqur një gabim tjetër.

Tani është koha t'i drejtoheni mjetit GComp dhe të kontrolloni "legjendën"...

Ne hapim programin, zgjedhim MD-në tonë të prishur (për momentin) dhe dosjen ku duhet të vendosim konfigurimin të renditur në objekte, atëherë të gjitha kutitë e kontrollit janë si parazgjedhje, e vetmja gjë është të kontrolloni kutinë "fshini shabllonet boshe të tabelës" në në skedën "Parametrat e përgjithshëm", kliko "Dekompile" ".

Pastaj, pa vonesë të mëtejshme, shkoni te skeda "përpilim", vendosni direktorinë e burimit në atë në të cilën sapo keni analizuar konfigurimin dhe tregoni shtegun për në MD-në e re.

Shërbimi do të mbledhë gjithçka në mënyrë të sigurt.

Tani gjithçka që duhet të bëjmë është të përdorim Far Manager për të zëvendësuar skedarin përkatës brenda MD-së "të thyer" me të njëjtin nga ai "sapo i montuar" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Ne kontrollojmë konfigurimin përsëri duke përdorur MDDiags.

Gjithçka duket se është në rregull. Tani hyjmë në konfigurues dhe bëjmë "testimin dhe korrigjimin e sigurisë së informacionit" për t'u siguruar që nuk ka më gabime.

Kjo eshte e gjitha. Më lër të marr lejen time. Dhe Forca qoftë me ju!)

P.S. Falënderime të veçanta për zhvilluesit e shërbimeve të përdorura në shembull - ata na ndihmojnë të gjithëve të jetojmë kaq shumë...

Pra, cili është qëllimi i artikullit tim?

1. Ka një server (x64), me Office 2016 (x64) të instaluar, ka 1C 8.3.8 gjithashtu x64 (që do të thotë server 1C). Përdoruesit lidhen edhe nëpërmjet një klienti të hollë dhe një klienti në internet.

2. Janë një sërë kontratash standarde dhe fatura të lëshuara (të përgatitura) nga departamenti i shitjeve. Ka një font, një paragraf, etj., Sigurisht, gjithçka është krijuar në Word, Excel 2016 (x64), natyrisht, nuk ka dëshirë për të nxjerrë të gjitha këto në 1C, por ekziston një dëshirë për ta vendosur atë në formatin ActiveDocument paraqitjet

Zgjidhja duket banale :) , Unë nuk do ta përshkruaj të gjithë mekanizmin, si është bërë, si mbushen të dhënat nga 1C në paraqitjen ActiveDocument - Unë mendoj se ju e dini këtë shumë mirë pa mua. Por gjatë punës doli që jo gjithçka është aq e qetë në fushën e objekteve COM, përkatësisht:

2. Cilin opsion është më mirë të zgjidhni: ActiveDocument apo Binary Data? Edhe pse për mua tingëllon diçka si të zgjedhësh Vodka me Birrë ose Birrë me Vodka :) . Nuk ka punë të madhe, ju duhet të plotësoni dokumentet me të dhëna nga 1C dhe t'i transferoni ato te Klienti.

Epo, mirë, le t'i kalojmë tekstet, unë zgjedh ActiveDocument, nuk do të përshkruaj të gjithë algoritmin, do të rendis vetëm grackat dhe zgjidhjen e tyre. Gjithçka e thënë më poshtë është spekulimi im personal dhe në asnjë mënyrë nuk pretendon të jetë e vërteta përfundimtare. Ju mund t'i keni zgjidhur këto probleme ose i keni zgjidhur ato ndryshe.

1. Guri " së pari". Metoda SaveAs nuk funksionon (si për MSWord ashtu edhe për MSExcel). Kur përpiqeni të shkruani të dhëna binare, 1C thjesht rrëzohet. Shikoni fragmentin e listimit:

MSWord = Layout.Get(); Provoni Document = MSWord.Application.Documents(1); Document.Aktivizo(); //Më pas, marrim disi të dhënat dhe plotësojmë dokumentin Word //Merrni shtegun në direktorinë e përkohshme për të ruajtur skedarin atje Emri i kohës = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //guri fillon këtu MyDocumentInBinaryData = New BinaryData(NameTime); //epo, këtu ky gur është rrëzuar nga 1C :) MSWord.Application.Quit();

Faleminderit shume.

Krijimi i dosjeve
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problemi u zgjidh. Tema e mbyllur.

Cila eshte arsyeja? Arsyeja është se kodi

MSWord = Layout.Get();

Gjithmonë thërret një shembull të një objekti COM (x32) pavarësisht se çfarë bitness është instaluar Office. A keni menduar ndonjëherë pse nuk mund të futni skedarë me shtesën docx, xlsx në paraqitjen e ActoveDocument?

kjo mund të kontrollohet edhe përmes Task Manager, por fakti është se faqosja ActiveDocument thërret në mënyrë implicite një shembull COM (x32) dhe për këtë arsye të gjitha manipulimet e mëtejshme duhet të bëhen duke marrë parasysh këtë veçori.

1. Ose serveri dhe i gjithë softueri duhet të jenë x32. Atëherë nuk keni nevojë të bëni asgjë (në kuptimin e rishkrimit të kodit)

2. Ose rishkruajeni kodin në këtë mënyrë

// merrni emrin e skedarit të përkohshëm TimeFile = GetTemporaryFileName("doc"); // ky kod do të thërrasë patjetër një shembull COM të thellësisë së bitit të kërkuar, në rastin tonë x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // atëherë çdo gjë është si më parë Layout = Print Management Layout Form Printing ("Document. Equipment Transfer Act." + Layout Name); MSWord = Layout.Get(); Provoni Document = MSWord.Application.Documents(1); Document.Aktivizo(); // këtu bëjmë diçka, plotësojmë të dhënat // këtu do ta ruajmë skedarin tonë nga COM x62 në COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DocumentH.Aktivizo(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = E papërcaktuar; Përjashtim // Nëse ndodh një gabim, të dhënat e gabimit shtypen dhe objekti mbyllet. Informacion = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Gabim - kodi i gabimit "+Information.Description+" - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Përpjekja e Fundit;

Mendoj se gjithçka është e qartë këtu, së pari krijuam një shembull COM të thellësisë së bitit të kërkuar, krijuam një skedar bosh dhe e ruajtëm në një dosje të përkohshme, më pas punojmë me COM x32, e mbushim me të dhëna dhe në fund kopjojmë përmbajtjen e të gjithë. dokument dhe ruajeni në një skedar të përgatitur më parë.

Gjithçka është e njëjtë, por vetëm për Excel

TimeFile = GetTimeFileName ("xls"); Excel = New COMObject ("Excel.Application"); Excel.Displayalert = 0; BookH = Excel.WorkBooks.Add(); FletëN = LibriN.Fletët e punës(1); BookN.SaveAs (TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Dokumenti.Fatura e pajisjes."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); FletëN = LibriN.Fletët e punës(1); Duke provuar WBook = MSExcel.Application.Workbooks(1); Fletë = WBook.Fletët e punës (1); Sheet.Aktivizo(); // bëjmë diçka, e mbushim me të dhëna nga 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Përjashtim // Nëse ndodh një gabim, të dhënat e gabimit shtypen dhe objekti mbyllet. Informacion = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Gabim - kodi i gabimit "+Information.Description+" - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Përpjekja e Fundit;

ja ku shko" së pari“Vendosa gurin, në një server x64 me Office x64, gjithçka funksionon tamam si ora, pa gabime dhe nuk ka nevojë të krijojë asnjë dosje dhe gjithçka tjetër.

Guri " e dyta". copë kodi

TimeFile = GetTimeFileName ("xls");

ngrënia nuk është shumë e mirë, sepse i shkruan dosjes: “c:\Users\ what's there...”, në përgjithësi, ky dosje është gjithmonë në listën e zezë të të gjitha mureve të zjarrit, antiviruseve, etj., etj., në të paktën hapni qendrën e kontrollit të sigurisë në Word ose Excel. Le të shohim edhe atje

Ju do të duhet të ndërhyni me këtë, përndryshe ekziston mundësia e shfaqjes së gabimeve "të çuditshme". Prandaj sugjeroj sa vijon:

1. Hapni Konfiguratorin dhe shtoni një regjistër të ri informacioni

këtu do të ruajmë skedarët tanë të gatshëm Word, Excel, të plotësuar tashmë, natyrisht:

LayoutName - Layout ID

DocumentOffice - Ruajtja e vlerës, këtu ne mbajmë skedarin tonë të përfunduar

2. Ne shtojmë kodin e mësipërm si më poshtë:

MH = Regjistrat e Informacionit.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Përzgjedhja.Lidhja; MZ.LayoutName = LayoutName; MZ.Lexo(); MH.Object = Përzgjedhja.Lidhja; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Shkruaj(); DeleteFiles (TimeFile);

Ajo që bëjmë është të shkruajmë skedarin e përfunduar në regjistrin e informacionit dhe më pas të fshijmë vetë skedarin e përkohshëm, duke zgjidhur problemin "Word, Excel Security Center". E tëra që mbetet është t'i tregosh këtë skedar të përfunduar Klientit (klientët e hollë dhe të internetit)

3. Guri " e treta" - duke transferuar një skedar te klienti, unë thjesht do të postoj të gjithë kodin këtu, kam marrë disa nga BSP, disa nga konfigurimi demo "Aplikacioni i Menaxhuar", disa nga Interneti, por në përgjithësi këtu është kodi (në tërësia e tij)

///////////////////////////////////////////////////////////////// ///////////////////////// // PROCEDURAT DHE FUNKSIONET E SHËRBIMIT BSP &OnServer Funksioni GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Çelësi i regjistrimit = Regjistrat e informacionit.TemporaryOfficeStorage.CreateRecordKey(Strukturë e re("Object,LayoutName",ObjectLink,LayoutName)); // Adresa = GetNavigationLink (Record Key,"OfficeDocument"); Adresa e Kthimit; FundFunction // Procedura &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Eksporto; // Përfundimi i procedurës &Në procedurën e klientit Pas marrjes së skedarëve (Skedarët e transferuar, parametrat shtesë) Eksporto Nëse NUK Transmetohen Skedarët = I Padefinuar Pastaj Për çdo përshkrim të Skedarëve të Transmetuar Cikli OpAfterAppLaunch = Përshkrimi i riAlerts("AfterLaunchingApplication.Name", ThisOab ); StartLaunchApplication (OpAfterStartApplication, Description.Name); Cikli i Fundit; fundNëse; EndProcedura &Procedura OnClient AfterDirectorySelection(SelectedFiles, CommandName) Eksporto Nëse SelectedFiles = I Padefinuar Pastaj Kthehu; fundNëse; Directory = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Nëse CommandName = "Faturë" Pastaj LayoutName = "Faturë" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,E vërtetë); Fundi i procedurës &Në procedurën e klientit Hap skedarët përmes zgjerimit (Emri i komandës) OpAfterSelectingDirectory = Përshkrimi i riAlerts("AfterSelectingDirectory", ThisObject, CommandName); Drejtori = GeneralPurposeCallServer.GetWorkingDirectory(); Nëse Drejtoria = E padefinuar OSE Drejtori = "" Pastaj Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Zgjedhja e një drejtorie për ruajtjen e përkohshme të skedarëve"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = Array i ri; SelectedFiles.Add(Directory); Kryeni përpunimin e alarmit (OpAfterSelectingDirectory, SelectedFiles); fundNëse; Fundi i procedurës &Në procesin e procedurës së klientitConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); fundNëse; EndProcedura &Procedura OnClient Connected_PassFileToClient() Adresa = GetLayout(); Nëse Adresa<>I padefinuar Pastaj DisableWaitHandler("Connectable_SendFileToClient"); DocumentNumber = Struktura e të Dhënave.Numri i Dokumentit; Directory = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Drejtoria+"\"+Emri i Layout+"_Jo"+Numri i Dokumentit+".xls"; Përshkrimi = Përshkrimi i ri i skedarit të transmetuar (Rruga drejt skedarit, adresa); TransferredFiles = Array i ri; TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); fundNëse; Fundi i procedurës &Në procedurën e serverit ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Array i ri; Vargu i objekteve.Add(ObjectRef); Dokumentet.Fatura e pajisjes.PrintInvoice(Object Array,LayoutName,True); EndProcedura &Procedura OnClient Connectable_ExecutePrint() ExecutePrintServer(); EndProcedura // StandardSubsystems.Print &OnClient Procedura Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; Struktura e të Dhënave = Struktura e re; DataStructure.Insert("Objekt", Lidhje); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler ("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Filloni të instaloni shtesën FileWorking(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedura // End StandardSubsystems.Print

Disa sqarime:

1. Së pari, klienti ynë punon në të dy mënyrat Thin dhe Web, kështu që paraprakisht vendosim vlerat e mëposhtme në vetitë e Konfiguratorit:

Për të shmangur problemet kur punoni me shfletuesin

2. Ne përdorim mbajtësit e pritjes për të shmangur problemet me sinkronizimin e thirrjeve (kjo vlen vetëm për modalitetin Web)

3. Dhe së fundi, aktivizoni Extension për të punuar me Files (mos harroni se në modalitetin Thin Client, kjo shtesë është gjithmonë e aktivizuar). Dhe përmes kodit:

ne transferojmë skedarin te Klienti duke përdorur mekanizmin NavigationLink, marrim mesazhet e mëposhtme në shfletues (Thin funksionon vetë):

Epo, kjo duket se është e gjitha. Shpresoj se kjo ndihmon dikë...

Në lidhje me skedarët Word, Excel të futur si të dhëna binare? ku qendron problemi?

1. Ne ose duhet t'i nxjerrim këto të dhëna binare nga faqosja dhe t'i mbushim me të dhëna nga 1C dhe KUJDES t'i shkruajmë përsëri në formën e të dhënave Binare (Vodka me birrë ose birrë me vodka)

2. Ose duhet të marrim paraqitjen BinaryData në anën e Klientit dhe ta plotësojmë atje, POR objekti COM mbështetet vetëm nga shfletuesi IE dhe më pas me kërcimet me cilësimet ActiveX, shfletuesit e tjerë kanë braktisur prej kohësh përdorimin e ActiveX.

Mirembrema!. Herën e fundit ne shikuam se si të zgjidhim "Gabim gjatë aplikimit të transformimeve. Kontrolloni korrektësinë e shtigjeve të transformimeve të specifikuara", sot do t'ju tregoj për një pasojë tjetër për shkak të tij. Tema e botimit do të jetë një situatë kur nuk mund të instaloni platformën 1C dhe do të merrni një mesazh: Gabim Windows: gabim në ekzekutimin e funksionit, ne e zgjidhim atë në një minutë, jam i sigurt se tema do të jetë e dobishme për shumë njerëz.

Si duket një gabim i ekzekutimit të funksionit?

Siç shkrova më lart, e kam këtë problem në një server terminal Windows Server 2012 R2 kur përpiqem të instaloj platformën 1C 8.2. Pas ekzekutimit të skedarit setup.exe, shfaqet dritarja e magjistarit të instalimit dhe menjëherë një dritare shtesë me mesazhin:

Gabim Windows: gabim në ekzekutimin e funksionit

Për të cilin do të merrni këtë njoftim:

Ashtu si në shumicën e rasteve me platformën 1C, gjithçka mund të zgjidhet me një korrigjim të vogël në skedarët e konfigurimit. Së pari, aktivizoni shfaqjen e dosjeve të fshehura, pasi skedari që na nevojitet nuk është i dukshëm si parazgjedhje. Më pas, në diskun C:\ gjeni dosjen Të dhënat e programit.

C:\ProgramData\1C\1CESTat\1CESTat.cfg

Skedari 1CESTat.cfg mund të hapet duke përdorur çdo redaktues teksti, klikoni me të djathtën mbi të dhe zgjidhni "Hap me", dhe më pas një redaktues të përshtatshëm.

Në skedarin 1CESTat.cfg, gjeni parametrin, duhet ta fshini dhe ta ruani skedarin.

Nëse shikoni regjistrat në shikuesin e ngjarjeve, do të shihni ngjarje si këto.

Kodi i ngjarjes 1013: Produkti: 1C:Enterprise 8.2 (8.2.19.130) -- Gabim Windows: Gabim i ekzekutimit të funksionit.

ID-ja e ngjarjes 11708: Produkti: 1C:Enterprise 8.2 (8.2.19.130) -- Operacioni i instalimit dështoi.

Pasi hoqëm parametrin ADMINISTRATIONFUNC=0, kemi marrë tashmë:

ID-ja e ngjarjes 1033: Windows Installer ka instaluar produktin. Produkti: 1C: Ndërmarrja 8.2 (8.2.19.130). Versioni: 8.2.19.130. Gjuha: 1049. Prodhuesi: 1C. Instalimi i përfunduar me status: 1603.

Artikujt më të mirë mbi këtë temë