Ikkilik ma'lumotlarni 1c fayliga qanday saqlash kerak. Ikkilik ma'lumotlar bilan ishlash. Rekvizitlardan ma'lumotlarni o'qish

Chop etish (Ctrl+P)

16.3. Ikkilik ma'lumotlar bilan ishlash

16.3.1. umumiy ma'lumot

Ilova echimlarini amalga oshirishda turli xil ikkilik ma'lumotlarni tahlil qilish zarur bo'lgan holatlar bo'lishi mumkin. Misol uchun, siz imzo yordamida fayl turini aniqlashingiz yoki rasm bilan ba'zi manipulyatsiyalarni bajarishingiz kerak. Ikkilik ma'lumotlar bilan ishlash uchun 1C: Enterprise maxsus dasturiy interfeyslarni taqdim etadi. Keyinchalik, biz ikkilik ma'lumotlar bilan ishlash imkoniyatlarini ko'rib chiqamiz.
Ikkilik ma'lumotlar bilan barcha ishlar oqim tushunchasiga asoslanadi. Oqim ixtiyoriy (umumiy holatda) ma'lumotlar manbasini (Oqim ob'ekti) mantiqiy umumlashtirishdir. Tizim hech qanday manba bilan bog'lanmagan mustaqil Stream ob'ektini yaratish imkoniyatini ta'minlamaydi. Lekin yaratilishi mumkin bo'lgan hosila ob'ektlar mavjud - diskdagi fayl bilan bog'langan oqim (FileStream obyekti) yoki xotirada yaratilgan oqim (MemoryStream obyekti). Oqim sizga ma'lumotlarni o'qish va yozish imkonini beradi. Muayyan operatsiyalarni bajarish imkoniyatini aniqlash uchun oqim (va olingan ob'ektlar) qaysi birini aniqlashga imkon beradigan maxsus usullarga ega.
operatsiyalar ushbu mavzu bilan mavjud (metodlar AvailableRecord(), AvailableRead(), AvailableChangePosition()).
Agar siz yuqori darajadagi oqim bilan ishlashingiz kerak bo'lsa, xususan, raqam (turli bit chuqurlikdagi) yoki satr kabi ma'lumotlarni o'qish/yozish, u holda DataRead/DataWrite ob'ektlari buning uchun mo'ljallangan. Ushbu ob'ektlardan foydalanib, siz oqimda joylashgan ikkilik ma'lumotlarga yanada tuzilgan yondashuvni qo'llashingiz mumkin. Shunday qilib, masalan, fayl formatini bilgan holda, siz bunday faylni juda qulay o'qishingiz mumkin, sarlavhalardan kerakli ma'lumotlarni olishingiz mumkin (ular, qoida tariqasida, raqamlar va qatorlar turlari bilan ifodalanadi), keraksiz ma'lumotlar bloklarini o'tkazib yuborish va qayta ishlash uchun zarur bo'lganlarni yuklash.
Ikkilik ma'lumotlar bilan ishlashning umumiy sxemasi quyidagicha ifodalanishi mumkin:

  1. Oqim qabul qilinmoqda
  2. Data Reader yoki Data Writer obyekti yaratiladi.
  3. 2-bosqichda yaratilgan ob'ekt yordamida kerakli harakatlar bajariladi.
  4. 2-bosqichda yaratilgan ob'ekt yopiq.
  5. Agar boshqa operatsiyalar talab qilinmasa, 1-bosqichda olingan oqim yopiladi.
  6. Agar siz oqim bilan ishlashni davom ettirishingiz kerak bo'lsa, siz oqimda yangi pozitsiyani o'rnatishingiz mumkin (agar bu operatsiya qo'llab-quvvatlansa) va 2-bosqichdan boshlab ishlashni davom ettirishingiz mumkin.

Shuni ta'kidlash kerakki, 1 va 2-bandlarni birlashtirish mumkin. Boshqacha qilib aytganda, tizim ob'ektlarni yaratish imkoniyatini beradi. Ma'lumotlarni o'qish/Ma'lumotlarni yozish to'g'ridan-to'g'ri, masalan, BinaryData ob'ektidan.
Ikkilik ma'lumotlar bilan turli operatsiyalarni bajarish uchun tizim oqimning bir qismini tasodifiy (bayt-bayt) kirish (ob'ekt) bilan alohida fragment sifatida olish imkoniyatini beradi. BufferBinaryData). Bufer hajmi yaratilganda o'rnatiladi va keyin uni o'zgartirib bo'lmaydi. Ikkilik ma'lumotlar buferi bilan ishlashda turli bit chuqurlikdagi raqamlar bilan ishlash mumkin
bir butun sifatida. Bunday holda, bayt tartibini so'zlar bilan ko'rsatish mumkin: "kichik endian" yoki "katta endian" (katta endian). Bundan tashqari, bitta buferni bir nechtaga bo'lish va bir nechta ikkilik ma'lumotlar buferlarini bitta natijaviy buferga birlashtirish mumkin.
Shuni ta'kidlash kerakki, ikkilik ma'lumotlar buferi bilan ishlash, agar ikkilik ma'lumotlar bilan ishlash mijoz ilovasi tomonida asinxron rejimda amalga oshirilsa, amalga oshirishni sezilarli darajada soddalashtirishi mumkin. Bunday holda, buferga ma'lumotlarni o'qish asinxron operatsiya sifatida amalga oshiriladi va bufer ma'lumotlari bilan ishlash sinxron bo'ladi.
Ikkilik ma'lumotlar bilan ishlash dasturning mijoz tomonida (shu jumladan veb-mijozda) va server tomonida, shuningdek sinxron va asinxron ish sxemalarida mavjud. Keyingi misollarda sinxron ish sxemasidan foydalaniladi.

