نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • ایمنی
  • یک خطای غیرقابل جبران در سرور 1c رخ داد. خطای ویندوز: خطای اجرای عملکرد، در یک دقیقه حل شد

یک خطای غیرقابل جبران در سرور 1c رخ داد. خطای ویندوز: خطای اجرای عملکرد، در یک دقیقه حل شد

من فکر می کنم که هر یک از برنامه نویسان "هفت" حداقل یک بار با چنین خطایی مواجه شده اند. این می تواند در حین "پیکربندی های ادغام" یا در هنگام "تست و رفع امنیت اطلاعات" رخ دهد.

اما همه سعی نکردند پیکربندی را "اصلاح" کنند. در چنین مواردی، آنها معمولاً یا دیوانه‌وار به دنبال پشتیبان‌گیری می‌گردند، یا (روش پیچیده‌تر) به کمک ابزار GComp متوسل می‌شوند، که «طبق افسانه» می‌تواند MD را درمان کند اگر به سادگی «از هم جدا شود» و سپس با استفاده از آن «مونتاژ» شود. توابع برنامه در واقع، این درست است. اما نه در همه موارد... این دقیقاً موردی است که می خواهم در این مقاله بررسی کنم.

بنابراین، داده های اولیه:

- "پیکربندی شکسته"؛

سودمند MDDiags

- دورمدیرو افزونه DocFileمرورگر به او. با استفاده از این افزونه می توانید به داخل MD رفته و با آبجکت های آن کار کنید.

از آنجایی که Configurator حتی از نمایش این "خطای غیرقابل اصلاح" خودداری می کند، ما اجرا می کنیم MDDiagsبرای شناسایی آن یا آنها.

پس از راه اندازی ابزار، پیکربندی مورد نظر را انتخاب کنید، سپس تمام تنظیمات پیش فرض را ... اجرا کنید، تجزیه و تحلیل کنید، نتیجه بگیرید.

ممکن است خطاهای دیگری داشته باشید، اما فکر می‌کنم زمانی که درک کلی از نحوه یافتن خطا و نحوه رفع آن داشته باشید، می‌توانید آنها را کشف کنید.

1. خطا>(\\مجله)

ابزار روشن کرد که خطا برای 2 شی "\\" مشاهده شده است Journal\Journal_Number 212" و "\\Journal\Journal_Number" 860". حالا بیایید بهدور و به اشیاء آنجا نگاه کنید.


ما در اینجا بسیاری از اشیاء و یک فایل "Container.Contents" را می بینیم. توصیف کننده های همین اشیاء را ذخیره می کند. پس از مطالعه دقیق محتویات فایل، متوجه می شویم که هیچ توصیف کننده ای برای 2 شیء ما وجود ندارد.

همانطور که در شکل نشان داده شده است، توصیفگرها را اضافه کنید.

مشکل حل شد.

2. خطای DOCUMENT. Receipt Invoice (\\TypedText\UserHelp_شماره 434\ظرف.فهرست)

در مسیر مشخص شده دوباره به سمت MD می رویم. فایل را باز کن"ظرف. فهرست "و با دقت به محتوای آن نگاه کنید.

کلمات عجیب Cgntainer، Contentq، Prmgram بلافاصله نظر شما را جلب می کند. درست است، اینها شناسه های غلط املایی هستند. حدس زدن اینکه چگونه باید درست باشد دشوار نیست (اگر مشکل است، به شعبه بعدی بروید، همان فایل Container.Contents را باز کنید و ببینید چگونه باید نوشته شود).

3. خطافهرست راهنما.عملیات معمولی(\\Subconto\Subconto_Number5870\Workbook\Dialog Stream)

فایل را در مسیر مشخص شده باز کنید و با دقت نگاه کنید... همه پارامترها باید داخل گیومه قرار بگیرند. یکی از پارامترها به جای "نقل قول" یک "فضا" دارد - ما آن را تصحیح می کنیم (این خطا زمانی رخ می دهد که توضیحات یکی از عناصر یک شی (فیلد، دکمه، لیست مقادیر و غیره) شامل یک واحد باشد. یا دو نقل قول، یا برخی دیگر از "شخصیت های خاص").

دوباره راه اندازی کنیم MDDiagsو می بینیم که تمام خطاهای قبلی ناپدید شده اند، اما خطای دیگری ظاهر شده است.

