Хоёртын өгөгдлийг 1c файлд хэрхэн хадгалах вэ. Хоёртын өгөгдөлтэй ажиллах. Таягнаас өгөгдлийг уншиж байна

Хэвлэх (Ctrl+P)

16.3. Хоёртын өгөгдөлтэй ажиллах

16.3.1. ерөнхий мэдээлэл

Хэрэглээний шийдлүүдийг хэрэгжүүлэхдээ янз бүрийн хоёртын өгөгдөлд дүн шинжилгээ хийх шаардлагатай нөхцөл байдал үүсч болно. Жишээлбэл, та гарын үсэг ашиглан файлын төрлийг тодорхойлох эсвэл зурагтай зарим үйлдэл хийх хэрэгтэй. Хоёртын өгөгдөлтэй ажиллахын тулд 1С: Enterprise нь тусгай програм хангамжийн интерфейсээр хангадаг. Дараа нь бид хоёртын өгөгдөлтэй ажиллах боломжуудыг авч үзэх болно.
Хоёртын өгөгдөлтэй хийсэн бүх ажил нь урсгал гэсэн ойлголт дээр суурилдаг. Урсгалнь дурын (ерөнхий тохиолдолд) өгөгдлийн эх үүсвэрийн (Stream объект) логик ерөнхий дүгнэлт юм. Систем нь ямар ч эх сурвалжтай холбоогүй бие даасан Stream объект үүсгэх боломжийг олгодоггүй. Гэхдээ үүсгэж болох үүсмэл объектууд байдаг - диск дээрх файлтай холбоотой урсгал (FileStream объект) эсвэл санах ойд үүсгэсэн урсгал (MemoryStream объект). Урсгал нь танд өгөгдлийг унших, бичих боломжийг олгодог. Тодорхой үйлдлүүдийг гүйцэтгэх боломжийг тодорхойлохын тулд урсгал (болон үүссэн объектууд) нь аль нь болохыг тодорхойлох боломжийг олгодог тусгай аргуудтай байдаг.
үйлдлүүд нь энэ урсгалтай (арга AvailableRecord(), Унших боломжтой(), AvailableChangePosition()).
Хэрэв та илүү өндөр түвшний урсгалтай ажиллах шаардлагатай бол, тухайлбал тоо (өөр өөр битийн гүнтэй) эсвэл мөр зэрэг өгөгдлийг унших/бичих шаардлагатай бол DataRead/DataWrite объектууд үүнд зориулагдсан болно. Эдгээр объектуудыг ашигласнаар та урсгалд байрлах хоёртын өгөгдөлд илүү бүтэцтэй хандах боломжтой. Тиймээс, жишээлбэл, файлын форматыг мэддэг бол та ийм файлыг маш тухтай уншиж, толгойн хэсгээс шаардлагатай өгөгдлийг олж авах боломжтой (дүрмээр бол тоо, мөрийн төрлөөр илэрхийлэгддэг), шаардлагагүй өгөгдлийн блокуудыг алгасах, боловсруулахад шаардлагатайг нь ачих.
Хоёртын өгөгдөлтэй ажиллах ерөнхий схемийг дараах байдлаар илэрхийлж болно.

  1. Дамжуулалтыг хүлээн авч байна
  2. Data Reader эсвэл Data Writer объект үүсгэгдсэн.
  3. 2-р алхамд үүсгэсэн объектыг ашиглан шаардлагатай үйлдлүүдийг гүйцэтгэдэг.
  4. 2-р алхам дээр үүсгэсэн объект хаалттай байна.
  5. Хэрэв нэмэлт үйлдэл хийх шаардлагагүй бол 1-р алхам дээр олж авсан урсгал хаагдана.
  6. Хэрэв та урсгалтай үргэлжлүүлэн ажиллах шаардлагатай бол урсгалд шинэ байрлал тогтоож (хэрэв энэ үйлдлийг дэмждэг бол) 2-р алхамаас эхлэн үргэлжлүүлэн ажиллаж болно.

