মান সঞ্চয়স্থান 1s 8.3 থেকে ডেটা গ্রহণ করুন। ওয়েব ক্লায়েন্টের সাথে কাজ করার সময় সীমাবদ্ধতা

প্রায় যেকোনো তথ্য একটি মূল্যের দোকানে সংরক্ষণ করা যেতে পারে, যেমন

... ছবি (ছবি):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of extra Information of Objects.Image; স্টোরেজ = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// এই জায়গায় এটি সবকিছু প্রদর্শন করে... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...স্প্রেডশীট নথি:

TabDoc=New TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); সঞ্চয়স্থান=NewValueStorage(TabDoc); লিখুন();

প্রক্রিয়া শেষ

স্টোরেজপ্রেস থেকে পদ্ধতি পুনরুদ্ধার (এলিমেন্ট)

TabDoc=Storage.Get(); যদি TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); যদি শেষ;

প্রক্রিয়া শেষ

...অবিট্রেরি ফাইল (বাইনারী ডেটা):

XZ = NewValueStorage(NewBinaryData(file));

আটটি স্টোরেজে রাখা ডেটার কম্প্রেশন সমর্থন করে:

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

... বাহ্যিক প্রক্রিয়াকরণ এবং রিপোর্টিং:

প্রক্রিয়া লোডপ্রসেসিংইনটোস্টোরেজ(প্রপসস্টোরেজ টাইপ)

কম্প্রেশন রেট = NewDataCompression(9); //9 সর্বাধিক PropsStorageType = নতুন স্টোরেজ ভ্যালুস(নতুন বাইনারি ডেটা("c:\reports\report.epf", কম্প্রেশন রেট));

প্রক্রিয়া শেষ

প্রসিডিউর স্টার্টপ্রসেসিং ফ্রম স্টোরেজ(প্রপসস্টোরেজ টাইপ)

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 = Storage;

যদি শেষ; BinaryData.Write(FileName);

যদি এটি ছিল, উদাহরণস্বরূপ, একটি Word নথি (ডক ফাইল, বা অন্যান্য নিবন্ধিত ফাইল প্রকার), তাহলে এটি এভাবে খোলা যেতে পারে:

লঞ্চ অ্যাপ্লিকেশন (ফাইলের নাম);

ভ্যালু স্টোরেজ টাইপের একটি ক্ষেত্র সাফ করতে, আপনাকে এটিকে অনির্ধারিত বরাদ্দ করতে হবে:

প্রপসস্টোরেজ = Undefined;

অন্তর্নির্মিত ভাষা 1C: এন্টারপ্রাইজ 8-এ ফাইল এবং ছবি নিয়ে কাজ করা

উদ্দেশ্য

পরিচালিত অ্যাপ্লিকেশন ফাইলগুলির সাথে কাজ করার জন্য একটি নতুন প্রক্রিয়া প্রয়োগ করে। এটি ইনফোবেস এবং ক্লায়েন্ট অ্যাপ্লিকেশনের মধ্যে ফাইল বিনিময় প্রদান করে। এই প্রক্রিয়াটির বিশেষত্ব হল এটি একটি পাতলা ক্লায়েন্ট এবং একটি ওয়েব ক্লায়েন্ট ব্যবহারের জন্য ডিজাইন করা হয়েছে এবং ওয়েব ব্রাউজার দ্বারা আরোপিত ফাইলগুলির সাথে কাজ করার উপর বিধিনিষেধ বিবেচনা করে ডিজাইন করা হয়েছে।

মেকানিজম হল পদ্ধতির একটি সেট যা ব্যবহারকারীর কম্পিউটারে স্থানীয়ভাবে সংরক্ষিত ডেটা তথ্য বেসের একটি অস্থায়ী সঞ্চয়স্থানে স্থাপন করতে, এই তথ্যটি অস্থায়ী স্টোরেজ থেকে ডাটাবেসে স্থানান্তর করতে এবং ব্যবহারকারীর কম্পিউটারে ফেরত পাঠাতে ব্যবহার করা যেতে পারে। এই প্রক্রিয়া দ্বারা সমাধান করা সবচেয়ে সাধারণ অ্যাপ্লিকেশন সমস্যাগুলি হল সহগামী তথ্যের সঞ্চয়স্থান, উদাহরণস্বরূপ, পণ্যের ছবি, চুক্তি সম্পর্কিত নথি ইত্যাদি।

পদ্ধতির সুযোগ

অস্থায়ী স্টোরেজ

অস্থায়ী স্টোরেজ তথ্য বেসের একটি বিশেষ এলাকা যেখানে বাইনারি ডেটা স্থাপন করা যেতে পারে। মূল উদ্দেশ্য হল ক্লায়েন্ট-সার্ভার ইন্টারঅ্যাকশনের সময় তথ্যের অস্থায়ী স্টোরেজ ডাটাবেসে স্থানান্তর করার আগে।

