خطأ في Windows: خطأ في تنفيذ الوظيفة، تم حله في دقيقة واحدة. خطأ في Windows: خطأ في تنفيذ الوظيفة، تم حله في دقيقة واحدة التحقق من التكوين خطأ غير قابل للاسترداد 1s 7.7

إذن ما هو المغزى من مقالتي؟

1. يوجد خادم (x64)، به مكتب مثبت 2016 (x64)، يوجد 1C 8.3.8 أيضًا x64 (يعني خادم 1C). يتصل المستخدمون عبر كل من العميل الرقيق وعميل الويب.

2. هناك مجموعة من العقود والفواتير القياسية الصادرة (المعدة) من قبل قسم المبيعات. يوجد خط وفقرة وما إلى ذلك، بالطبع، كل شيء مصمم في Word وExcel 2016 (x64)، بطبيعة الحال، لا توجد رغبة في رسم كل هذا في 1C، ولكن هناك رغبة في وضعه بتنسيق ActiveDocument تخطيطات

يبدو الحل عاديا :) ، لن أصف الآلية بأكملها، وكيف يتم ذلك، وكيف يتم ملء البيانات من 1C إلى تخطيط ActiveDocument - أعتقد أنك تعرف هذا جيدًا بدوني. ولكن أثناء العمل اتضح أنه ليس كل شيء على ما يرام في عالم كائنات COM، وهي:

2. ما هو الخيار الأفضل للاختيار: ActiveDocument أم البيانات الثنائية؟ على الرغم من أن الأمر يبدو بالنسبة لي مثل اختيار الفودكا مع البيرة أو البيرة مع الفودكا :) . لا مشكلة كبيرة، تحتاج إلى ملء المستندات بالبيانات من 1C ونقلها إلى العميل.

حسنًا، حسنًا، دعنا نتخطى الكلمات، اخترت ActiveDocument، ولن أصف الخوارزمية بأكملها، سأقوم فقط بإدراج المخاطر وحلها. كل ما هو مذكور أدناه هو تكهناتي الشخصية ولا يدعي بأي حال من الأحوال أنه الحقيقة المطلقة. ربما تكون قد قمت بحل هذه المشكلات أو قمت بحلها بشكل مختلف.

1. الحجر " أولاً". لا تعمل طريقة SaveAs (لكل من MSWord وMSExcel). عند محاولة كتابة البيانات الثنائية، يتعطل 1C ببساطة. انظر إلى جزء القائمة:

MSWord = Layout.Get(); جرب Document = MSWord.Application.Documents(1); Document.Activate(); // بعد ذلك، نحصل بطريقة ما على البيانات ونملأ مستند Word // احصل على المسار في الدليل المؤقت لحفظ الملف هناك TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); // يبدأ الحجر هنا MyDocumentInBinaryData = New BinaryData(NameTime); // حسنًا، هنا تم التخلص من هذا الحجر بواسطة 1C :) MSWord.Application.Quit();

شكرًا جزيلاً.

إنشاء المجلدات
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
تم حل المشكلة. الموضوع مغلق.

ماهو السبب؟ والسبب هو أن الكود

MSWord = Layout.Get();

يستدعي دائمًا مثيل كائن COM (x32) بغض النظر عن عدد وحدات البت التي تم تثبيت Office عليها. هل سبق لك أن تساءلت لماذا لا يمكنك إدراج الملفات ذات الامتداد docx، xlsx في تخطيط ActoveDocument؟

يمكن أيضًا التحقق من ذلك من خلال إدارة المهام، ولكن الحقيقة هي أن تخطيط ActiveDocument يستدعي ضمنيًا مثيل COM (x32) وبالتالي يجب إجراء كافة المعالجات الإضافية مع أخذ هذه الميزة في الاعتبار.

1. يجب أن يكون الخادم وجميع البرامج x32. إذن لن تحتاج إلى فعل أي شيء (بمعنى إعادة كتابة الكود)

2. إما أن تعيد كتابة الكود بهذه الطريقة