1 ба 2-р догол мөрийг нэгтгэх боломжтой гэдгийг тэмдэглэх нь зүйтэй. Өөрөөр хэлбэл, систем нь объект үүсгэх боломжийг олгодог. Өгөгдөл унших/Өгөгдөл бичихЖишээ нь, BinaryData объектоос шууд.
Хоёртын өгөгдөлтэй янз бүрийн үйлдлүүдийг гүйцэтгэхийн тулд систем нь урсгалын зарим хэсгийг санамсаргүй (байт байт) хандалттай тусдаа хэсэг болгон авах боломжийг олгодог. BufferBinaryData). Буферийн хэмжээг үүсгэх үед тохируулдаг бөгөөд дараа нь өөрчлөх боломжгүй. Хоёртын өгөгдлийн буфертэй ажиллахдаа өөр өөр битийн гүнтэй тоонуудтай ажиллах боломжтой
нэг бүхэлдээ. Энэ тохиолдолд байт дарааллыг "бяцхан эндиан" эсвэл "биг эндиан" (том эндиан) гэсэн үгээр зааж өгөх боломжтой. Мөн нэг буферийг хэд хэдэн болгон хувааж, хэд хэдэн хоёртын өгөгдлийн буферийг нэг буфер болгон нэгтгэх боломжтой.
Хоёртын өгөгдлийн буфертэй ажиллах нь хоёртын өгөгдөлтэй ажиллах нь асинхрон горимд үйлчлүүлэгчийн програмын тал дээр хэрэгжсэн тохиолдолд хэрэгжилтийг ихээхэн хялбарчилж чадна гэдгийг анхаарах нь чухал юм. Энэ тохиолдолд буферт өгөгдлийг унших нь асинхрон үйлдлээр хийгдэх бөгөөд буферийн өгөгдөлтэй ажиллах нь синхрон байх болно.
Хоёртын өгөгдөлтэй ажиллах нь програмын клиент тал (вэб клиентийг оруулаад) болон сервер талд, түүнчлэн синхрон ба асинхрон ажлын схемд боломжтой. Цаашдын жишээнүүдэд синхрон ажлын схемийг ашиглах болно.

16.3.2. Хоёртын өгөгдлийг унших

Хоёртын өгөгдлийг унших жишээ болгон бид цаашид ашиглахын тулд системд сонгосон файлын зөв форматыг тодорхойлох ажлыг авч үзэх болно. Аудио өгөгдөл бүхий .wav файлыг шалгаж байгаа файл болгон ашиглах болно. .wav файлуудыг хадгалахын тулд Resource Interchange File Format (RIFF) ашигладаг бөгөөд тайлбарыг холбоос дээр өгсөн болно.

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (дээр) Англи хэл). Унших жишээний хувьд дараах форматын мэдээллийг ашиглана.
1. Файлын эхний 4 байт нь формат танигчийг агуулна: RIFF.
2. дараагийн 4 байт нь бодит аудио өгөгдлийн хэмжээг бага-эндиан байт дарааллаар агуулна.
3. Дараагийн 4 байт нь ашигласан өгөгдлийн текстийн төрлийг агуулна: WAVE.
Эдгээр үйлдлийг гүйцэтгэхийн тулд танд суулгасан хэл дээрх дараах код хэрэгтэй болно.