অস্থায়ী স্টোরেজের প্রয়োজনীয়তা দেখা দেয় কারণ ওয়েব ব্রাউজার অপারেটিং মডেলের প্রয়োজন হয় যে ব্যবহারকারী-নির্বাচিত ফাইলটি ক্লায়েন্টে সংরক্ষণ করার সম্ভাবনা ছাড়াই সরাসরি সার্ভারে স্থানান্তরিত করা হয়। যখন একটি ফাইল স্থানান্তর করা হয়, তখন এটি অস্থায়ী স্টোরেজে রাখা হয় এবং তারপর ডাটাবেসে একটি বস্তু লেখার সময় ব্যবহার করা যেতে পারে।

অস্থায়ী স্টোরেজ দ্বারা সমাধান করা সবচেয়ে সাধারণ অ্যাপ্লিকেশন টাস্ক হল তথ্য বেসে বস্তুটি রেকর্ড করার আগে ফাইল বা ছবিতে অ্যাক্সেস প্রদান করা, উদাহরণস্বরূপ, একটি উপাদানের আকারে।

স্টোরেজে রাখা একটি ফাইল বা বাইনারি ডেটা একটি অনন্য ঠিকানা দ্বারা চিহ্নিত করা হয়, যা পরে লেখা, পড়া বা মুছে ফেলার কাজে ব্যবহার করা যেতে পারে। এই ঠিকানাটি অস্থায়ী সঞ্চয়স্থানে একটি ফাইল লেখার পদ্ধতি দ্বারা দেওয়া হয়। অন্তর্নির্মিত ভাষায় একটি পৃথক পদ্ধতি আপনাকে পাস করা ঠিকানাটি অস্থায়ী সঞ্চয়স্থানে ডেটা নির্দেশ করে এমন একটি ঠিকানা কিনা তা নির্ধারণ করতে দেয়।

তথ্য ভিত্তি

মেকানিজম আপনাকে ভ্যালু স্টোরেজ টাইপের অ্যাট্রিবিউটে সংরক্ষিত বাইনারি ডেটা অ্যাক্সেস করতে দেয়।

অস্থায়ী সঞ্চয়ের ক্ষেত্রে যেমন, একটি বিশেষ ঠিকানার মাধ্যমে তথ্য অ্যাক্সেস করা সম্ভব। আপনি একটি বস্তুর একটি লিঙ্ক বা একটি তথ্য নিবন্ধন এন্ট্রি কী, এবং বৈশিষ্ট্যের নাম পাস করে একটি বিশেষ পদ্ধতির মাধ্যমে এটি পেতে পারেন। একটি সারণী অংশের ক্ষেত্রে, এটি অতিরিক্তভাবে সারণী অংশের সারি সূচক স্থানান্তর করা প্রয়োজন।

ইনফোবেস বিশদগুলির সাথে কাজ করার সময় ফাইলগুলির সাথে কাজ করার পদ্ধতিগুলির সীমাবদ্ধতা রয়েছে৷ তাদের জন্য, অস্থায়ী স্টোরেজ থেকে ভিন্ন, শুধুমাত্র পড়ার তথ্য পাওয়া যায়, কিন্তু লেখা বা মুছে ফেলা হয় না।

ফাইলের সাথে কাজ করার পদ্ধতির বর্ণনা

অস্থায়ী স্টোরেজে ডেটা সংরক্ষণ করা হচ্ছে

এই প্রক্রিয়াটি ব্যবহার করার জন্য সবচেয়ে সাধারণ দৃশ্যের মধ্যে প্রাথমিকভাবে ব্যবহারকারীর ডেটা অস্থায়ী স্টোরেজে রাখা জড়িত। এর জন্য দুটি পদ্ধতি রয়েছে: PlaceFile() এবং PlaceFileInTemporaryStorage()।

প্রথম পদ্ধতি, PlaceFile(), স্থানীয় ফাইল সিস্টেম থেকে একটি ফাইলকে অস্থায়ী স্টোরেজে রাখে। পদ্ধতিটি স্টোরেজে একটি লক্ষ্য ঠিকানা গ্রহণ করতে পারে। যদি এটি সংজ্ঞায়িত না হয় বা একটি খালি স্ট্রিং হয়, তাহলে একটি নতুন ফাইল তৈরি করা হবে এবং পদ্ধতিটি সংশ্লিষ্ট প্যারামিটারের মাধ্যমে তার ঠিকানা ফেরত দেবে।

যদি অপারেশনের ইন্টারেক্টিভ মোড নির্ধারণ করে এমন প্যারামিটারটি সত্য হয়, তাহলে পদ্ধতিটি একটি স্ট্যান্ডার্ড ফাইল নির্বাচন ডায়ালগ বক্স প্রদর্শন করবে যেখানে আপনি স্টোরেজে রাখার জন্য একটি ফাইল নির্বাচন করতে পারেন। এই ক্ষেত্রে, পদ্ধতিটি নির্বাচিত ফাইলের ঠিকানাও ফেরত দেবে।

ফলস্বরূপ, যদি ব্যবহারকারী ইন্টারেক্টিভভাবে ফাইল নির্বাচন ডায়ালগে একটি অপারেশন সম্পাদন করতে অস্বীকার করে তবে পদ্ধতিটি False প্রদান করে। পদ্ধতি শুধুমাত্র ক্লায়েন্ট উপলব্ধ.

