მონაცემების მიღება მნიშვნელობების შენახვისგან 1s 8.3. შეზღუდვები ვებ კლიენტთან მუშაობისას

თითქმის ნებისმიერი ინფორმაცია შეიძლება ინახებოდეს ღირებულების მაღაზიაში, მაგ.

... სურათები (ფოტოები):

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=New TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Write();

დასრულების პროცედურა

პროცედურა RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); თუ TabDoc<>განუსაზღვრელი ThenFormElements.TabularDocumentField1.Output(TabDoc); დაასრულე თუ;

დასრულების პროცედურა

...თვითნებური ფაილები (ორობითი მონაცემები):

XZ = NewValueStorage(NewBinaryData(ფაილი));

Eight მხარს უჭერს საცავში განთავსებული მონაცემების შეკუმშვას:

XZ = NewValueStorage(NewBinaryData(ფაილი),NewDataCompression(9));

... გარე დამუშავება და მოხსენება:

პროცედურა LoadProcessingIntoStorage (PropsStorageType)

CompressionRate = NewDataCompression(9); //9 მაქსიმალური PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", შეკუმშვის სიხშირე));

დასრულების პროცედურა

პროცედურა StartProcessingFromStorage(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 = საცავი;

დაასრულე თუ; BinaryData.Write(FileName);

თუ ეს იყო, მაგალითად, Word დოკუმენტი (doc ფაილი, ან სხვა რეგისტრირებული ფაილის ტიპი), მაშინ მისი გახსნა შეიძლება ასე:

LaunchApplication (ფაილის სახელი);

Value Storage ტიპის ველის გასასუფთავებლად, თქვენ უნდა მივანიჭოთ ის განუსაზღვრელი:

PropsStorage = განუსაზღვრელი;

ფაილებთან და სურათებთან მუშაობა ჩაშენებულ ენაზე 1C:Enterprise 8

მიზანი

მართული აპლიკაცია ახორციელებს ფაილებთან მუშაობის ახალ მექანიზმს. ის უზრუნველყოფს ფაილების გაცვლას ინფორმაციის ბაზასა და კლიენტის აპლიკაციას შორის. ამ მექანიზმის თავისებურება ის არის, რომ იგი შექმნილია თხელი კლიენტისა და ვებ კლიენტისთვის გამოსაყენებლად და შექმნილია ვებ ბრაუზერების მიერ დაწესებული ფაილებთან მუშაობის შეზღუდვების გათვალისწინებით.

მექანიზმი არის მეთოდების ერთობლიობა, რომელიც შეიძლება გამოყენებულ იქნას მომხმარებლის კომპიუტერზე ლოკალურად შენახული მონაცემების საინფორმაციო ბაზის დროებით საცავში განთავსებისთვის, ამ ინფორმაციის დროებითი საცავიდან მონაცემთა ბაზაში გადასატანად და მომხმარებლის კომპიუტერში დაბრუნებაში. ამ მექანიზმით მოგვარებული აპლიკაციის ყველაზე გავრცელებული პრობლემებია თანმხლები ინფორმაციის შენახვა, მაგალითად, საქონლის სურათები, კონტრაქტებთან დაკავშირებული დოკუმენტები და ა.შ.

მეთოდის ფარგლები

დროებითი შენახვა

დროებითი შენახვა არის საინფორმაციო ბაზის სპეციალიზებული არეალი, რომელშიც შესაძლებელია ბინარული მონაცემების განთავსება. მთავარი მიზანია ინფორმაციის დროებითი შენახვა კლიენტ-სერვერის ურთიერთქმედების დროს, სანამ ის მონაცემთა ბაზაში გადაიცემა.

დროებითი შენახვის საჭიროება ჩნდება იმის გამო, რომ ვებ ბრაუზერის ოპერაციული მოდელი მოითხოვს მომხმარებლის მიერ არჩეული ფაილის პირდაპირ სერვერზე გადატანას კლიენტზე მისი შენახვის შესაძლებლობის გარეშე. როდესაც ფაილი გადადის, ის მოთავსებულია დროებით საცავში და შემდეგ შეიძლება გამოყენებულ იქნას მონაცემთა ბაზაში ობიექტის ჩაწერისას.

აპლიკაციის ყველაზე ტიპიური ამოცანა, რომელიც გადაჭრილია დროებითი შენახვის საშუალებით, არის ფაილებზე ან სურათებზე წვდომის უზრუნველყოფა, სანამ ობიექტი ჩაიწერება ინფორმაციის ბაზაში, მაგალითად, ელემენტის სახით.

საცავში განთავსებული ფაილი ან ორობითი მონაცემები იდენტიფიცირებულია უნიკალური მისამართით, რომელიც მოგვიანებით შეიძლება გამოყენებულ იქნას ჩაწერის, წაკითხვის ან წაშლის ოპერაციებში. ეს მისამართი მოცემულია ფაილის დროებით შესანახად ჩაწერის მეთოდებით. ჩაშენებულ ენაში ცალკე მეთოდი საშუალებას გაძლევთ განსაზღვროთ არის თუ არა გადაცემული მისამართი მისამართი, რომელიც მიუთითებს მონაცემებზე დროებით საცავში.

საინფორმაციო ბაზა

მექანიზმი გაძლევთ წვდომას Value Storage ტიპის ატრიბუტებში შენახულ ორობით მონაცემებზე.

როგორც დროებითი შენახვის შემთხვევაში, ინფორმაციაზე წვდომა შესაძლებელია სპეციალური მისამართის მეშვეობით. მისი მიღება შეგიძლიათ სპეციალური მეთოდით, ობიექტზე ბმულის ან ინფორმაციის რეესტრის შესვლის გასაღების და ატრიბუტის სახელის გადაცემით. ცხრილის ნაწილის შემთხვევაში დამატებით საჭიროა ტაბულური ნაწილის მწკრივის ინდექსის გადატანა.

ფაილებთან მუშაობის მეთოდებს აქვს შეზღუდვები ინფობაზის დეტალებთან მუშაობისას. მათთვის, დროებითი შენახვისგან განსხვავებით, ხელმისაწვდომია მხოლოდ ინფორმაციის წაკითხვა, მაგრამ არა მისი ჩაწერა ან წაშლა.

ფაილებთან მუშაობის მეთოდების აღწერა

მონაცემების შენახვა დროებით საცავში

ამ მექანიზმის გამოყენების ყველაზე ტიპიური სცენარი მოიცავს მომხმარებლის მონაცემების თავდაპირველ განთავსებას დროებით საცავში. ამისათვის არსებობს ორი მეთოდი: PlaceFile() და PlaceFileInTemporaryStorage().

პირველი მეთოდი, PlaceFile(), ათავსებს ფაილს ადგილობრივი ფაილური სისტემიდან დროებით საცავში. მეთოდს შეუძლია მიიღოს სამიზნე მისამართი საცავში. თუ ის არ არის განსაზღვრული ან არის ცარიელი სტრიქონი, მაშინ შეიქმნება ახალი ფაილი და მეთოდი დააბრუნებს მის მისამართს შესაბამისი პარამეტრის მეშვეობით.

თუ პარამეტრი, რომელიც განსაზღვრავს ოპერაციის ინტერაქტიულ რეჟიმს არის True, მაშინ მეთოდი აჩვენებს სტანდარტული ფაილის შერჩევის დიალოგურ ფანჯარას, რომელშიც შეგიძლიათ აირჩიოთ ფაილი შესანახად. ამ შემთხვევაში, მეთოდი ასევე დააბრუნებს არჩეული ფაილის მისამართს.

შედეგად, მეთოდი აბრუნებს False-ს, თუ მომხმარებელმა ინტერაქტიულად უარი თქვა ოპერაციის შესრულებაზე ფაილის შერჩევის დიალოგში. მეთოდი ხელმისაწვდომია მხოლოდ კლიენტზე.

მეორე მეთოდი, PlaceFileInTemporaryStorage(), წინას მსგავსია, გარდა იმისა, რომ ის ხელმისაწვდომია სერვერზე და დროებით საცავში ჩასაწერი მონაცემები წარმოდგენილია არა როგორც გზა ფაილურ სისტემაში, არამედ როგორც ტიპის ცვლადი. ორობითი მონაცემები. ანალოგიურად, თუ არ არის მითითებული სამიზნე მისამართი, ახალი ფაილი იქმნება საცავში. მისი მისამართი ბრუნდება ფუნქციის შედეგად.

ფაილის აღება დროებითი მეხსიერებიდან

ინფობაზაში ობიექტის ჩაწერისას შეიძლება დაგჭირდეთ მონაცემების ამოღება დროებითი საცავიდან და მოთავსება, მაგალითად, ატრიბუტში. ამისათვის არსებობს სერვერის შესაბამისი მეთოდი - GetFileFromTemporaryStorage(). ეს მეთოდი იღებს მონაცემებს დროებითი საცავიდან და შედეგად აბრუნებს მას. ამისათვის თქვენ უნდა მიუთითოთ მისამართი დროებით საცავში. ეს მისამართი ბრუნდება ზემოთ აღწერილი მეთოდებით PlaceFile() და PlaceFileInTemporaryStorage(), თუ ისინი წარმატებით შესრულდება.

ფაილის წაშლა დროებითი მეხსიერებიდან

მონაცემების დეტალებში შენახვის შემდეგ, დროებით საცავში არსებული ფაილი შეიძლება წაიშალოს. ამ მიზნით, არსებობს მეთოდი DeleteFileFromTemporaryStorage(), რომელიც შლის ფაილს დროებითი საცავიდან. მეთოდი პარამეტრად იღებს დროებით საცავში მყოფი ფაილის მისამართს. ხელმისაწვდომია სერვერზე.

მისამართის შემოწმება დროებითი შენახვისთვის

ფაილის მისამართს შეუძლია მიუთითოს როგორც დროებითი შენახვა, ასევე დეტალები ინფორმაციის ბაზაში. მისი ტიპის შესამოწმებლად, არსებობს მეთოდი This isTemporaryStorageAddress().

ის ამოწმებს, რომ გავლილი მისამართი არის მისამართი, რომელიც მიუთითებს მაღაზიაზე. აბრუნებს True-ს, თუ მისამართი მიუთითებს დროებით შენახვაზე. მეთოდი ხელმისაწვდომია სერვერზე.

რეკვიზიტების მისამართის მიღება

მას შემდეგ, რაც მონაცემები ინფორმაციის ბაზაში დეტალებში განთავსდება, შეიძლება დაგჭირდეთ მასზე წვდომა ფაილის მეთოდების გამოყენებით.

მაგრამ სანამ მიიღებთ მონაცემებს, მაგალითად, საკუთრებიდან, თქვენ უნდა მიიღოთ ამ ქონების მისამართი. ამ მიზნით, არსებობს მეთოდი GetFileAddressInInformationBase().

მისი მიზანია დააბრუნოს ფაილის მისამართი ინფო ბაზაში ორიგინალური პარამეტრების მიხედვით. ამისათვის თქვენ უნდა გადასცეთ ობიექტის გასაღები (ეს შეიძლება იყოს ობიექტის ბმული ან ინფორმაციის რეესტრის შესვლის გასაღები) და ატრიბუტის სახელი. თუ გსურთ მიიღოთ ტაბულური ნაწილის ატრიბუტში შენახული ფაილის მისამართი, ატრიბუტის სახელამდე პარამეტრში, რომელიც მიუთითებს ატრიბუტის სახელზე, თქვენ უნდა დაამატოთ ცხრილის ნაწილის სახელი და წერტილი „.“. მეთოდი ხელმისაწვდომია როგორც კლიენტზე, ასევე სერვერზე.

ფაილის ამოღება ინფობაზიდან

GetFile() მეთოდი იღებს ფაილს ინფობაზიდან და ინახავს მას მომხმარებლის ლოკალურ ფაილურ სისტემაში. პირველი პარამეტრი განსაზღვრავს ფაილის მისამართს რეკვიზიტში ან ფაილის დროებით შენახვაში. მეორე პარამეტრი განსაზღვრავს მიღებული ფაილის დანიშნულების ადგილს. არაინტერაქტიულ რეჟიმში, თქვენ უნდა მიუთითოთ გზა. ინტერაქტიულ რეჟიმში, პარამეტრი არჩევითია.

ნაგულისხმევად, მეთოდი შესრულებულია ინტერაქტიულ რეჟიმში, ანუ ბოლო პარამეტრი არის True. ეს ნიშნავს, რომ გამოჩნდება დიალოგური ფანჯარა, რომელშიც შეგიძლიათ მიუთითოთ მოქმედება მიღებულ ფაილთან: გაუშვით ან შეინახოთ მომხმარებლის მიერ მითითებულ ადგილას. თუ ინტერაქტიული რეჟიმი აქტიურია და Target disk file path პარამეტრი არ არის მითითებული, ფაილის გახსნის ოპერაცია მიუწვდომელია. აბრუნებს ლოგიკურ მნიშვნელობას. False ნიშნავს, რომ მომხმარებელმა აირჩია ოპერაციის გაუქმება ინტერაქტიული ფაილის შენახვის დიალოგურ ფანჯარაში.

ფაილის მეთოდების გამოყენების მაგალითი

// ფაილის მიღება დისკიდან ინტერაქტიულ რეჟიმში // და მისი დროებით საცავში განთავსება &კლიენტის პროცედურაზე SelectDiskFileAndWrite()

ცვლადი SelectedName; VariableTemporaryStorageAddress; თუ PutFile(TemporaryStorageAddress, SelectedName, True) მაშინ Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); დაასრულე თუ;