Унших = Шинэ ReadData(FileName, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Хэрэв файлын формат<>Дараа нь "RIFF"
Тайлан("Энэ бол RIFF файл биш");
Буцах;
EndIf;
Хэрэв FileType = "WAVE" байвал
Тайлан (“Энэ нь өгөгдөл, хэмжээ ” + DataSize + ” байт бүхий WAV файл юм”);
Үгүй бол
Тайлан ("Энэ бол WAV файл биш");
Буцах;
endIf;

Жишээг илүү дэлгэрэнгүй авч үзье.
Эхлээд FileName хувьсагчид нэр нь орсон файл нээгдэж, файл уншихаар нээгдэнэ ( FileOpenMode.Open), зөвхөн файлаас унших болно ( FileAccess.Read) ба 16 байт буферийг уншихад ашиглана.
Дараа нь тоон төрлийн өгөгдлийн хувьд хамгийн бага ач холбогдол бүхий байт дараалалтай өгөгдлийг унших урсгалыг үүсгэнэ. Дараа нь үүссэн урсгалаас 4 тэмдэгт, 32 битийн бүхэл тоо болон өөр 4 тэмдэгтийг уншина. Үүссэн өгөгдөлд дүн шинжилгээ хийж, шинжилгээний үр дүнд үндэслэн сонгосон файл нь .wav файл мөн эсэх талаар шийдвэр гаргана.

16.3.3. Хоёртын өгөгдөл бичих

Хоёртын өгөгдлийг файлд бичих нь хамгийн энгийн тохиолдолд дараах байдлаар хийгддэг.

Оруулсан = Шинэ WriteData(ФайлынНэр);
Индекс = 0-ээс 255 хүртэлх мөчлөгийн хувьд
Write.WriteByte(Индекс);
Төгсгөлийн мөчлөг;
Record.Close() ;

Энэ жишээ нь файлд 0-ээс 255 хүртэлх байтын дарааллыг бичдэг (0xFF арван арван тоот). Энэ бол хамгийн энгийн бичлэг хийх сонголт юм.
Та мөн өмнөх жишээнд дурдсан унших аргатай төстэй аргыг ашиглаж болно, үүнд файлын урсгалыг олж авч, энэ файлын урсгалд өгөгдөл бичих болно.

16.3.4. Хоёртын өгөгдлийн буфертэй ажиллах

Дээр дурдсанчлан, хоёртын өгөгдлийн буфер нь хоёртын өгөгдлийн фрагментийг удирдахад тохиромжтой арга юм.
Зөвхөн өгөгдлийг уншихаас гадна бичихийг дэмждэг.
Жишээ болгон бид өгөгдөл унших жишээнээс RIFF файлын толгой хэсгийг задлан шинжлэхийг авч үзэх болно (энд харна уу). Жишээ үүсгэхийн тулд файлын форматтай яг ижил мэдээллийг ашиглана. Тиймээс эх файлаас файлын толгойн хэмжээтэй буферийг унших шаардлагатай. Гарчиг нь 4 байт гурван талбараас бүрдэнэ. Тиймээс 12 байт унших шаардлагатай.

Буфер = Шинэ BufferBinaryData(12);
Файл = FileStreams.Open(Түр файлын лавлах() + "Windows Logon.wav", FileOpenMode.Open, FileAccess.Read);
File.Read(Буфер, 0, 12);
Хэмжээ = Buffer.ReadInteger32(4);
StreamString = newStreamInMemory(Буфер);
StreamRows.Go(0, PositionInStream.Start);

Файлын формат = ReadLines.ReadCharacters(4, "windows-1251");
Уншсан мөр. Хаах();
StreamRows.Go(8, PositionInStream.Start);
RowReader = шинэ DataReader(RowStream);
FileType = ReadLines.ReadCharacters( 4, "windows-1251");
Уншсан мөр. Хаах();

Хоёртын өгөгдлийн буферт өгөгдөл оруулах үйл явц нь онцгой зүйл биш юм. Цаашдын үйл ажиллагаа нь зарим тайлбарыг шаарддаг. Буферийн аль ч байрлалаас дэмжигдсэн битийн гүнд байгаа тоонуудыг унших боломжтой. IN энэ жишээнд Buffer.ReadInteger32(4); Энэ нь буферийн 4 байтаас эхлэн 32 битийн бүхэл тоог унших гэсэн үг юм. Тиймээс, хэрэв та буферийн өөр өөр газар байрлах олон тоог унших шаардлагатай бол үүнийг тухайн буферт шууд байршуулахгүйгээр хийж болно.
Харин мөрийг уншихыг хоёртын өгөгдлийн буфер дэмждэггүй. Тиймээс та үүнийг хийх боломжтой объектыг ашиглах хэрэгтэй: Өгөгдлийг унших. DataReader объектыг хоёртын өгөгдлийн буферээс үүсгэх боломжгүй. Гэхдээ хоёртын өгөгдлийн буфер дээр үндэслэн та мэдээллийн физик хадгалах байршил (файл, хоёртын өгөгдлийн буфер) болон энэ өгөгдөлтэй ажиллах боломжийг олгодог өндөр түвшний объектын хооронд бүх нийтийн зуучлагч урсгал үүсгэж болно.
DataReader объектыг урсгал дээр үндэслэн үүсгэх үед энэ нь байгаа байрлалаас өгөгдлийг уншиж эхэлдэг Энэ мөчурсгалд суулгасан. Тиймээс жишээн дээр эхлээд урсгал дахь байрлалыг тохируулж, дараа нь DataReader объектыг үүсгэж, шаардлагатай тооны тэмдэгтүүдийг уншина. Дэлгэрэнгүй тодорхойлолтМөрүүдийг унших үед байт болон тэмдэгтүүдийн тоо хоорондын зөрүүг дараагийн хэсэг 16.3.5-аас үзнэ үү.

16.3.5. Ашиглалтын онцлог

Хоёртын өгөгдлийг ашиглахдаа та String төрлийн өгөгдөлтэй ажиллах онцлогийг анхаарч үзэх хэрэгтэй. Онцлог нь StrLength() глобал контекст функцийн буцаадаг мөрний уртыг тэмдэгтээр хэмждэгт оршино. Хоёртын өгөгдөлтэй ажиллах объектуудад мөр бичих/унших аргуудад унших/бичих өгөгдлийн хэмжээг тэмдэгтээр зааж өгөх ёстой. Тэмдэгтүүдийг унших(),
ReadString(), WriteCharacters(), WriteString()). Гэсэн хэдий ч тэмдэгт дэх мөрийн уртыг байт дахь ижил төстэй параметрт хөрвүүлэх хоёрдмол утгагүй сонголт байдаггүй. Мөрний агуулга болон кодчилолоос хамааран энэ харьцаа өөр байх болно. Тиймээс хувьсах урттай мөрүүдийг агуулсан аливаа өгөгдлийн бүтэцтэй ажиллахдаа мөрийн уртыг ямар нэгжээр илэрхийлж байгааг тодорхой ойлгох хэрэгтэй.
Хэрэв байгаа өгөгдөлд мөрийн уртыг байтаар зааж, мөрийг олон байт хувьсах урттай кодчилолд (жишээлбэл, UTF-8) зааж өгсөн бол хоёртын өгөгдлийн объектуудыг ашиглан ийм бүтцийг файлаас уншиж болно. String төрлийн өгөгдөл нь ерөнхийдөө боломжгүй юм.
Гэхдээ энэ тохиолдолд та файлын урсгал дахь унших/бичих байрлалыг хялбархан өөрчилж болно. Хэрэв мөрийн уртыг тэмдэгтээр зааж өгсөн бол ийм мөрийг String төрлийн өгөгдөл болгон унших боломжтой болох боловч ийм урсгал дахь унших/бичих байрлалыг өөрчлөх боломжгүй болно.
Мөрний уртыг байтаар авахын тулд та мөрийг BinaryData объект руу хөрвүүлэхийн тулд дараах функцийг ашиглаж болно.

