Windows xətası: funksiyanın icrası xətası, bir dəqiqə ərzində həll edirik. Windows xətası: funksiyanın icrası xətası, biz onu bir dəqiqəyə həll edirik Konfiqurasiya yoxlaması ölümcül xəta 1s 7.7

Bəs mənim məqaləmin məqsədi nədir?

1. Server var (x64), ilə quraşdırılmış Office 2016 (x64), 1C 8.3.8 də var x64 (1C server deməkdir). İstifadəçilər həm nazik müştəri, həm də veb müştəri vasitəsilə əlaqə qururlar.

2. Satış şöbəsi tərəfindən verilən (hazırlanan) çoxlu standart müqavilələr və hesab-fakturalar var. Şrift, paraqraf və s. var, əlbəttə ki, hər şey Word, Excel 2016 (x64) proqramında hazırlanmışdır, əlbəttə ki, bütün bunları 1C-də çəkmək istəyi yoxdur, lakin onu ActiveDocument-ə itələmək istəyi var. layouts formatı

Qərar banaldır, görünür :) , bunun necə edildiyini, məlumatların 1C-dən ActiveDocument tərtibatına necə doldurulduğunu bütün mexanizmi təsvir etməyəcəyəm - düşünürəm ki, siz bunu mənsiz də yaxşı bilirsiniz. Lakin iş zamanı məlum oldu ki, COM obyektləri sahəsində hər şey o qədər də hamar deyil, yəni:

2. Hansı variantı seçmək daha yaxşıdır: ActiveDocument yoxsa BinaryData? Baxmayaraq ki, mənim üçün Vodka With Beer və ya Beer With Vodka seçmək nə kimi səslənir :) . Bir əncir, sənədləri 1C-dən məlumatlarla doldurmalı və onları Müştəriyə ötürməlisiniz.

Yaxşı, tamam, sözləri atlayaq, mən ActiveDocument-i seçirəm, bütün alqoritmi təsvir etməyəcəyəm, sadəcə olaraq "tələbələri" və onların həllini sadalayacağam. Aşağıdakıların hamısı mənim şəxsi uydurmalarımdır və heç bir halda son həqiqət olduğunu iddia etmir. Yəqin ki, siz bu problemləri həll etmisiniz və ya fərqli şəkildə həll etmisiniz.

1. Daş " birinci". SaveAs metodu işləmir (həm MSWord, həm də MSExcel üçün). BinaryData yazmaq istəyərkən 1C sadəcə çökür. Biz siyahı parçasına baxırıq:

MSWord = Layout.Get(); Cəhd Sənədi = MSWord.Application.Documents(1); Document.Activate(); //Sonra, birtəhər məlumatları əldə edin və Word sənədini doldurun //Faylı orada saxlamaq üçün müvəqqəti kataloqda yolu əldə edin TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //daş burada başlayır MyDocumentInBinaryData = New BinaryData(NameTime); //yaxşı, bu daş 1C-ni yıxır :) MSWord.Application.Quit();

çox sağ olun.

Qovluqlar yaradın
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problemi həll etdi. Mövzu bağlandı.

Səbəb nədir? Səbəb kodun olmasıdır

MSWord = Layout.Get();

Office-in hansı bitlikdə quraşdırılmasından asılı olmayaraq həmişə COM obyektinin nümunəsini (x32) çağırır. Docx, xlsx uzantılı faylların niyə ActoveDocument tərtibatına daxil edilə bilməyəcəyini heç düşünmüsünüzmü?

Bunu Tapşırıq Meneceri vasitəsilə də yoxlamaq olar, lakin fakt budur ki, ActiveDocument layout dolayısı ilə COM (x32) nümunəsini çağırır və buna görə də bütün sonrakı manipulyasiyalar bu xüsusiyyət nəzərə alınmaqla aparılmalıdır.

