1s 8.3 read فایل را در سرور ذخیره کنید. شما باید فایل های موقت را به درستی ایجاد کنید

دامنه کاربرد: برنامه مدیریت شده، اپلیکیشن موبایل، یک برنامه رایج

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

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

1.2. اگر سیستم فایل از طریق کدهای در حال اجرا روی سرور قابل دسترسی است، پس:

  • هنگام استفاده از پایگاه اطلاعات سرویس گیرنده-سرور، دسترسی توسط حقوق کاربری که سرور 1C:Enterprise از طرف او در حال اجرا است (*) محدود می شود.
  • هنگام استفاده از پایگاه داده فایل منتشر شده بر روی سرور وب، دسترسی توسط حقوق کاربری که وب سرور از طرف او اجرا می شود محدود می شود.

کار با فایل ها و دایرکتوری های موقت

اگر نیاز به استفاده از فایل ها و دایرکتوری های موقت دارید، باید شرایط زیر را رعایت کنید:

1. برای دریافت نام فایل موقت از روش استفاده کنید GetTemporaryFileName. در غیر این صورت امکان پذیر است کار نادرستتنظیمات در حالت چند کاربره، با پروفایل های امنیتی فعال، مشکلات مربوط به حقوق دسترسی به فایل های سیستم عامل.

اشتباه:

IntermediateFileName = "C:/فایل های موقت 1C/TempFile.xml"Data.Write(IntermediateFileName);

U کاربر فعلیممکن است مجوز نوشتن در فهرست مشخص شده نداشته باشید. علاوه بر این، اجرای این کد از دو جلسه مختلف به طور همزمان یک خطا ایجاد می کند.

درست:

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);

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

2. برای ایجاد دایرکتوری موقت نیز توصیه می شود از نام بدست آمده با استفاده از روش استفاده کنید GetTemporaryFileName. این تضمین می کند که نام دایرکتوری ایجاد شده هنگام کار در حالت چند کاربر منحصر به فرد باشد. پس از این کار می توانید دایرکتوری ها و فایل های دیگری را بدون محدودیت در دایرکتوری ایجاد شده ایجاد کنید.

3. هنگام اجرای کد در یک سرویس گیرنده وب یا در موارد نادر، اگر کار در حالت چند کاربره مورد نیاز نیست (به عنوان مثال، به روز رسانی پایگاه اطلاعات فایل، حالت انحصاری)، باید از تابع برای تشکیل نام فایل یا دایرکتوری استفاده کنید. دایرکتوری فایل های موقت.

همچنین ببینیدویژگی های توسعه تنظیمات برای سیستم عامل لینوکس، در مورد ویژگی های استفاده از نام فایل ها و مسیرها.

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

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//کار با فایل...//حذف فایل موقت تلاش برای حذف فایل ها(IntermediateFileName);Exception LogRegistration(НStry(. =ru) اقدام"") , LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

همچنین ببینید:با استفاده از Log Book.

5. هنگام استفاده از فایل ها و دایرکتوری های موقت در سرور، باید کار با آنها را در یک تماس سرور به طور کامل خاتمه دهید. هنگام اجرای یک پیکربندی با استفاده از یک خوشه سرور، دفعه بعد که با این فایل ها تماس می گیرید، ممکن است این فایل ها غیرقابل دسترسی شوند، زیرا اجرای کد در رایانه دیگری آغاز می شود. اگر نیاز به ذخیره داده‌ها بین تماس‌های سرور در همان جلسه دارید، باید از ذخیره‌سازی موقت پلتفرم (روش‌ها، ) استفاده کنید.

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

  • برای اطمینان از دسترسی از تمام مکان‌های پردازش ممکن، یک ثابت ایجاد می‌شود تا یک مسیر مشترک به فایل‌ها را ذخیره کند که از همه سرورهای خوشه قابل دسترسی باشد.
  • هنگامی که فایل های موقت ایجاد می شوند، نام آنها در ثبت اطلاعات کمکی وارد می شود و زمان ایجاد فایل حفظ می شود.
  • در طول روند عادی فرآیند، آخرین عملیاتی که به فایل‌ها نیاز داشت، قبل از تکمیل، هم خود فایل و هم ورودی‌های مربوط به آنها را در رجیستر کمکی حذف می‌کند.
  • کمکی کار روتینبه طور دوره‌ای وجود ورودی‌هایی را در ثبت کمکی بررسی می‌کند که طول عمر آن‌ها آشکارا از زمان تکمیل عادی فرآیند بیشتر است. هنگامی که چنین ورودی هایی شناسایی می شوند، وظیفه فایل های موقت و ورودی های مربوط به آنها را حذف می کند.

انتقال فایل بین کلاینت و سرور

