1c qiymat do'konining 8.3 misollari. Qiymatlarni saqlash turidagi maydonlarda ma'lumotlarni saqlash. Veb-mijoz bilan ishlashda cheklovlar

Platforma 1C: Korxona har xil turdagi ma'lumotlarni saqlash uchun juda ko'p imkoniyatlarni taqdim etadi.

Ammo ko'pincha bu imkoniyatlar etarli emas. Va keyin bizning yordamimizga maxsus ob'ekt keladi - Saqlash qiymatlari. Ushbu ob'ekt sizga standart 1C: Enterprise ob'ektlarini, masalan, qiymatlar jadvalini va platformada turi ko'rsatilmagan nostandart ob'ektlarni maxsus formatda saqlashga imkon beradi. Nostandart turlarga fayllar kirishi mumkin. Shunday qilib, masalan, 1C ma'lumotlar bazasida qiymat do'konidan foydalanib, siz xodimlarning fotosuratlarini, hujjatlarni skanerlash, tashqi ishlov berish va hokazolarni saqlashingiz mumkin. Bu erda afzallik shundaki, ushbu ob'ektlarning barchasi ma'lumotlar bazasida saqlanadi. Shunga ko'ra, zaxira nusxadan yangi ma'lumotlar bazasini o'rnatishda ushbu ob'ektlarning barchasi yangi ma'lumotlar bazasida ham mavjud bo'ladi. Boshqa tomondan, agar siz katta hajmdagi fayllarni ma'lumotlar bazasida saqlasangiz, bu uning hajmini sezilarli darajada oshirishi va uning ishlashiga salbiy ta'sir ko'rsatishi mumkin. Shuning uchun bu erda oqilona muvozanat saqlanishi kerak.

Keling, misol yordamida qiymat do'koni bilan ishlashni ko'rib chiqaylik. Keling, konfiguratorda maxsus katalog yarataylik - keling, uni chaqiramiz Tashqi ob'ektlar, va o'z navbatida biz katalog uchun rekvizitlarni yaratamiz Ob'ekt turi bilan Saqlash qiymatlari

Va endi biz ushbu katalogda va rekvizitlarda elementlar yaratishimiz mumkin Ob'ekt Har bir element faylga yoziladi.

Qiymat do'koni bilan ishlash juda oddiy. Sintaksis yordamchisiga nazar tashlasak, bu obyektning faqat bitta metodi va bitta konstruktori borligini ko ramiz.

Endi namoyish qilish uchun keling, rekvizitlarga fayl yozadigan eng oddiy kodni yozamiz Ob'ekt avval yaratilgan katalog elementi va keyin ushbu faylni rekvizitlardan o'qing va diskka yozing, lekin boshqa nom ostida.

&Server protsedurasida LoadUnloadFile(Directory Element)Directory Object =Directory Element. GetObject(); //Rasmni qiymatlar do'koniga joylashtiring LabelDownload = Yangi rasm("g:\musor\favicon.ico" ) NewValueStorage; //Katalog elementini yozing Katalog ob'ekti. DirectoryObject obyekti. Write(); //Rasmni qiymatlar do'konidan faylga yuklang Fayl nomi = "g:\musor\favicon_1.ico" ; LabelUpload = Katalog ob'ekti. Ob'ekt. Get(); LabelUpload. Write (Fayl nomi); Jarayonning oxiri

Va kod uchun bir nechta tushuntirishlar.

  • Ob'ekt konstruktor yordamida do'kon yaratilganda to'g'ridan-to'g'ri do'konga joylashtiriladi.

Saqlashda tasvirlardan tashqari boshqa turdagi fayllarni saqlash uchun siz ob'ektdan foydalanishingiz mumkin BinaryData. Sof nazariy jihatdan siz hatto katalog elementlarini, hujjatlarni va hokazolarni qiymatlar do'konida saqlashingiz mumkin. Ammo amalda bu hech qanday ma'noga ega emas. Ammo ba'zida qiymatlar jadvalini, qadriyatlar daraxtini va boshqa universal to'plamlarni saqlash uchun qiymatlar do'konidan foydalanish mumkin.