Чиг үүрэг Мөрөөс хоёртын өгөгдөл авах(Value StrParameter, Value Encoding = “UTF-8”)
MemoryThread = NewMemoryThread;
Зохиолч = Шинэ WriteData(StreamMemory);
Writer.Write String(StrParameter, кодчилол);
Зохиолч.Хаах();
StreamMemory.CloseAndGetBinaryData-г буцаана();
Төгсгөлийн функц

Функцийн үр дүнд олж авсан BinaryData объект дээрх Size() функцийг дуудаж байтаар илэрхийлсэн бодит хэмжээг олж авч болно.
Объектуудыг нэгэн зэрэг ашиглахыг зөвлөдөггүй Өгөгдөл унших/Өгөгдөл бичихболон урсгал объектууд. Хэрэв ReadData-аас дараалсан хоёр унших үйлдэл эсвэл WriteData руу хоёр дараалсан бичих үйлдлүүдийн хооронд Ch объектуудын ажиллах урсгалын байрлал өөрчлөгдвөл ShadowData/WriteData- үл хамаарах зүйл бий болсон. Тиймээс, урсгал руу өгөгдөл бичих үед урсгал дахь байрлал зөв өөрчлөгдсөнийг дараах жишээ харуулж байна.

Stream = newStreamInMemory();

WriteData.WriteString("Сайн уу Дэлхий!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Баяртай!");
WriteData.Close();
Дараах жишээ нь үл хамаарах зүйлд сайн байна уу:

Урсгал = NewStreamInMemory();

WriteData.WriteString("Сайн уу, дэлхий!");
Stream.Go(0, PositionInStream.Start);
// Дараагийн мөрөнд онцгой тохиолдол гарна
WriteData.WriteString("Баяртай!");
Үүний зэрэгцээ, системийн үйл ажиллагаа буруу байх нөхцөл байдал боломжтой боловч алдаа гарахгүй.

Урсгал = GetStream();
ReadData = шинэ ReadData(Stream);
TestString = ReadData.Read();
InitialPosition = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Гэнэтийн мөр");
WriteData.Close();
Stream.Go(InitialPosition, PositionInStream.Start);
// Ерөнхийдөө TestString2 хувьсагчид ямар утгыг байрлуулахыг тодорхойлох боломжгүй
TestLine2 = ReadData.ReadLine();

Энэ хэсэгт тайлбарласан зан үйлийн шалтгаан нь o Data Reader/Data Writer объектууд урсгалтай ажиллахдаа өөрийн буферийг ашигладаг. Үүний үр дүнд утаснуудын бодит байрлал нь дууссан үйлдлүүдийн үр дүнд үүссэн логик байрлалаас ялгаатай байна.
Мөн ажилдаа нэг урсгалыг ашигладаг Data Reader болон Data Writer объектуудыг нэгэн зэрэг ашиглахыг дэмждэггүй.

1C: Enterprise 8 технологийн платформ нь мэдээллийн санд дурын файлуудыг хадгалах, тэндээс татаж авах, ашиглах боломжийг олгодог. янз бүрийн арга замууд. Эдгээр үйлдлүүдийг жишээн дээр авч үзье.

1С мэдээллийн санд файл байршуулахаас өмнө та диск дээрх файлын бүрэн хаягийг авах хэрэгтэй. Файл сонгох харилцах цонхтой ажиллахыг -д тайлбарласан болно.

Файлуудыг хадгалахын тулд төрөл бүхий атрибут (эсвэл бүртгэлийн нөөц) ашиглана уу Хадгалах үнэ цэнэ.

1С мэдээллийн санд дурын файл байршуулах

Аливаа файлыг хоёртын өгөгдөл хэлбэрээр дүрсэлж, ачаалж болно Үнэ цэнэ хадгалах.

Хоёртын өгөгдлийг объект руу хөрвүүлэх үед Хадгалах үнэ цэнэашигласан загвар шинэ Хадгалах Утга (Өгөгдөл, Шахалт)хоёр параметртэй:

  1. Өгөгдөл— Хадгалахад хадгалах шаардлагатай хоёртын өгөгдөл
  2. Шахах— Дефляцийн алгоритмын шахалтын харьцаа. -1...9 муж дахь бүхэл тоо. -1 нь анхдагч шахалтын түвшин юм. 0 - шахалт байхгүй, 9 - хамгийн их шахалт. Өгөгдмөл утга: -1. Параметр нь сонголттой, хэрэв заагаагүй бол шахалтыг ашиглахгүй.