1. Server və bütün proqram təminatı x32 olmalıdır. Onda heç nə etmək lazım deyil (kodu yenidən yazmaq mənasında)

2. Ya kodu belə bir şəkildə yenidən yazın

// müvəqqəti fayl adını əldə edin TempFile = GetTemporaryFileName("doc"); // bu kod tam olaraq tələb olunan bitliyin COM instansiyasını çağıracaq, bizim vəziyyətimizdə x64 Word = New COMObject("Word.Application"); word.displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentH.SaveAs(TimeFile,0); Word.Quit(); // onda hər şey əvvəlki kimidir Layout = PrintControl.PrintFormLayout("Document.Equipment Transfer Certificate."+LayoutName); MSWord = Layout.Get(); Cəhd Sənədi = MSWord.Application.Documents(1); Document.Activate(); // burada bir şey edin, məlumatları doldurun // burada biz faylımızı COM x62-dən COM x64-ə qaytarırıq MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentH = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentH.SaveAs(TimeFile,0); DocumentN.Close(); msword = qeyri-müəyyən; İstisna // Səhv baş verərsə, xəta məlumatları göstərilir və obyekt bağlanır. Məlumat = ErrorInfo(); General PurposeClientServer.NotifyUser("Xəta - "+Məlumat.Təsvir+" xəta kodu - "+Abbr(Information.SourceString)); MSWord.Application.Quit(); Cəhdin sonu;

Düşünürəm ki, burada hər şey aydındır, əvvəlcə biz tələb olunan bit dərinliyinin COM instansiyasını yaratdıq, boş bir fayl yaratdıq və onu müvəqqəti qovluğa saxladıq, sonra COM x32 ilə işləyir, onu məlumatlarla doldurur və nəhayət, bütün məzmunu kopyalayır. sənəd və onu əvvəlcədən hazırlanmış faylda saxlayır.

Hamısı eyni, ancaq Excel üçün

TempFile = GetTempFileName("xls"); Excel = Yeni COMObject("Excel.Application"); Excel.DisplayAlerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookH.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintControl.PrintFormLayout("Sənəd.Avadanlıq fakturası."+LayoutName); MSExcel = Layout.Get(); WorkbookH = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Sınaq WBook = MSExcel.Application.Workbooks(1); Vərəq = WBook.WorkSheets(1); Leaf.Activate(); // nəsə etmək, 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells)-dan verilənlərlə doldurmaq; BookH.Save(); BookN.Close(); İstisna // Səhv baş verərsə, xəta məlumatları göstərilir və obyekt bağlanır. Məlumat = ErrorInfo(); General PurposeClientServer.NotifyUser("Xəta - "+Məlumat.Təsvir+" xəta kodu - "+Abbr(Information.SourceString)); MSExcel.Application.Quit(); Cəhdin sonu;

Buyurunuz " birinci“Həll etdiyim daş, Office x64 ilə x64 serverində hər şey saat kimi işləyir, heç bir səhv yoxdur və heç bir qovluq və hər şey yaratmağa ehtiyac yoxdur.

Daş" ikinci". kod parçası

TempFile = GetTempFileName("xls");

çox yaxşı deyil, çünki qovluğa yazır: "c:\Users\ nə var ....", ümumiyyətlə, bu qovluq həmişə bütün firewalllar, antiviruslar və s. Word Təhlükəsizlik İdarəetmə Mərkəzini və ya Excel-i açın. Oraya da baxaq

onunla skripka etmək lazımdır, əks halda "qəribə" səhvlər ehtimalı var. Buna görə də aşağıdakıları təklif edirəm:

1. Konfiquratoru açın və yeni Məlumat Reyestrini əlavə edin

burada bitmiş Sözümüzü saxlayacağıq, excel faylları artıq doldurulmuşdur, əlbəttə:

LayoutName - Layout ID

Office Sənədi - Dəyər Dükanı, hazır faylımızı saxladığımız yer budur