اکنون زمان آن است که به ابزار GComp مراجعه کنید و "افسانه" را بررسی کنید...

ما ابزار را راه اندازی می کنیم، MD شکسته (فعلا) خود را انتخاب می کنیم و پوشه ای را که باید پیکربندی را در اشیاء مرتب کنیم، انتخاب می کنیم، سپس تمام چک باکس ها به طور پیش فرض هستند، تنها چیزی که وجود دارد این است که کادر "حذف الگوهای جدول خالی" را علامت بزنید. در تب "پارامترهای عمومی" روی "Decompile" کلیک کنید.

سپس، بدون مزاحمت بیشتر، به برگه "کامپایل" بروید، دایرکتوری منبع را روی پوشه ای تنظیم کنید که پیکربندی را در آن تجزیه کرده اید و مسیر MD جدید را نشان دهید.

ابزار همه چیز را با خیال راحت جمع می کند.

اکنون تنها کاری که باید انجام دهیم این است که از Far Manager استفاده کنیم تا فایل مربوطه را در داخل MD "شکسته" با همان فایل "فقط اسمبل شده" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream) جایگزین کنیم.

پیکربندی را دوباره با استفاده از آن بررسی می کنیم MDDiags.

به نظر می رسد همه چیز خوب است. اکنون وارد پیکربندی می‌شویم و «تست و تصحیح امنیت اطلاعات» را انجام می‌دهیم تا مطمئن شویم که دیگر خطایی وجود ندارد.

همین. بذار مرخصی بگیرم و باشد که نیرو با شما باشد!)

P.S. تشکر ویژه از توسعه دهندگان ابزارهای مورد استفاده در مثال - آنها به همه ما کمک می کنند تا زندگی کنیم ...

بنابراین، هدف مقاله من چیست؟

1. یک سرور (x64) با Office 2016 (x64) نصب شده است، 1C 8.3.8 همچنین x64 (به معنی سرور 1C) وجود دارد. کاربران از طریق تین کلاینت و کلاینت وب به هم متصل می شوند.

2. یک دسته از قراردادها و فاکتورهای استاندارد صادر شده (تهیه شده) توسط بخش فروش وجود دارد. یک فونت، یک پاراگراف و غیره وجود دارد، البته، همه چیز در Word، Excel 2016 (x64) طراحی شده است، طبیعتاً تمایلی به ترسیم همه اینها در 1C وجود ندارد، اما تمایل به قرار دادن آن در قالب ActiveDocument وجود دارد. طرح بندی ها

راه حل پیش پا افتاده به نظر می رسد :) ، من کل مکانیسم، نحوه انجام آن، نحوه پر شدن داده ها از 1C به طرح ActiveDocument را توضیح نمی دهم - فکر می کنم شما بدون من این را کاملاً می دانید. اما در طول کار مشخص شد که همه چیز در حوزه اشیاء COM چندان هموار نیست، یعنی:

2. کدام گزینه بهتر است: ActiveDocument یا Binary Data؟ اگرچه برای من چیزی شبیه به انتخاب ودکا با آبجو یا آبجو با ودکا به نظر می رسد :) . چیز مهمی نیست، شما باید اسناد را با داده های 1C پر کنید و آنها را به مشتری منتقل کنید.

خوب، خوب، بیایید از اشعار بگذریم، من ActiveDocument را انتخاب می کنم، کل الگوریتم را توضیح نمی دهم، فقط مشکلات و راه حل آنها را لیست می کنم. همه چیزهایی که در زیر بیان می شود حدس و گمان شخصی من است و به هیچ وجه ادعا نمی کند که حقیقت نهایی است. ممکن است این مشکلات را حل کرده باشید یا آنها را به روش دیگری حل کرده باشید.

1. سنگ اولین". روش SaveAs کار نمی کند (هم برای MSWord و هم برای MSExcel). هنگام تلاش برای نوشتن داده های باینری، 1C به سادگی خراب می شود. به قطعه لیست نگاه کنید:

MSWord = Layout.Get(); Document = MSWord.Application.Documents (1) را امتحان کنید. Document.Activate(); //بعد، به نحوی داده ها را دریافت می کنیم و سند Word را پر می کنیم // مسیر را در پوشه موقت دریافت کنید تا فایل در آنجا ذخیره شود TimeName = GetTemporaryFileName(.docx"); Document.SaveAs(NameTime); //stone از اینجا شروع می شود 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 وارد کنید؟