დასრულების პროცედურა

// ფაილის კოპირება დროებითი მეხსიერებიდან დირექტორიაში // ატრიბუტში, ობიექტის ჩაწერა, ფაილის წაშლა დროებითი // შენახვისგან & სერვერის პროცედურაზე მოათავსეთ ობიექტის ფაილი (დროებითი შენახვის მისამართი)

დირექტორიის ელემენტი = Form AttributesValue("ობიექტი"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); დირექტორია Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = ახალი ფაილი (DirectoryItem.FileName); დირექტორია Item.FileName = FilePathOnDisk.Name; დირექტორიის ელემენტი.Write(); მოდიფიცირებული = მცდარი; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Directory Element, "Object");

დასრულების პროცედურა

// ფაილის წაკითხვა პროპიდან და მისი შენახვა // ლოკალურ დისკზე ინტერაქტიულ რეჟიმში &კლიენტის პროცედურაზე ReadFileAndSaveToDisk()

მისამართი = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

დასრულების პროცედურა

მისამართების მხარდაჭერა გამოსახულების ველში

Picture Field კონტროლი მხარს უჭერს სურათის ჩვენებას, რომელიც მითითებულია ფაილის მისამართით დროებით შენახვაში ან მონაცემთა ბაზაში.

ამისათვის თქვენ უნდა დააყენოთ string type ატრიბუტი ფორმის ელემენტის Data თვისებაში. ამ ატრიბუტის მნიშვნელობა განიმარტება როგორც სურათის მისამართი.