2. Yuxarıda yazılmış kodu aşağıdakı kimi əlavə edirik:

MH = RegistersInformation.TemporaryStorageOffice.CreateRecordManager(); MZ.Object = Seçim.İstinad; MZ.LayoutName = LayoutName; MZ.Read(); MZ.Object = Seçim.İstinad; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TempFile)); MZ.Write(); Faylları Sil (TempFile);

Biz nə edirik, hazır faylı məlumat registrinə yazırıq və sonra müvəqqəti faylın özünü silirik, "Word, Excel Təhlükəsizlik Mərkəzi" problemini həll edirik. Bu bitmiş faylı Müştəriyə göstərmək üçün yalnız bir şey qalır (nazik və veb müştəri)

3. Daş " üçüncü" - faylın müştəriyə ötürülməsi, mən sadəcə bütün kodu burada yerləşdirəcəyəm, mən BSP-dən bir şey, "İdarə olunan Tətbiq" demo konfiqurasiyasından bir şey, İnternetdən bir şey götürdüm, amma ümumiyyətlə, kod buradadır (tamamilə )

////////////////////////////////////////////////////////// / //////////////////////////// // BSP &AtServer Funksiyasının XİDMƏT PROSEDURLARI VƏ FUNKSİYALARI GetLayout() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = DataRegisters.Office TemporaryStorage.CreateRecordKey(Yeni Struktur("Obyekt,LayoutName",ObjectReference,LayoutName)); // Ünvan = GetNavigationLink(RecordKey,"OfficeDocument"); Qayıdış ünvanı; EndFunction // &OnClient Proseduru AfterApplicationStart(ReturnCode, ApplicationName) İxrac; // EndProcedure &AtClient Proseduru AfterFilesReceived(SubmittedFiles, Əlavə Parametrlər) Export Dəyməzsə SubmittedFiles=Qeyri-müəyyən Sonra SubmittedFiles-dən Hər Təsvir üçün Döngə OpAfterApplicationStart = NewAlertDescription("AfterApplicationStart", ThisObject.Name); StartApplicationStart(OpAfterApplicationStart, Təsvir.Ad); EndCycle; EndIf; EndProcedure &OnClient Proseduru AfterDirSelect(SelectedFiles,CommandName) Export Əgər FilesSelected = Unmüəyyən olunmayıbsa, sonra qayıdın; EndIf; Kataloq = Seçilmiş Fayllar; General PurposeCallServer.SaveWorkingDirectory(Directory); Əgər CommandName = "Invoice" Əgər LayoutName = "Invoice" EndIf; DataStructure.Insert("Kataloq", Kataloq); ConnectWaitingHandler("Connected_TransferFileToClient",5,Doğru); EndProcedure &OnClient Procedure OpenFilesViaExtension(CommandName) OpAfterCatalog Selection = New AlertDescription("AfterCatalog Selection", ThisObject, CommandName); Directory = General PurposeCallServer.GetWorkingDirectory(); Əgər Directory = Undefined OR Directory = "" Əgər Dialoq = NewFileChoiceDialog(FileChoiceDialogMode.CatalogChoice); Dialog.Title = НStr("ru = "Faylların müvəqqəti saxlanması üçün kataloq seçin"", "ru"); Dialoq.Show(OpAfterCatalog Seçimi); Else SelectedFiles = Yeni massiv; SelectedFiles.Add(Directory); ExecuteAlertProcessing(OpAfterSelectingCatalog, SelectedFiles); EndIf; EndProcedure &OnClient Proseduru HandleFileWorkingExtensionConnection(ExtensionConnected,AdditionalParameters) ExtensionConnected Əgər ExtensionConnected Sonra OpenFilesViaExtension(AdditionalParameters.CommandName); EndIf; EndProcedure &AtClient Proseduru Connected_PassFileClient() Ünvan = GetLayout(); Əgər Ünvan<>Undefined After DisableWaitingHandler("Connected_PassFileClient"); DocumentNumber = DataStructure.DocumentNumber; Directory = DataStructure.Catalog; LayoutName = DataStructure.LayoutName; PathToFile = Directory+"\"+LayoutName+"_#"+DocumentNumber+".xls"; Təsvir = Köçürülən Faylın Yeni Təsviri (Fayl yolu, Ünvan); TransferredFiles = Yeni Massiv; TransferredFiles.Add(Təsvir); StartReceiveFiles(NewNotificationDescription("AfterReceivedFiles", ThisObject), TransferredFiles, "", False); EndIf; EndProcedure &AtServer Proseduru ExecutePrintServer() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("SənədNömrəsi", Obyekt Referansı.Nömrə); ArrayObjects = Yeni Massiv; ArrayObjects.Add(ObjectReference); Documents.InvoiceEquipment.PrintInvoice(ArrayObjects,LayoutName, True); EndProcedure &OnClient Proseduru Connected_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Proseduru Connected_ExecutePrintCommand(Command) Reference = Items.List.CurrentData.Reference; DataStructure = Yeni Struktur; DataStructure.Insert("Obyekt", Link); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connected_PerformPrint", 1, Doğrudur); CommandDescription = PrintControlClient.PrintCommandDescription(Command.Name,FormName); InstallingFileWorkingExtensions(); StartFileExtensionConnection(New AlertDescription("ProcessFileExtensionConnection",ThisObject,New Structure("CommandName",CommandDescription.Identifier)))); EndProcedure // End StandardSubsystems.Print