16.3.2. Ikkilik ma'lumotlarni o'qish

Ikkilik ma'lumotlarni o'qishga misol sifatida biz tizimda keyingi foydalanish uchun tanlangan to'g'ri fayl formatini aniqlash vazifasini ko'rib chiqamiz. Tekshirilayotgan fayl sifatida audio ma'lumotlarga ega .wav faylidan foydalaniladi. .wav fayllarini saqlash uchun Resurs almashinuvi fayl formati (RIFF) ishlatiladi, tavsifi havolada berilgan:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (da Ingliz tili). O'qish misoli uchun quyidagi format ma'lumotlari qo'llaniladi:
1. Faylning dastlabki 4 baytida format identifikatori mavjud: RIFF.
2. keyingi 4 baytda haqiqiy audio ma'lumotlar hajmi kichik-endian bayt tartibida mavjud.
3. Keyingi 4 baytda foydalanilgan ma'lumotlarning matn turi mavjud: WAVE.
Ushbu amallarni bajarish uchun sizga o'rnatilgan tilda quyidagi kod kerak bo'ladi:

O'qing = Yangi ReadData(FileName, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Agar fayl formati<>Keyin "RIFF"
Hisobot ("Bu RIFF fayli emas");
Qaytish;
EndIf;
Agar FileType = "WAVE" bo'lsa
Hisobot ("Bu ma'lumotlarga ega WAV fayli, hajmi " + DataSize + " bayt");
Aks holda
Hisobot ("Bu WAV fayli emas");
Qaytish;
endIf;

Keling, misolni batafsil ko'rib chiqaylik.
Birinchidan, nomi FileName o'zgaruvchisida joylashgan fayl ochiladi, fayl o'qish uchun ochiladi ( FileOpenMode.Open), faqat fayldan o'qiydi ( FileAccess.Read) va o'qish uchun 16 baytlik bufer ishlatiladi.
Keyin ma'lumotlarni o'qish uchun oqim hosil bo'ladi, bu raqam turidagi ma'lumotlar uchun eng kam muhim bayt tartibiga ega bo'ladi. Keyin olingan oqimdan 4 ta belgi, 32 bitli butun son va yana 4 ta belgi o'qiladi. Olingan ma'lumotlar tahlil qilinadi va tahlil natijalari asosida tanlangan fayl .wav fayli yoki yo'qligi to'g'risida qaror qabul qilinadi.