1C: Enterprise 8 da turli xil ma'lumotlarni Value Storage tipidagi maydonlarda saqlash mumkin. Ushbu maydonlar ValueStorage tipidagi qiymatlarni saqlashi mumkin. ValueStorage turining o'zi, birinchi navbatda, har xil turdagi qiymatlarni ketma-ketlashtirilgan shaklda, ya'ni ma'lumotlarni yozish va keyin uni qayta tiklash imkonini beruvchi shaklda saqlash uchun mo'ljallangan. O'rnatilgan til uchun hujjatlarda, ob'ektlar tavsifida, seriyalash imkoniyati "Serializatsiya mumkin" belgisi bilan ko'rsatilgan. Ushbu qiymatlar, shuningdek, ibtidoiy turdagi qiymatlar qiymatlar do'koniga joylashtirilishi mumkin va shuning uchun ValueStorage tipidagi ma'lumotlar bazasi maydonlariga yozilishi mumkin. Qiymatni saqlashning muhim xususiyati ma'lumotlarni siqilgan shaklda saqlash qobiliyatidir. Bu katta ob'ektlar uchun saqlangan ma'lumotlar miqdorini sezilarli darajada kamaytirish imkonini beradi.

Shunday qilib, qiymatni saqlash turidagi maydonlardan foydalanib, ma'lumotlar bazasida maydonlar uchun aniq ko'rsatilishi mumkin bo'lgan ma'lumotlar turlarining sezilarli darajada kengroq ro'yxatini saqlash mumkin. Ammo shuni hisobga olish kerakki, ushbu saqlash usuli va bunday ma'lumotlarni manipulyatsiya qilish qobiliyati ma'lumotlar bazasi maydonlarida ma'lumotlarni odatiy saqlashdan sezilarli darajada farq qiladi. Bunday maydonlar uchun tizim haqiqiy yozish va o'qishdan tashqari deyarli hech qanday funksiyani qo'llab-quvvatlamaydi. Bunday maydonlar uchun indekslashni qo'llash mumkin emas, ular tomonidan so'rovlar va tanlovlarda ma'lumotlarni buyurtma qilish mumkin emas, bunday maydonlarni jamlab bo'lmaydi va hokazo. Bunday holda, ma'lumotlar bazasi mexanizmi uning tabiati haqida hech narsa bilmasdan, ba'zi ma'lumotlarni saqlash uchun hisoblanishi mumkin.

Shunga ko'ra, qiymatni saqlash turidagi maydonlar faqat ularning maqsadi va texnologik xususiyatlariga mos keladigan hollarda qo'llanilishi kerak.

Qiymatni saqlash turi maydonlarining asosiy qo'llanilishidan biri tasvirlar va fayl tasvirlarini saqlashdir. Buning uchun Image va Binary Data turlaridan foydalaniladi. Bu ma'lumotlar bazasida xodimlarning fotosuratlarini, turli formatlarda yaratilgan hujjatlarni va hokazolarni saqlash imkonini beradi. Bunday ma'lumotlarni saqlashni amalga oshirishda ushbu maydonlarni asosiy ma'lumotlardan alohida saqlashni ta'minlaydigan ma'lumotlar tuzilmalarini yaratish tavsiya etilishi mumkin. Masalan, xodimlarning fotosuratlarini saqlash uchun siz shaxslar ro'yxatini saqlaydigan ob'ektlarning o'zida Qiymatni saqlash turidagi maydonlarni joylashtirish o'rniga, alohida katalog yoki ma'lumotlar registrini amalga oshirishingiz mumkin. Shuni hisobga olish kerakki, ob'ektlar (masalan, katalog elementlari) doimo butun tizim tomonidan o'qiladi. Shu sababli, katta hajmdagi ma'lumotlarni to'g'ridan-to'g'ri ob'ekt maydonlarida saqlash tizimni sezilarli darajada sekinlashtirishi mumkin.