Bir neçə izahat:

1. Birincisi, müştəri bizim üçün həm İncə, həm də Veb rejimləri vasitəsilə işləyir, ona görə də Konfiqurator xüsusiyyətlərində əvvəlcədən aşağıdakı dəyərləri təyin edirik:

Brauzerlə işləyərkən problemlərin qarşısını almaq üçün

2. Zəng sinxronizmi ilə bağlı problemlərin qarşısını almaq üçün gözləmə idarəçilərindən istifadə edirik (bu, yalnız Veb rejiminə aiddir)

3. Və nəhayət, biz Fayllarla işləmək üçün Genişləndirməni bağlayırıq (unutmayın ki, İncə Müştəri rejimində bu genişləndirmə həmişə aktivdir). Və kod vasitəsilə:

NavigationLink mexanizmindən istifadə edərək faylı Müştəriyə ötürürük, brauzerdə aşağıdakı mesajları alırıq (Slim özü işləyir):

Deyəsən hamısı budur. Ümid edirəm bu kiməsə kömək edir...

Word, Excel fayllarına BinaryData şəklində daxil etmək üçün? problem nədir?

1. Biz ya bu BinaryData-nı tərtibatdan çıxarıb onları 1C-dən verilənlərlə doldurmalıyıq və DİQQƏT onları yenidən BinaryData (Pivə ilə araq və ya araqlı pivə) şəklində yazmalıyıq.

2. Ya biz Müştəri tərəfində BinaryData layoutunu əldə etməliyik və onu orada doldurmalıyıq, AMMA COM obyekti yalnız IE brauzeri tərəfindən dəstəklənir və sonra ActiveX parametrləri ilə rəqslərlə, digər brauzerlər ActiveX-dən istifadəni çoxdan tərk ediblər.

Düşünürəm ki, “yeddilər”in proqramçılarının hər biri ən azı bir dəfə belə bir səhvlə qarşılaşıb. Bu, ya "konfiqurasiyanın birləşdirilməsi" zamanı, ya da "IS testi və fiksasiyası" zamanı baş verə bilər.