//Файлыг хоёртын өгөгдөл болгон хөрвүүлнэ
Файл = Шинэ хоёртын өгөгдөл(зам);

//Үнэ хадгалах шинэ объект үүсгэнэ

DataStorage = NewValueStorage(Файл, NewDataCompression(9) );

1С мэдээллийн сангаас дурын файлыг диск рүү хадгалах

1С мэдээллийн сангаас диск рүү файл хадгалахын тулд та зам, файлын нэрийг тодорхойлох хэрэгтэй. Үүнийг хийхийн тулд файл хадгалах харилцах цонх байдаг бөгөөд үүнтэй ажиллах талаар тайлбарласан болно.

//Хадгалах сангаас хоёртын өгөгдөл авах
//Өгөгдлийн хадгалалт - Утга хадгалах төрөл бүхий объектын шинж чанар

//Хүлээн авсан өгөгдлийг дискэнд бичнэ
//IN хувьсах замнь дискэн дээрх файлын бүрэн хаяг юм
Өгөгдөл. Бичих (зам);

1С мэдээллийн санд байрлах файлыг үзэх

Өгөгдлийн санд хадгалагдсан файлыг үзэхийн тулд таны компьютерт уг файлыг нээх програм суулгасан байх ёстой.

//Шаардлагатай өргөтгөлтэй түр файлын нэрийг авна
//Өргөтгөлийн хувьсагчид файлын өргөтгөлийг оруулах хэрэгтэй, жишээ нь "pdf"
Зам = GetTemporaryFileName(Өргөтгөл) ;

// Хадгалалтаас өгөгдөл хүлээн авах
//Өгөгдлийн хадгалалт - Утга хадгалах төрөл бүхий объектын шинж чанар
Өгөгдөл = Өгөгдлийн сан. Get();

//Түр файлд өгөгдөл бичих
Өгөгдөл. Бичих (зам);

//Зориулалтын программ дахь файлыг нээхийг оролдож байна
//Хэрэв програм олдохгүй бол "Нээх..." системийн харилцах цонх гарч ирнэ.
LaunchApplication(Path);

Бараг бүх мэдээллийг үнэ цэнийн дэлгүүрт хадгалах боломжтой, жишээлбэл.

... зураг (зураг):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Objects-ийн нэмэлт мэдээллийн төрлүүд.Image; Хадгалалт = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// энэ газар бүх зүйлийг харуулдаг... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

... хүснэгтийн баримт бичиг:

TabDoc=Шинэ хүснэгт баримт; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); бичих();

Процедурын төгсгөл

Хадгалалтаас сэргээх процедур(элемент)

TabDoc=Storage.Get(); Хэрэв TabDoc<>Тодорхойлогдоогүй ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Процедурын төгсгөл

... дурын файлууд (хоёртын өгөгдөл):

XZ = NewValueStorage(NewBinaryData(файл));

Найман нь хадгалалтанд байрлуулсан өгөгдлийг шахахыг дэмждэг:

XZ = NewValueStorage(NewBinaryData(файл),NewDataCompression(9));

... гадаад боловсруулалт ба тайлагнах:

LoadProcessingIntoStorage(PropsStorageType) журам

CompressionRate = NewDataCompression(9); //9 хамгийн их PropsStorageType = Шинэ StorageValues(New BinaryData("c:\reports\report.epf", Шахалтын харьцаа));

Процедурын төгсгөл

ProcessingFromStorage(PropsStorageType) процессыг эхлүүлэх журам

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

Процедурын төгсгөл

Хадгалалттай ажиллах

Хэрэв энэ нь хоёртын өгөгдөл байсан бол Get аргыг ашиглан утгын сангаас сэргээж Write() аргыг ашиглан файлд бичиж болно.

Хэрэв TypeValue(Хадгалах)<>Дараа нь ("BinaryData") бичнэ үү

BinaryData = Storage.Get();

BinaryData = Хадгалах;

endIf; BinaryData.Write(ФайлынНэр);

Хэрэв энэ нь жишээ нь Word баримт (doc файл эсвэл өөр бүртгэгдсэн файлын төрөл) байсан бол үүнийг дараах байдлаар нээж болно.

LaunchApplication(ФайлынНэр);

Value Storage төрлийн талбарыг арилгахын тулд та тодорхойгүй гэж оноох хэрэгтэй:

PropsStorage = Тодорхойгүй;

1С: Enterprise 8-д суурилагдсан хэл дээр файл, зурагтай ажиллах

Зорилго