ValueStorage tipidagi maydonlarda, masalan, qiymatlar va tuzilmalar jadvallarini saqlash mumkin. Shu bilan birga, har qanday ma'lumotlar turlari, shu jumladan mos yozuvlar turlari, qiymatlar jadvallari va tuzilmalarida saqlanishi mumkin. E'tibor bering, agar to'plam faqat seriyali qiymatlarni o'z ichiga olsa, Value Store'ga joylashtirilishi mumkin. Biroq, shuni hisobga olish kerakki, ma'lumotlarni saqlashning ushbu opsiyasi alohida maydonlarda qiymatlarni aniq saqlashdan va jadval bo'limlari yoki ma'lumotlar registrlarida ma'lumotlarni saqlashdan sezilarli darajada farq qiladi. Tizim bunday maydonlar uchun ma'lumotlarning yaxlitligini saqlamaydi, so'rovlarda ma'lumotlarni qidirishni ta'minlamaydi va hokazo. Shunday qilib, bunday sohalarda to'plamlarni saqlash biznes mantig'i uchun javob beradigan dastur yechimining muhim qismlarini amalga oshirish uchun ishlatilmaydi. Bunday saqlashga faqat ilova yechimining biznes mantig'i uchun muhim bo'lmagan yordamchi ma'lumotlar uchun ruxsat berilishi mumkin, masalan, har qanday foydalanuvchi sozlamalarini saqlash uchun.

Tizimda ValueStorage maydonlarida saqlanadigan ma'lumotlar hajmi bo'yicha aniq cheklov mavjud bo'lmasa-da, siz hali ham saqlangan ma'lumotlar miqdori haqida ehtiyot bo'lishingiz kerak. Shuni hisobga olish kerakki, bunday maydonlarga katta hajmlarni joylashtirish axborot bazasining umumiy hajmini oshiradi va bu ma'lumotlar bazasi zahirasini yaratish kabi turli ma'muriy operatsiyalarni bajarishda tizimning ishlashiga salbiy ta'sir qiladi. Masalan, fayl tasvirlarini saqlashda bunday maydonlarda ishda haqiqatdan ham zarur bo'lgan ma'lumotlarni saqlashni tavsiya qilish mumkin, lekin ularni hal qilinayotgan dastur muammosida foydalanilmaydigan katta hajmdagi fayllarni saqlash uchun ishlatmaslik tavsiya etiladi.

Deyarli har qanday ma'lumot qiymat do'konida saqlanishi mumkin, masalan.

... rasmlar (fotosuratlar):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of Objects.Image; Saqlash = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// bu joyda u hamma narsani ko'rsatadi... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

... elektron jadval hujjati:

TabDoc=Yangi jadval hujjati; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Write();

Jarayonning oxiri

StorageFromStoragePress(element)ni tiklash tartibi

TabDoc=Storage.Get(); Agar TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Jarayonning oxiri