1. هنگام کار با یک فایل روی کلاینت و سرور به طور همزمان، باید از انتقال فایل از طریق ذخیره سازی موقت استفاده کنید (روش ها PlaceFile, PlaceFiles, دریافت فایل, GetFiles, StartFilePlace, در انبار موقت قرار دهید, دریافت از ذخیره سازی موقت). به طور کلی سرورهای سرویس گیرنده و کلاستر هستند کامپیوترهای مختلفبا سیستم های فایل مختلف، و دسترسی به فایل ها می تواند در زیر رخ دهد توسط کاربران مختلفسیستم عامل با حقوق متفاوت

اشتباه:

&OnClientProcedureFileProcessing() ...FileName = "C:/Files for processing/Download.xml"; نتیجه = انجام ProcessingOnServer(FileName); ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Reading = NewTextReading(FileName) ... نتیجه = Reading.Read(); نتیجه بازگشت؛ EndFunction

درست:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Files for processing/Download.xml"; آدرس = ""; PlaceFile (آدرس، FileNameForProcessing، FileNameForProcessing، False)؛ نتیجه = انجام ProcessingOnServer(Address); ...EndProcedure&OnServerFunction Perform ProcessingOnServer(Address) Data = GetFromTemporaryStorage(Address) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); Read = ReadText جدید(IntermediateFileName) ... نتیجه = Read.Read(); ...DeleteFiles(IntermediateFileName); نتیجه بازگشت؛ EndFunction

2. برای ذخیره داده ها در ذخیره سازی موقت بین چند تماس سرور، هنگام قرار دادن آنها در ذخیره سازی، باید از پارامتر استفاده کنید UniqueFormIdentifierروش PlaceFileبا ارسال شناسه فرم فعلی به آن. چنین مقادیری تنها زمانی که فرم مشخص شده بسته شود از ذخیره سازی موقت آنها حذف می شود. در این حالت، هنگام قرار دادن مجدد همان فایل در ذخیره سازی موقت، مقدار قبلی باید به صورت دستی حذف شود. مثلا:

اشتباه:

FileNameForProcessing = "C:/Files for processing/Download.xml"; ... // اولین تماس سرور آدرس = ""; PlaceFile (آدرس، FileNameForProcessing، FileNameForProcessing، False، UniqueIdentifier)؛ نتیجه = اجرای InitialProcessingOnServer(Address);
... // دومین تماس سرور با نسخه فایل مشابه Result = Perform IntermediateProcessingOnServer(Address); ...
// سومین تماس سرور با نسخه جدیدآدرس فایل = ""; PlaceFile (آدرس، FileNameForProcessing، FileNameForProcessing، False، UniqueIdentifier)؛ نتیجه = اجرای FinalProcessingOnServer(Address); ...

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

درست:

FileNameForProcessing = "C:/Files for processing/Download.xml"; ... // اولین تماس سرور آدرس = ""; PlaceFile (آدرس، FileNameForProcessing، FileNameForProcessing، False، UniqueIdentifier)؛ نتیجه = اجرای InitialProcessingOnServer(Address); ... // دومین تماس سرور با نسخه فایل مشابه Result = Perform IntermediateProcessingOnServer(Address); ...
// سومین تماس سرور با نسخه جدید فایل DeleteFromTemporaryStorage(Address); آدرس = ""; PlaceFile (آدرس، FileNameForProcessing، FileNameForProcessing، False، UniqueIdentifier)؛ نتیجه = اجرای FinalProcessingOnServer(Address); ...

همچنین ببینید

