Windows hatası: işlev yürütme hatası, bir dakika içinde çözüldü. Windows hatası: işlev yürütme hatası, bir dakika içinde çözüldü Yapılandırma kontrolü kurtarılamayan hata 1s 7.7

Peki, makalemin amacı nedir?

1. Bir sunucu (x64) var. yüklü Office 2016 (x64), 1C 8.3.8 ayrıca x64 (1C sunucusu anlamına gelir) vardır. Kullanıcılar hem ince istemci hem de web istemcisi aracılığıyla bağlanır.

2. Satış departmanı tarafından düzenlenen (hazırlanan) bir sürü standart sözleşme ve fatura vardır. Bir yazı tipi, bir paragraf vb. Var elbette, her şey Word, Excel 2016 (x64) ile tasarlandı, doğal olarak tüm bunları 1C'de çizme arzusu yok ama ActiveDocument formatına koyma arzusu var düzenler

Çözüm banal görünüyor :) , tüm mekanizmayı, nasıl yapıldığını, verilerin 1C'den ActiveDocument düzenine nasıl doldurulduğunu açıklamayacağım - sanırım bunu bensiz de gayet iyi biliyorsunuz. Ancak çalışma sırasında COM nesneleri alanında her şeyin o kadar da düzgün olmadığı ortaya çıktı:

2. Hangi seçeneği seçmek daha iyidir: ActiveDocument mi yoksa İkili Veri mi? Gerçi bana birayla votka ya da votkayla bira seçmek gibi geliyor :) . Önemli değil, belgeleri 1C'den gelen verilerle doldurmanız ve Müşteriye aktarmanız gerekiyor.

Peki, tamam, sözleri geçelim, ActiveDocument'i seçiyorum, tüm algoritmayı açıklamayacağım, sadece tuzakları ve çözümlerini listeleyeceğim. Aşağıda belirtilen her şey benim kişisel spekülasyonumdur ve hiçbir şekilde nihai gerçek olduğunu iddia etmez. Bu sorunları çözmüş olabilirsiniz veya farklı şekilde çözmüş olabilirsiniz.

1. Taş " Birinci". SaveAs yöntemi çalışmıyor (hem MSWord hem de MSExcel için). İkili Veri yazmaya çalışırken, 1C basitçe çöküyor. Liste parçasına bakın:

MSWord = Layout.Get(); Document = MSWord.Application.Documents(1);'i deneyin; Document.Activate(); //Sonra, bir şekilde verileri alıyoruz ve Word belgesini dolduruyoruz //Dosyayı oraya kaydetmek için geçici dizindeki yolu alıyoruz TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //taş burada başlıyor MyDocumentInBinaryData = Yeni BinaryData(NameTime); //pekala, işte bu taş 1C tarafından devriliyor :) MSWord.Application.Quit();

Çok teşekkürler.

Klasör oluşturma
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
Problem çözüldü. Konu kapatıldı.

Nedeni ne? Bunun nedeni kodun

MSWord = Layout.Get();

Office'in hangi bit düzeyinde yüklü olduğuna bakılmaksızın her zaman bir COM nesnesinin (x32) örneğini çağırır. ActoveDocument düzenine docx, xlsx uzantılı dosyaları neden ekleyemediğinizi hiç merak ettiniz mi?

bu aynı zamanda Görev Yöneticisi aracılığıyla da kontrol edilebilir, ancak gerçek şu ki ActiveDocument düzeni örtülü olarak bir COM örneğini (x32) çağırır ve bu nedenle diğer tüm manipülasyonların bu özellik dikkate alınarak yapılması gerekir.

1. Sunucu ve tüm yazılım x32 olmalıdır. O zaman hiçbir şey yapmanıza gerek kalmaz (kodu yeniden yazma anlamında)

2. Kodu bu şekilde yeniden yazın