Удирддаг програм нь файлуудтай ажиллах шинэ механизмыг хэрэгжүүлдэг. Энэ нь мэдээллийн бааз болон клиент програмын хооронд файл солилцох боломжийг олгодог. Онцлог энэ механизм-д ашиглах зорилготой юм нимгэн үйлчлүүлэгчболон Вэб клиент ба вэб хөтчөөс тогтоосон файлтай харьцах хязгаарлалтыг харгалзан үзэх зорилготой юм.

Механизм нь хэрэглэгчийн дотооддоо хадгалсан өгөгдлийг түр хадгалах санд байрлуулахад ашиглаж болох аргуудын багц юм мэдээллийн бааз, энэ мэдээллийг түр хадгалах сангаас мэдээллийн сан руу шилжүүлж, хэрэглэгчийн компьютерт буцааж авах боломжтой. Энэхүү механизмаар шийдэгддэг хэрэглээний хамгийн нийтлэг асуудал бол дагалдах мэдээллийг хадгалах, жишээлбэл, барааны зураг, гэрээтэй холбоотой баримт бичиг гэх мэт.

Аргын хамрах хүрээ

Түр хадгалах

Түр хадгалалт гэдэг нь хоёртын өгөгдлийг байрлуулах мэдээллийн баазын тусгай хэсэг юм. Гол зорилго нь өгөгдлийн санд шилжүүлэхээс өмнө үйлчлүүлэгч серверийн харилцан үйлчлэлийн явцад мэдээллийг түр хадгалах явдал юм.

Вэб хөтчийн үйлдлийн загвар нь хэрэглэгчийн сонгосон файлыг клиент дээр хадгалахгүйгээр шууд сервер рүү шилжүүлэхийг шаарддаг тул түр хадгалах хэрэгцээ үүсдэг. Файлыг шилжүүлэхдээ түр хадгалах санд байрлуулж, дараа нь өгөгдлийн санд объект бичихэд ашиглаж болно.

Түр хадгалах замаар шийдэгддэг хамгийн ердийн хэрэглээний ажил бол объектыг мэдээллийн санд, жишээлбэл, элемент хэлбэрээр бүртгэхээс өмнө файл эсвэл зураг руу нэвтрэх боломжийг олгодог.

Хадгалалтад байрлуулсан файл эсвэл хоёртын өгөгдөл нь өвөрмөц хаягаар тодорхойлогддог бөгөөд үүнийг дараа нь бичих, унших, устгах үйлдлүүдэд ашиглаж болно. Энэ хаягийг түр санах ойд файл бичих аргуудаар өгдөг. Суурилуулсан хэл дээрх тусдаа арга нь дамжуулсан хаяг нь түр хадгалалтанд байгаа өгөгдлийг зааж буй хаяг мөн эсэхийг тодорхойлох боломжийг олгодог.

Мэдээллийн бааз

Энэхүү механизм нь танд Value Storage төрлийн шинж чанаруудад хадгалагдсан хоёртын өгөгдөлд хандах боломжийг олгодог.

Түр хадгалалтын хувьд тусгай хаягаар дамжуулан мэдээлэл авах боломжтой. Та объект руу холбоос эсвэл мэдээллийн бүртгэлийн оруулах түлхүүр, атрибутын нэрийг дамжуулж тусгай аргаар авч болно. Хүснэгтийн хэсгийн хувьд хүснэгтийн хэсгийн эгнээний индексийг шилжүүлэх шаардлагатай.

Файлтай ажиллах аргууд нь мэдээллийн сангийн дэлгэрэнгүй мэдээлэлтэй ажиллахад хязгаарлалттай байдаг. Тэдний хувьд түр хадгалалтаас ялгаатай нь зөвхөн унших мэдээлэл байдаг ч бичих, устгах боломжгүй.

Файлуудтай ажиллах аргуудын тодорхойлолт

Өгөгдлийг түр хадгалах санд хадгалж байна

Энэ механизмыг ашиглах хамгийн ердийн хувилбар нь эхлээд хэрэглэгчийн өгөгдлийг түр хадгалалтад байрлуулах явдал юм. Үүнд хоёр арга бий: PlaceFile() болон PlaceFileInTemporaryStorage().

Эхний арга болох PlaceFile() нь локал файлын системээс файлыг түр хадгалах санд байрлуулдаг. Энэ арга нь хадгалалт дахь зорилтот хаягийг хүлээн авах боломжтой. Хэрэв энэ нь тодорхойлогдоогүй эсвэл байгаа бол хоосон мөр, дараа нь шинэ файл үүсгэх бөгөөд арга нь харгалзах параметрээр хаягаа буцаана.

Үйлдлийн интерактив горимыг тодорхойлох параметр нь Үнэн бол арга нь стандарт файл сонгох харилцах цонхыг харуулах бөгөөд та хадгалахад байрлуулах файлыг сонгох боломжтой. Энэ тохиолдолд арга нь сонгосон файлын хаягийг мөн буцаана.