দ্বিতীয় পদ্ধতি, PlaceFileInTemporaryStorage(), পূর্ববর্তী পদ্ধতির মতই, এটি সার্ভারে উপলব্ধ, এবং অস্থায়ী সঞ্চয়স্থানে যে ডেটা লিখতে হবে তা ফাইল সিস্টেমের একটি পাথ হিসাবে নয়, টাইপের একটি পরিবর্তনশীল হিসাবে উপস্থাপন করা হয়। বাইনারি ডেটা। একইভাবে, যদি কোন টার্গেট অ্যাড্রেস নির্দিষ্ট করা না থাকে, স্টোরেজে একটি নতুন ফাইল তৈরি করা হয়। ফাংশনের ফলাফল হিসাবে এর ঠিকানা ফেরত দেওয়া হয়।

অস্থায়ী স্টোরেজ থেকে একটি ফাইল পুনরুদ্ধার করা হচ্ছে

ইনফোবেসে একটি বস্তু লেখার সময়, আপনাকে অস্থায়ী স্টোরেজ থেকে ডেটা বের করতে হবে এবং এটি স্থাপন করতে হবে, উদাহরণস্বরূপ, একটি বৈশিষ্ট্যে। এর জন্য একটি সংশ্লিষ্ট সার্ভার পদ্ধতি রয়েছে - GetFileFromTemporaryStorage()। এই পদ্ধতিটি অস্থায়ী স্টোরেজ থেকে ডেটা পুনরুদ্ধার করে এবং ফলস্বরূপ এটি ফেরত দেয়। এটি করার জন্য, আপনাকে অস্থায়ী সঞ্চয়স্থানে ঠিকানা উল্লেখ করতে হবে। এই ঠিকানাটি উপরে বর্ণিত পদ্ধতিগুলি দ্বারা ফেরত দেওয়া হয় PlaceFile() এবং PlaceFileInTemporaryStorage() যদি সেগুলি সফলভাবে কার্যকর করা হয়।

অস্থায়ী স্টোরেজ থেকে একটি ফাইল মুছে ফেলা হচ্ছে

বিশদে ডেটা সংরক্ষণ করার পরে, অস্থায়ী স্টোরেজে থাকা ফাইলটি মুছে ফেলা যেতে পারে। এই উদ্দেশ্যে, একটি পদ্ধতি আছে DeleteFileFromTemporaryStorage(), যা অস্থায়ী স্টোরেজ থেকে একটি ফাইল মুছে দেয়। পদ্ধতিটি অস্থায়ী সঞ্চয়স্থানে একটি ফাইলের ঠিকানা প্যারামিটার হিসাবে নেয়। সার্ভারে উপলব্ধ।

অস্থায়ী স্টোরেজ জন্য ঠিকানা পরীক্ষা করা হচ্ছে

ফাইলের ঠিকানা ইনফোবেসে অস্থায়ী সঞ্চয়স্থান এবং বিবরণ উভয়ই নির্দেশ করতে পারে। এটির ধরন পরীক্ষা করার জন্য, একটি পদ্ধতি রয়েছে This isTemporaryStorageAddress()।

এটি পরীক্ষা করে যে পাস করা ঠিকানাটি দোকানের দিকে নির্দেশ করে এমন একটি ঠিকানা। ঠিকানাটি অস্থায়ী সঞ্চয়স্থানের দিকে নির্দেশ করলে সত্য ফেরত দেয়। পদ্ধতিটি সার্ভারে উপলব্ধ।

প্রপস ঠিকানা গ্রহণ

তথ্য ইনফোবেসে বিশদ বিবরণে স্থাপন করার পরে, আপনাকে ফাইল পদ্ধতি ব্যবহার করে এটি অ্যাক্সেস করতে হতে পারে।

কিন্তু আপনি ডেটা পাওয়ার আগে, উদাহরণস্বরূপ একটি সম্পত্তি থেকে, আপনাকে এই সম্পত্তির ঠিকানা পেতে হবে। এই উদ্দেশ্যে, একটি পদ্ধতি আছে GetFileAddressInInformationBase()।

এর উদ্দেশ্য হল মূল প্যারামিটার অনুযায়ী ইনফোবেসে ফাইলের ঠিকানা ফেরত দেওয়া। এটি করার জন্য, আপনাকে অবজেক্ট কী পাস করতে হবে (এটি হয় বস্তুর একটি লিঙ্ক বা তথ্য নিবন্ধন এন্ট্রি কী হতে পারে) এবং বৈশিষ্ট্যের নাম। আপনি যদি একটি ট্যাবুলার অংশ অ্যাট্রিবিউটে সংরক্ষিত ফাইলের ঠিকানা পেতে চান, প্যারামিটারে অ্যাট্রিবিউট নামের আগে অ্যাট্রিবিউটের নাম উল্লেখ করে, আপনাকে ট্যাবুলার অংশের নাম এবং একটি বিন্দু যোগ করতে হবে। পদ্ধতিটি ক্লায়েন্ট এবং সার্ভার উভয়েই উপলব্ধ।

ইনফোবেস থেকে একটি ফাইল পুনরুদ্ধার করা হচ্ছে