მაგალითი // გამოსახულების ველის მიბმა გამოსახულების მისამართთან დროებით // საცავში. AddressPictures აყალიბებს სტრიქონების ტიპის დეტალებს

PlaceFile (PictureAddress, True)

სურათი.მონაცემები = მისამართის სურათები

შეზღუდვები ვებ კლიენტთან მუშაობისას

აღწერილი მექანიზმის მუშაობას ვებ კლიენტის გამოყენებისას აქვს გარკვეული შეზღუდვები. ეს შეზღუდვები დაკავშირებულია ბრაუზერის უსაფრთხოების მოდელთან. მაგალითად, კლიენტს არ შეუძლია დამოუკიდებლად შეინახოს ფაილი ადგილობრივ ფაილურ სისტემაში, ანუ ხელმისაწვდომია მხოლოდ კლიენტის მეთოდების ინტერაქტიული ვერსია PlaceFile() და GetFile(). გამონაკლისი ხდება არაინტერაქტიული რეჟიმის გამოყენების მცდელობისას. დიალოგური ფანჯრები, რომლებიც ინტერაქტიულად გამოჩნდება, სპეციფიკურია თქვენი ბრაუზერის ტიპისთვის.

ფუნქციები კლიენტზე Value Storage-თან მუშაობისას