Үүний үр дүнд хэрэглэгч файл сонгох харилцах цонхонд үйлдлийг гүйцэтгэхээс харилцан татгалзсан тохиолдолд арга нь худал буцаана. Энэ аргыг зөвхөн үйлчлүүлэгчид ашиглах боломжтой.

Хоёрдахь арга болох PlaceFileInTemporaryStorage() нь өмнөх аргатай төстэй бөгөөд энэ нь сервер дээр байгаа бөгөөд түр санах ойд бичих өгөгдөл нь файлын систем дэх зам хэлбэрээр биш, харин дараах байдлаар илэрхийлэгддэг. хувьсах төрөлХоёртын өгөгдөл. Үүний нэгэн адил, хэрэв зорилтот хаягийг заагаагүй бол хадгалах санд шинэ файл үүсгэгдэнэ. Функцийн үр дүнд түүний хаягийг буцаана.

Түр хадгалах сангаас файл татаж байна

Мэдээллийн санд объект бичихдээ та түр хадгалах сангаас өгөгдлийг гаргаж аваад, жишээлбэл, атрибутт байрлуулах хэрэгтэй. Үүнд тохирох серверийн арга байдаг - GetFileFromTemporaryStorage(). Энэ арга нь түр хадгалах сангаас өгөгдлийг татаж, үр дүнд нь буцааж өгдөг. Үүнийг хийхийн тулд та түр хадгалах хаягийг зааж өгөх хэрэгтэй. Энэ хаягийг дээр дурдсан PlaceFile() болон PlaceFileInTemporaryStorage() аргууд амжилттай гүйцэтгэсэн тохиолдолд буцаана.

Түр хадгалах сангаас файл устгаж байна

Өгөгдлийг дэлгэрэнгүй мэдээлэлд хадгалсны дараа түр хадгалалтын файлыг устгаж болно. Энэ зорилгоор түр хадгалах сангаас файлыг устгадаг DeleteFileFromTemporaryStorage() арга байдаг. Энэ арга нь түр хадгалалтанд байгаа файлын хаягийг параметр болгон авдаг. Сервер дээр ашиглах боломжтой.

Түр хадгалах хаягийг шалгаж байна

Файлын хаяг нь түр хадгалах газар болон мэдээллийн сан дахь дэлгэрэнгүй мэдээллийг хоёуланг нь зааж өгч болно. Түүний төрлийг шалгахын тулд This isTemporaryStorageAddress() арга байдаг.

Энэ нь дамжуулсан хаяг нь дэлгүүрийг зааж байгаа хаяг эсэхийг шалгадаг. Хэрэв хаяг түр хадгалах газрыг зааж байвал Үнэнийг буцаана. Энэ аргыг сервер дээр ашиглах боломжтой.

Таягны хаягийг хүлээн авч байна

Мэдээллийг мэдээллийн сан дахь дэлгэрэнгүй мэдээлэлд оруулсны дараа та файлын аргуудыг ашиглан хандах шаардлагатай болж магадгүй юм.

Гэхдээ та үл хөдлөх хөрөнгө гэх мэт өгөгдөл хүлээн авахаасаа өмнө энэ үл хөдлөх хөрөнгийн хаягийг авах хэрэгтэй. Энэ зорилгоор GetFileAddressInInformationBase() арга байдаг.

Үүний зорилго нь мэдээллийн сан дахь файлын хаягийг анхны параметрийн дагуу буцаах явдал юм. Үүнийг хийхийн тулд та объектын түлхүүр (энэ нь объект руу холбох холбоос эсвэл мэдээллийн бүртгэлийн түлхүүр байж болно) болон атрибутын нэрийг дамжуулах хэрэгтэй. Хэрэв та хүснэгтийн хэсгийн атрибутт хадгалагдсан файлын хаягийг авах шаардлагатай бол атрибутын нэрийг зааж өгсөн параметр дэх атрибутын нэрийн өмнө хүснэгтийн хэсгийн нэр болон "." гэсэн цэг нэмэх шаардлагатай. Энэ аргыг үйлчлүүлэгч болон сервер дээр ашиглах боломжтой.

Мэдээллийн сангаас файл татаж байна

GetFile() арга нь мэдээллийн сангаас файлыг хүлээн авч, локал руу хадгалдаг Файлын системхэрэглэгч. Эхний параметр нь тулгуур эсвэл түр файлын хадгалалтын файлын хаягийг зааж өгдөг. Хоёрдахь параметр нь үүссэн файлын очих байршлыг тодорхойлдог. Интерактив бус горимд та замыг зааж өгөх ёстой. Интерактив горимд параметр нь нэмэлт юм.

