1s 8.3 faylni serverda saqlang. Vaqtinchalik fayllarni to'g'ri yaratishingiz kerak

Qo'llash doirasi: boshqariladigan dastur, mobil ilova, umumiy dastur.

1. Konfiguratsiya kodidan fayl tizimining fayllari va kataloglariga kirishda, ularga kirish foydalanuvchi huquqlari bilan cheklanganligini yodda tutish kerak. operatsion tizim, uning nomidan dastur ishlayotgan.

1.1. Agar kirish fayl tizimi mijozda ishlaydigan koddan amalga oshiriladi, u nomidan dastur ishlayotgan foydalanuvchining huquqlari ostida amalga oshiriladi (nozik, qalin yoki veb-mijoz). Odatda, bu operatsion tizimning joriy foydalanuvchisi.

1.2. Agar fayl tizimiga serverda ishlaydigan koddan kirish mumkin bo'lsa, u holda:

  • mijoz-server ma'lumotlar bazasidan foydalanganda kirish 1C: Enterprise serveri nomidan ishlayotgan foydalanuvchining huquqlari bilan cheklangan (*);
  • Veb-serverda chop etilgan fayl ma'lumotlar bazasidan foydalanilganda, kirish veb-server nomidan ishlayotgan foydalanuvchining huquqlari bilan cheklanadi.

Vaqtinchalik fayllar va kataloglar bilan ishlash

Vaqtinchalik fayllar va kataloglardan foydalanish kerak bo'lsa, siz quyidagi talablarga rioya qilishingiz kerak:

1. Vaqtinchalik fayl nomini olish uchun usuldan foydalaning GetTemporaryFileName. Aks holda bu mumkin noto'g'ri ish ko'p foydalanuvchi rejimida konfiguratsiyalar, xavfsizlik profillari yoqilgan, operatsion tizim fayllariga kirish huquqlari bilan bog'liq muammolar.

Noto'g'ri:

IntermediateFileName = "C:/Vaqtinchalik fayllar 1C/TempFile.xml"Data.Write(IntermediateFileName);

U joriy foydalanuvchi Belgilangan katalogga yozish uchun ruxsatingiz bo'lmasligi mumkin. Bundan tashqari, ushbu kodni bir vaqtning o'zida ikkita turli seansdan ishga tushirish xatolikka olib keladi.

To'g'ri:

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

Ushbu funktsiyadan foydalanganda noyob nom olinadi va faylga kirish kafolatlanadi.

2. Vaqtinchalik katalog yaratish uchun, shuningdek, usul yordamida olingan nomdan foydalanish tavsiya etiladi GetTemporaryFileName. Bu ko'p foydalanuvchi rejimida ishlaganda yaratilgan katalog nomi yagona bo'lishini ta'minlaydi. Shundan so'ng siz yaratilgan katalog ichida cheklovlarsiz boshqa katalog va fayllarni yaratishingiz mumkin.

3. Veb-mijozda kodni bajarishda yoki kamdan-kam hollarda, agar ko'p foydalanuvchi rejimida ishlash talab etilmasa (masalan, fayl ma'lumotlar bazasini yangilash, eksklyuziv rejim), fayl yoki katalog nomini shakllantirish uchun funktsiyadan foydalanishingiz kerak. Vaqtinchalik fayllar katalogi.

Shuningdek qarangLinux OS uchun konfiguratsiyalarni ishlab chiqish xususiyatlari, fayl nomlari va yo'llaridan foydalanishning o'ziga xos xususiyatlari haqida.

4. Vaqtinchalik fayl yoki katalog bilan ishlashni tugatgandan so'ng uni o'zingiz o'chirishingiz kerak. Siz ishona olmaysiz avtomatik olib tashlash fayllar va kataloglar platformani keyingi safar ishga tushirganingizda, bu charchashga olib kelishi mumkin bo'sh joy vaqtinchalik fayllar katalogida.

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//Fayl bilan ishlash...//Vaqtinchalik faylni o'chirish Fayllarni o'chirishga urinish(IntermediateFileName);Istisno jurnaliniRegistratsiya(NStr("ru = "Mening mexanizmim. Action""), LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

Shuningdek qarang:Jurnal kitobidan foydalanish.