آنها ما را پیدا می کنند: دسترسی به سیستم فایل, GetTemporaryFileName(


من یک مورد از تمرین خودم را به شما می گویم. یک روز مجبور شدم آپلود داده را در آن تنظیم کنم حسابداری 1cاز یک پیکربندی تکرار نشده تخلیه به شکل یک پردازش جداگانه بود که طبق قوانین مبادله کار می کرد. قوانین خود به عنوان یک طرح داده باینری پیوست شدند. الگوریتم عملیاتی معمولی است - قوانین در یک فایل موقت آپلود می شوند و سپس با پردازش به بالا کشیده می شوند. تبادل جهانیداده ها در قالب XML."

توسعه دهنده قوانین انتقال و پردازش به سینه خود زد و قسم خورد که همه چیز برای او عالی کار می کند. در عمل، یک خطا به طور مداوم در هنگام آپلود داده ها رخ می دهد. متن پیام خطا آشکارا بیان می کرد که مشکل در قوانین مبادله است. در متن پیام آمده است: «سند دیگر این ویژگی را ندارد، من از بارگذاری آن خودداری می‌کنم. من نمی خواستم قوانین مبادله را سرهم کنم، زیرا ... کار من نیست در عوض، کد پردازش را باز کردم و تصمیم گرفتم ببینم روند آپلود قوانین تبادل در یک فایل موقت چگونه سازماندهی شده است.

معلوم شد که مشکل دقیقا همین است. واقعیت این است که برنامه نویس زحمت ایجاد یک نام فایل منحصر به فرد برای قوانین مبادله (در دایرکتوری موقت) را به خود نداده و حتی یک چک را وارد کرده است: "اگر فایل وجود دارد، آپلود لازم نیست." البته، همه چیز تا پردازش کار کرد، یا بهتر است بگوییم طرح با قوانین به روز نشد. در نتیجه، کاربران به طور مداوم سعی در آپلود با استفاده از قوانین مبادله قدیمی داشتند. "فایل موقت" در فهرست "temp" دائمی شده است و تا زمانی که آن را به صورت دستی حذف نکنید، همیشه برای آپلود استفاده می شود.

شما باید فایل های موقت را به درستی ایجاد کنید

برای جلوگیری از چنین موقعیت‌های خنده‌داری، نباید سعی کنید چرخ‌ها و عصاها را به شکل توابع «مشکل» که از اشیاء COM استفاده می‌کنند، دوباره اختراع کنید. کافی است از عملکرد تعبیه شده در پلت فرم استفاده کنید - GetTemporaryFileName()، که به طور خودکار بسیاری از مشکلات را حل می کند:

اطمینان حاصل می کند که نام فایل واقعا منحصر به فرد است.

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

حذف خودکار فایل‌های موقت در حین راه‌اندازی مجدد پلتفرم یک ویژگی بسیار جالب است که از نظر تئوری به توسعه‌دهنده اجازه می‌دهد تا نیاز به حذف فایل‌ها را خود نادیده بگیرد. درست است، هنوز ارزش سوء استفاده از آن را ندارد. اگر کد روی سرور اجرا شود، باید بدانید که سرور ممکن است برای مدت طولانی دوباره راه اندازی نشود، به این معنی که پوشه temp مسدود می شود. فایل های غیر ضروری. در این راستا، نباید کار "کثیف" را به پلت فرم کاملاً اعتماد کنید. بهتر است از این ویژگی به عنوان گزینه بازگشتی استفاده کنید و یک خط کد اضافی به کد خود اضافه کنید تا فایل موقت حذف شود.

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

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

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

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

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 = 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); 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(); BookH.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 را باز کرده و یک ثبت اطلاعات جدید اضافه کنید

در اینجا ما کلمه تمام شده خود را ذخیره خواهیم کرد، فایل های اکسلالبته قبلاً پر شده است:

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 = ثبت اطلاعات موقت. // آدرس = 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_SendFileToClient"); 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 وصل کنید (به یاد داشته باشید که در حالت تین مشتری، این برنامه افزودنی همیشه فعال است). و از طریق کد:

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

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

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

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

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

پلتفرم فناوری 1C: Enterprise 8 به شما امکان می دهد در آن صرفه جویی کنید پایگاه اطلاع رسانیفایل های دلخواه را از آنجا دریافت کنید و از آنها استفاده کنید راه های مختلف. بیایید با استفاده از مثال به این عملیات نگاه کنیم.

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

برای ذخیره فایل ها، از یک ویژگی (یا منبع ثبت نام) با نوع استفاده کنید StorageValues.

بارگذاری یک فایل دلخواه در پایگاه اطلاعات 1C

هر فایلی را می توان به صورت داده باینری نشان داد و در آن بارگذاری کرد ذخیره سازی ارزش.

هنگام تبدیل داده های باینری به یک شی StorageValuesطراحی استفاده شده StorageValues ​​جدید (داده، فشرده سازی)با دو پارامتر:

  1. داده ها- داده های باینری که باید در فضای ذخیره سازی ذخیره شوند
  2. فشرده سازی- نسبت فشرده سازی الگوریتم Deflation. عدد صحیح در محدوده -1...9. -1 سطح فشرده سازی پیش فرض است. 0 - بدون فشرده سازی، 9 - حداکثر فشرده سازی. مقدار پیش فرض: -1. پارامتر اختیاری است اگر مشخص نشده باشد، فشرده سازی استفاده نمی شود.

//فایل را به داده باینری تبدیل کنید
File = New BinaryData(Path) ;

//ايجاد كردن شی جدید StorageValues

DataStorage = NewValueStorage(File, NewDataCompression(9) );

ذخیره یک فایل دلخواه از پایگاه اطلاعاتی 1C در دیسک

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

//داده های باینری را از ذخیره سازی دریافت کنید
//Data Storage - ویژگی یک شی با نوع Value Storage

//داده های دریافتی را روی دیسک بنویسید
//که در مسیر متغیرآدرس کامل فایل روی دیسک است
داده ها. نوشتن (مسیر) ;