// الحصول على اسم الملف المؤقت TimeFile = GetTemporaryFileName("doc"); // سيستدعي هذا الرمز بالتأكيد مثيل COM بعمق البت المطلوب، في حالتنا x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // ثم كل شيء كما كان من قبل Layout = Print Management.Printing Form Layout ("Document. Equipment Transfer Act." + Layout Name)؛ MSWord = Layout.Get(); جرب Document = MSWord.Application.Documents(1); Document.Activate(); // هنا نفعل شيئًا ما، نملأ البيانات // هنا سنعيد حفظ ملفنا من COM x62 إلى COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DocumentN.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = غير محدد؛ استثناء // في حالة حدوث خطأ، تتم طباعة بيانات الخطأ وإغلاق الكائن. المعلومات = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("خطأ - رمز الخطأ "+Information.Description+" - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); this.EndAttempt;

أعتقد أن كل شيء واضح هنا، أولاً قمنا بإنشاء مثيل COM بعمق البت المطلوب، وإنشاء ملف فارغ وحفظه في مجلد مؤقت، ثم نعمل مع COM x32، ونملأه بالبيانات، وأخيرًا ننسخ محتويات المجلد بالكامل المستند وحفظه في ملف تم إعداده مسبقًا.

كل شيء هو نفسه، ولكن فقط لبرنامج Excel

TimeFile = GetTimeFileName("xls"); Excel = جديد COMObject("Excel.Application"); Excel.Displayalerts = 0؛ BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("فاتورة المستند. المعدات."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); محاولة WBook = MSExcel.Application.Workbooks(1); ورقة = WBook.WorkSheets(1); Sheet.Activate(); // نحن نفعل شيئًا ما، ونملأه بالبيانات من 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); استثناء // في حالة حدوث خطأ، تتم طباعة بيانات الخطأ وإغلاق الكائن. المعلومات = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("خطأ - رمز الخطأ "+Information.Description+" - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); this.EndAttempt;

ها أنت ذا " أولاً“قررت الحجر، على خادم x64 مع Office x64، كل شيء يعمل كالساعة تمامًا، دون أخطاء وليس هناك حاجة لإنشاء أي مجلدات وكل شيء آخر.

حجر " ثانية". مقتطف التعليمات البرمجية

TimeFile = GetTimeFileName("xls");

الأكل ليس جيدًا جدًا، لأنه يكتب في المجلد: "c:\Users\ ماذا يوجد..."، بشكل عام، هذا المجلد موجود دائمًا في القائمة السوداء لجميع جدران الحماية ومضادات الفيروسات وما إلى ذلك، وما إلى ذلك، في الأقل فتح مركز التحكم الأمني ​​في Word أو Excel. دعونا ننظر هناك أيضا

سيتعين عليك العبث بهذا، وإلا فهناك احتمال ظهور أخطاء "غريبة". ولذلك أقترح ما يلي:

1. افتح Configurator وأضف سجل معلومات جديد

هنا سنقوم بتخزين كلمتنا النهائية، ملفات اكسلتم ملؤها بالفعل بالطبع:

اسم التخطيط - معرف التخطيط

DocumentOffice - تخزين القيمة، هنا نحتفظ بملفنا النهائي

2. نضيف الكود أعلاه كما يلي:

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

ما نفعله هو أننا نكتب الملف النهائي في سجل المعلومات ثم نحذف الملف المؤقت نفسه، وبذلك نحل مشكلة "Word, Excel Security Center". كل ما تبقى هو إظهار هذا الملف النهائي للعميل (عملاء الويب والرقيقة)

3. الحجر " ثالث" - نقل ملف إلى العميل، هنا سأقوم فقط بنشر جميع التعليمات البرمجية، بعضها مأخوذ من BSP، وبعضها من التكوين التجريبي "للتطبيق المُدار"، وبعضها من الإنترنت، ولكن بشكل عام هنا هو الرمز (فيه) مجمله)