// geçici dosyanın adını alın TimeFile = GetTemporaryFileName("doc"); // bu kod kesinlikle gerekli bit derinliğine sahip bir COM örneğini çağıracaktır, bizim durumumuzda x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // o zaman her şey eskisi gibi Düzen = Baskı Yönetimi Yazdırma Formu Düzeni ("Belge. Ekipman Transfer Yasası." + Düzen Adı); MSWord = Layout.Get(); Document = MSWord.Application.Documents(1);'i deneyin; Document.Activate(); // burada bir şeyler yapıyoruz, verileri dolduruyoruz // burada dosyamızı COM x62'den COM x64'e yeniden kaydedeceğiz 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 = Tanımsız; İstisna // Bir hata meydana gelirse, hata verileri yazdırılır ve nesne kapatılır. Bilgi = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Hata - "+Information.Description+" hata kodu - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Deneme Sonu;

Burada her şeyin açık olduğunu düşünüyorum, önce gerekli bit derinliğinde bir COM örneği oluşturduk, boş bir dosya oluşturup onu geçici bir klasöre kaydettik, ardından COM x32 ile çalışıyoruz, onu verilerle dolduruyoruz ve son olarak tümünün içeriğini kopyalıyoruz belgeleyin ve önceden hazırlanmış bir dosyaya kaydedin.

Her şey aynı, ancak yalnızca Excel için

TimeFile = GetTimeFileName("xls"); Excel = Yeni COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SayfaN = KitapN.Çalışma Sayfaları(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookH = MSExcel.Application.Workbooks.Open(TimeFile); SayfaN = KitapN.Çalışma Sayfaları(1); WBook = MSExcel.Application.Workbooks(1);'i deneyin; Sayfa = WBook.WorkSheets(1); Sheet.Activate(); // bir şey yapıyoruz, onu 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells);'den gelen verilerle dolduruyoruz; BookN.Save(); BookH.Close(); İstisna // Bir hata meydana gelirse, hata verileri yazdırılır ve nesne kapatılır. Bilgi = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Hata - "+Information.Description+" hata kodu - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Deneme Sonu;

Hadi bakalım " Birinci"Office x64'lü bir x64 sunucusunda her şeyin tam olarak saat gibi, hatasız çalıştığına ve herhangi bir klasör ve diğer her şeyi oluşturmaya gerek olmadığına karar verdim.

Taş " ikinci". kod pasajı

TimeFile = GetTimeFileName("xls");

yemek pek iyi değil çünkü şu klasöre yazıyor: “c:\Users\ orada ne var...”, genel olarak bu klasör her zaman tüm güvenlik duvarlarının, antivirüslerin vb. kara listesindedir. en azından güvenlik kontrol merkezini Word veya Excel'de açın. Oraya da bakalım

Bunu düzeltmeniz gerekecek, aksi takdirde "garip" hataların ortaya çıkma olasılığı vardır. Bu nedenle aşağıdakileri öneriyorum:

1. Yapılandırıcıyı açın ve yeni bir Bilgi Kaydı ekleyin

burada bitmiş Sözümüzü saklayacağız, Excel dosyaları elbette zaten doldurulmuş:

LayoutName - Düzen Kimliği

DocumentOffice - Değer Depolama, burada bitmiş dosyamızı saklıyoruz

2. Yukarıdaki kodu şu şekilde ekliyoruz:

MH = Bilgi Registers.TemporaryStorageOffice.CreateRecordManager(); MH.Nesne = Seçim.Bağlantı; MZ.DüzenAdı = DüzenAdı; MZ.Read(); MH.Nesne = Seçim.Bağlantı; MZ.DüzenAdı = DüzenAdı; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); Dosyaları Sil(ZamanDosyası);

Yaptığımız şey, bitmiş dosyayı bilgi kaydına yazmak ve ardından geçici dosyanın kendisini silmek, böylece "Word, Excel Güvenlik Merkezi" sorununu çözmektir. Geriye kalan tek şey bu bitmiş dosyayı Müşteriye (ince istemciler ve web istemcileri) göstermektir.

3. Taş " üçüncü" - istemciye bir dosya aktarıyorum, burada sadece tüm kodu göndereceğim, bazıları BSP'den, bazıları “Yönetilen Uygulama” demo yapılandırmasından, bazıları İnternetten, ancak genel olarak kod burada (kendi içinde) bütünlük)