5. Serverda vaqtinchalik fayllar va kataloglardan foydalanilganda ular bilan ishlashni bitta server chaqiruvi doirasida yakunlash kerak. Server klasteri yordamida konfiguratsiyani ishga tushirganda, keyingi safar ushbu fayllarga qo'ng'iroq qilganingizda, ushbu fayllarga kirish imkoni bo'lmasligi mumkin, chunki kod boshqa kompyuterda ishlay boshlaydi. Agar bir seans ichida server qo'ng'iroqlari o'rtasida ma'lumotlarni saqlashingiz kerak bo'lsa, siz platformaning vaqtinchalik xotirasidan foydalanishingiz kerak (usullar , ).

5. 1. Kamdan-kam hollarda seanslar o'rtasida vaqtinchalik fayllardagi ma'lumotlarni uzatish kerak bo'lishi mumkin, masalan, ma'lumotni tayyorlashda. fon ishi, veb-xizmatga bir nechta ketma-ket qo'ng'iroqlarga xizmat qiluvchi uzoq davom etadigan jarayonni tashkil qilishda. Kafolatlangan umumiy saqlash joyini, ularni qayta ishlashning turli joylaridan fayllarga kirish huquqini, ularni qayta ishlash muddati tugaganidan keyin fayllarni yo'q qilishni yoki qayta ishlash jarayonining g'ayritabiiy tugatilishini mustaqil ravishda ta'minlash kerak. Quyidagi yondashuv tavsiya etiladi:

  • Barcha mumkin bo'lgan ishlov berish joylaridan kirishni ta'minlash uchun klasterdagi barcha serverlardan kirish mumkin bo'lgan fayllarga umumiy yo'lni saqlash uchun konstanta yaratiladi;
  • Vaqtinchalik fayllar yaratilganda ularning nomlari fayl yaratilgan vaqtni saqlab, yordamchi axborot registriga kiritiladi;
  • Jarayonning normal jarayonida fayllarga kerak bo'lgan oxirgi operatsiya, uni tugatmasdan oldin, faylning o'zini ham, yordamchi registrdagi ular haqidagi yozuvlarni ham o'chiradi;
  • Yordamchi muntazam vazifa vaqti-vaqti bilan yordamchi registrdagi yozuvlar mavjudligini tekshiradi, ularning ishlash muddati jarayonning normal tugash vaqtidan oshib ketadi. Bunday yozuvlar aniqlanganda, vazifa vaqtinchalik fayllarni va ular haqidagi yozuvlarni o'chiradi.

Mijoz va server o'rtasida fayllarni uzatish

1. Mijoz va serverda fayl bilan bir vaqtda ishlaganda vaqtinchalik saqlash (usullar) orqali fayllarni uzatishdan foydalanish kerak. Faylni joylash, Joy fayllari, Faylni oling, GetFiles, StartFilePlace, Vaqtinchalik saqlash joyiga joylashtiring, Vaqtinchalik saqlash joyidan qabul qilish). Umuman olganda, mijoz va klaster serverlari turli xil kompyuterlar turli fayl tizimlari bilan va fayllarga kirish ostida sodir bo'lishi mumkin turli foydalanuvchilar tomonidan Turli huquqlarga ega OS.

Noto'g'ri:

&OnClientProcedureFileProcessing() ...FileName = "C:/Fayllarni qayta ishlash/Download.xml"; Natija = ProcessingOnServer(FileName)ni bajaring; ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Reading = NewTextReading(FileName) ... Natija = Reading.Read(); Natijani qaytarish;EndFunction

To'g'ri:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Fayllarni qayta ishlash/Download.xml"; Manzil = ""; PlaceFile(Manzil, FileNameForProcessing, FileNameForProcessing, False); Natija = ProcessingOnServer(Manzil)ni bajarish; ...EndProcedure&OnServerFunction ProcessingOnServer(Manzil) Ma'lumotlarini bajarish = GetFromTemporaryStorage(Manzil) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); O'qing = Yangi o'qilgan matn(IntermediateFileName) ... Natija = Read.Read(); ...DeleteFiles(IntermediateFileName); Natijani qaytarish;EndFunction

2. Ma'lumotni bir nechta server qo'ng'iroqlari o'rtasida vaqtincha saqlash uchun saqlash uchun uni saqlashga joylashtirishda siz parametrdan foydalanishingiz kerak. UniqueFormIdentifier usuli Faylni joylash unga joriy shaklning identifikatorini o'tkazish orqali. Bunday qiymatlar faqat belgilangan shakl yopilganda vaqtinchalik saqlash joyidan o'chiriladi. Bunday holda, xuddi shu faylni yana vaqtincha saqlashga qo'yganda, oldingi qiymat qo'lda o'chirilishi kerak. Masalan:

Noto'g'ri:

FileNameForProcessing = "C:/Fayllarni qayta ishlash/Download.xml"; ... // Birinchi server chaqiruvi Manzil = ""; PlaceFile(Manzil, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Natija = InitialProcessingOnServer(Manzil)ni bajaring;
... // Xuddi shu fayl versiyasi bilan ikkinchi server chaqiruvi Natija = IntermediateProcessingOnServer(Manzil)ni bajaring; ...
// Uchinchi server qo'ng'irog'i yangi versiya fayl manzili = ""; PlaceFile(Manzil, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Natija = FinalProcessingOnServer(Manzil)ni bajaring; ...

Bu shaklning vaqtinchalik xotirasida fayllarning ikki nusxasini qoldiradi. Ikkinchi nusxaning manzili o'zgaruvchida bo'ladi Manzil, va birinchi nusxaning manzili yo'qoladi. Bu qo'shimcha dastur resurslarining sarflanishiga va sekinlashishiga olib keladi.

To'g'ri:

FileNameForProcessing = "C:/Fayllarni qayta ishlash/Download.xml"; ... // Birinchi server chaqiruvi Manzil = ""; PlaceFile(Manzil, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Natija = InitialProcessingOnServer(Manzil)ni bajaring; ... // Xuddi shu fayl versiyasi bilan ikkinchi server chaqiruvi Natija = IntermediateProcessingOnServer(Manzil)ni bajaring; ...
// DeleteFromTemporaryStorage(Address) faylining yangi versiyasi bilan uchinchi server chaqiruvi; Manzil = ""; PlaceFile(Manzil, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Natija = FinalProcessingOnServer(Manzil)ni bajaring; ...

Shuningdek qarang