პრობლემა:

როდესაც დოკუმენტს აქვს Value Storage ტიპის ატრიბუტი ტაბულურ განყოფილებაში, ის ანელებს დოკუმენტის ფორმის გახსნას, თუ ეს ატრიბუტი შეიცავს დიდ მონაცემებს.

სავარაუდო მიზეზი:

შესაძლოა, ფორმის გახსნისას კლიენტს ეგზავნება არა Value Store-ში მდებარე მონაცემების ბმული, არამედ თავად მონაცემები.

გამოსავალი

  • ფორმის ცხრილის ატრიბუტის თვისებებში არის დროშა „ყოველთვის გამოყენება“. თუ ის დაყენებულია, ველის შიგთავსი ყოველთვის გადადის სერვერსა და კლიენტს შორის - მაგალითად, ფორმის გახსნისას. ეს დროშა უნდა იყოს გამორთული, მაგრამ ეს უნდა იყოს გათვალისწინებული კოდში, რადგან ნაგულისხმევად არ იქნება ამ ველის მნიშვნელობა კლიენტზე. მაგალითი შეგიძლიათ იხილოთ 1C:Archive-ში.

მისი გამოყენება კიდევ უკეთესია დროებითი შენახვაფაილების გადასატანად კლიენტსა და სერვერს შორის.