//////////////////////////////////////////////// // ////////////////////////// // SERVİS PROSEDÜRLERİ VE İŞLEVLERİ BSP &OnServer Function GetLayout() ObjectLink = DataStructure.Object; DüzenAdı = DataStructure.LayoutName; RecordKey = Bilgi Kayıtları TemporaryStorageOffice.CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Adres = GetNavigationLink(RecordKey,"OfficeDocument"); İade adresi; EndFunction // &OnClient Prosedürü AfterApplicationStart(ReturnCode, ApplicationName) Export; // Prosedürün Sonu &İstemcide Dosyalar Alındıktan Sonra Prosedür (Aktarılan Dosyalar, Ek Parametreler) İletilen Dosyalar DEĞİLSE Dışa Aktar = Tanımsız Sonra İletilen Dosyaların Her Açıklaması İçin Döngü OpAfterAppLaunch = New AçıklamaAlerts("AfterLaunchingApplication", ThisObject, Açıklama.Name ); StartLaunchApplication(OpAfterStartApplication, Açıklama.Name); EndCycle; endIf; EndProcedure &OnClient Prosedürü AfterDirectorySelection(SelectedFiles, CommandName) Export If SelectedFiles = Tanımsız Sonra Geri Dön; endIf; Dizin = Seçilen Dosyalar; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); If CommandName = "Fatura" Then LayoutName = "Fatura" EndIf; DataStructure.Insert("Dizin", Dizin); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Prosedürün Sonu &İstemcide Dosyaları Uzantı Aracılığıyla Açma (Komut Adı) OpAfterSelectingDirectory = Yeni AçıklamaAlerts("AfterSelectingDirectory", ThisObject, CommandName); Dizin = GeneralPurposeCallServer.GetWorkingDirectory(); Dizin = Tanımsız VEYA Dizin = "" ise İletişim Kutusu = Yeni FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Dosyaların geçici olarak saklanması için bir dizin seçiliyor"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Aksi takdirde SelectedFiles = Yeni Dizi; SelectedFiles.Add(Dizin); Uyarı İşleme Gerçekleştirin (OpAfterSelectingDirectory, SelectedFiles); endIf; Prosedür Sonu &Müşteride Prosedür SüreciConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Prosedürü Connected_PassFileToClient() Adres = GetLayout(); Adres ise<>Tanımsız Sonra DisableWaitHandler("Connectable_SendFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Dizin = DataStructure.Directory; DüzenAdı = DataStructure.LayoutName; DosyaYolu = Dizin+"\"+DüzenAdı+"_No"+BelgeNumarası+".xls"; Açıklama = Aktarılan Dosyanın Yeni Açıklaması (Dosyanın Yolu, Adres); TransferredFiles = Yeni Dizi; TransferredFiles.Add(Açıklama); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; EndProcedure &OnServer Prosedürü ExecutePrintServer() ObjectLink = DataStructure.Object; DüzenAdı = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Yeni Dizi; Objects Dizisi.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient Prosedürü Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Prosedürü Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; VeriYapısı = yeniYapı; DataStructure.Insert("Nesne", Bağlantı); DataStructure.Insert("DüzenAdı", "Fatura"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Dosya Çalışma Uzantısını Yüklemeye Başlayın(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // StandardSubsystems.Print'i sonlandırın

Birkaç açıklama:

1. Öncelikle müşterimiz hem İnce hem de Web modlarında çalışır, bu nedenle önceden Yapılandırıcı özelliklerinde aşağıdaki değerleri ayarlarız:

Tarayıcıyla çalışırken sorunları önlemek için

2. Çağrı senkronizasyonu ile ilgili sorunları önlemek için bekleme işleyicilerini kullanırız (bu yalnızca Web modu için geçerlidir)

3. Ve son olarak, Dosyalarla çalışmak için Uzantıyı bağlayın (İnce İstemci modunda bu uzantının her zaman etkin olduğunu unutmayın). Ve kod aracılığıyla:

dosyayı NavigasyonLink mekanizmasını kullanarak İstemciye aktarıyoruz, tarayıcıda aşağıdaki mesajları alıyoruz (İnce kendi başına çalışıyor):

Eh, hepsi bu kadar gibi görünüyor. Umarım bu birine yardımcı olur ...

Word ile ilgili olarak Excel dosyaları İkili Veri olarak mı eklendi? sorun ne?

1. Ya bu İkili Veriyi düzenden çıkarıp 1C'deki verilerle doldurmalıyız ve DİKKAT bunu İkili Veri şeklinde tekrar yazmalıyız (Birayla Votka veya Votkayla Bira)