GetFile() পদ্ধতি ইনফোবেস থেকে একটি ফাইল গ্রহণ করে এবং ব্যবহারকারীর স্থানীয় ফাইল সিস্টেমে সংরক্ষণ করে। প্রথম প্যারামিটারটি প্রপস বা অস্থায়ী ফাইল স্টোরেজে ফাইলের ঠিকানা নির্দিষ্ট করে। দ্বিতীয় পরামিতি ফলাফল ফাইলের গন্তব্য অবস্থান নির্দিষ্ট করে। অ-ইন্টারেক্টিভ মোডে, আপনাকে অবশ্যই পাথ নির্দিষ্ট করতে হবে। ইন্টারেক্টিভ মোডে, প্যারামিটারটি ঐচ্ছিক।

ডিফল্টরূপে, পদ্ধতিটি ইন্টারেক্টিভ মোডে কার্যকর করা হয়, অর্থাৎ, শেষ পরামিতিটি সত্য। এর মানে হল একটি ডায়ালগ বক্স প্রদর্শিত হয় যেখানে আপনি প্রাপ্ত ফাইলের সাথে একটি ক্রিয়া নির্দিষ্ট করতে পারেন: এটি চালান বা ব্যবহারকারী-নির্দিষ্ট অবস্থানে সংরক্ষণ করুন। ইন্টারেক্টিভ মোড সক্রিয় থাকলে এবং টার্গেট ডিস্ক ফাইল পাথ প্যারামিটার নির্দিষ্ট না থাকলে, ফাইল ওপেন অপারেশন উপলব্ধ নয়। একটি বুলিয়ান মান প্রদান করে। False মানে ব্যবহারকারী ইন্টারেক্টিভ সেভ ফাইল ডায়ালগ বক্সে অপারেশন বাতিল করতে বেছে নিয়েছেন।

ফাইল পদ্ধতি ব্যবহার করার উদাহরণ

// ইন্টারেক্টিভ মোডে ডিস্ক থেকে একটি ফাইল গ্রহণ করা // এবং এটিকে অস্থায়ী সঞ্চয়স্থানে স্থাপন করা এবং ক্লায়েন্ট পদ্ধতি সিলেক্টডিস্কফাইলএন্ড রাইট()

পরিবর্তনশীল নির্বাচিত নাম; পরিবর্তনশীল অস্থায়ী স্টোরেজ ঠিকানা; যদি PutFile(TemporaryStorageAddress, SelectedName, True) তাহলে Object.FileName = SelectedName; প্লেসঅবজেক্টফাইল(টেম্পোরারি স্টোরেজ অ্যাড্রেস); যদি শেষ;

প্রক্রিয়া শেষ

// অস্থায়ী সঞ্চয়স্থান থেকে একটি ডিরেক্টরি // বৈশিষ্ট্যে একটি ফাইল অনুলিপি করা, একটি বস্তু রেকর্ড করা, অস্থায়ী // স্টোরেজ থেকে একটি ফাইল মুছে ফেলা এবং সার্ভার পদ্ধতিতে স্থান অবজেক্ট ফাইল (অস্থায়ী স্টোরেজ ঠিকানা)

ডিরেক্টরি উপাদান = ফর্ম অ্যাট্রিবিউটস ভ্যালু("অবজেক্ট"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); ডিরেক্টরি উপাদান.ফাইল ডেটা = NewValueStorage(BinaryData); FilePathOnDisk = নতুন ফাইল(DirectoryItem.FileName); ডিরেক্টরি আইটেম. ফাইলের নাম = FilePathOnDisk.Name; ডিরেক্টরি উপাদান। লিখুন(); পরিবর্তিত = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueVFormAttributes(ডিরেক্টরি এলিমেন্ট, "অবজেক্ট");

প্রক্রিয়া শেষ

// প্রপস থেকে একটি ফাইল পড়া এবং এটিকে সংরক্ষণ করা // ইন্টারেক্টিভ মোডে স্থানীয় ডিস্কে এবং ক্লায়েন্ট পদ্ধতি ReadFileAndSaveToDisk()

ঠিকানা = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

প্রক্রিয়া শেষ

ছবির ক্ষেত্রে ঠিকানার জন্য সমর্থন

পিকচার ফিল্ড কন্ট্রোল অস্থায়ী স্টোরেজ বা ডাটাবেসে ফাইলের ঠিকানা দ্বারা নির্দিষ্ট করা ছবি প্রদর্শন সমর্থন করে।

এটি করার জন্য, আপনাকে ফর্ম উপাদানের ডেটা বৈশিষ্ট্যে একটি স্ট্রিং টাইপ বৈশিষ্ট্য সেট করতে হবে। এই বৈশিষ্ট্যের মান ছবির ঠিকানা হিসাবে ব্যাখ্যা করা হবে।

উদাহরণ // অস্থায়ী // সঞ্চয়স্থানে ইমেজ ঠিকানায় ইমেজ ফিল্ড বাঁধাই। ঠিকানার ছবি স্ট্রিং টাইপের বিবরণ তৈরি করে

প্লেসফাইল (ছবির ঠিকানা, সত্য)

Picture.Data=AdressPictures

ওয়েব ক্লায়েন্টের সাথে কাজ করার সময় সীমাবদ্ধতা