Ancaq hər kəs konfiqurasiyanı "düzəltməyə" çalışmadı. Belə hallarda, onlar adətən ya ehtiyatla ehtiyat nüsxələrini axtarırlar, ya da (daha mürəkkəb şəkildə) GComp yardım proqramının köməyinə müraciət edirlər ki, bu da "rəvayətə görə" MD-ni sadəcə olaraq "sökülüb" sonra "yığılıb" sağalda bilər. proqram funksiyalarından istifadə etməklə. Doğrudan da, elədir. Amma bütün hallarda deyil... Məhz belə bir haldır ki, mən bu məqalədə təhlil etmək istərdim.

Beləliklə, ilkin məlumatlar:

- "sınıq konfiqurasiya";

Utility MDDiags

- Uzaqmenecer və plagin sənəd faylıBrauzer ona. Bu plaginlə siz MD-nin içərisinə girib onun obyektləri ilə işləyə bilərsiniz.

Konfiqurator hətta bu "ölümcül xətanı" göstərməkdən imtina etdiyi üçün biz qaçırıq MDDiags onu və ya onları kəşf etmək.

Utiliti işə saldıqdan sonra istədiyiniz konfiqurasiyanı seçin, sonra bütün standart parametrlər ... çalıştırın, təhlil edin, nəticə əldə edin.

Başqa səhvləriniz də ola bilər, amma düşünürəm ki, xətanı necə tapmaq və onu necə düzəltmək barədə ümumi bir anlayış olduqda onlarla mübarizə apara biləcəksiniz.

1. Səhv>(\\Jurnal)

Kommunal səhvin 2 obyekt üçün müşahidə edildiyini açıqladı "\\ Jurnal \ Jurnal _ Nömrə 212" və "\\ Jurnal \ Jurnal _ Nömrə 860". İndi keçinUzaq və oradakı obyektlərə baxın.


Biz burada çoxlu obyektlər və bir fayl "Container.Contents" görürük. Bu eyni obyektlərin deskriptorlarını saxlayır. Faylın məzmununu diqqətlə araşdırdıqdan sonra başa düşürük ki, 2 obyektimiz üçün heç bir deskriptor yoxdur.

Şəkildə göstərildiyi kimi deskriptorlar əlavə edin.

Problem həll edildi.

2. Xəta DOCUMENT.Invoice (\\TypedText\UserHelp_Nömrə 434\konteyner.məzmunu)

Göstərilən yol ilə MD-yə qayıdırıq. Faylın açılması konteyner. məzmun və onun məzmununa daha yaxından nəzər salın.

Qəribə Cgntainer, Contentq, Prmgram sözləri dərhal diqqətinizi çəkir. Düzdü, bunlar səhv yazılmış identifikatorlardır. Bunun necə düzgün olması lazım olduğunu təxmin etmək çətin deyil (çətindirsə, növbəti filiala keçin, eyni "Container.Contents" faylını açın və necə yazılmalı olduğuna baxın).

3. SəhvSAYFA.Tipik Əməliyyatlar(\\Subconto\Subconto_Number5870\WorkBook\Dialoq Stream)

Göstərilən yolda faylı açın və diqqətlə baxın... Bütün parametrlər dırnaq içərisində olmalıdır. Parametrlərdən birində "dırnaq işarəsi" əvəzinə "boşluq" var - onu düzəldin (obyekt elementlərindən birinin təsvirində (sahələr, düymələr, dəyərlər siyahısı və s.) bir və ya ikiqat sitat, və ya hər hansı "xüsusi simvol").

Yenidən başlayırıq MDDiags və görürük ki, bütün əvvəlki səhvlər aradan qalxıb, amma başqa bir səhv yaranıb.

İndi GComp yardım proqramına müraciət etmək və "əfsanəni" yoxlamaq vaxtıdır...

Utiliti işə salırıq, pozulmuş (indiyə qədər) MD-mizi və obyektlərə təhlil edilmiş konfiqurasiyanı qoymalı olduğumuz qovluğu, sonra bütün standart onay qutularını seçirik, yeganə şey "silmək" parametrini təyin etməkdir. boş şablonlar"Ümumi Seçimlər" sekmesinde cədvəllər" seçin, "Dekompilyasiya" düyməsini basın.