ჩვენ გვაქვს დირექტორია "პროდუქტები", "მონაცემების" ატრიბუტში, რომლის ინფორმაცია ინახება ბინარული მონაცემების სახით. თავად ატრიბუტს აქვს მნიშვნელობის ტიპი "Value Storage". შემდეგი სკრინშოტი აჩვენებს დირექტორიაში მეტამონაცემების სტრუქტურას.

დისკიდან თვითნებური ფაილის ელემენტის სახით დასამაგრებლად განხორციელდა ბრძანება "AttachFile". მისი პროგრამის კოდი წარმოდგენილია შემდეგ ჩამონათვალში:

& კლიენტის პროცედურაზე AttachFile(ბრძანება) // ბრძანების დამმუშავებელი კლიენტზე. ფაილის შერჩევა // დიალოგი დისკიდან ფაილის ასარჩევადრეჟიმი = FileSelectionDialogMode. გახსნა; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile დიალოგი. FullFileName = " " ; OpenFile დიალოგი. MultipleSelect = False ; OpenFile დიალოგი. Title = "ფაილების არჩევა" ; თუ FileOpenDialog. აირჩიეთ() შემდეგ FilePath = FileOpenDialog. FullFileName; // ბინარული ფაილის მონაცემების მიღება BinaryData = ახალი BinaryData (PathToFile); // ბინარული მონაცემების სერვერზე გადატანა AttachFileServer(BinaryData); წინააღმდეგ შემთხვევაში ტექსტი = "ru = "" ფაილი (s) არ არის შერჩეული!" " ; en ="" ფაილი (s) არ არის შერჩეული!" " ; გაფრთხილება(NStr(ტექსტი) ; EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // დამმუშავებელი სერვერზე ინფორმაციის უსაფრთხოებაში ფაილის ჩასაწერად // ფორმის ობიექტის გარდაქმნა საცნობარო ობიექტად ObjectCurrent = FormAttributesValue("ობიექტი") ; // მიანიჭეთ ახალი მნიშვნელობა "მონაცემების" ატრიბუტს ObjectCurrent. მონაცემთა = NewValueStorage(BinaryData) ; // Ცვლილებების შენახვა ObjectCurrent. Write() ; დასრულების პროცედურა