////////////////////////////////////////////////////////////////////// ////////////////////////// // إجراءات الخدمة ووظائفها BSP &OnServer Function GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Record Key = Information Registers.TemporaryOfficeStorage.CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // العنوان = GetNavigationLink(RecordKey,"OfficeDocument"); اعد العنوان؛ EndFunction // &OnClient الإجراء AfterApplicationStart(ReturnCode, ApplicationName) Export; // نهاية الإجراء &في إجراء العميل بعد استلام الملفات (الملفات المنقولة، المعلمات الإضافية) تصدير إذا لم يتم إرسال الملفات = غير محدد ثم لكل وصف لدورة الملفات المنقولة OpAfterAppLaunch = New descriptionAlerts("AfterLaunchingApplication"، ThisObject، description.Name ); StartLaunchApplication(OpAfterStartApplication, description.Name); EndCycle; إنهاء إذا؛ EndProcedure &OnClient الإجراء AfterDirectorySelection(SelectedFiles, CommandName) تصدير إذا SelectedFiles = غير محدد ثم العودة؛ إنهاء إذا؛ الدليل = الملفات المختارة؛ GeneralPurposeServerCall.SaveWorkingDirectory(Directory); إذا كان CommandName = "الفاتورة" ثم LayoutName = "الفاتورة" EndIf؛ DataStructure.Insert("الدليل"، الدليل)؛ ConnectWaitingHandler("Connectable_SendFileToClient",5,True); نهاية الإجراء & في إجراء العميل فتح الملفات من خلال الامتداد (اسم الأمر) OpAfterSelectingDirectory = New descriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); الدليل = GeneralPurposeCallServer.GetWorkingDirectory(); إذا كان الدليل = غير محدد أو الدليل = "" ثم Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "تحديد دليل للتخزين المؤقت للملفات"", "ru"); Dialog.Show(OpAfterSelectingDirectory); وإلا فإن الملفات المختارة = مصفوفة جديدة; SelectedFiles.Add(Directory); تنفيذ معالجة التنبيه (OpAfterSelectingDirectory, SelectedFiles); إنهاء إذا؛ نهاية الإجراء وفي عملية إجراء العميلConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); إنهاء إذا؛ EndProcedure &OnClient الإجراء Connected_PassFileToClient() Address = GetLayout(); إذا كان العنوان<>Unknown ثم DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; الدليل = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; الوصف = وصف جديد للملف المرسل (المسار إلى الملف، العنوان)؛ TransferredFiles = مصفوفة جديدة؛ TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles"، ThisObject)، TransferredFiles, ""، False); إنهاء إذا؛ نهاية الإجراء & في إجراء الخادم ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber"، ObjectReference.Number); ObjectArray = صفيف جديد؛ صفيف Objects.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient الإجراء Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient الإجراء Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Object"، Link); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); ابدأ في تثبيت ملحق FileWorking(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

بعض التوضيحات:

1. أولاً، يعمل عميلنا من خلال وضعي Thin وWeb، لذلك قمنا مسبقًا بتعيين القيم التالية في خصائص Configurator:

لتجنب المشاكل عند العمل مع المتصفح

2. نستخدم معالجات الانتظار لتجنب مشاكل مزامنة المكالمات (ينطبق هذا فقط على وضع الويب)

3. وأخيرًا، قم بتمكين الامتداد للعمل مع الملفات (تذكر أنه في وضع Thin Client، يتم تمكين هذا الامتداد دائمًا). ومن خلال الكود :

نقوم بنقل الملف إلى العميل باستخدام آلية NavigationLink، ونتلقى الرسائل التالية في المتصفح (يعمل Thin من تلقاء نفسه):

حسنا، يبدو أن هذا كل شيء. أمل أن هذا يساعد شخصاما...

فيما يتعلق بملفات Word، هل تم إدراج ملفات Excel كبيانات ثنائية؟ ما هي المشكلة؟

1. يتعين علينا إما سحب هذه البيانات الثنائية من التخطيط وملئها بالبيانات من 1C وانتبه إلى كتابتها مرة أخرى في شكل بيانات ثنائية (فودكا مع بيرة أو بيرة مع فودكا)

2. إما أنه يجب علينا الحصول على تخطيط BinaryData على جانب العميل وملؤه هناك، ولكن كائن COM مدعوم فقط من خلال متصفح IE ثم مع الرقصات مع إعدادات ActiveX، فقد تخلت المتصفحات الأخرى منذ فترة طويلة عن استخدام ActiveX