Анхдагч байдлаар, аргыг интерактив горимд гүйцэтгэдэг, өөрөөр хэлбэл сүүлчийн параметр нь Үнэн юм. Энэ нь хүлээн авсан файлын үйлдлийг зааж өгөх харилцах цонх гарч ирнэ гэсэн үг юм: үүнийг ажиллуулах эсвэл хэрэглэгчийн заасан байршилд хадгалах. Хэрэв интерактив горим идэвхтэй бөгөөд Зорилтот дискний файлын замын параметрийг заагаагүй бол файлыг нээх үйл ажиллагаа боломжгүй болно. Булийн утгыг буцаана. Худал гэдэг нь хэрэглэгч интерактив файл хадгалах харилцах цонхны үйлдлийг цуцлахаар сонгосон гэсэн үг.

Файлын аргыг ашиглах жишээ

// Интерактив горимд дискнээс файл хүлээн авч // түр хадгалах санд &Client Procedure SelectDiskFileAndWrite() дээр байрлуулах

Сонгосон нэр хувьсагч; VariableTemporaryStorageAddress; Хэрэв PutFile(TemporaryStorageAddress, SelectedName, True) бол Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Процедурын төгсгөл

// Түр хадгалах сангаас файлыг директор руу хуулах // атрибут бичих, файлыг түр // хадгалах сангаас устгах & Серверийн процедур дээр Объект файлыг байрлуулах (Түр хадгалах хаяг)

Лавлах элемент = Form AttributesValue("Объект"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Шинэ Файл(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Лавлах элемент.Write(); Өөрчлөгдсөн = Худал; FileFromTemporaryStorage-аас устгах(TemporaryStorageAddress); ValueВFormAttributes(Лавлах элемент, "Объект");

Процедурын төгсгөл

// Файлыг тулгуураас уншиж, // руу хадгалах локал дискинтерактив горимд & Үйлчлүүлэгчийн Процедур дээр ReadFileAndSaveToDisk()

Хаяг = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Хаяг, Объект. ФайлынНэр, Үнэн);

Процедурын төгсгөл

Зургийн талбар дахь хаягуудыг дэмжих

Зургийн талбарын удирдлага нь түр хадгалах эсвэл мэдээллийн санд байгаа файлын хаягаар заасан зургийг харуулахыг дэмждэг.

Үүнийг хийхийн тулд та маягтын элементийн Data шинж чанарт атрибутыг тохируулах ёстой мөрний төрөл. Энэ шинж чанарын утгыг зургийн хаяг гэж тайлбарлах болно.

Жишээ // Зургийн талбарыг түр зуурын // хадгалах зургийн хаягтай холбох. AddressPictures нь мөрийн төрлийн дэлгэрэнгүй мэдээллийг үүсгэдэг

PlaceFile(Зургийн хаяг, үнэн)

Picture.Data = AddressPictures

Вэб үйлчлүүлэгчтэй ажиллахад тавигдах хязгаарлалтууд

Вэб клиентийг ашиглах үед тайлбарласан механизмын ажиллагаа нь зарим хязгаарлалттай байдаг. Эдгээр хязгаарлалтууд нь хөтчийн аюулгүй байдлын загвартай холбоотой. Жишээлбэл, үйлчлүүлэгч локал файлын системд файлыг бие даан хадгалах боломжгүй, өөрөөр хэлбэл зөвхөн PlaceFile() болон GetFile() клиент аргуудын интерактив хувилбарыг ашиглах боломжтой. Интерактив бус горимыг ашиглахыг оролдох үед онцгой тохиолдол гардаг. Харилцах цонхнууд, интерактив байдлаар харуулсан нь тухайн хөтөчийн төрөлд зориулагдсан.

Үйлчлүүлэгч дээр Value Storage-тэй ажиллах үеийн онцлогууд

Асуудал:

Баримт бичиг нь хүснэгтийн хэсэгт үнэ цэнийн хадгалалтын төрлийн шинж чанартай байвал энэ шинж чанар нь их хэмжээний өгөгдөл агуулж байвал баримт бичгийн маягтыг нээхийг удаашруулдаг.

Боломжит шалтгаан:

Маягтыг нээхдээ энэ нь үйлчлүүлэгч рүү илгээсэн Үнэт зүйлийн дэлгүүрт байгаа өгөгдлийн холбоос биш харин өгөгдөл өөрөө юм.

Шийдэл

  • Маягтын хүснэгтийн атрибутын шинж чанарт "Үргэлж ашиглах" гэсэн туг байдаг. Хэрэв үүнийг тохируулсан бол талбарын агуулгыг сервер болон үйлчлүүлэгчийн хооронд үргэлж шилжүүлдэг - жишээлбэл маягт нээх үед. Энэ тугийг идэвхгүй болгох ёстой, гэхдээ үүнийг кодонд анхаарч үзэх хэрэгтэй, учир нь анхдагчаар үйлчлүүлэгч дээр энэ талбарт ямар ч утга байхгүй болно. Жишээ нь 1С: Архиваас олж болно.

Үүнийг ашиглах нь бүр ч дээр юм түр хадгалахүйлчлүүлэгч болон сервер хооронд файл дамжуулах.