2. Ya İstemci tarafında BinaryData düzenini alıp burayı doldurmalıyız, ANCAK COM nesnesi yalnızca IE tarayıcısı tarafından desteklenir ve daha sonra ActiveX ayarlarıyla danslarla, diğer tarayıcılar ActiveX kullanımını çoktan terk etmiştir.

"Yedi" programcının her birinin böyle bir hatayla en az bir kez karşılaştığını düşünüyorum. "Yapılandırmaların birleştirilmesi" sırasında veya "bilgi güvenliğinin test edilmesi ve düzeltilmesi" sırasında ortaya çıkabilir.

Ancak herkes yapılandırmayı "düzeltmeye" çalışmadı. Bu gibi durumlarda, genellikle ya çılgınca yedekleme ararlar ya da (daha karmaşık bir yöntem) GComp yardımcı programının yardımına başvururlar; bu yardımcı program, "efsaneye göre", basitçe "sökülmesi" ve ardından "birleştirilmesi" durumunda MD'yi iyileştirebilir. programın işlevleri. Gerçekten de öyle. Ancak her durumda değil… Bu yazıda incelemek istediğim durum tam da bu.

Yani, ilk veriler:

- "bozuk konfigürasyon";

Yarar MDDiag'lar

- UzakMüdür ve eklenti Belge DosyasıTarayıcı ona. Bu eklentiyi kullanarak MD'nin içine girebilir ve nesneleriyle çalışabilirsiniz.

Yapılandırıcı bu "düzeltilemez hatayı" görüntülemeyi bile reddettiği için çalıştırıyoruz MDDiag'lar onu veya onları tanımlamak için.

Yardımcı programı başlattıktan sonra istediğiniz konfigürasyonu seçin, ardından tüm varsayılan ayarları seçin... çalıştırın, analiz edin, sonucu alın.

Başka hatalarınız olabilir, ancak hatayı nasıl bulacağınız ve nasıl düzelteceğiniz konusunda genel bir anlayışa sahip olduğunuzda bunları çözebileceğinizi düşünüyorum.

1. Hata>(\\Dergi)

Yardımcı program, hatanın 2 nesne için gözlemlendiğini açıkça belirtti "\\ Journal\Journal_Number 212" ve "\\Journal\Journal_Number" 860". Şimdi şuraya gidelim:Uzak ve oradaki nesnelere bakın.


Burada birçok nesne ve bir "Container.Contents" dosyası görüyoruz. Aynı nesnelerin tanımlayıcılarını saklar. Dosyanın içeriğini dikkatlice inceledikten sonra 2 nesnemiz için tanımlayıcıların olmadığını anlıyoruz.

Şekilde gösterildiği gibi tanımlayıcıları ekleyin.

Sorun çözüldü.

2. Hata DOCUMENT.Makbuz Faturası (\\Yazılan Metin\Kullanıcı Yardımı_Numara434\Konteyner.İçindekiler)

Belirtilen yol boyunca tekrar MD'ye gidiyoruz. Dosyayı aç " Konteyner. İçindekiler " ve içeriğine dikkatlice bakın.

Cgntainer, Contentq, Prmgram gibi tuhaf kelimeler hemen gözünüze çarpıyor. Doğru, bunlar yanlış yazılmış tanımlayıcılardır. Nasıl doğru olması gerektiğini tahmin etmek zor değil (eğer zorsa bir sonraki şubeye gidin, aynı “Container.Contents” dosyasını açın ve nasıl yazılması gerektiğine bakın).

3. HataREHBER.Tipik Operasyonlar(\\Subconto\Subconto_Number5870\WorkBook\Dialog Akışı)

Dosyayı belirtilen yolda açın ve dikkatlice bakın... Tüm parametreler tırnak içine alınmalıdır. Parametrelerden birinde "alıntı" yerine "boşluk" vardır - düzeltiriz (bu hata, bir nesnenin öğelerinden birinin (alan, düğme, değerler listesi vb.) açıklaması tek bir öğe içerdiğinde ortaya çıkabilir veya çift ​​alıntı veya "özel karakterlerden" herhangi biri).

Tekrar başlayalım MDDiag'lar ve önceki tüm hataların ortadan kaybolduğunu ancak başka bir hatanın ortaya çıktığını görüyoruz.