...ixtiyoriy fayllar (ikkilik ma'lumotlar):

XZ = NewValueStorage(NewBinaryData(fayl));

Sakkizta saqlashga joylashtirilgan ma'lumotlarni siqishni qo'llab-quvvatlaydi:

XZ = NewValueStorage(NewBinaryData(fayl),NewDataCompression(9));

... tashqi ishlov berish va hisobot berish:

LoadProcessingIntoStorage(PropsStorageType) protsedurasi

CompressionRate = NewDataCompression(9); //9 maksimal PropsStorageType = Yangi StorageValues(New BinaryData("c:\reports\report.epf", Siqish tezligi));

Jarayonning oxiri

Protsedura ProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

Jarayonning oxiri

Saqlash bilan ishlash

Agar bu Binary Data bo'lsa, uni Get usuli yordamida qiymatlar do'konidan tiklash va Write() usuli yordamida faylga yozish mumkin.

Agar TypeValue (Saqlash)<>Keyin ("BinaryData") yozing

BinaryData = Storage.Get();

BinaryData = Saqlash;

endIf; BinaryData.Write(Fayl nomi);

Agar u, masalan, Word hujjati (doc fayli yoki boshqa ro'yxatdan o'tgan fayl turi) bo'lsa, uni quyidagicha ochish mumkin:

LaunchApplication(FileName);

Value Storage turidagi maydonni tozalash uchun uni Aniqlanmagan qilib belgilashingiz kerak:

PropsStorage = Aniqlanmagan;

O'rnatilgan 1C: Enterprise 8 tilida fayllar va rasmlar bilan ishlash

Maqsad

Boshqariladigan dastur fayllar bilan ishlashning yangi mexanizmini amalga oshiradi. U ma'lumotlar bazasi va mijoz ilovasi o'rtasida fayl almashinuvini ta'minlaydi. Ushbu mexanizmning o'ziga xosligi shundaki, u nozik mijoz va veb-mijozda foydalanish uchun mo'ljallangan va veb-brauzerlar tomonidan qo'yilgan fayllar bilan ishlash cheklovlarini hisobga olgan holda ishlab chiqilgan.

Mexanizm - bu foydalanuvchi kompyuterida lokal ravishda saqlangan ma'lumotlarni axborot bazasining vaqtinchalik saqlash joyiga joylashtirish, bu ma'lumotlarni vaqtinchalik saqlash joyidan ma'lumotlar bazasiga o'tkazish va foydalanuvchi kompyuteriga qaytarib olish uchun ishlatilishi mumkin bo'lgan usullar majmuasidir. Ushbu mexanizm tomonidan hal qilinadigan eng keng tarqalgan dastur muammolari qo'shimcha ma'lumotlarni saqlashdir, masalan, tovarlar tasvirlari, shartnomalar bilan bog'liq hujjatlar va boshqalar.

Usul doirasi

Vaqtinchalik saqlash

Vaqtinchalik saqlash - bu ikkilik ma'lumotlarni joylashtirish mumkin bo'lgan ma'lumotlar bazasining ixtisoslashgan sohasi. Asosiy maqsad - ma'lumotlar bazasiga o'tkazilgunga qadar mijoz-server o'zaro aloqasi vaqtida ma'lumotlarni vaqtincha saqlash.

Vaqtinchalik saqlashga ehtiyoj paydo bo'ladi, chunki veb-brauzerning operatsion modeli foydalanuvchi tomonidan tanlangan faylni mijozda saqlash imkoniyatisiz to'g'ridan-to'g'ri serverga o'tkazilishini talab qiladi. Fayl uzatilganda, u vaqtinchalik xotiraga joylashtiriladi va keyinchalik ma'lumotlar bazasiga ob'ekt yozishda foydalanish mumkin.

Vaqtinchalik saqlash orqali hal qilinadigan eng tipik amaliy vazifa ob'ekt axborot bazasida, masalan, element shaklida yozilgunga qadar fayllar yoki rasmlarga kirishni ta'minlashdir.

Saqlashda joylashtirilgan fayl yoki ikkilik ma'lumotlar keyinchalik yozish, o'qish yoki o'chirish operatsiyalarida ishlatilishi mumkin bo'lgan noyob manzil bilan aniqlanadi. Bu manzil faylni vaqtincha saqlashga yozish usullari bilan beriladi. O'rnatilgan tildagi alohida usul sizga uzatilgan manzil vaqtinchalik saqlashdagi ma'lumotlarga ishora qiluvchi manzil ekanligini aniqlash imkonini beradi.

Axborot bazasi

Mexanizm sizga Value Storage tipidagi atributlarda saqlangan ikkilik ma'lumotlarga kirish imkonini beradi.

Vaqtinchalik saqlash holatida bo'lgani kabi, ma'lumotlarga kirish maxsus manzil orqali mumkin. Siz uni ob'ektga havola yoki axborot registrini kiritish kaliti va atribut nomini o'tkazish orqali maxsus usul orqali olishingiz mumkin. Jadval qismi bo'lsa, jadval qismining qator indeksini o'tkazish qo'shimcha ravishda talab qilinadi.

Fayllar bilan ishlash usullari ma'lumotlar bazasi tafsilotlari bilan ishlashda cheklovlarga ega. Ular uchun vaqtinchalik saqlashdan farqli o'laroq, faqat o'qish ma'lumotlari mavjud, lekin uni yozish yoki o'chirish mumkin emas.

Fayllar bilan ishlash usullari tavsifi

Ma'lumotlarni vaqtincha saqlashga saqlash

Ushbu mexanizmdan foydalanishning eng odatiy stsenariysi dastlab foydalanuvchi ma'lumotlarini vaqtincha saqlashga joylashtirishni o'z ichiga oladi. Buning uchun ikkita usul mavjud: PlaceFile() va PlaceFileInTemporaryStorage().

Birinchi usul, PlaceFile(), mahalliy fayl tizimidagi faylni vaqtinchalik xotiraga joylashtiradi. Usul saqlashda maqsadli manzilni qabul qilishi mumkin. Agar u aniqlanmagan yoki bo'sh satr bo'lsa, u holda yangi fayl yaratiladi va usul mos keladigan parametr orqali o'z manzilini qaytaradi.

Agar interaktiv ish rejimini belgilovchi parametr True bo'lsa, u holda usul standart fayl tanlash dialog oynasini ko'rsatadi, unda siz saqlashga joylashtirish uchun faylni tanlashingiz mumkin. Bunday holda, usul tanlangan faylning manzilini ham qaytaradi.

Natijada, agar foydalanuvchi interaktiv ravishda fayl tanlash dialogida operatsiyani bajarishdan bosh tortsa, usul False qiymatini qaytaradi. Usul faqat mijozda mavjud.

Ikkinchi usul, PlaceFileInTemporaryStorage() avvalgisiga o'xshaydi, faqat u serverda mavjud va vaqtinchalik saqlashga yoziladigan ma'lumotlar fayl tizimidagi yo'l sifatida emas, balki turdagi o'zgaruvchi sifatida taqdim etiladi. BinaryData. Xuddi shunday, agar maqsadli manzil ko'rsatilmagan bo'lsa, xotirada yangi fayl yaratiladi. Funktsiya natijasi sifatida uning manzili qaytariladi.

Vaqtinchalik xotiradan fayl olinmoqda

Ma'lumot bazasiga ob'ekt yozishda siz vaqtinchalik xotiradan ma'lumotlarni ajratib olishingiz va uni, masalan, atributga joylashtirishingiz kerak bo'lishi mumkin. Buning uchun mos keladigan server usuli mavjud - GetFileFromTemporaryStorage(). Bu usul vaqtinchalik xotiradan ma'lumotlarni oladi va natijada uni qaytaradi. Buni amalga oshirish uchun vaqtinchalik saqlash joyidagi manzilni ko'rsatishingiz kerak. Bu manzil yuqorida tavsiflangan PlaceFile() va PlaceFileInTemporaryStorage() usullari bilan qaytariladi, agar ular muvaffaqiyatli bajarilsa.

Faylni vaqtinchalik xotiradan o'chirish

Ma'lumotlar tafsilotlarda saqlanganidan so'ng, vaqtinchalik xotiradagi fayl o'chirilishi mumkin. Shu maqsadda faylni vaqtinchalik xotiradan o'chirib tashlaydigan DeleteFileFromTemporaryStorage() usuli mavjud. Usul vaqtinchalik xotiradagi fayl manzilini parametr sifatida oladi. Serverda mavjud.

Vaqtinchalik saqlash uchun manzilni tekshirish

Fayl manzili ma'lumotlar bazasida vaqtinchalik saqlashni ham, tafsilotlarni ham ko'rsatishi mumkin. Uning turini tekshirish uchun This isTemporaryStorageAddress() usuli mavjud.

U uzatilgan manzil do'konga ishora qiluvchi manzil ekanligini tekshiradi. Agar manzil vaqtinchalik xotiraga ishora qilsa, True qiymatini qaytaradi. Usul serverda mavjud.

Takliflar manzilini olish

Ma'lumotlar ma'lumotlar bazasidagi tafsilotlarga joylashtirilgandan so'ng, sizga fayl usullaridan foydalangan holda kirishingiz kerak bo'lishi mumkin.

Ammo, masalan, mulkdan ma'lumot olishdan oldin, siz ushbu mulkning manzilini olishingiz kerak. Shu maqsadda GetFileAddressInInformationBase() usuli mavjud.

Uning maqsadi infobazadagi fayl manzilini asl parametrlarga muvofiq qaytarishdir. Buning uchun ob'ekt kalitini (bu ob'ektga havola yoki axborot registrini kiritish kaliti bo'lishi mumkin) va atribut nomini o'tkazish kerak. Agar siz jadval qismi atributida saqlangan fayl manzilini olishingiz kerak bo'lsa, atribut nomini ko'rsatuvchi parametrdagi atribut nomidan oldin jadval qismi nomini va "." nuqtasini qo'shishingiz kerak. Usul mijozda ham, serverda ham mavjud.

Ma'lumot bazasidan fayl olinmoqda

GetFile() usuli ma'lumotlar bazasidan faylni oladi va uni foydalanuvchining mahalliy fayl tizimiga saqlaydi. Birinchi parametr rekvizit yoki vaqtinchalik fayl saqlash joyidagi fayl manzilini belgilaydi. Ikkinchi parametr natijada olingan faylning maqsad manzilini belgilaydi. Interaktiv bo'lmagan rejimda siz yo'lni belgilashingiz kerak. Interaktiv rejimda parametr ixtiyoriy.

Odatiy bo'lib, usul interaktiv rejimda bajariladi, ya'ni oxirgi parametr True. Bu degani, siz qabul qilingan fayl bilan amalni belgilashingiz mumkin bo'lgan dialog oynasi ko'rsatiladi: uni ishga tushiring yoki foydalanuvchi tomonidan belgilangan joyga saqlang. Agar interaktiv rejim faol bo'lsa va maqsadli disk fayl yo'li parametri ko'rsatilmagan bo'lsa, faylni ochish operatsiyasi mavjud emas. Boolean qiymatni qaytaradi. Noto'g'ri foydalanuvchi interaktiv faylni saqlash dialog oynasida operatsiyani bekor qilishni tanlaganligini bildiradi.

Fayl usullaridan foydalanishga misol

// Diskdan interfaol rejimda faylni qabul qilish // va uni vaqtinchalik saqlashga joylashtirish &Mijoz protsedurasida SelectDiskFileAndWrite()

o'zgaruvchining tanlangan nomi; VariableTemporaryStorageAddress; Agar PutFile(TemporaryStorageAddress, SelectedName, True) bo'lsa, Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Jarayonning oxiri

// Faylni vaqtinchalik xotiradan katalogga nusxalash // atribut, ob'ektni yozib olish, vaqtinchalik // saqlashdan faylni o'chirish &Server protsedurasida obyekt faylini joylashtirish (Vaqtinchalik saqlash manzili)

Katalog elementi = Form AttributesValue("Ob'ekt"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Yangi fayl(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Katalog elementi.Write(); O'zgartirilgan = noto'g'ri; Faylni vaqtinchalik xotiradan o'chirish(Vaqtinchalik saqlash manzili); ValueVFormAttributes(Katalog elementi, "Ob'ekt");

Jarayonning oxiri

// Faylni rekvizitlardan o'qish va uni saqlash // interaktiv rejimda mahalliy diskda &Mijoz protsedurasida ReadFileAndSaveToDisk()

Manzil = GetFileAddressInformationBase(Object.Link, "FileData"); GetFile(Manzil, Object.FileName, True);

Jarayonning oxiri

Rasm maydonidagi manzillarni qo'llab-quvvatlash

Rasm maydoni boshqaruvi vaqtinchalik xotiradagi yoki ma'lumotlar bazasidagi fayl manzili bilan belgilangan rasmni ko'rsatishni qo'llab-quvvatlaydi.

Buning uchun forma elementining Data xossasida string tipi atributini o‘rnatish kerak. Ushbu atributning qiymati rasmning manzili sifatida talqin qilinadi.

Misol // Tasvir maydonini vaqtinchalik // saqlashdagi rasm manziliga bog'lash. AddressPictures satr turi tafsilotlarini shakllantiradi

PlaceFile(Rasm manzili, rost)

Rasm.Ma'lumotlar = Manzil rasmlari

Veb-mijoz bilan ishlashda cheklovlar

Veb-mijozdan foydalanishda tavsiflangan mexanizmning ishlashi ba'zi cheklovlarga ega. Ushbu cheklovlar brauzerning xavfsizlik modeli bilan bog'liq. Shunday qilib, masalan, mijoz faylni mahalliy fayl tizimiga mustaqil ravishda saqlay olmaydi, ya'ni faqat PlaceFile() va GetFile() mijoz usullarining interaktiv versiyasi mavjud. Interaktiv bo'lmagan rejimdan foydalanishga urinayotganda istisno qilinadi. Interaktiv ravishda paydo bo'ladigan dialog oynalari brauzer turiga xosdir.

Mijozda Value Storage bilan ishlash xususiyatlari

Muammo:

Hujjat jadval bo'limida qiymatni saqlash turining atributiga ega bo'lsa, agar bu atribut katta ma'lumotlarni o'z ichiga olsa, u hujjat shaklini ochishni sekinlashtiradi.

Taxmin qilingan sabab:

Ehtimol, formani ochishda mijozga Value Store-da joylashgan ma'lumotlarga havola emas, balki ma'lumotlarning o'zi yuboriladi.

Yechim

  • Formaning jadval atributi xossalarida “Har doim foydalanish” belgisi mavjud. Agar u o'rnatilgan bo'lsa, maydonning mazmuni har doim server va mijoz o'rtasida uzatiladi - masalan, forma ochilganda. Ushbu bayroq o'chirilgan bo'lishi kerak, lekin bu kodda hisobga olinishi kerak, chunki sukut bo'yicha mijozda bu maydon uchun hech qanday qiymat bo'lmaydi. Misolni 1C: Arxivda topish mumkin.

Bundan ham foydalanish yaxshiroqdir vaqtincha saqlash mijoz va server o'rtasida fayllarni uzatish uchun.

Bizda "Mahsulotlar" katalogi mavjud bo'lib, uning "Ma'lumotlar" atributida ma'lumotlar ikkilik ma'lumotlar shaklida saqlanadi. Atributning o'zi "Qiymatni saqlash" qiymat turiga ega. Quyidagi skrinshotda katalog metadata tuzilishi ko'rsatilgan.

Diskdan element ko'rinishidagi ixtiyoriy faylni biriktirish uchun "AttachFile" buyrug'i amalga oshirildi. Uning dastur kodi quyidagi ro'yxatda keltirilgan:

& Mijoz Protsedurasida AttachFile(Buyruq) // Mijozdagi buyruq ishlovchisi. Fayl tanlash // Diskdan fayl tanlash uchun dialog oynasi Mode = FileSelectionDialogMode. Ochilish; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile dialog oynasi. FullFileName = " " ; OpenFile dialog oynasi. MultipleSelect = False ; OpenFile dialog oynasi. Sarlavha = "Fayllarni tanlang"; Agar FileOpenDialog. () ni tanlang, keyin FilePath = FileOpenDialog. To'liq fayl nomi; // Ikkilik fayl ma'lumotlarini qabul qilish BinaryData = yangi BinaryData(PathToFile); // Ikkilik ma'lumotlarni serverga o'tkazish AttachFileServer(BinaryData); Aks holda Matn = "ru = "" Fayl (lar) tanlanmagan!" " ; uz ="" Fayl (lar) tanlanmagan!" " " ; Ogohlantirish(NStr(Matn) ); EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // Axborot xavfsizligida faylni yozib olish uchun serverdagi ishlov beruvchi // Shakl ob'ektini mos yozuvlar ob'ektiga aylantiring ObjectCurrent = FormAttributesValue("Ob'ekt" ); // “Data” atributiga yangi qiymat tayinlash ObjectCurrent. Ma'lumotlar = NewValueStorage(BinaryData); // O'zgarishlarni saqlash ObjectCurrent. Write(); Jarayonning oxiri

Agar algoritmni umumiy ma'noda tasvirlab beradigan bo'lsak, u holda birinchi navbatda mijozdagi diskdan fayl tanlanadi. Olingan ikkilik fayl ma'lumotlari serverga yuboriladi, u erda ma'lumotlar bazasida, ya'ni joriy katalog elementining "Ma'lumotlar" atributida qayd etiladi.

Aslida, hamma narsa ishlaydi. Elementni ochishda biz ushbu ma'lumotlarni kerak bo'lganda o'qiy olamiz. Agar, masalan, rasm rekvizitda saqlangan bo'lsa, biz uni olishimiz va uni forma maydonida ko'rsatishimiz mumkin. Ushbu yechim o'z o'rniga ega, ammo ko'pgina vazifalarda kataloglar va hujjatlarda "Qiymatni saqlash" qiymat turiga ega atributlardan foydalanish maqbul emas. Va shuning uchun ...

Ishlash ta'siri

Keling, ba'zi ishlash testlarini o'tkazaylik. Sinovlarda "Mahsulotlar" katalogining ikkita elementi, biriktirilgan fayl va faylsiz foydalaniladi. Biriktirilgan fayl hajmi 5 megabayt.

Barcha testlar test konfiguratsiyasida "GetElement" ishlovi yordamida amalga oshiriladi. Ushbu konfiguratsiyani maqolaning oxiridagi havoladan yuklab olishingiz mumkin.

Keling, "Mahsulotlar" katalogidagi narsalarni ochish vaqtini o'lchaymiz. Elementni ochish uchun "OpenValue()" global kontekst usuli qo'llaniladi, bu elementga parametr sifatida havola uzatiladi. Keling, standart ishlashni o'lchash vositasi yordamida ochilish vaqtini o'lchaymiz. Natijalar quyidagi skrinshotda keltirilgan:

Ko'rib turganimizdek, biriktirilgan fayl bilan elementni ochish uchun ketadigan vaqt 10 barobar ko'p! Keling, yana bir sinov qilaylik. Mahsulot katalogi elementiga murojaat qilish uchun “GetObject()” usulini bajaramiz. Sinov natijasini quyidagi skrinshotda ko'rishingiz mumkin.

Farqi ancha sezilarli. Biriktirilgan faylsiz elementni qabul qilish 194 marta tezroq!

Buning sababi, "GetObject()" usuli barcha ma'lumotlarni katalog elementi tafsilotlaridan mos yozuvlar orqali oladi. Shunga ko'ra, usul nafaqat "Kod" va "Ism" atributlarining qiymatlarini, balki "Ma'lumotlar" atributining qiymatini ham oladi. Agar u 5 megabayt hajmdagi ikkilik ma'lumotlarni saqlasa (bizning misolimizda bo'lgani kabi), u holda ob'ekt qabul qilinganda, bu ma'lumotlar RAMga joylashtiriladi (boshqa tafsilotlar kabi) va keyin mijoz tomoniga uzatiladi. Ushbu atributdan ma'lumotlarni olish element ob'ektini olish vaqtini oshiradi. Agar yupqa aloqa kanali ishlatilsa, u holda tarmoq orqali katta hajmdagi ma'lumotlarni uzatish hisobiga ochilish vaqti yanada sezilarli darajada oshadi.

Eslatma: “OpenValue()” usulini bajarishda avval katalog elementi obyekti ham olinadi, so‘ngra shakl obyektiga aylantiriladi va mijozga uzatiladi (boshqariladigan shakllar uchun). Ya'ni, element mos yozuvlar bo'yicha ochilganda, ob'ekt ham olinadi.

Keling, biriktirilgan faylli va faylsiz katalog elementini ochish va yozish vaqtini yakuniy sinovdan o'tkazamiz. Natija quyidagi skrinshotda ko'rsatilgan.

Tabiiy natija. Biriktirilgan fayl bilan katalog elementini qabul qilish va undan keyin yozish vaqti ~19 baravar ko'p bo'ldi. Yuqorida aytib o'tilganidek, ob'ektni qabul qilishda uning barcha tafsilotlarining qiymatlari, shu jumladan 5 megabaytlik ma'lumot saqlanadigan "Ma'lumotlar" atributi olinadi. Element yozilganda, ma'lumotlarning bu miqdori yana ma'lumotlar bazasiga yoziladi. Shunday qilib, ma'lumotlarni katalog atributida (yoki hujjatda) "Qiymatni saqlash" turida saqlash ob'ektni olishda ham, uni ma'lumotlar bazasiga joylashtirishda ham ishlashga salbiy ta'sir qiladi.

Axborot bazasi ob'ektlari uchun ma'lumotlarni saqlash masalasini hal qilishning eng to'g'ri usuli qanday?

To'g'ri yechim

Agar biz ushbu mexanizmning odatiy konfiguratsiyalarda amalga oshirilishini ko'rib chiqsak, ob'ektlar uchun qo'shimcha ma'lumotlar alohida ma'lumotlar registrlari jadvalida saqlanganligini ko'ramiz. Bu, masalan, "Savdoni boshqarish" 11-versiyasining standart konfiguratsiyasida biriktirilgan fayl mexanizmi qanday ko'rinishga ega.

"Nomenklatura" katalogi "NomenclatureAttachedFiles" katalogining egasidir. Bu, o'z navbatida, AttachedFiles axborot registriga bog'liq bo'lib, uning AttachedFile o'lchami uning elementiga tegishli. Shunday qilib, axborot bazasi ob'ektlariga biriktirilgan ma'lumotlar haqiqatda axborot registrlari jadvalida saqlanadi, ularning ishlashiga resursda saqlanadigan ma'lumotlar miqdori deyarli ta'sir qilmaydi. "Biriktirilgan fayllar nomenklaturasi" oraliq katalogi biriktirilgan fayl uchun qo'shimcha ma'lumotlarni saqlash, shuningdek, biriktirilgan faylga havola orqali kirishni qo'llab-quvvatlash uchun zarur.

Yuqorida aytilganlarning barchasi to'g'ri ishlab chiqilgan konfiguratsiya metama'lumotlar strukturasining ishlashga katta ta'sirini yana bir bor tasdiqlaydi.

Maqoladan misol bilan konfiguratsiyani sinab ko'ring: LINK .