أعتقد أن كل من المبرمجين "السبعة" واجه مثل هذا الخطأ مرة واحدة على الأقل. يمكن أن يحدث ذلك إما أثناء "دمج التكوينات" أو أثناء "اختبار أمان المعلومات وإصلاحه".

ولكن لم يحاول الجميع "إصلاح" التكوين. في مثل هذه الحالات، عادةً ما يبحثون بشكل محموم عن النسخ الاحتياطية، أو (طريقة أكثر تعقيدًا) يلجأون إلى مساعدة الأداة المساعدة GComp، والتي "وفقًا للأسطورة" يمكنها علاج MD إذا تم "تفكيكها" ببساطة ثم "تجميعها" باستخدام وظائف البرنامج. في الواقع، الأمر كذلك. لكن ليس في كل الحالات... وهذا هو بالضبط ما أود أن أتناوله في هذا المقال.

وبالتالي فإن البيانات الأولية:

- "التكوين المكسور"؛

جدوى MDDiag

- بعيدمديروالبرنامج المساعد ملف مستندالمتصفح له. باستخدام هذا البرنامج المساعد، يمكنك الدخول إلى MD والعمل مع كائناته.

وبما أن أداة التهيئة ترفض حتى عرض هذا "الخطأ غير القابل للتصحيح"، فإننا نجري الأمر MDDiagللتعرف عليه أو عليهم.

بعد تشغيل الأداة المساعدة، حدد التكوين المطلوب، ثم جميع الإعدادات الافتراضية... قم بالتشغيل والتحليل والحصول على النتيجة.

قد يكون لديك أخطاء أخرى، ولكن أعتقد أنك ستتمكن من اكتشافها بمجرد أن يكون لديك فهم عام لكيفية العثور على الخطأ وكيفية إصلاحه.

1. خطأ>(\\مجلة)

أوضحت الأداة المساعدة أنه تم ملاحظة الخطأ في كائنين "\\ Journal\Journal_Number 212" و"\\Journal\Journal_Number 860 ". الآن دعنا نذهب إلىبعيد وإلقاء نظرة على الأشياء هناك.


نرى هنا العديد من الكائنات وملف واحد "Container.Contents". يقوم بتخزين واصفات هذه الكائنات نفسها. بعد دراسة محتويات الملف بعناية، أدركنا أنه لا توجد أوصاف للكائنين لدينا.

أضف الواصفات كما هو موضح في الشكل.

تم حل المشكلة.

2. خطأ في مستند. فاتورة الإيصال (\\النص المكتوب\مساعدة_ المستخدمالرقم434\حاوية.محتويات)

نذهب مرة أخرى إلى MD على طول المسار المشار إليه. افتح الملف "حاوية. محتويات "والنظر بعناية في محتوياته.

الكلمات الغريبة Cgntainer، Contentq، Prmgram تلفت انتباهك على الفور. هذا صحيح، هذه معرفات بها أخطاء إملائية. ليس من الصعب تخمين مدى صحته (إذا كان الأمر صعبًا، فانتقل إلى الفرع التالي، وافتح نفس ملف "Container.Contents" وانظر كيف يجب كتابته).