مشاهده یک فایل واقع در پایگاه اطلاعات 1C

برای مشاهده یک فایل ذخیره شده در پایگاه داده، باید برنامه ای را روی رایانه خود نصب کرده باشید که فایل را باز می کند.

//نام فایل موقت با پسوند مورد نیاز را دریافت کنید
//در متغیر Extension باید پسوند فایل را قرار دهید، برای مثال "pdf"
مسیر = GetTemporaryFileName (افزونه) ;

//دریافت داده ها از ذخیره سازی
//Data Storage - ویژگی یک شی با نوع Value Storage
Data = Datastore. گرفتن() ؛

//داده ها را در یک فایل موقت بنویسید
داده ها. نوشتن (مسیر) ;

//تلاش برای باز کردن فایل در برنامه مورد نظر
//اگر برنامه یافت نشد، کادر محاوره ای سیستم "Open with..." ظاهر می شود.
LaunchApplication (مسیر)؛

اغلب، کاربران خطاهای عجیبی را تجربه می کنند: این برنامه برای یک کاربر به درستی کار می کند، اما برای دیگری، در نزدیکی، در رایانه دیگری، کاملاً متفاوت عمل می کند. اغلب، پس از بررسی های طولانی، معلوم می شود که علت چنین "اشکال" در 1C 8 حافظه پنهان است.

در زیر به شما خواهم گفت که کش 1C چیست و چگونه آن را پاک کنید.

ذخیره سازی- فرآیند ایجاد یک بافر از اطلاعات متداول و به عنوان یک قاعده استاتیک. حافظه پنهان برای افزایش سرعت برنامه استفاده می شود، به ویژه در 1C، فایل های پیکربندی بر روی رایانه کاربر بارگذاری می شوند تا هر بار آنها را از سرور درخواست نکنند.

با این حال، اغلب پلتفرم 1C به درستی از حافظه پنهان پیکربندی استفاده نمی کند و در نتیجه رفتار پیکربندی نامناسبی دریافت می کنیم.

دلایل رفتار نادرست می تواند متفاوت باشد: به روز رسانی پیکربندی پویا، خرابی نرم افزار یا سخت افزار.

روش اول پاک کردن کش 1C به صورت دستی است

برای حل مشکلات و "اشکال" 1C، پاک کردن حافظه پنهان پلت فرم 1C 8.3 معمولا کمک می کند.

این کار به صورت زیر انجام می شود:

مرحله 1

دایرکتوری را پیدا کنید که فایل های موقت 1C در آن ذخیره می شوند، آنها را می توان در منوی تنظیمات در لیست IB مشاهده کرد:

گام 2

ما یک آدرس مانند دریافت کردیم

267 درس ویدیویی را در 1C به صورت رایگان دریافت کنید:

C:\Documents and Settings\username\Application Data\1C\1Cv82\tmplts\1c

پوشه های کش در واقع شده اند

C:\Documents and Settings\Uusername\Application Data\1C\1Cv82\

* جایی که نام کاربری نام کاربری سیستم است و پوشه 1Cv82 ممکن است بسته به نسخه پلت فرم 1C متفاوت باشد

با رفتن به آنجا، پوشه های جالب زیادی (تعداد پوشه ها برابر با تعداد تنظیمات است) پیدا می کنیم:

همه دایرکتوری های انتخاب شده یک کش پایگاه داده 1C هستند و می توان آنها را با خیال راحت حذف کرد. قبل از حذف باید از سیستم امنیت اطلاعات خارج شوید.

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

rmdir "%AppData%\1C\1Cv8" /S /Q
rmdir "%LOCALAPPDATA%\1C\1Cv8" /S /Q

راه دوم برای پاک کردن فایل های موقت 1C حذف پایگاه داده از لیست است

روش دوم ساده تر است، اما کاملاً صحیح نیست. برای پاک کردن آن، فقط این پیکربندی را حذف کنید و یک پیکربندی جدید با همان مسیر امنیت اطلاعات ایجاد کنید.

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

می توانید این کار را انجام دهید، کش پاک می شود، اما فایل های موقت روی هارد دیسک باقی می مانند.

روش سوم پارامتر ClearCache است

لازم است دستور را در پارامترهای راه اندازی اضافی وارد کنید (در لیست پایگاه های داده، دکمه تغییر، آخرین برگه) /پاک کردن حافظه پنهان. مثال استفاده:

ویدئو در مورد پاک کردن حافظه پنهان در برنامه های 1C:

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

اگر شروع به یادگیری برنامه نویسی 1C کرده اید، ما را به شما توصیه می کنیم دوره رایگان(فراموش نکن مشترک شدن در یوتیوب - ویدیوهای جدید به طور منظم منتشر می شود):