ওয়েব ক্লায়েন্ট ব্যবহার করার সময় বর্ণিত প্রক্রিয়াটির ক্রিয়াকলাপের কিছু সীমাবদ্ধতা রয়েছে। এই বিধিনিষেধগুলি ব্রাউজারের নিরাপত্তা মডেলের সাথে সম্পর্কিত৷ সুতরাং, উদাহরণস্বরূপ, ক্লায়েন্ট স্বাধীনভাবে স্থানীয় ফাইল সিস্টেমে একটি ফাইল সংরক্ষণ করতে পারে না, অর্থাৎ, শুধুমাত্র ক্লায়েন্ট পদ্ধতিগুলির ইন্টারেক্টিভ সংস্করণ PlaceFile() এবং GetFile() উপলব্ধ। অ-ইন্টারেক্টিভ মোড ব্যবহার করার চেষ্টা করার সময় একটি ব্যতিক্রম নিক্ষেপ করা হয়। ইন্টারেক্টিভভাবে প্রদর্শিত ডায়ালগ বক্সগুলি আপনার ব্রাউজারের প্রকারের জন্য নির্দিষ্ট।

ক্লায়েন্টে ভ্যালু স্টোরেজ নিয়ে কাজ করার সময় বৈশিষ্ট্য

সমস্যা:

যখন একটি নথিতে ট্যাবুলার বিভাগে ভ্যালু স্টোরেজ টাইপের একটি অ্যাট্রিবিউট থাকে, এই অ্যাট্রিবিউটে বড় ডেটা থাকলে এটি ডকুমেন্ট ফর্ম খোলার গতি কমিয়ে দেয়।

অনুমিত কারণ:

সম্ভবত, একটি ফর্ম খোলার সময়, এটি মান স্টোরে অবস্থিত ডেটার লিঙ্ক নয় যা ক্লায়েন্টকে পাঠানো হয়, তবে ডেটা নিজেই।

সমাধান

  • ফর্মের টেবিল অ্যাট্রিবিউটের বৈশিষ্ট্যগুলিতে একটি পতাকা রয়েছে "সর্বদা ব্যবহার করুন"। যদি এটি সেট করা থাকে, ক্ষেত্রের বিষয়বস্তু সর্বদা সার্ভার এবং ক্লায়েন্টের মধ্যে স্থানান্তরিত হয় - উদাহরণস্বরূপ, একটি ফর্ম খোলার সময়। এই পতাকাটি অক্ষম করা আবশ্যক, তবে এটি অবশ্যই কোডে বিবেচনায় নেওয়া উচিত, যেহেতু ডিফল্টরূপে ক্লায়েন্টে এই ক্ষেত্রের জন্য কোনও মান থাকবে না। একটি উদাহরণ 1C:আর্কাইভে পাওয়া যাবে।

এটি ব্যবহার করা আরও ভাল অস্থায়ী স্টোরেজক্লায়েন্ট এবং সার্ভারের মধ্যে ফাইল স্থানান্তর করতে।

আমাদের একটি ডিরেক্টরি রয়েছে "পণ্য", "ডেটা" বৈশিষ্ট্যে যার তথ্য বাইনারি ডেটা আকারে সংরক্ষণ করা হয়। অ্যাট্রিবিউটেই মান টাইপ "মান স্টোরেজ" আছে। নিম্নলিখিত স্ক্রিনশট ডিরেক্টরি মেটাডেটা গঠন দেখায়.

একটি উপাদানের আকারে ডিস্ক থেকে একটি নির্বিচারে ফাইল সংযুক্ত করতে, "অ্যাটাচফাইল" কমান্ড প্রয়োগ করা হয়েছে। এর প্রোগ্রাম কোড নিম্নলিখিত তালিকায় উপস্থাপিত হয়:

এবং ক্লায়েন্ট পদ্ধতিতে সংযুক্ত ফাইল (কমান্ড) // ক্লায়েন্টে কমান্ড হ্যান্ডলার। ফাইল নির্বাচন // ডিস্ক থেকে একটি ফাইল নির্বাচন করার জন্য ডায়ালগমোড = FileSelectionDialogMode। খোলা; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile ডায়ালগ। FullFileName = "" ; OpenFile ডায়ালগ। একাধিক নির্বাচন = মিথ্যা ; OpenFile ডায়ালগ। শিরোনাম = "ফাইল নির্বাচন করুন" ; যদি FileOpenDialog. তারপর FilePath = FileOpenDialog নির্বাচন করুন। সম্পূর্ণ ফাইলের নাম; // বাইনারি ফাইল ডেটা গ্রহণ করুন BinaryData = new BinaryData(PathToFile); // সার্ভারে বাইনারি ডেটা স্থানান্তর করুনঅ্যাটাচফাইল সার্ভার (বাইনারিডেটা); অন্যথায় পাঠ্য = "ru = "" ফাইল (s) নির্বাচিত হয়নি!" " ; en ="" ফাইল (s) নির্বাচিত হয়নি!" " " ; সতর্কীকরণ (NStr(টেক্সট) ); EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // তথ্য সুরক্ষায় একটি ফাইল রেকর্ড করার জন্য সার্ভারে হ্যান্ডলার // ফর্ম অবজেক্টকে রেফারেন্স অবজেক্টে রূপান্তর করুন ObjectCurrent = FormAttributesValue("অবজেক্ট" ); // "ডেটা" অ্যাট্রিবিউটে একটি নতুন মান বরাদ্দ করুনঅবজেক্ট কারেন্ট। ডেটা = NewValueStorage(BinaryData); // পরিবর্তনগুলোর সংরক্ষনঅবজেক্ট কারেন্ট। লিখুন(); প্রক্রিয়া শেষ