თუ ჩვენ აღვწერთ ალგორითმს ზოგადად, მაშინ ჯერ ფაილი შეირჩევა კლიენტის დისკიდან. შედეგად მიღებული ორობითი ფაილის მონაცემები იგზავნება სერვერზე, სადაც ის ჩაიწერება საინფორმაციო ბაზაში, კერძოდ, მიმდინარე დირექტორიაში ელემენტის "მონაცემების" ატრიბუტში.

პრინციპში, ყველაფერი მუშაობს. ელემენტის გახსნისას შეგვიძლია საჭიროებისამებრ წავიკითხოთ ეს მონაცემები. თუ, მაგალითად, სურათი შენახულია ატრიბუტში, მაშინ შეგვიძლია მივიღოთ და გამოვაჩინოთ ფორმის ველში. ამ გადაწყვეტას აქვს ადგილი, მაგრამ ამოცანების უმეტესობაში არ არის ოპტიმალური ატრიბუტების გამოყენება მნიშვნელობის ტიპის "Value Storage" დირექტორიებსა და დოკუმენტებში. და ამიტომ...

შესრულების გავლენა

მოდით ჩავატაროთ შესრულების რამდენიმე ტესტი. ტესტები გამოიყენებს "პროდუქტები" დირექტორიას ორ ელემენტს, თანდართული ფაილით და მის გარეშე. თანდართული ფაილის ზომაა 5 მეგაბაიტი.

ყველა ტესტი შესრულებულია "GetElement" დამუშავების გამოყენებით ტესტის კონფიგურაციაში. ამ კონფიგურაციის ჩამოტვირთვა შეგიძლიათ სტატიის ბოლოს მოცემული ბმულიდან.

მოდით გავზომოთ დრო, რომელიც სჭირდება ნივთების გახსნას "პროდუქტები" დირექტორიაში. ელემენტის გასახსნელად გამოიყენება გლობალური კონტექსტის მეთოდი "OpenValue()", რომელსაც გადაეცემა ელემენტის მითითება პარამეტრად. მოდით გავზომოთ გახსნის დრო სტანდარტული შესრულების საზომი ხელსაწყოს გამოყენებით. შედეგები წარმოდგენილია შემდეგ ეკრანის სურათზე:

როგორც ვხედავთ, თანდართული ფაილით ელემენტის გახსნის დრო 10-ჯერ მეტია! მოდით კიდევ ერთი ტესტი გავაკეთოთ. მოდით შევასრულოთ "GetObject()" მეთოდი პროდუქტის კატალოგის ელემენტის მითითებისთვის. ტესტის შედეგი შეგიძლიათ იხილოთ შემდეგ ეკრანის სურათზე.

განსხვავება საკმაოდ მნიშვნელოვანია. ელემენტის მიღება მიმაგრებული ფაილის გარეშე 194-ჯერ უფრო სწრაფია!

ეს იმიტომ ხდება, რომ "GetObject()" მეთოდი იღებს ყველა მონაცემს დირექტორიის ელემენტის დეტალებიდან მითითებით. შესაბამისად, მეთოდი იღებს არა მხოლოდ "კოდი" და "სახელი" ატრიბუტების მნიშვნელობებს, არამედ "მონაცემების" ატრიბუტის მნიშვნელობას. თუ ის ინახავს ბინარულ მონაცემებს 5 მეგაბაიტის ზომით (როგორც ჩვენს მაგალითში), მაშინ ობიექტის მიღებისას ეს მონაცემები მოთავსებულია RAM-ში (სხვა დეტალების მსგავსად) და შემდეგ გადაეცემა კლიენტის მხარეს. სწორედ ამ ატრიბუტიდან მონაცემების მიღება ზრდის ელემენტის ობიექტის მიღების დროს. თუ თხელი საკომუნიკაციო არხი გამოიყენება, მაშინ გახსნის დრო კიდევ უფრო გაიზრდება ქსელში დიდი რაოდენობით ინფორმაციის გადაცემის გამო.