Sonra, çox uzatmadan, "kompilyasiya" sekmesine keçin, konfiqurasiyanın indicə təhlil edildiyi mənbə kataloqu olaraq təyin edin və yeni MD-yə gedən yolu göstərin.

Kommunal hər şeyi təhlükəsiz şəkildə toplayacaq.

İndi yalnız biz qalırıq Uzaq menecer"sınıq" DM daxilindəki müvafiq faylı "yeni qurulmuş" fayldan eyni ilə əvəz edin (\\Subconto\Subconto_Number5870\WorkBook\Dialoq Stream).

ilə konfiqurasiyanı yenidən yoxlayın MDDiags.

Deyəsən hər şey qaydasındadır. İndi konfiquratora gedirik və daha çox səhv olmadığından əmin olmaq üçün "informasiya təhlükəsizliyini yoxlamaq və düzəltmək" edirik.

Hamısı budur. İcazə verin əyilim. Və Güc sizinlə olsun!

P.S. Nümunədə istifadə olunan kommunal proqramların tərtibatçılarına xüsusi təşəkkürlər - onlar hamımıza çox yaşamağa kömək edir...

Günortanız Xeyir!. Keçən dəfə "Çevrilmələrin tətbiqi xətası. Göstərilən çevrilmələrin yollarının düzgünlüyünü yoxlayın" problemini necə həll edəcəyimizi anladıq, bu gün mən sizə bunun səbəbi ilə daha bir nəticə haqqında məlumat verəcəyəm. Nəşrin mövzusu 1C platformasını quraşdıra bilməyəcəyiniz vəziyyət olacaq və bir mesaj alacaqsınız: Windows xətası: funksiyanın icrası xətası, bir dəqiqəyə qərar veririk, əminəm ki, mövzu çoxları üçün faydalı olacaq.

İcra xətası nə kimi görünür?

Yuxarıda yazdığım kimi, bu, 1C 8.2 platformasını quraşdırmağa çalışarkən Windows Server 2012 R2 terminal serverimdə baş verir. Setup.exe faylını işə saldıqdan sonra quraşdırma ustası pəncərəsi və dərhal mesajı olan əlavə bir pəncərə görünür:

Windows xətası: funksiyanın icrası xətası

Bundan sonra aşağıdakı bildiriş alacaqsınız:

1C platformasında əksər hallarda olduğu kimi, hər şey konfiqurasiya fayllarında kiçik bir düzəlişlə həll olunur. Əvvəlcə gizli qovluqların ekranını yandırın, çünki bizə lazım olan fayl standart olaraq görünmür. Sonra, C:\ sürücüsündə qovluğu tapın Proqram Məlumatları.

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

1CEStat.cfg faylı istənilən ilə aça bilər mətn redaktoru, üzərinə sağ vurun və "Birlikdə aç" seçin və sonra sizin üçün uyğun olan redaktoru seçin.

1CEStat.cfg faylında parametri tapın, onu silmək və faylı saxlamaq lazımdır.

Hadisə görüntüləyicisindəki qeydlərə baxsanız, aşağıdakı hadisələri görəcəksiniz.

Hadisə ID 1013: Məhsul: 1C: Enterprise 8.2 (8.2.19.130) -- Windows Xətası: Funksiyaların icrası xətası.

Hadisə ID 11708: Məhsul: 1C: Enterprise 8.2 (8.2.19.130) -- Quraşdırma əməliyyatı uğursuz oldu.

ADMINISTRATIONFUNC=0 parametrini sildikdən sonra əldə etdik:

Hadisə ID 1033: Windows Installer məhsulu quraşdırdı. Məhsul: 1C:Enterprise 8.2 (8.2.19.130). Versiya: 8.2.19.130. Dil: 1049. İstehsalçı: 1C. Quraşdırma statusu ilə tamamlandı: 1603.




Üst