যদি আমরা সাধারণ পদে অ্যালগরিদম বর্ণনা করি, তাহলে প্রথমে ক্লায়েন্টের ডিস্ক থেকে একটি ফাইল নির্বাচন করা হয়। ফলস্বরূপ বাইনারি ফাইল ডেটা সার্ভারে পাঠানো হয়, যেখানে এটি তথ্য বেসে রেকর্ড করা হয়, যথা বর্তমান ডিরেক্টরি উপাদানের "ডেটা" বৈশিষ্ট্যে।

নীতিগতভাবে, সবকিছু কাজ করে। একটি উপাদান খোলার সময়, আমরা প্রয়োজন অনুযায়ী এই ডেটা পড়তে পারি। উদাহরণস্বরূপ, যদি একটি ইমেজ অ্যাট্রিবিউটে সেভ করা হয়, তাহলে আমরা এটি পেতে পারি এবং ফর্ম ফিল্ডে প্রদর্শন করতে পারি। এই সমাধানটির একটি স্থান রয়েছে, তবে বেশিরভাগ কাজের ক্ষেত্রে ডিরেক্টরি এবং নথিতে মান টাইপ "মান সংগ্রহস্থল" সহ বৈশিষ্ট্যগুলি ব্যবহার করা সর্বোত্তম নয়৷ আর এই কারণে...

কর্মক্ষমতা প্রভাব

চলুন কিছু কর্মক্ষমতা পরীক্ষা চালানো যাক. পরীক্ষাগুলি একটি সংযুক্ত ফাইল সহ এবং ছাড়া "পণ্য" ডিরেক্টরির দুটি উপাদান ব্যবহার করবে। সংযুক্ত ফাইলের আকার 5 মেগাবাইট।

সমস্ত পরীক্ষা পরীক্ষা কনফিগারেশনে "GetElement" প্রক্রিয়াকরণ ব্যবহার করে সঞ্চালিত হয়। আপনি নিবন্ধের শেষে লিঙ্ক থেকে এই কনফিগারেশন ডাউনলোড করতে পারেন.

আসুন "পণ্য" ডিরেক্টরিতে আইটেমগুলি খুলতে যে সময় লাগে তা পরিমাপ করা যাক৷ একটি উপাদান খুলতে, বিশ্বব্যাপী প্রসঙ্গ পদ্ধতি "OpenValue()" ব্যবহার করা হয়, যা একটি প্যারামিটার হিসাবে উপাদানটির একটি রেফারেন্স পাস করে। একটি আদর্শ কর্মক্ষমতা পরিমাপ সরঞ্জাম ব্যবহার করে খোলার সময় পরিমাপ করা যাক। ফলাফলগুলি নিম্নলিখিত স্ক্রিনশটে উপস্থাপন করা হয়েছে:

আমরা দেখতে পাচ্ছি, সংযুক্ত ফাইলের সাথে একটি উপাদান খুলতে যে সময় লাগে তার 10 গুণ বেশি! আরেকটা পরীক্ষা করা যাক। পণ্য ক্যাটালগ উপাদান উল্লেখ করতে "GetObject()" পদ্ধতি চালানো যাক। আপনি নিম্নলিখিত স্ক্রিনশট পরীক্ষা ফলাফল দেখতে পারেন.

পার্থক্যটি বেশ তাৎপর্যপূর্ণ। একটি সংযুক্ত ফাইল ছাড়া একটি উপাদান প্রাপ্তি 194 গুণ দ্রুত!

এটি ঘটে কারণ "GetObject()" পদ্ধতি রেফারেন্স দ্বারা ডিরেক্টরি উপাদানের বিবরণ থেকে সমস্ত ডেটা গ্রহণ করে। তদনুসারে, পদ্ধতিটি শুধুমাত্র "কোড" এবং "নাম" বৈশিষ্ট্যের মানই নয়, "ডেটা" বৈশিষ্ট্যের মানও গ্রহণ করে। যদি এটি আকারে 5 মেগাবাইটের বাইনারি ডেটা সঞ্চয় করে (আমাদের উদাহরণের মতো), তখন অবজেক্টটি প্রাপ্ত হলে, এই ডেটাটি র‌্যামে (অন্যান্য বিবরণের মতো) স্থাপন করা হয় এবং তারপরে ক্লায়েন্ট সাইডে স্থানান্তরিত হয়। এটি এই বৈশিষ্ট্য থেকে ডেটার প্রাপ্তি যা উপাদান অবজেক্ট পাওয়ার জন্য সময় বাড়ায়। যদি একটি পাতলা যোগাযোগ চ্যানেল ব্যবহার করা হয়, তবে নেটওয়ার্কে প্রচুর পরিমাণে তথ্য স্থানান্তরের কারণে খোলার সময় আরও উল্লেখযোগ্যভাবে বৃদ্ধি পাবে।