Ular bizni topadilar: fayl tizimiga kirish, GetTemporaryFileName(


Men sizga amaliyotimdan bir voqeani aytib beraman. Bir kuni men ma'lumotlarni yuklashni sozlashim kerak edi 1c buxgalteriya takrorlanmagan konfiguratsiyadan. Yuklarni tushirish alohida ishlov berish shaklida bo'lib, ayirboshlash qoidalariga muvofiq ishlaydi. Qoidalarning o'zi ikkilik ma'lumotlar tartibi sifatida biriktirilgan. Operatsion algoritmi odatiy - qoidalar vaqtinchalik faylga yuklanadi va keyin qayta ishlash orqali tortib olinadi. Universal almashinuv ma'lumotlar XML formatida."

Transfer qoidalari va ishlov berishni ishlab chiquvchi ko'kragini urib, hamma narsa uning uchun mukammal ishlayotganiga qasam ichdi. Amalda, ma'lumotlarni yuklashda doimo xatolik yuz berdi. Xato xabari matnida muammo almashinuv qoidalarida ekanligi ochiq aytilgan. “Hujjat endi bu xususiyatga ega emas, men uni yuklashdan bosh tortaman”, — o‘qing xabar matni. Men ayirboshlash qoidalari bilan aralashishni xohlamadim, chunki ... Bu mening ishim emas. Buning o'rniga men ishlov berish kodini ochdim va vaqtinchalik faylga almashinuv qoidalarini yuklash jarayoni qanday tashkil etilganligini ko'rishga qaror qildim.

Ma'lum bo'lishicha, aynan shu muammo ekan. Gap shundaki, dasturchi almashish qoidalari uchun (vaqtinchalik katalogda) noyob fayl nomini yaratish bilan bezovta qilmadi va hatto chek qo'ydi: "Agar fayl mavjud bo'lsa, unda yuklash shart emas". Albatta, hamma narsa qayta ishlanmaguncha ishladi, aniqrog'i qoidalar bilan tartib yangilanmagan. Natijada, foydalanuvchilar doimiy ravishda eskirgan almashinuv qoidalaridan foydalangan holda yuklashga harakat qilishdi. "Temp" katalogidagi "vaqtinchalik fayl" doimiy bo'lib qoldi va siz uni qo'lda o'chirmaguningizcha, u har doim yuklash uchun ishlatiladi.

Vaqtinchalik fayllarni to'g'ri yaratishingiz kerak

Bunday kulgili vaziyatlardan qochish uchun siz MAQOMOTI ob'ektlaridan foydalanadigan "hiyla" funktsiyalar shaklida g'ildiraklar va tayoqchalarni qayta ixtiro qilishga urinmasligingiz kerak. Platformaga o'rnatilgan funksiyadan foydalanish kifoya - GetTemporaryFileName(), bu ko'plab muammolarni avtomatik ravishda hal qiladi:

Fayl nomi haqiqatdan ham noyob bo'lishini ta'minlaydi;

Agar ishlab chiquvchi faylni o'zi o'chirishni unutib qo'ysa, keyingi safar platforma ishga tushirilganda u albatta o'chiriladi.

Platformani qayta ishga tushirish vaqtida vaqtinchalik fayllarni avtomatik ravishda o'chirish juda qiziqarli xususiyat bo'lib, nazariy jihatdan ishlab chiquvchiga fayllarni o'zi o'chirish zaruratini e'tiborsiz qoldirish imkonini beradi. To'g'ri, uni suiiste'mol qilishga hali ham arzimaydi. Agar kod serverda bajarilgan bo'lsa, unda siz server uzoq vaqt davomida qayta ishga tushmasligini tushunishingiz kerak, ya'ni vaqtinchalik papka tiqilib qoladi. keraksiz fayllar. Shu munosabat bilan siz platformaga "iflos" ishni to'liq ishonmasligingiz kerak. Ushbu xususiyatdan zaxira variant sifatida foydalanish va vaqtinchalik faylni o'chirishga majbur qilish uchun kodingizga qo'shimcha kod qatorini qo'shish yaxshiroqdir.

Xo'sh, mening maqolamning maqsadi nima?

1. Server (x64) mavjud, Office 2016 (x64) o'rnatilgan, 1C 8.3.8 ham x64 (1C serveri degani) mavjud. Foydalanuvchilar ham nozik mijoz, ham veb-mijoz orqali ulanadi.

2. Savdo bo'limi tomonidan chiqarilgan (tayyorlangan) bir qator standart shartnomalar va schyot-fakturalar mavjud. Shrift, paragraf va boshqalar mavjud, albatta, hamma narsa Word, Excel 2016 (x64) da ishlab chiqilgan, tabiiyki, bularning barchasini 1C da chizish istagi yo'q, lekin uni ActiveDocument formatiga qo'yish istagi bor. maketlar

Yechim banal ko'rinadi :) , Men butun mexanizmni, uning qanday bajarilishini, 1C dan ActiveDocument tartibiga ma'lumotlar qanday to'ldirilganligini tasvirlamayman - menimcha, siz buni mensiz juda yaxshi bilasiz. Ammo ish davomida shohlikda hamma narsa unchalik silliq emasligi ma'lum bo'ldi COM ob'ekti ov, xususan:

2. Qaysi variantni tanlash yaxshidir: ActiveDocument yoki Binary Data? Garchi men uchun bu aroqli pivo yoki aroqli pivoni tanlashga o'xshaydi :) . Katta ish emas, siz hujjatlarni 1C ma'lumotlari bilan to'ldirishingiz va ularni Mijozga topshirishingiz kerak.

Xo'sh, keling, qo'shiq matnini o'tkazib yuboraylik, men ActiveDocument-ni tanlayman, men butun algoritmni tasvirlamayman, faqat tuzoqlarni va ularning echimini sanab o'taman. Quyida aytilganlarning barchasi mening shaxsiy taxminlarim va hech qanday tarzda yakuniy haqiqat deb da'vo qilmaydi. Siz bu muammolarni hal qilgandirsiz yoki ularni boshqacha hal qilgan bo'lishingiz mumkin.

1. Tosh " birinchi". SaveAs usuli ishlamaydi (MSWord va MSExcel uchun ham). Binary Datani yozishga urinayotganda, 1C oddiygina ishdan chiqadi. Roʻyxat fragmentiga qarang:

MSWord = Layout.Get(); Document = MSWord.Application.Documents(1) ni sinab ko'ring; Document.Activate(); //Keyin, biz qandaydir tarzda ma'lumotlarni olamiz va Word hujjatini to'ldiramiz //Faylni u erda saqlash uchun vaqtinchalik katalogdagi yo'lni oling TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //tosh shu yerda boshlanadi MyDocumentInBinaryData = New BinaryData(NameTime); //xo'sh, mana bu tosh 1C tomonidan taqillatilgan :) MSWord.Application.Quit();

Katta raxmat.

Papkalarni yaratish
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
muammo hal qilindi. Mavzu yopildi.

Sababi nima? Sababi kod

MSWord = Layout.Get();

Office o'rnatilgan bitlikdan qat'iy nazar har doim MAQOMOTI ob'ektining (x32) nusxasini chaqiradi. Nima uchun docx, xlsx kengaytmali fayllarni ActoveDocument tartibiga qo'sha olmaysiz deb hech o'ylab ko'rganmisiz?

buni Vazifa menejeri orqali ham tekshirish mumkin, ammo haqiqat shundaki, ActiveDocument tartibi bilvosita MAQOMOTI (x32) nusxasini chaqiradi va shuning uchun barcha keyingi manipulyatsiyalar ushbu xususiyatni hisobga olgan holda amalga oshirilishi kerak.

1. Server va barcha dasturiy ta'minot x32 bo'lishi kerak. Keyin hech narsa qilishingiz shart emas (kodni qayta yozish ma'nosida)

2. Yoki kodni shu tarzda qayta yozing

// vaqtinchalik fayl nomini olish TimeFile = GetTemporaryFileName("doc"); // bu kod, albatta, kerakli bit chuqurligining MAQOMOTI misolini chaqiradi, bizning holatlarimizda x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // keyin hammasi avvalgidek Layout = Chop etish boshqaruvi Chop etish shakli tartibi ("Hujjat. Uskunani uzatish akti." + Layout nomi); MSWord = Layout.Get(); Document = MSWord.Application.Documents(1) ni sinab ko'ring; Document.Activate(); // bu erda biz nimadir qilamiz, ma'lumotlarni to'ldiramiz // bu erda biz faylimizni COM x62 dan COM x64 ga 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 = Aniqlanmagan; Istisno // Agar xatolik yuzaga kelsa, xato ma'lumotlari chop etiladi va ob'ekt yopiladi. Ma'lumot = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Xato - "+Information.Description+" xato kodi - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

Menimcha, bu erda hamma narsa aniq, avval biz kerakli bit chuqurligining MAQOMOTI nusxasini yaratdik, bo'sh fayl yaratdik va uni vaqtinchalik papkaga saqladik, keyin biz COM x32 bilan ishlaymiz, uni ma'lumotlar bilan to'ldiramiz va nihoyat butun tarkibni nusxalashtiramiz. hujjat va uni oldindan tayyorlangan faylga saqlang.

Hammasi bir xil, lekin faqat Excel uchun

TimeFile = GetTimeFileName("xls"); Excel = Yangi COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Hujjat.Uskuna hisob-fakturasi."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); WBook-ni sinab ko'rish = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // biz biror narsa qilamiz, uni 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells) dan ma'lumotlar bilan to'ldiramiz; BookN.Save(); BookN.Close(); Istisno // Agar xatolik yuzaga kelsa, xato ma'lumotlari chop etiladi va ob'ekt yopiladi. Ma'lumot = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Xato - "+Information.Description+" xato kodi - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Mana " birinchi“Office x64-ga ega x64 serverida hamma narsa xatosiz ishlaydi va hech qanday papka va boshqa narsalarni yaratishga hojat yo'q deb qaror qildim.

Tosh" ikkinchi". kod parchasi

TimeFile = GetTimeFileName("xls");

ovqatlanish unchalik yaxshi emas, chunki u papkaga yozadi: "c:\Users\ what's there...", umuman olganda, bu papka har doim barcha xavfsizlik devorlari, antiviruslar va hokazolarning qora ro'yxatida bo'ladi. hech bo'lmaganda Word yoki Excelda xavfsizlikni boshqarish markazini oching. Keling, u erga ham qaraylik

Siz bu bilan shug'ullanishingiz kerak bo'ladi, aks holda "g'alati" xatolar paydo bo'lishi mumkin. Shuning uchun men quyidagilarni taklif qilaman:

1. Konfiguratorni oching va yangi ma'lumotlar registrini qo'shing

Bu erda biz tayyor so'zimizni saqlaymiz, Excel fayllari Albatta, allaqachon to'ldirilgan:

LayoutName - Layout ID

DocumentOffice - Qiymatni saqlash, bu erda biz tayyor faylimizni saqlaymiz

2. Yuqoridagi kodni quyidagicha qo'shamiz:

MH = Axborot registrlari.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);

Biz nima qilamiz, biz tayyor faylni ma'lumotlar registriga yozamiz va keyin "Word, Excel xavfsizlik markazi" muammosini hal qilib, vaqtinchalik faylning o'zini o'chirib tashlaymiz. Faqatgina ushbu tugallangan faylni mijozga ko'rsatish qoladi (nozik va veb-mijozlar)

3. Tosh " uchinchi" - faylni mijozga o'tkazayotganda, men bu erda barcha kodlarni joylashtiraman, ba'zilari BSP-dan, ba'zilari "Boshqariladigan dastur" demo konfiguratsiyasidan, ba'zilari Internetdan, lekin umuman olganda, kod (uning ichida) to'liq)

////////////////////////////////////////////// ///////////////////////// // XIZMAT TARTIBLARI VA FUNKSIYALARI BSP &OnServer Function GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = Axborot registrlari. TemporaryStorageOffice.CreateRecordKey(Yangi tuzilma("Object,LayoutName",ObjectLink,LayoutName)); // Manzil = GetNavigationLink(RecordKey, "OfficeDocument"); Qaytish manzili; EndFunction // &OnClient Procedure AfterApplicationStart(ReturnCode, ApplicationName) eksporti; // Protseduraning tugashi &Fayllarni qabul qilgandan keyin mijoz protsedurasi (O'tkazilgan fayllar, qo'shimcha parametrlar) Agar o'tkazilmagan bo'lsa fayllarni eksport qilish = Aniqlanmagan, keyin uzatilgan fayllar tsiklining har bir tavsifi uchun OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication, Description.Na", ThisObject ); StartLaunchApplication(OpAfterStartApplication, Tavsif.Name); EndCycle; endIf; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Eksport Agar SelectedFiles = Undefined bo'lsa, keyin qayting; endIf; Katalog = Tanlangan fayllar; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Agar CommandName = "Invoice" Keyin LayoutName = "Invoice" EndIf; DataStructure.Insert("Katalog", Katalog); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Protseduraning oxiri &Mijoz protsedurasi bo'yicha Kengaytma orqali fayllarni oching (Buyruq nomi) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Katalog = GeneralPurposeCallServer.GetWorkingDirectory(); Agar Katalog = Aniqlanmagan YOKI Katalog = "" U holda Dialog = Yangi FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = NStr("ru = "Fayllarni vaqtincha saqlash uchun katalog tanlash"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = Yangi massiv; SelectedFiles.Add(Directory); Ogohlantirishni qayta ishlashni amalga oshirish (OpAfterSelectingDirectory, SelectedFiles); endIf; Protseduraning oxiri &Mijoz protsessual jarayoni haqidaUlanish kengaytmalariFayllar bilan ishlash(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Procedure Connected_PassFileToClient() Manzil = GetLayout(); Agar Manzil<>Aniqlanmagan Keyin DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Katalog = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Tavsif = O'tkazilgan faylning yangi tavsifi (Faylga yo'l, manzil); TransferredFiles = Yangi massiv; TransferredFiles.Add(Ta'rif); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Protseduraning oxiri &Server protsedurasida ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("HujjatNumber", ObjectReference.Number); ObjectArray = Yangi massiv; Ob'ektlar massivi.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Obyektlar massivi, LayoutName, True); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Buyruq) havolasi = Elements.List.CurrentData.Link; DataStructure = newTructure; DataStructure.Insert("Ob'ekt", Havola); DataStructure.Insert("LayoutName", "Invoys"); ConnectWaitingHandler("Connectable_Print", 1, rost); CommandDescription = PrintManageClient.PrintCommandDescription(Buyruq.Name,FormName); FileWorking kengaytmasini o'rnatishni boshlang(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsistems.Print

Bir nechta tushuntirishlar:

1. Birinchidan, mijozimiz Yupqa va Veb rejimlarida ishlaydi, shuning uchun biz Konfigurator xususiyatlarida oldindan quyidagi qiymatlarni o'rnatamiz:

Brauzer bilan ishlashda muammolarni oldini olish uchun

2. Biz qo'ng'iroqlarni sinxronlashtirish bilan bog'liq muammolarni oldini olish uchun kutish ishlov beruvchilaridan foydalanamiz (bu faqat veb-rejimga tegishli)

3. Va nihoyat, Fayllar bilan ishlash uchun kengaytmani ulang (uni rejimda unutmang Yupqa mijoz, bu kengaytma har doim yoqilgan). Va kod orqali:

biz faylni Navigatsiya havolasi mexanizmi yordamida mijozga o'tkazamiz, biz brauzerda quyidagi xabarlarni olamiz (Thin o'z-o'zidan ishlaydi):

Xo'sh, hammasi shu kabi ko'rinadi. Umid qilamanki, bu kimgadir yordam beradi ...

Word-ga kelsak, ikkilik ma'lumotlar sifatida kiritilgan Excel fayllari? Muammo nimada?

1. Biz ushbu Ikkilik ma'lumotni maketdan chiqarib tashlashimiz va uni 1C ma'lumotlari bilan to'ldirishimiz kerak va DIQQAT uni ikkilik ma'lumotlar ko'rinishida qayta yozishimiz kerak (Vodka bilan Pivo yoki Aroqli Pivo)

2. Yoki Mijoz tomonida BinaryData tartibini olishimiz va u erda to'ldirishimiz kerak, LEKIN MAQOMOTI ob'ekti faqat IE brauzeri tomonidan qo'llab-quvvatlanadi va keyin ActiveX sozlamalari bilan raqslar bilan boshqa brauzerlar ActiveX-dan foydalanishdan uzoq vaqt voz kechishdi.

1C: Enterprise 8 texnologiya platformasi sizga tejash imkonini beradi axborot bazasi ixtiyoriy fayllar, ularni u yerdan oling va ulardan foydalaning turli yo'llar bilan. Keling, misollar yordamida ushbu operatsiyalarni ko'rib chiqaylik.

Faylni 1C ma'lumot bazasiga yuklashdan oldin siz diskdagi faylning to'liq manzilini olishingiz kerak. Fayl tanlash dialog oynalari bilan ishlash bo'limda tasvirlangan.

Fayllarni saqlash uchun turi bilan atributdan (yoki registr resursidan) foydalaning Saqlash qiymatlari.

1C ma'lumotlar bazasiga o'zboshimchalik bilan faylni yuklash

Har qanday fayl ikkilik ma'lumotlar sifatida ko'rsatilishi va yuklanishi mumkin Qiymatni saqlash.

Ikkilik ma'lumotlarni ob'ektga aylantirishda Saqlash qiymatlari dizayn ishlatilgan yangi saqlash qiymatlari (ma'lumotlar, siqish) ikkita parametr bilan:

  1. Ma'lumotlar— saqlashda saqlanishi kerak bo'lgan ikkilik ma'lumotlar
  2. Siqish— Deflatsiya algoritmining siqilish nisbati. -1...9 oralig'idagi butun son. -1 standart siqish darajasi. 0 - siqilish yo'q, 9 - maksimal siqish. Standart qiymat: -1. Parametr ixtiyoriy, agar ko'rsatilmagan bo'lsa, siqish ishlatilmaydi.

//Faylni ikkilik ma'lumotlarga aylantirish
Fayl = Yangi BinaryData(Yo'l);

//Yangi qiymatni saqlash ob'ektini yarating

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

1C ma'lumotlar bazasidan o'zboshimchalik bilan faylni diskka saqlash

Faylni 1C ma'lumotlar bazasidan diskka saqlash uchun siz yo'l va fayl nomini aniqlashingiz kerak. Buning uchun faylni saqlash dialog oynasi mavjud bo'lib, u bilan ishlash bo'limda tasvirlangan.

// Xotiradan ikkilik ma'lumotlarni oling
//Ma'lumotlarni saqlash - qiymatni saqlash turiga ega ob'ektning atributi

//Qabul qilingan ma'lumotlarni diskka yozing
//IN o'zgaruvchan yo'l diskdagi faylning to'liq manzili
Ma'lumotlar. Yozish (yo'l);

1C ma'lumotlar bazasida joylashgan faylni ko'rish

Ma'lumotlar bazasida saqlangan faylni ko'rish uchun kompyuteringizda faylni ochadigan dastur o'rnatilgan bo'lishi kerak.

// Kerakli kengaytmali vaqtinchalik fayl nomini oling
//Kengaytma o'zgaruvchisiga fayl kengaytmasini qo'yish kerak, masalan, "pdf"
Yo'l = GetTemporaryFileName (kengaytma);

// Saqlashdan ma'lumotlarni qabul qilish
//Ma'lumotlarni saqlash - qiymatni saqlash turiga ega ob'ektning atributi
Ma'lumotlar = Ma'lumotlar ombori. Get();

//Vaqtinchalik faylga ma'lumotlarni yozish
Ma'lumotlar. Yozish (yo'l);

//Faylni mo'ljallangan dasturda ochishga urinish
//Agar ilova topilmasa, tizim dialog oynasi paydo bo'ladi "Ochish...".
LaunchApplication(Path);

Ko'pincha foydalanuvchilar g'alati xatolarga duch kelishadi: dastur bir foydalanuvchi uchun to'g'ri ishlaydi, lekin boshqasi uchun, yaqin atrofda, boshqa kompyuterda u butunlay boshqacha ishlaydi. Ko'pincha, uzoq tekshiruvlardan so'ng, 1C 8 da bunday "nosozliklar" ning sababi kesh ekanligi ma'lum bo'ladi.

Quyida men sizga 1C keshi nima ekanligini va uni qanday tozalash kerakligini aytib beraman.

Keshlash— tez-tez ishlatiladigan va, qoida tariqasida, statik ma'lumotlarning buferini yaratish jarayoni. Keshlash dasturni tezlashtirish uchun ishlatiladi, xususan, 1C da konfiguratsiya fayllari har safar serverdan so'ramaslik uchun foydalanuvchi kompyuteriga yuklanadi.

Biroq, ko'pincha 1C platformasi konfiguratsiyani keshlashni to'g'ri bajarmaydi va natijada biz noto'g'ri konfiguratsiya xatti-harakatlariga ega bo'lamiz.

Noto'g'ri xatti-harakatlarning sabablari boshqacha bo'lishi mumkin: dinamik konfiguratsiya yangilanishlari, dasturiy ta'minot yoki apparatdagi nosozliklar.

Birinchi usul - 1C keshini qo'lda tozalash

1C muammolari va "nosozliklarini" hal qilish uchun odatda 1C 8.3 platformasining keshini tozalash yordam beradi.

Bu quyidagicha amalga oshiriladi:

qadam 1

Vaqtinchalik 1C fayllari saqlanadigan katalogni toping, ularni IB ro'yxatidagi sozlamalar menyusida ko'rish mumkin:

2-qadam

kabi manzilni oldik

1C da 267 ta video darslarni bepul oling:

C: \ Hujjatlar va sozlamalar \ foydalanuvchi nomi \ Ilova ma'lumotlari \ 1C \ 1Cv82 \ tmplts \ 1c

Kesh papkalari quyidagi manzilda joylashgan

C: \ Hujjatlar va sozlamalar \ foydalanuvchi nomi \ Ilova ma'lumotlari \ 1C \ 1Cv82 \

*bu erda foydalanuvchi nomi tizim foydalanuvchi nomi va 1Cv82 papkasi 1C platformasi versiyasiga qarab farq qilishi mumkin

U erga borib, biz juda ko'p (papkalar soni konfiguratsiyalar soniga teng) qiziqarli papkalarni topamiz:

Barcha tanlangan kataloglar 1C ma'lumotlar bazasi keshi bo'lib, xavfsiz tarzda o'chirilishi mumkin. O'chirishdan oldin siz axborot xavfsizligi tizimidan chiqishingiz kerak.

Agar siz fayllar qayerda joylashganligini qidirishni xohlamasangiz, foydalanishingiz mumkin maxsus dastur(bat fayl), vaqtinchalik fayllar bilan papkalarni tozalaydi - yuklab olish . Iltimos, ularni o'zingizning xavf-xataringiz ostida ishlatishingizni unutmang. Ular quyidagi buyruqni o'z ichiga oladi:

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

1C vaqtinchalik fayllarini tozalashning ikkinchi usuli - ma'lumotlar bazasini ro'yxatdan olib tashlash

Ikkinchi usul oddiyroq, ammo u butunlay to'g'ri emas. Uni tozalash uchun ushbu konfiguratsiyani o'chiring va axborot xavfsizligiga bir xil yo'l bilan yangisini yarating.

Natijada, keshga ega eski papka ushbu axborot xavfsizligi tizimidan "ajraladi" va yangi katalog yaratiladi.

Buni qilishingiz mumkin, kesh tozalanadi, lekin vaqtinchalik fayllar qattiq diskda qoladi.

Uchinchi usul - ClearCache parametri

Qo'shimcha ishga tushirish parametrlarida buyruqni kiritish kerak (ma'lumotlar bazalari ro'yxatida, O'zgartirish tugmasi, oxirgi yorliqda) /ClearCache. Foydalanish misoli:

1C dasturlarida keshni tozalash bo'yicha video:

Agar 1C-dagi "nosozliklar" keshni tozalagandan so'ng yo'qolmasa va 1C siz xohlagancha ishlamasa, murojaat qilishingiz mumkin.

Agar siz 1C dasturlashni o'rganishni boshlayotgan bo'lsangiz, bizni tavsiya qilamiz bepul kurs(unutmang YouTube-ga obuna bo'ling - muntazam ravishda yangi videolar chiqariladi):