Şimdi GComp yardımcı programına dönüp "efsaneyi" kontrol etme zamanı...

Yardımcı programı başlatıyoruz, bozuk (şimdilik) MD'mizi ve nesnelere göre sıralanmış yapılandırmayı koymamız gereken klasörü seçiyoruz, ardından tüm onay kutuları varsayılan olarak, tek şey "sil" onay kutusunu işaretlemek. boş şablonlar"Genel parametreler" sekmesinde "Tablolar"ı seçip "Decompile" seçeneğine tıklayın.

Ardından, daha fazla uzatmadan "derleme" sekmesine gidin, kaynak dizini, yapılandırmayı az önce ayrıştırdığınız dizine ayarlayın ve yeni MD'nin yolunu belirtin.

Yardımcı program her şeyi güvenli bir şekilde monte edecektir.

Şimdi yapmamız gereken tek şey Uzak Müdür"bozuk" MD içindeki ilgili dosyayı "yeni birleştirilmiş" olanla aynı dosyayla değiştirin (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Yapılandırmayı kullanarak tekrar kontrol ediyoruz. MDDiag'lar.

Her şey yolunda görünüyor. Şimdi yapılandırıcıya gidiyoruz ve daha fazla hata olmadığından emin olmak için “bilgi güvenliğinin test edilmesi ve düzeltilmesi” yapıyoruz.

Bu kadar. İzin ver de gideyim. Ve Güç seninle olsun!)

Not: Örnekte kullanılan yardımcı programların geliştiricilerine özellikle teşekkür ederiz; bunlar hepimizin yaşamasına çok yardımcı oluyor...

Tünaydın!. Geçenlerde “Dönüşümler uygulanırken hata oluştu. Belirtilen dönüşümlerin yollarının doğruluğunu kontrol edin” sorununun nasıl çözüleceğine bakmıştık, bugün size bundan kaynaklanan başka bir sonuçtan bahsedeceğim. Yayının konusu, 1C platformunu kuramayacağınız bir durum olacak ve bir mesaj alacaksınız: Windows hatası: işlev yürütme hatası, bir dakikada çözüyoruz, eminim konu birçok kişiye faydalı olacaktır.

İşlev yürütme hatası neye benzer?

Yukarıda yazdığım gibi Windows Server 2012 R2 terminal sunucusunda 1C 8.2 platformunu kurmaya çalıştığımda bu sorunla karşılaşıyorum. setup.exe dosyasını çalıştırdıktan sonra kurulum sihirbazı penceresi görünür ve hemen şu mesajı içeren ek bir pencere görünür:

Windows hatası: işlev yürütme hatası

Bunun için bu bildirimi alacaksınız:

Çoğu durumda 1C platformunda olduğu gibi, her şey yapılandırma dosyalarında küçük bir düzeltme ile çözülebilir. Öncelikle, ihtiyacımız olan dosya varsayılan olarak görünmediğinden gizli klasörleri görüntüle'yi açın. Daha sonra C:\ sürücüsünde klasörü bulun Program verisi.

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

1CEStat.cfg dosyası herhangi bir araç kullanılarak açılabilir. Metin düzeltici, üzerine sağ tıklayın ve “Birlikte aç”ı ve ardından uygun bir düzenleyiciyi seçin.

1CEStat.cfg dosyasında parametreyi bulun, onu silmeniz ve dosyayı kaydetmeniz gerekir.

Etkinlik görüntüleyicideki günlüklere baktığınızda buna benzer etkinlikleri göreceksiniz.

Olay kodu 1013: Ürün: 1C:Enterprise 8.2 (8.2.19.130) -- Windows Hatası: İşlev yürütme hatası.

Olay kodu 11708: Ürün: 1C:Enterprise 8.2 (8.2.19.130) -- Yükleme işlemi başarısız oldu.

ADMINISTRATIONFUNC=0 parametresini kaldırdıktan sonra şunu aldık:

Olay Kimliği 1033: Windows Installer ürünü yükledi. Ürün: 1C:Kurumsal 8.2 (8.2.19.130). Sürüm: 8.2.19.130. Dil: 1049. Üretici: 1C. Kurulum şu durumla tamamlandı: 1603.




Tepe