দ্রষ্টব্য: "OpenValue()" পদ্ধতি কার্যকর করার সময়, ডিরেক্টরি উপাদান অবজেক্টটিও প্রথমে প্রাপ্ত হয়, এবং তারপর একটি ফর্ম অবজেক্টে রূপান্তরিত হয় এবং ক্লায়েন্টের কাছে পাঠানো হয় (পরিচালিত ফর্মগুলির জন্য)। অর্থাৎ, রেফারেন্স দ্বারা একটি উপাদান খোলা হলে, বস্তুটিও পুনরুদ্ধার করা হয়।

একটি সংযুক্ত ফাইল সহ এবং ছাড়া একটি ডিরেক্টরি আইটেম খুলতে এবং লিখতে যে সময় লাগে তার একটি চূড়ান্ত পরীক্ষা করা যাক। ফলাফল নিম্নলিখিত স্ক্রিনশট দেখানো হয়.

প্রাকৃতিক ফলাফল। একটি সংযুক্ত ফাইল সহ একটি ডিরেক্টরি আইটেমের জন্য গ্রহণ করার এবং তারপরে লেখার সময় ~19 গুণ বেশি হয়েছে৷ উপরে উল্লিখিত হিসাবে, একটি বস্তু গ্রহণ করার সময়, "ডেটা" বৈশিষ্ট্য সহ যার মধ্যে 5 মেগাবাইট তথ্য সংরক্ষণ করা হয় তার সমস্ত বিবরণের মান প্রাপ্ত হয়। যখন একটি উপাদান লেখা হয়, তখন এই পরিমাণ ডেটা আবার ইনফোবেসে লেখা হয়। ফলস্বরূপ, "মান সঞ্চয়স্থান" টাইপ সহ একটি ডিরেক্টরি বৈশিষ্ট্য (বা নথিতে) ডেটা সংরক্ষণ করা কোনও বস্তু পুনরুদ্ধার করার সময় এবং ইনফোবেসে স্থাপন করার সময় উভয়ের কার্যক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করে।

তথ্য বেস অবজেক্টের জন্য ডেটা সংরক্ষণের সমস্যা সমাধানের সবচেয়ে সঠিক উপায় কী?

সঠিক সমাধান

আমরা যদি সাধারণ কনফিগারেশনে এই প্রক্রিয়াটির বাস্তবায়নের দিকে তাকাই, আমরা দেখতে পাব যে বস্তুর জন্য অতিরিক্ত তথ্য একটি পৃথক তথ্য নিবন্ধন সারণীতে সংরক্ষণ করা হয়। এটি, উদাহরণস্বরূপ, "ট্রেড ম্যানেজমেন্ট" সংস্করণ 11-এর একটি স্ট্যান্ডার্ড কনফিগারেশনে সংযুক্তি ফাইলের প্রক্রিয়াটি কেমন দেখায়।

"Nomenclature" ডিরেক্টরিটি "NomenclatureAttachedFiles" ডিরেক্টরির মালিক। এটি, পালাক্রমে, সংযুক্ত ফাইল তথ্য রেজিস্টারের সাথে যুক্ত, যার সংযুক্ত ফাইলের মাত্রা তার উপাদানকে বোঝায়। সুতরাং, তথ্য বেস অবজেক্টের সাথে সংযুক্ত ডেটা আসলে তথ্য রেজিস্টার টেবিলে সংরক্ষিত হয়, যার ক্রিয়াকলাপ কার্যত সম্পদে সংরক্ষিত ডেটার পরিমাণ দ্বারা প্রভাবিত হয় না। অন্তর্বর্তী ডিরেক্টরি "সংযুক্ত ফাইলের নামকরণ" সংযুক্ত ফাইলের জন্য অতিরিক্ত তথ্য সংরক্ষণ করার জন্য, সেইসাথে রেফারেন্স দ্বারা সংযুক্ত ফাইলে অ্যাক্সেস সমর্থন করার জন্য প্রয়োজনীয়।

উপরের সমস্তগুলি আবার একটি সঠিকভাবে ডিজাইন করা কনফিগারেশন মেটাডেটা কাঠামোর বিশাল কর্মক্ষমতা প্রভাব নিশ্চিত করে।

নিবন্ধ থেকে একটি উদাহরণ সহ কনফিগারেশন পরীক্ষা করুন: লিঙ্ক .

প্ল্যাটফর্ম 1C: এন্টারপ্রাইজবিভিন্ন ধরনের তথ্য সংরক্ষণের জন্য অনেক সম্ভাবনা প্রদান করে।