3. خطأالدليل.العمليات النموذجية(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

افتح الملف في المسار المحدد وانظر بعناية... يجب وضع جميع المعلمات بين علامتي اقتباس. تحتوي إحدى المعلمات على "مسافة" بدلاً من "علامة اقتباس" - نقوم بتصحيحها (يمكن أن يحدث هذا الخطأ عندما يحتوي وصف أحد عناصر الكائن (حقل، زر، قائمة القيم، وما إلى ذلك) على عنصر واحد أو اقتباس مزدوجأو أي من "الأحرف الخاصة").

دعونا نطلق مرة أخرى MDDiagونرى أن كل الأخطاء السابقة قد اختفت، ولكن ظهر خطأ آخر.

حان الوقت الآن للانتقال إلى الأداة المساعدة GComp والتحقق من "وسيلة الإيضاح"...

نقوم بتشغيل الأداة المساعدة، وحدد MD المكسور (في الوقت الحالي)، والمجلد الذي يجب أن نضع فيه التكوين مرتبة حسب الكائنات، ثم تكون جميع مربعات الاختيار افتراضيًا، والشيء الوحيد هو تحديد مربع الاختيار "حذف" قوالب فارغةالجداول" في علامة التبويب "المعلمات العامة"، انقر فوق "إلغاء الترجمة".

بعد ذلك، دون مزيد من اللغط، انتقل إلى علامة التبويب "التجميع"، وقم بتعيين الدليل المصدر على الدليل الذي قمت بتحليل التكوين فيه للتو وحدد المسار إلى MD الجديد.

ستقوم الأداة بتجميع كل شيء بأمان.

الآن علينا فقط أن نفعل ذلك مدير بعيداستبدل الملف المقابل داخل MD "المكسور" بنفس الملف من الملف "الذي تم تجميعه للتو" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

نتحقق من التكوين مرة أخرى باستخدام MDDiag.

يبدو كل شيء على ما يرام. ننتقل الآن إلى أداة التهيئة ونجري "اختبار وتصحيح أمن المعلومات" للتأكد من عدم وجود المزيد من الأخطاء.

هذا كل شئ. اسمحوا لي أن آخذ إجازتي. وقد تكون القوة معك!)

ملاحظة. شكر خاص لمطوري الأدوات المساعدة المستخدمة في المثال - فهم يساعدوننا جميعًا على العيش كثيرًا...

مساء الخير!. آخر مرة نظرنا فيها إلى كيفية حل "خطأ في تطبيق التحويلات. التحقق من صحة مسارات التحويلات المحددة"، اليوم سأخبركم عن نتيجة أخرى بسبب ذلك. سيكون موضوع المنشور موقفًا لا يمكنك فيه تثبيت النظام الأساسي 1C وستتلقى رسالة: خطأ في Windows: خطأ في تنفيذ الوظيفة، سنحلها في دقيقة واحدة، وأنا متأكد من أن الموضوع سيكون مفيدًا للكثيرين.

كيف يبدو خطأ تنفيذ الوظيفة؟

كما كتبت أعلاه، أواجه هذه المشكلة على خادم طرفي يعمل بنظام التشغيل Windows Server 2012 R2 عندما أحاول تثبيت النظام الأساسي 1C 8.2. بعد تشغيل ملف setup.exe، تظهر نافذة معالج التثبيت، وعلى الفور تظهر نافذة إضافية تحتوي على الرسالة:

خطأ في Windows: خطأ في تنفيذ الوظيفة

والتي سوف تتلقى هذا الإخطار:

كما هو الحال في معظم الحالات مع منصة 1C، يمكن حل كل شيء من خلال تصحيح بسيط في ملفات التكوين. أولاً، قم بتشغيل عرض المجلدات المخفية، لأن الملف الذي نحتاجه غير مرئي افتراضيًا. بعد ذلك، على محرك الأقراص C:\، ابحث عن المجلد بيانات البرنامج.

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

يمكن فتح الملف 1CESTat.cfg باستخدام أي ملف محرر النص، انقر بزر الماوس الأيمن عليه وحدد "فتح باستخدام"، ثم محرر مناسب.

في ملف 1CESTat.cfg، ابحث عن المعلمة، ستحتاج إلى حذفها وحفظ الملف.

إذا نظرت إلى السجلات في عارض الأحداث، فسترى أحداثًا مثل هذه.

رمز الحدث 1013: المنتج: 1C:Enterprise 8.2 (8.2.19.130) - خطأ في Windows: خطأ في تنفيذ الوظيفة.

معرف الحدث 11708: المنتج: 1C:Enterprise 8.2 (8.2.19.130)--فشلت عملية التثبيت.

بعد أن قمنا بإزالة المعلمة ADMINISTRATIONFUNC=0، تلقينا بالفعل:

معرف الحدث 1033: قام Windows Installer بتثبيت المنتج. المنتج: 1C:Enterprise 8.2 (8.2.19.130). الإصدار: 8.2.19.130. اللغة: 1049. الشركة المصنعة: 1C. اكتمل التثبيت بالحالة: 1603.




قمة