შენიშვნა: "OpenValue()" მეთოდის შესრულებისას ასევე ჯერ მიიღება დირექტორია ელემენტის ობიექტი, შემდეგ გარდაიქმნება ფორმის ობიექტად და გადაეცემა კლიენტს (მართული ფორმებისთვის). ანუ, როდესაც ელემენტი იხსნება მითითებით, ობიექტიც იხსნება.

მოდით ჩავატაროთ საბოლოო ტესტი იმ დროის შესახებ, რომელიც სჭირდება დირექტორიას ერთეულის გახსნას და ჩაწერას თანდართული ფაილით და მის გარეშე. შედეგი ნაჩვენებია შემდეგ ეკრანის სურათზე.

ბუნებრივი შედეგი. მიმაგრებული ფაილით დირექტორიაში ერთეულის მიღებისა და შემდეგ ჩაწერის დრო ~19-ჯერ მეტი აღმოჩნდა. როგორც ზემოთ აღინიშნა, ობიექტის მიღებისას მიიღება მისი ყველა დეტალის მნიშვნელობები, მათ შორის ატრიბუტი "მონაცემები", რომელშიც ინახება 5 მეგაბაიტი ინფორმაცია. როდესაც ელემენტი იწერება, მონაცემების ეს რაოდენობა კვლავ იწერება ინფობაზაში. შესაბამისად, მონაცემთა შენახვა დირექტორიაში ატრიბუტში (ან დოკუმენტში) ტიპის „Value Storage“ უარყოფითად მოქმედებს შესრულებაზე, როგორც ობიექტის მოძიებისას, ასევე მისი ინფობაზაში განთავსებისას.

რა არის ყველაზე სწორი გზა საინფორმაციო ბაზის ობიექტებისთვის მონაცემთა შენახვის პრობლემის გადასაჭრელად?

სწორი გამოსავალი

თუ გადავხედავთ ამ მექანიზმის დანერგვას ტიპურ კონფიგურაციებში, დავინახავთ, რომ ობიექტებისთვის დამატებითი ინფორმაცია ინახება ცალკე საინფორმაციო რეესტრის ცხრილში. ასე გამოიყურება, მაგალითად, დანართის ფაილის მექანიზმი "ვაჭრობის მენეჯმენტის" 11-ე ვერსიის სტანდარტულ კონფიგურაციაში.

"Nomenclature" დირექტორია არის "NomenclatureAttachedFiles" დირექტორიას მფლობელი. ეს, თავის მხრივ, დაკავშირებულია AttachedFiles ინფორმაციის რეესტრთან, რომლის AttachedFile განზომილება ეხება მის ელემენტს. ამრიგად, საინფორმაციო ბაზის ობიექტებზე მიმაგრებული მონაცემები რეალურად ინახება საინფორმაციო რეესტრის ცხრილში, რომლის ფუნქციონირებაზე პრაქტიკულად არ მოქმედებს რესურსში შენახული მონაცემების რაოდენობა. შუალედური დირექტორია "მიმაგრებული ფაილების ნომენკლატურა" აუცილებელია თანდართული ფაილის დამატებითი ინფორმაციის შესანახად, ასევე მიმაგრებულ ფაილზე მითითებით წვდომის მხარდასაჭერად.

ყოველივე ზემოთქმული კიდევ ერთხელ ადასტურებს სათანადოდ შემუშავებული კონფიგურაციის მეტამონაცემების სტრუქტურის უზარმაზარ შესრულებას.

ტესტის კონფიგურაცია სტატიიდან მაგალითით: ᲑᲛᲣᲚᲘ .

პლატფორმა 1C: საწარმოიძლევა უამრავ შესაძლებლობას სხვადასხვა ტიპის მონაცემების შესანახად.