কিন্তু প্রায়ই এই সুযোগগুলি যথেষ্ট নয়। এবং তারপরে একটি বিশেষ বস্তু আমাদের সাহায্যে আসে - স্টোরেজ ভ্যালুস. এই অবজেক্টটি আপনাকে স্ট্যান্ডার্ড 1C:এন্টারপ্রাইজ অবজেক্ট উভয়ই একটি বিশেষ বিন্যাসে সংরক্ষণ করতে দেয়, উদাহরণস্বরূপ, মানগুলির একটি সারণী এবং অ-মানকগুলি যার জন্য প্ল্যাটফর্মে একটি প্রকার সরবরাহ করা হয় না। অ-মানক ধরনের ফাইল অন্তর্ভুক্ত হতে পারে. উদাহরণস্বরূপ, একটি 1C ডাটাবেসে একটি মূল্য স্টোর ব্যবহার করে, আপনি কর্মীদের ফটোগ্রাফ, নথির স্ক্যান, বহিরাগত প্রক্রিয়াকরণ ইত্যাদি সংরক্ষণ করতে পারেন। এখানে সুবিধা হল এই সমস্ত বস্তু ডাটাবেসেই সংরক্ষিত থাকে। তদনুসারে, একটি ব্যাকআপ কপি থেকে একটি নতুন ডাটাবেস স্থাপন করার সময়, এই সমস্ত বস্তুগুলিও নতুন ডাটাবেসে উপস্থিত থাকবে। অন্যদিকে, আপনি যদি ডাটাবেসে বড় ফাইলগুলি সঞ্চয় করেন তবে এটি এর ভলিউম উল্লেখযোগ্যভাবে বৃদ্ধি করতে পারে এবং এর কার্যকারিতাকে নেতিবাচকভাবে প্রভাবিত করতে পারে। অতএব, এখানে একটি যুক্তিসঙ্গত ভারসাম্য বজায় রাখা আবশ্যক।

আসুন একটি উদাহরণ ব্যবহার করে একটি ভ্যালু স্টোরের সাথে কাজ করা দেখি। আসুন কনফিগারেটে একটি বিশেষ ডিরেক্টরি তৈরি করি - আসুন এটিকে কল করি বাহ্যিক বস্তু, এবং পরিবর্তে আমরা ডিরেক্টরির জন্য প্রয়োজনীয় জিনিসগুলি তৈরি করব একটি বস্তুটাইপ সহ স্টোরেজ ভ্যালুস

এবং এখন আমরা এই ডিরেক্টরির মধ্যে উপাদান তৈরি করতে পারেন, এবং প্রপস একটি বস্তুপ্রতিটি উপাদান একটি ফাইলে লেখা হয়।

একটি ভ্যালু স্টোরের সাথে কাজ করা খুবই সহজ। আমরা যদি সিনট্যাক্স হেল্পারের দিকে তাকাই, আমরা দেখতে পাব যে এই অবজেক্টের শুধুমাত্র একটি পদ্ধতি এবং একটি কনস্ট্রাক্টর রয়েছে।

এখন, প্রদর্শনের জন্য, আসুন সবচেয়ে সহজ কোডটি লিখি যা প্রপগুলিতে একটি ফাইল লিখবে একটি বস্তুএকটি পূর্বে তৈরি ডিরেক্টরি উপাদান, এবং তারপর প্রপস থেকে এই ফাইলটি পড়ুন এবং এটি ডিস্কে লিখুন, কিন্তু একটি ভিন্ন নামে।

সার্ভার পদ্ধতিতে লোডআনলোডফাইল(ডিরেক্টরি এলিমেন্ট)ডিরেক্টরি অবজেক্ট =ডিরেক্টরি এলিমেন্ট। GetObject(); //মূল্যের দোকানে ছবিটি রাখুনলেবেলডাউনলোড = নতুন ছবি ("g:\musor\favicon.ico" ) NewValueStorage; // একটি ডিরেক্টরি উপাদান লিখুনডিরেক্টরি অবজেক্ট। ডিরেক্টরি অবজেক্ট অবজেক্ট। লিখুন(); // ভ্যালু স্টোর থেকে একটি ফাইলে ছবিটি আপলোড করুনফাইলের নাম = "g:\musor\favicon_1.ico" ; লেবেল আপলোড = ডিরেক্টরি অবজেক্ট। একটি বস্তু। পাওয়া() ; লেবেল আপলোড। লিখুন(ফাইলের নাম); প্রক্রিয়া শেষ

এবং কোডের জন্য কয়েকটি ব্যাখ্যা।

  • কনস্ট্রাক্টর ব্যবহার করে স্টোর তৈরি করা হলে বস্তুটি সরাসরি স্টোরে স্থাপন করা হয়।

সঞ্চয়স্থানে ছবি ব্যতীত অন্য ধরনের ফাইল সংরক্ষণ করতে, আপনি বস্তুটি ব্যবহার করতে পারেন বাইনারি ডেটা. বিশুদ্ধভাবে তাত্ত্বিকভাবে, আপনি মান স্টোরে ডিরেক্টরি উপাদান, নথি, ইত্যাদি সঞ্চয় করতে পারেন। কিন্তু বাস্তবে এর কোনো মানে হয় না। কিন্তু কখনও কখনও মানগুলির একটি টেবিল, মূল্যবোধের একটি গাছ এবং অন্যান্য সর্বজনীন সংগ্রহগুলি সংরক্ষণ করতে একটি মান স্টোর ব্যবহার করা সম্ভব।