16.3.3. Ikkilik ma'lumotlarni yozish

Ikkilik ma'lumotlarni faylga yozish, eng oddiy holatda, quyidagicha amalga oshiriladi:

Kirish = Yangi WriteData(Fayl nomi);
Indeks uchun = 0 dan 255 gacha
Write.WriteByte(indeks);
EndCycle;
Record.Close() ;

Ushbu misol faylga 0 dan 255 gacha baytlar ketma-ketligini yozadi (0xFF o'n oltilik). Bu eng oddiy yozib olish variantidir.
Bundan tashqari, oldingi misolda muhokama qilingan o'qish usuliga o'xshash usuldan foydalanishingiz mumkin, bu erda fayl oqimi olinadi va ma'lumotlar ushbu fayl oqimiga yoziladi.

16.3.4. Ikkilik ma'lumotlar buferi bilan ishlash

Yuqorida aytib o'tilganidek, ikkilik ma'lumotlar buferi ikkilik ma'lumotlarning fragmentlarini manipulyatsiya qilishning qulay usulini ta'minlaydi.
Faqat o'qish ma'lumotlarini emas, balki yozishni ham qo'llab-quvvatlaydi.
Misol tariqasida, biz ma'lumotlarni o'qish misolidan RIFF fayl sarlavhasini tahlil qilishni ko'rib chiqamiz (bu yerga qarang). Misol yaratish uchun fayl formati haqida aynan bir xil ma'lumotlardan foydalaniladi. Shunday qilib, manba fayldan fayl sarlavhasi o'lchamidagi buferni o'qish kerak. Sarlavha uchta 4 baytli maydondan iborat. Shunday qilib, 12 baytni o'qish kerak.

Bufer = Yangi BufferBinaryData(12);
Fayl = FileStreams.Open(Vaqtinchalik fayllar katalogi() + "Windows Logon.wav", FileOpenMode.Open, FileAccess.Read);
File.Read(Bufer, 0, 12);
Hajmi = Buffer.ReadInteger32(4);
StreamString = newStreamInMemory(Bufer);
StreamRows.Go(0, PositionInStream.Start);

FileFormat = ReadLines.ReadCharacters(4, "Windows-1251");
ReadLines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = yangi DataReader (RowStream);
FileType = ReadLines.ReadCharacters( 4, "Windows-1251");
ReadLines.Close();

Ikkilik ma'lumotlar buferiga ma'lumotlarni olish jarayoni alohida narsa emas. Keyingi operatsiyalar ba'zi izohlarni talab qiladi. Har qanday qo'llab-quvvatlanadigan bit chuqurligidagi raqamlarni buferning istalgan pozitsiyasidan o'qish mumkin. IN bu misolda Buffer.ReadInteger32(4); buferning 4 baytidan boshlab 32 bitli butun sonni o'qishni anglatadi. Shunday qilib, buferning turli joylarida joylashgan bir nechta raqamlarni o'qish kerak bo'lsa, bu buferda to'g'ridan-to'g'ri joylashuvsiz amalga oshirilishi mumkin.
Biroq, satrni o'qish ikkilik ma'lumotlar buferi tomonidan qo'llab-quvvatlanmaydi. Shuning uchun, buni amalga oshirishga imkon beruvchi ob'ektdan foydalanishingiz kerak: Ma'lumotlarni o'qish. DataReader ob'ektini ikkilik ma'lumotlar buferidan yaratib bo'lmaydi. Ammo ikkilik ma'lumotlar buferiga asoslanib, siz ma'lumotni jismoniy saqlash joyi (fayl, ikkilik ma'lumotlar buferi) va ushbu ma'lumotlar bilan ishlash imkonini beruvchi yuqori darajadagi ob'ekt o'rtasida universal vositachi bo'lgan oqim yaratishingiz mumkin.
DataReader ob'ekti oqim asosida yaratilganda, u ma'lumotlarni o'qishni boshlaydi bu daqiqa oqimga o'rnatilgan. Shuning uchun, misolda, birinchi navbatda oqimdagi pozitsiya o'rnatiladi, so'ngra DataReader ob'ekti yaratiladi va kerakli belgilar soni o'qiladi. Batafsil tavsif Satrlarni o'qishda baytlar va belgilar soni o'rtasidagi farq uchun 16.3.5 keyingi bo'limga qarang.