این را می توان از طریق Task Manager نیز بررسی کرد، اما واقعیت این است که طرح 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 Layout Form Printing ("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); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = تعریف نشده. استثنا // اگر خطایی رخ دهد، داده های خطا چاپ می شود و شی بسته می شود. اطلاعات = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Error - "+Information.Description+" کد خطا - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

من فکر می کنم اینجا همه چیز واضح است، ابتدا یک نمونه COM با عمق بیت مورد نیاز ایجاد کردیم، یک فایل خالی ایجاد کردیم و آن را در یک پوشه موقت ذخیره کردیم، سپس با COM x32 کار می کنیم، آن را با داده پر می کنیم و در نهایت محتویات کل را کپی می کنیم. سند و آن را در یک فایل از قبل آماده شده ذخیره کنید.

همه چیز یکسان است، اما فقط برای اکسل

TimeFile = GetTimeFileName ("xls"); Excel = New COMObject ("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); تلاش WBook = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // ما کاری انجام می دهیم، آن را با داده های 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells) پر می کنیم. BookN.Save(); BookN.Close(); استثنا // اگر خطایی رخ دهد، داده های خطا چاپ می شود و شی بسته می شود. اطلاعات = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Error - "+Information.Description+" کد خطا - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

بفرمایید " اولین"من تصمیم گرفتم سنگ، در یک سرور x64 با Office x64، همه چیز دقیقاً مانند ساعت کار می کند، بدون خطا و نیازی به ایجاد هیچ پوشه و هر چیز دیگری نیست.

سنگ " دومین". قطعه کد

TimeFile = GetTimeFileName ("xls");

غذا خوردن خیلی خوب نیست، زیرا در پوشه می نویسد: "c:\Users\ what's there..."، به طور کلی، این پوشه همیشه در لیست سیاه تمام فایروال ها، آنتی ویروس ها و غیره و غیره است. حداقل مرکز کنترل امنیتی را در Word یا Excel باز کنید. بیایید آنجا را هم نگاه کنیم

شما باید با این کار دستکاری کنید، در غیر این صورت امکان ظاهر شدن خطاهای "عجیب" وجود دارد. بنابراین موارد زیر را پیشنهاد می کنم:

1. Configurator را باز کرده و یک ثبت اطلاعات جدید اضافه کنید

در اینجا ما فایل های آماده Word، Excel خود را که از قبل پر شده اند ذخیره می کنیم، البته:

LayoutName - Layout ID

DocumentOffice - Value Storage، در اینجا ما فایل تمام شده خود را نگه می داریم

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" را حل می کنیم. تنها چیزی که باقی می ماند این است که این فایل تمام شده را به Client (مشتری های نازک و وب) نشان دهیم.

3. سنگ سوم" - انتقال یک فایل به مشتری، در اینجا من فقط همه کدها را پست می کنم، برخی از آنها از BSP گرفته شده اند، برخی از پیکربندی آزمایشی "برنامه مدیریت شده"، برخی از اینترنت، اما به طور کلی این کد است (در آن کامل)

////////////////////////////////////////////////// ///////////////////////// // رویه‌های خدمات و توابع BSP &OnServer تابع GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = ثبت اطلاعات TemporaryStorageOffice.CreateRecordKey(ساختار جدید("Object,LayoutName",ObjectLink,LayoutName)); // آدرس = GetNavigationLink(RecordKey,"OfficeDocument"); آدرس بازگشت؛ EndFunction // رویه &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Export; // پایان رویه &روی رویه کلاینت پس از دریافت فایل ها (فایل های منتقل شده، پارامترهای اضافی) صادرات اگر فایل ها انتقال داده نشد = تعریف نشده سپس برای هر شرح از چرخه فایل های ارسالی OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication.Name", ThisOb ) StartLaunchApplication (OpAfterStartApplication، Description.Name); چرخه پایان endIf; EndProcedure &OnClient Procedure AfterDirectorySelection (SelectedFiles, CommandName) صادر کنید اگر SelectedFiles = تعریف نشده باشد سپس برگردید. endIf; فهرست = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); اگر CommandName = "فاکتور" سپس LayoutName = "فاکتور" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); پایان رویه &در رویه کلاینت باز کردن فایل ها از طریق پسوند (نام فرمان) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); دایرکتوری = GeneralPurposeCallServer.GetWorkingDirectory(); اگر Directory = Undefined OR Directory = "" سپس Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "انتخاب دایرکتوری برای ذخیره موقت فایل ها"", "ru"); Dialog.Show(OpAfterSelectingDirectory)؛ Else SelectedFiles = آرایه جدید. SelectedFiles.Add(Directory); انجام پردازش هشدار (OpAfterSelectingDirectory، SelectedFiles)؛ endIf; پایان رویه &در فرآیند رویه کلاینتConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Procedure Connected_PassFileToClient() آدرس = GetLayout(); اگر آدرس<>تعریف نشده سپس 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); endIf; پایان رویه &روی روی سرور ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = آرایه جدید; Array of Objects.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Array Object, LayoutName, True); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure 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. و در آخر، Extension را برای کار با Files وصل کنید (به یاد داشته باشید که در حالت Thin Client، این پسوند همیشه فعال است). و از طریق کد:

ما فایل را با استفاده از مکانیسم NavigationLink به Client منتقل می کنیم، پیام های زیر را در مرورگر دریافت می کنیم (Thin به خودی خود کار می کند):

خب، به نظر می رسد که تمام است. امیدوارم این به کسی کمک کند ...

در مورد فایل های Word، Excel که به عنوان داده های باینری درج شده اند؟ مشکل چیست؟

1. یا باید این داده های باینری را از طرح بیرون بکشیم و آن را با داده های 1C پر کنیم و توجه دوباره آن را به شکل داده های باینری (Vodka With Beer یا Beer With Vodka) یادداشت کنیم.

2. یا باید طرح BinaryData را در سمت Client دریافت کنیم و آن را در آنجا پر کنیم، اما شی COM فقط توسط مرورگر اینترنت اکسپلورر پشتیبانی می شود و سپس با رقص با تنظیمات ActiveX، مرورگرهای دیگر مدت ها استفاده از ActiveX را کنار گذاشته اند.

عصر بخیر!. آخرین باری که به نحوه حل "خطا در اعمال تبدیل ها. بررسی صحت مسیرهای تبدیل های مشخص شده" نگاه کردیم، امروز در مورد پیامد دیگری به دلیل آن به شما خواهم گفت. موضوع انتشار وضعیتی است که نمی توانید پلت فرم 1C را نصب کنید و پیامی دریافت خواهید کرد: خطای ویندوز: خطای اجرای عملکرد، ما آن را در یک دقیقه حل می کنیم، من مطمئن هستم که موضوع برای بسیاری مفید خواهد بود.

خطای اجرای تابع چگونه است؟

همانطور که در بالا نوشتم، وقتی می‌خواهم پلتفرم 1C 8.2 را نصب کنم، با این مشکل در سرور ترمینال Windows Server 2012 R2 مواجه می‌شوم. پس از اجرای فایل setup.exe، پنجره جادوگر نصب ظاهر می شود و بلافاصله یک پنجره اضافی با پیام:

خطای ویندوز: خطای اجرای عملکرد

که برای آن این اعلان را دریافت خواهید کرد:

همانطور که در بیشتر موارد با پلت فرم 1C، همه چیز را می توان با یک اصلاح کوچک در فایل های پیکربندی حل کرد. ابتدا نمایش پوشه های مخفی را روشن کنید، زیرا فایل مورد نیاز ما به طور پیش فرض قابل مشاهده نیست. سپس، در درایو C:\، پوشه را پیدا کنید داده های برنامه.

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

فایل 1CESTat.cfg را می توان با استفاده از هر ویرایشگر متنی باز کرد، روی آن کلیک راست کرده و "Open with" و سپس یک ویرایشگر مناسب را انتخاب کنید.

در فایل 1CESTat.cfg، پارامتر را پیدا کنید، باید آن را حذف کنید و فایل را ذخیره کنید.

اگر به گزارش‌های موجود در نمایشگر رویداد نگاه کنید، رویدادهایی مانند این را مشاهده خواهید کرد.

کد رویداد 1013: محصول: 1C:Enterprise 8.2 (8.2.19.130) -- خطای ویندوز: خطای اجرای عملکرد.

شناسه رویداد 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.

بهترین مقالات در این زمینه