Windows xətası: funksiyanın icrası xətası, bir dəqiqə ərzində həll olundu. Windows xətası: funksiyanın icrası xətası, bir dəqiqə ərzində həll edildi Konfiqurasiya yoxlanışı bərpa olunmayan xəta 1s 7.7

Yaxşı, 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) bir dəstə standart müqavilələr və hesab-fakturalar var. Şrift, abzas və s. var, əlbəttə ki, hər şey Word, Excel 2016 (x64) proqramında hazırlanmışdır, təbii ki, bütün bunları 1C-də çəkmək istəyi yoxdur, amma ActiveDocument formatına qoymaq istəyi var. tərtibatlar

Həll banal görünür :) , Mən bütün mexanizmi, bunun necə edildiyini, 1C-dən ActiveDocument tərtibatına məlumatların necə doldurulduğunu 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 Binary Data? Baxmayaraq ki, mənə bu, Vodka With Beer və ya Beer With Vodka seçmək kimi səslənir :) . Böyük bir şey yoxdur, sənədləri 1C-dən məlumatlarla doldurmalı və onları Müştəriyə ötürməlisiniz.

Yaxşı, sözlərdən keçək, mən ActiveDocument-i seçirəm, bütün alqoritmi təsvir etməyəcəyəm, sadəcə tələləri və onların həllini sadalayacağam. Aşağıda qeyd olunanların hamısı mənim şəxsi fərziyyələrimdir və heç bir halda son həqiqət olduğunu iddia etmir. 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). Binary Data yazmaq istəyərkən, 1C sadəcə olaraq çökür. Listinq fraqmentinə baxın:

MSWord = Layout.Get(); Sənədi sınayın = MSWord.Application.Documents(1); Document.Activate(); //Sonra biz hansısa yolla məlumatları əldə edirik və Word sənədini doldururuq //Faylı orada saxlamaq üçün müvəqqəti kataloqda yolu tapın TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //daş burada başlayır MyDocumentInBinaryData = New BinaryData(NameTime); //yaxşı, burada bu daş 1C tərəfindən döyülüb :) MSWord.Application.Quit();

çox sağ olun.

Qovluqların yaradılması
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problem həll olundu. 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ı niyə ActoveDocument tərtibatına daxil edə bilməyəcəyinizi heç düşünmüsünüzmü?

Bunu Tapşırıq Meneceri vasitəsilə də yoxlamaq olar, lakin fakt budur ki, ActiveDocument tərtibatı dolayısı ilə COM instansiyasını (x32) ç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. Sonra heç bir şey etmək lazım deyil (kodu yenidən yazmaq mənasında)

2. Ya kodu bu şəkildə yenidən yazın

// müvəqqəti faylın adını almaq TimeFile = GetTemporaryFileName("doc"); // bu kod mütləq tələb olunan bit dərinliyinin COM instansiyasını çağıracaq, bizim halda x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // onda hər şey əvvəlki kimidir Layout = Çap İdarəetmə Çap Formasının Layout ("Sənəd. Avadanlığın Transfer Aktı." + Layout Adı); MSWord = Layout.Get(); Sənədi sınayın = MSWord.Application.Documents(1); Document.Activate(); // burada nəsə edirik, məlumatları doldururuq // burada faylımızı COM x62-dən COM x64-ə yenidən saxlayacağıq 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 = Müəyyən edilməmiş; İstisna // Səhv baş verərsə, xəta məlumatları çap olunur və obyekt bağlanır. Məlumat = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Xəta - "+Məlumat.Təsvir+" xəta kodu - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

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

Hər şey eynidir, ancaq Excel üçün

TimeFile = GetTimeFileName("xls"); Excel = Yeni COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Sənəd.Avadanlıq Faturası."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Sınaq WBook = MSExcel.Application.Workbooks(1); Vərəq = WBook.WorkSheets(1); Sheet.Activate(); // biz nəsə edirik, onu 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells) verilənləri ilə doldururuq; BookN.Save(); BookN.Close(); İstisna // Səhv baş verərsə, xəta məlumatları çap olunur və obyekt bağlanır. Məlumat = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Xəta - "+Məlumat.Təsvir+" xəta kodu - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Buyurunuz " birinci“Mən qərar verdim ki, Office x64 ilə x64 serverində hər şey səhvsiz saat kimi işləyir və heç bir qovluq və başqa hər şey yaratmağa ehtiyac yoxdur.

Daş" ikinci". kod parçası

TimeFile = GetTimeFileName("xls");

yemək çox yaxşı deyil, çünki o qovluğa yazır: “c:\Users\ whats there...”, ümumiyyətlə, bu qovluq həmişə bütün firewallların, antivirusların və s.-in qara siyahısındadır və s., at ən azı Word və ya Excel-də təhlükəsizlik nəzarət mərkəzini açın. Oraya da baxaq

Bununla məşğul olmalı olacaqsınız, əks halda "qəribə" səhvlərin görünməsi 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ıƏlbəttə ki, artıq doldurulmuşdur:

LayoutName - Layout ID

DocumentOffice - Dəyər Saxlama, burada hazır faylımızı saxlayırıq

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

MH = Məlumat Qeydləri.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Seçim.Link; MZ.LayoutName = LayoutName; MZ.Read(); MH.Object = Seçim.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); Faylları Sil (TimeFile);

Bizim etdiyimiz iş bitmiş faylı məlumat reyestrinə yazmaq və sonra “Word, Excel Təhlükəsizlik Mərkəzi” problemini həll edərək müvəqqəti faylın özünü silməkdir. Yalnız bu bitmiş faylı Müştəriyə göstərmək qalır (nazik və veb müştərilər)

3. Daş " üçüncü" - faylı müştəriyə ötürərkən, mən sadəcə olaraq bütün kodu burada yerləşdirəcəyəm, bəziləri BSP-dən, bəziləri "İdarə olunan proqram" demo konfiqurasiyasından, bəziləri İnternetdən, lakin ümumiyyətlə kod buradadır (onun içində tam)

/////////////////////////////////////////////// ///////////////////////// // XİDMƏT PROSEDURLARI VƏ FUNKSİYALARI BSP &OnServer Funksiyası GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Qeyd Açarı = Məlumat Registrləri. TemporaryOfficeStorage. CreateRecordKey(Yeni Struktur("Object,LayoutName",ObjectLink,LayoutName)); // Ünvan = GetNavigationLink(RecordKey,"OfficeDocument"); Qayıdış ünvanı; EndFunction // &OnClient Proseduru AfterApplicationStart(ReturnCode, ApplicationName) İxrac; // Prosedurun Sonu &Faylları (Köçürülmüş Fayllar, Əlavə Parametrlər) Qəbul etdikdən Sonra Müştəri Prosedurunda. Əgər Köçürülmürsə Fayllar = Qeyri-müəyyən Sonra Ötürülmüş Faylların Hər Təsviri üçün OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication,Na", ThisObject ); StartLaunchApplication(OpAfterStartApplication, Təsvir.Ad); EndCycle; endIf; EndProcedure &OnClient Proseduru AfterDirectorySelection(SelectedFiles, CommandName) Export Əgər SelectedFiles = Unmüəyyən edilməmişsə, Sonra Qayıdın; endIf; Kataloq = Seçilmiş Fayllar; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Əgər CommandName = "Invoice" Əgər LayoutName = "Invoice" EndIf; DataStructure.Insert("Kataloq", Kataloq); ConnectWaitingHandler("Connectable_SendFileToClient",5,Doğru); Prosedurun Sonu &Müştəri Prosedurunda Faylları Genişləndirmə vasitəsilə açın (Əmr Adı) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Kataloq = GeneralPurposeCallServer.GetWorkingDirectory(); Əgər Directory = Undefined OR Directory = "" onda Dialoq = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Faylların müvəqqəti saxlanması üçün kataloqun seçilməsi"", "ru"); Dialoq.Show(OpAfterSelectingDirectory); Əks halda SelectedFiles = Yeni massiv; SelectedFiles.Add(Directory); Xəbərdarlıq emalının həyata keçirilməsi (OpAfterSelectingDirectory, SelectedFiles); endIf; Prosedurun Sonu &Müştəri Prosedur Prosesində ƏlaqələndirməUzantılarıFayllarla İş(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Proseduru Connected_PassFileToClient() Ünvan = GetLayout(); Əgər Ünvan<>Müəyyən edilməmiş Sonra DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Directory = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Təsvir = Köçürülən Faylın Yeni Təsviri (Fayl yolu, Ünvan); TransferredFiles = Yeni Massiv; TransferredFiles.Add(Təsvir); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Prosedurun Sonu &Server Prosedurunda ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("SənədNömrəsi", Obyekt Referansı.Nömrə); ObjectArray = Yeni Massiv; Obyektlərin massivi.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Obyekt Massivi,LayoutName,Doğru); EndProcedure &OnClient Proseduru Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Proseduru Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Obyekt", Link); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connectable_Print", 1, Doğrudur); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); FileWorking Extension (); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Bir neçə aydınlaşdırma:

1. Birincisi, müştərimiz həm İncə, həm də Veb rejimləri ilə işləyir, ona görə də əvvəlcədən Konfiqurator xüsusiyyətlərində 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 sinxronizasiyası 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, Fayllarla işləmək üçün Genişləndirməni birləşdirin (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 (Thin özü işləyir):

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

Word ilə əlaqədar olaraq, Excel faylları Binary Data kimi daxil edilib? problem nədir?

1. Biz ya bu Binary Datanı tərtibatdan çıxarıb onu 1C-dən verilənlərlə doldurmalıyıq və DİQQƏT onu yenidən Binary Data (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 istifadəsindən çoxdan imtina ediblər.

Düşünürəm ki, “yeddi” proqramçının hər biri ən azı bir dəfə belə bir səhvlə qarşılaşıb. Bu, ya “konfiqurasiyaların birləşdirilməsi” zamanı, ya da “informasiya təhlükəsizliyinin yoxlanılması və düzəldilməsi” zamanı baş verə bilər.

Ancaq hamı konfiqurasiyanı "düzəltməyə" çalışmadı. Belə hallarda, onlar ya ehtiyatla ehtiyat nüsxələrini axtarırlar, ya da (daha mürəkkəb bir üsul) 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" istifadə edərək "yığılıb" müalicə edə bilər. proqramın funksiyaları. Doğrudan da, belədir. Amma bütün hallarda yox... Bu məqalədə araşdırmaq istədiyim məsələ məhz budur.

Beləliklə, ilkin məlumatlar:

- "sınıq konfiqurasiya";

Utility MDDiags

- Uzaqmenecer və plagin Sənəd faylıBrauzer ona. Bu plaqindən istifadə edərək siz MD-nin içərisinə girib onun obyektləri ilə işləyə bilərsiniz.

Konfiqurator hətta bu "düzəlməz xətanı" göstərməkdən imtina etdiyi üçün biz işə düşürük MDDiags onu və ya onları müəyyən etmək.

Utiliti işə saldıqdan sonra istədiyiniz konfiqurasiyanı seçin, sonra bütün standart parametrlər... işə salı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 anlayışınız olduqdan sonra onları anlaya biləcəksiniz.

1. Xəta>(\\Jurnal)

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


Biz burada bir çox obyekt və bir fayl "Container.Contents" görürük. Bu eyni obyektlərin deskriptorlarını saxlayır. Faylın məzmununu diqqətlə öyrəndikdən 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. Qəbz fakturası (\\TypedText\UserHelp_Nömrə 434\Konteyner.İçindəkilər)

Göstərilən yol ilə yenidən MD-yə gedirik. faylı açın " Konteyner. İçindəkilər " və onun məzmununa diqqətlə baxı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 olacağını təxmin etmək çətin deyil (əgər çətin olarsa, növbəti filiala keçin, eyni “Container.Contents” faylını açın və necə yazılmalı olduğuna baxın).

3. XətaSAYFA.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ə "sitat" əvəzinə "boşluq" var - biz onu düzəldirik (bu xəta obyektin elementlərindən birinin təsvirində (sahə, düymə, qiymətlər siyahısı və s.) tək bir işarə olduqda baş verə bilər. və ya ikiqat sitat, və ya hər hansı "xüsusi simvol").

Yenidən başlayaq 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ş (indiki) MD-mizi və konfiqurasiyanı obyektlərə görə sıraladığımız qovluğu seçirik, sonra bütün onay qutuları standart olaraqdır, yeganə şey "sil" onay qutusunu yoxlamaqdır. boş şablonlar"Ümumi parametrlər" sekmesinde cədvəllər" seçin, "Dekompilyasiya" düyməsini basın.

Sonra, daha çox uzatmadan, "kompilyasiya" sekmesine keçin, mənbə qovluğunu konfiqurasiyanı təhlil etdiyinizə təyin edin və yeni MD-yə gedən yolu göstərin.

Kommunal hər şeyi təhlükəsiz şəkildə yığacaq.

İndi bizə ancaq qalır Uzaq menecer"sınıq" MD daxilindəki müvafiq faylı "yeni yığılmış" ilə eyni ilə əvəz edin (\\Subconto\Subconto_Number5870\WorkBook\Dialoq Stream).

İstifadə edərək konfiqurasiyanı yenidən yoxlayırıq MDDiags.

Deyəsən hər şey qaydasındadır. İndi konfiquratora daxil oluruq və daha çox səhv olmadığından əmin olmaq üçün “informasiya təhlükəsizliyinin sınağı və korreksiyası” edirik.

Hamısı budur. İcazə verin məzuniyyətimi götürüm. 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ə "Dönüşmələrin tətbiqi xətası. Müəyyən edilmiş transformasiyaların yollarının düzgünlüyünü yoxlayın" problemini necə həll edəcəyimizi nəzərdən keçirdik, bu gün sizə bunun başqa bir nəticəsi haqqında danışacağam. Nəşrin mövzusu 1C platformasını quraşdıra bilməyəcəyiniz bir vəziyyət olacaq və bir mesaj alacaqsınız: Windows xətası: funksiyanın icrası xətası, bir dəqiqəyə həll edirik, əminəm ki, mövzu çoxları üçün faydalı olacaq.

Funksiya icrası xətası nə kimi görünür?

Yuxarıda yazdığım kimi, 1C 8.2 platformasını quraşdırmağa çalışarkən Windows Server 2012 R2 terminal serverində bu problemlə qarşılaşıram. 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ı

Bunun üçün bu bildirişi 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 edilə bilər. Əvvəlcə gizli qovluqları göstərin, çü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 istifadə edərək açıla bilər mətn redaktoru, üzərinə sağ klikləyin və "Birlikdə aç" və sonra rahat 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, bu kimi hadisələri görəcəksiniz.

Hadisə kodu 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 artıq ə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