16.3.5. Foydalanish xususiyatlari

Ikkilik ma'lumotlardan foydalanganda String tipidagi ma'lumotlar bilan ishlash xususiyatlarini hisobga olish kerak. O'ziga xosligi shundaki, StrLength() global kontekst funksiyasi qaytaradigan satr uzunligi belgilar bilan o'lchanadi. Belgilarda ikkilik ma'lumotlar bilan ishlash uchun ob'ektlardagi satrlarni yozish/o'qish usullarida o'qilishi/yozilishi kerak bo'lgan ma'lumotlar hajmini ko'rsatish kerak ( Belgilarni o'qing(),
ReadString(), WriteCharacters(), WriteString()). Biroq, belgilardagi satr uzunligini baytlardagi o'xshash parametrga aylantirishning aniq varianti yo'q. Satrning mazmuniga va kodlashiga qarab, bu nisbat har xil bo'ladi. Shuning uchun, o'zgaruvchan uzunlikdagi satrlarni o'z ichiga olgan har qanday ma'lumotlar tuzilmalari bilan ishlashda siz satr uzunliklari qaysi birliklarda ifodalanganligini aniq tushunishingiz kerak.
Agar mavjud ma'lumotlarda satr uzunligi baytlarda ko'rsatilgan bo'lsa va satr ko'p baytli o'zgaruvchan uzunlikdagi kodlashda (masalan, UTF-8) ko'rsatilgan bo'lsa, unda ikkilik ma'lumotlar ob'ektlaridan foydalanib, bunday tuzilmani fayldan o'qish String tipidagi ma'lumotlar odatda mumkin emas.
Ammo bu holda siz fayl oqimidagi o'qish/yozish pozitsiyasini osongina o'zgartirishingiz mumkin. Agar satr uzunligi belgilar bilan ko'rsatilgan bo'lsa, unda bunday satrni String tipidagi ma'lumotlarga o'qish mumkin bo'ladi, lekin bunday oqimdagi o'qish/yozish pozitsiyasini o'zgartirish imkonsiz bo'ladi.
Satr uzunligini baytlarda olish uchun satrni BinaryData obyektiga aylantirish uchun quyidagi funksiyadan foydalanishingiz mumkin:

Funktsiya Stringdan ikkilik ma'lumotlarni oling(Value StrParameter, qiymat kodlash = “UTF-8”)
MemoryThread = NewMemoryThread;
Yozuvchi = Yangi WriteData (StreamMemory);
Writer.Write String(StrParameter, Encoding);
Yozuvchi.Yopish();
StreamMemory.CloseAndGetBinaryData-ni qaytaring();
EndFunction