მაგრამ ხშირად ეს შესაძლებლობები არ არის საკმარისი. შემდეგ კი სპეციალური ობიექტი გვეხმარება - StorageValues. ეს ობიექტი საშუალებას გაძლევთ შეინახოთ სპეციალურ ფორმატში როგორც სტანდარტული 1C: Enterprise ობიექტები, მაგალითად, მნიშვნელობების ცხრილი და არასტანდარტული, რომელთა ტიპი არ არის გათვალისწინებული პლატფორმაში. არასტანდარტული ტიპები შეიძლება შეიცავდეს ფაილებს. მაგალითად, 1C მონაცემთა ბაზაში ღირებულების მაღაზიის გამოყენებით, შეგიძლიათ შეინახოთ თანამშრომლების ფოტოები, დოკუმენტების სკანირება, გარე დამუშავება და ა.შ. უპირატესობა აქ არის ის, რომ ყველა ეს ობიექტი ინახება თავად მონაცემთა ბაზაში. შესაბამისად, სარეზერვო ასლიდან ახალი მონაცემთა ბაზის განლაგებისას, ყველა ეს ობიექტი ასევე იქნება ახალ მონაცემთა ბაზაში. მეორეს მხრივ, თუ თქვენ ინახავთ დიდ ფაილებს მონაცემთა ბაზაში, ამან შეიძლება მნიშვნელოვნად გაზარდოს მისი მოცულობა და უარყოფითად იმოქმედოს მის შესრულებაზე. ამიტომ, აქ გონივრული ბალანსი უნდა იყოს დაცული.

მოდით შევხედოთ ღირებულების მაღაზიასთან მუშაობას მაგალითის გამოყენებით. მოდით შევქმნათ სპეციალური დირექტორია კონფიგურატორში - მოდით დავარქვათ გარე ობიექტები, და თავის მხრივ ჩვენ შევქმნით დირექტორიას რეკვიზიტებს Საგანიტიპით StorageValues

ახლა ჩვენ შეგვიძლია შევქმნათ ელემენტები ამ დირექტორიაში და რეკვიზიტებში Საგანითითოეული ელემენტი იწერება ფაილში.

ღირებულების მაღაზიასთან მუშაობა ძალიან მარტივია. თუ გადავხედავთ სინტაქსის დამხმარეს, დავინახავთ, რომ ამ ობიექტს აქვს მხოლოდ ერთი მეთოდი და ერთი კონსტრუქტორი.

ახლა, დემონსტრირებისთვის, მოდით დავწეროთ უმარტივესი კოდი, რომელიც დაწერს ფაილს რეკვიზიტებზე Საგანიადრე შექმნილი დირექტორია ელემენტი და შემდეგ წაიკითხეთ ეს ფაილი საყრდენებიდან და ჩაწერეთ დისკზე, მაგრამ სხვა სახელით.

&სერვერის პროცედურაზე LoadUnloadFile(Directory Element)Directory Object =Directory Element. GetObject(); //სურათის განთავსება ღირებულების მაღაზიაში LabelDownload = ახალი სურათი ("g:\musor\favicon.ico" ) NewValueStorage; //დაწერე დირექტორია ელემენტიდირექტორია ობიექტი. DirectoryObject ობიექტი. Write() ; //სურათის ატვირთვა მნიშვნელობის მაღაზიიდან ფაილშიფაილის სახელი = "g:\musor\favicon_1.ico" ; LabelUpload = დირექტორიის ობიექტი. Საგანი. მიიღეთ() ; LabelUpload. Write(FileName) ; დასრულების პროცედურა

და რამდენიმე ახსნა კოდისთვის.

  • ობიექტი მოთავსებულია მაღაზიაში პირდაპირ, როდესაც მაღაზია იქმნება კონსტრუქტორის გამოყენებით.

სხვა ტიპის ფაილების შესანახად, გარდა სურათებისა, შეგიძლიათ გამოიყენოთ ობიექტი ორობითი მონაცემები. წმინდა თეორიულად, ღირებულების მაღაზიაში შეგიძლიათ შეინახოთ დირექტორია ელემენტები, დოკუმენტები და ა.შ. მაგრამ პრაქტიკაში ამას აზრი არ აქვს. მაგრამ ზოგჯერ შესაძლებელია გამოვიყენოთ ღირებულების საცავი ღირებულებების ცხრილის, ღირებულებების ხის და სხვა უნივერსალური კოლექციების შესანახად.