Baytlardagi haqiqiy hajmni BinaryData obyektidagi Size() funksiyasini chaqirish orqali olish mumkin, bu funktsiya natijasida olinadi.
Ob'ektlarni bir vaqtning o'zida ishlatish tavsiya etilmaydi Ma'lumotlarni o'qish/Ma'lumotlarni yozish va oqimli ob'ektlar. ReadData-dan ikkita ketma-ket o'qish operatsiyalari yoki WriteData-ga ikkita ketma-ket yozish operatsiyalari o'rtasida Ch ob'ektlari ishlaydigan oqimdagi pozitsiya o'zgargan bo'lsa. ShadowData/WriteData- istisno hosil bo'ladi. Shunday qilib, quyidagi misol oqimga ma'lumot yozishda oqimdagi pozitsiyaning to'g'ri o'zgarishini ko'rsatadi:

Stream = newStreamInMemory();

WriteData.WriteString("Salom Dunyo!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite (Oqim);
WriteData.WriteString("Xayr!");
WriteData.Close();
Quyidagi misol tashlanayotgan istisnoga salom:

Oqim = NewStreamInMemory();

WriteData.WriteString("Salom, dunyo!");
Stream.Go(0, PositionInStream.Start);
// Keyingi satr istisno qiladi
WriteData.WriteString (“Xayr!”);
Shu bilan birga, tizim xatti-harakatlari noto'g'ri bo'lgan holatlar bo'lishi mumkin, ammo hech qanday xatolik yuzaga kelmaydi:

Oqim = GetStream();
ReadData = yangi ReadData(Oqim);
TestString = ReadData.Read();
InitialPosition = Stream.CurrentPosition();
DataWrite = newDataWrite (Oqim);
WriteData.WriteString (“Kutilmagan satr”);
WriteData.Close();
Stream.Go(InitialPosition, PositionInStream.Start);
// Umuman olganda, TestString2 o'zgaruvchisiga qanday qiymat qo'llanilishini aniqlab bo'lmaydi
TestLine2 = ReadData.ReadLine();

Ushbu bo'limda tasvirlangan xatti-harakatlarga sabab bo'ladi o Data Reader/Data Writer obyektlari oqim bilan ishlashda o'z buferlaridan foydalanadi. Natijada, ipning haqiqiy holati tugallangan operatsiyalar natijasida hosil bo'lgan mantiqiy pozitsiyadan farq qiladi.
Shuningdek, o'z ishi uchun bitta ipdan foydalanadigan Data Reader va Data Writer obyektlaridan bir vaqtda foydalanish qo'llab-quvvatlanmaydi.

1C: Enterprise 8 texnologiya platformasi axborot bazasida ixtiyoriy fayllarni saqlash, ularni u yerdan olish va ulardan foydalanish imkonini beradi. 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);

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. Xususiyat bu mexanizm da foydalanish uchun mo'ljallangan nozik mijoz va veb-mijoz va veb-brauzerlar tomonidan qo'yilgan fayllar bilan ishlash cheklovlarini hisobga olish uchun mo'ljallangan.

Mexanizm - bu foydalanuvchi tomonidan mahalliy saqlangan ma'lumotlarni vaqtincha saqlashga joylashtirish uchun ishlatilishi mumkin bo'lgan usullar to'plami axborot bazasi, ushbu ma'lumotni vaqtinchalik xotiradan ma'lumotlar bazasiga o'tkazing va uni foydalanuvchining kompyuteriga qaytaring. 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'tkazishni 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 aniqlanmagan bo'lsa bo'sh qator, keyin 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 o'zgaruvchan turi 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'rsatadigan 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 mahalliyga saqlaydi fayl tizimi foydalanuvchi. 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 // ga saqlash mahalliy disk interaktiv rejimda &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 atributni o‘rnatish kerak string turi. 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 mustaqil ravishda faylni mahalliy fayl tizimiga saqlay olmaydi, ya'ni faqat PlaceFile() va GetFile() mijoz usullarining interaktiv versiyasi mavjud. Interaktiv bo'lmagan rejimdan foydalanishga urinayotganda istisno qilinadi. Dialog oynalari, interaktiv tarzda ko'rsatiladi, ma'lum bir 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, shaklni 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. Bu 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.