Ստացեք տվյալներ արժեքի պահեստից 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=Նոր TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Գրել ();

Ընթացակարգի ավարտը

Procedure RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Եթե ​​TabDoc<>Չսահմանված ThenFormElements.TabularDocumentField1.Output(TabDoc); վերջԵթե;

Ընթացակարգի ավարտը

...կամայական ֆայլեր (երկուական տվյալներ).

XZ = NewValueStorage (NewBinaryData (ֆայլ));

Ութն աջակցում է պահեստում տեղադրված տվյալների սեղմմանը.

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 (FileName);

Value Storage տիպի դաշտը մաքրելու համար պետք է այն նշանակել Undefined:

PropsStorage = Չսահմանված;

Ֆայլերի և նկարների հետ աշխատել ներկառուցված լեզվով 1C:Enterprise 8

Նպատակը

Կառավարվող հավելվածն իրականացնում է ֆայլերի հետ աշխատելու նոր մեխանիզմ։ Այն ապահովում է ֆայլերի փոխանակում տեղեկատվական բազայի և հաճախորդի հավելվածի միջև: Այս մեխանիզմի առանձնահատկությունն այն է, որ այն նախատեսված է thin client-ում և Web client-ում օգտագործելու համար և նախագծված է՝ հաշվի առնելով վեբ բրաուզերների կողմից ֆայլերի հետ աշխատելու սահմանափակումները:

Մեխանիզմը մեթոդների մի շարք է, որոնք կարող են օգտագործվել օգտատիրոջ համակարգչում տեղային պահված տվյալները տեղեկատվական բազայի ժամանակավոր պահեստում տեղադրելու, այդ տեղեկատվությունը ժամանակավոր պահեստից տվյալների բազա փոխանցելու և այն ետ ստանալու համար օգտագործողի համակարգիչ: Այս մեխանիզմով լուծվող ամենատարածված կիրառական խնդիրներն են ուղեկցող տեղեկատվության պահպանումը, օրինակ՝ ապրանքների պատկերները, պայմանագրերի հետ կապված փաստաթղթերը և այլն։

Մեթոդի շրջանակը

Ժամանակավոր պահեստավորում

Ժամանակավոր պահեստավորումը տեղեկատվական բազայի մասնագիտացված տարածք է, որտեղ կարող են տեղադրվել երկուական տվյալները: Հիմնական նպատակն է ժամանակավորապես պահպանել տեղեկատվությունը հաճախորդ-սերվեր փոխազդեցության ժամանակ՝ նախքան այն փոխանցելը տվյալների բազա:

Ժամանակավոր պահպանման անհրաժեշտությունն առաջանում է, քանի որ վեբ բրաուզերի գործառնական մոդելը պահանջում է, որ օգտագործողի կողմից ընտրված ֆայլը փոխանցվի անմիջապես սերվերին՝ առանց այն հաճախորդի վրա պահելու հնարավորության: Երբ ֆայլը փոխանցվում է, այն տեղադրվում է ժամանակավոր պահեստում և կարող է օգտագործվել տվյալների բազայում օբյեկտ գրելիս:

Ամենատիպիկ կիրառական խնդիրը, որը լուծվում է ժամանակավոր պահպանման միջոցով, ֆայլերի կամ նկարների հասանելիության ապահովումն է նախքան օբյեկտը տեղեկատվական բազայում գրանցելը, օրինակ՝ տարրի տեսքով:

Պահեստում տեղադրված ֆայլը կամ երկուական տվյալները նույնացվում են եզակի հասցեով, որը հետագայում կարող է օգտագործվել գրելու, կարդալու կամ ջնջելու գործողություններում: Այս հասցեն տրվում է ժամանակավոր պահեստում ֆայլ գրելու մեթոդներով: Ներկառուցված լեզվով առանձին մեթոդ թույլ է տալիս որոշել՝ արդյոք անցած հասցեն ժամանակավոր պահեստում գտնվող տվյալներին մատնանշող հասցե է:

Տեղեկատվական բազա

Մեխանիզմը թույլ է տալիս մուտք գործել երկուական տվյալներ, որոնք պահվում են Value Storage տեսակի ատրիբուտներում:

Ինչպես ժամանակավոր պահպանման դեպքում, տեղեկատվության հասանելիությունը հնարավոր է հատուկ հասցեի միջոցով։ Դուք կարող եք այն ստանալ հատուկ մեթոդի միջոցով՝ փոխանցելով հղում դեպի օբյեկտ կամ տեղեկատվական ռեգիստրի մուտքագրման բանալի և հատկանիշի անվանումը: Աղյուսակային մասի դեպքում լրացուցիչ պահանջվում է փոխանցել աղյուսակային մասի շարքի ցուցիչը։

Ֆայլերի հետ աշխատելու մեթոդները սահմանափակումներ ունեն տեղեկատվական բազայի մանրամասների հետ աշխատելիս: Նրանց համար, ի տարբերություն ժամանակավոր պահպանման, հասանելի է միայն տեղեկատվություն կարդալը, բայց ոչ այն գրելը կամ ջնջելը:

Ֆայլերի հետ աշխատելու մեթոդների նկարագրություն

Տվյալների պահպանում ժամանակավոր պահեստում

Այս մեխանիզմի կիրառման առավել բնորոշ սցենարը ներառում է օգտատիրոջ տվյալների սկզբնական տեղադրումը ժամանակավոր պահեստում: Դրա համար կա երկու մեթոդ՝ PlaceFile() և PlaceFileInTemporaryStorage():

Առաջին մեթոդը՝ PlaceFile(), տեղադրում է ֆայլը տեղական ֆայլային համակարգից ժամանակավոր պահեստում: Մեթոդը կարող է ընդունել թիրախային հասցե պահեստում: Եթե ​​այն սահմանված չէ կամ դատարկ տող է, ապա կստեղծվի նոր ֆայլ և մեթոդը կվերադարձնի իր հասցեն համապատասխան պարամետրի միջոցով։

Եթե ​​գործարկման ինտերակտիվ ռեժիմը որոշող պարամետրը True է, ապա մեթոդը կցուցադրի ստանդարտ ֆայլի ընտրության երկխոսության տուփ, որտեղ դուք կարող եք ընտրել ֆայլը պահեստում տեղադրելու համար: Այս դեպքում մեթոդը կվերադարձնի նաև ընտրված ֆայլի հասցեն:

Արդյունքում մեթոդը վերադարձնում է False-ը, եթե օգտատերը ինտերակտիվ կերպով հրաժարվում է գործողություն կատարել ֆայլի ընտրության երկխոսության մեջ: Մեթոդը հասանելի է միայն հաճախորդի համար:

Երկրորդ մեթոդը՝ PlaceFileInTemporaryStorage(), նման է նախորդին, բացառությամբ, որ այն հասանելի է սերվերում, և ժամանակավոր պահեստում գրվող տվյալները ներկայացված են ոչ թե որպես ուղի ֆայլային համակարգում, այլ որպես տիպի փոփոխական։ Երկուական Տվյալներ. Նմանապես, եթե թիրախային հասցե նշված չէ, պահեստում ստեղծվում է նոր ֆայլ: Դրա հասցեն վերադարձվում է որպես ֆունկցիայի արդյունք:

Ֆայլի առբերում ժամանակավոր պահեստից

Տեղեկատվական բազայում օբյեկտ գրելիս կարող է անհրաժեշտ լինել տվյալներ հանել ժամանակավոր պահեստից և տեղադրել դրանք, օրինակ, հատկանիշի մեջ: Դրա համար կա համապատասխան սերվերի մեթոդ՝ GetFileFromTemporaryStorage(): Այս մեթոդը առբերում է տվյալները ժամանակավոր պահեստից և արդյունքում վերադարձնում դրանք: Դա անելու համար դուք պետք է նշեք հասցեն ժամանակավոր պահեստում: Այս հասցեն վերադարձվում է վերը նկարագրված մեթոդներով՝ PlaceFile() և PlaceFileInTemporaryStorage(), եթե դրանք հաջողությամբ գործարկվեն:

Ֆայլի ջնջում ժամանակավոր պահեստից

Տվյալները մանրամասների մեջ պահվելուց հետո ժամանակավոր պահեստում գտնվող ֆայլը կարող է ջնջվել: Այդ նպատակով կա DeleteFileFromTemporaryStorage() մեթոդ, որը ջնջում է ֆայլը ժամանակավոր պահեստից: Մեթոդը որպես պարամետր վերցնում է ժամանակավոր պահեստում գտնվող ֆայլի հասցեն: Հասանելի է սերվերում:

Հասցեի ստուգում ժամանակավոր պահպանման համար

Ֆայլի հասցեն կարող է նշել ինչպես ժամանակավոր պահեստավորումը, այնպես էլ մանրամասները տեղեկատվական բազայում: Դրա տեսակը ստուգելու համար կա մեթոդ This isTemporaryStorageAddress():

Այն ստուգում է, որ անցած հասցեն խանութին մատնանշող հասցե է: Վերադարձնում է True, եթե հասցեն մատնանշում է ժամանակավոր պահեստ: Մեթոդը հասանելի է սերվերում:

Հասցեների ստացում

Այն բանից հետո, երբ տվյալները տեղադրվեն ինֆաբազայում մանրամասների մեջ, ձեզ հարկավոր է մուտք գործել դրանք՝ օգտագործելով ֆայլի մեթոդները:

Բայց նախքան տվյալներ ստանալը, օրինակ, սեփականությունից, դուք պետք է ստանաք այս գույքի հասցեն: Այդ նպատակով կա GetFileAddressInInformationBase() մեթոդ:

Դրա նպատակն է վերադարձնել ֆայլի հասցեն ինֆաբազում՝ ըստ սկզբնական պարամետրերի: Դա անելու համար դուք պետք է փոխանցեք օբյեկտի բանալին (սա կարող է լինել կամ հղում դեպի օբյեկտ կամ տեղեկատվական ռեգիստրի մուտքի բանալի) և հատկանիշի անունը: Եթե ​​Ձեզ անհրաժեշտ է ստանալ աղյուսակային մասի հատկանիշում պահվող ֆայլի հասցեն, նախքան ատրիբուտի անվանումը հատկանիշի անունը նշող պարամետրում, պետք է ավելացնել աղյուսակային մասի անունը և կետը «.»: Մեթոդը հասանելի է և՛ հաճախորդի, և՛ սերվերի վրա:

Ֆայլի առբերում տեղեկատվական բազայից

GetFile() մեթոդը ֆայլ է ստանում տեղեկատվական բազայից և պահպանում այն ​​օգտագործողի տեղական ֆայլային համակարգում։ Առաջին պարամետրը նշում է ֆայլի հասցեն հենարաններում կամ ֆայլի ժամանակավոր պահեստում: Երկրորդ պարամետրը սահմանում է ստացված ֆայլի նպատակակետը: Ոչ ինտերակտիվ ռեժիմում դուք պետք է նշեք ուղին: Ինտերակտիվ ռեժիմում պարամետրը պարտադիր չէ:

Լռելյայնորեն մեթոդը կատարվում է ինտերակտիվ ռեժիմով, այսինքն՝ վերջին պարամետրը True է։ Սա նշանակում է, որ երկխոսության տուփ է ցուցադրվում, որտեղ դուք կարող եք նշել գործողությունը ստացված ֆայլի հետ՝ գործարկել այն կամ պահպանել այն օգտագործողի կողմից նշված վայրում: Եթե ​​ինտերակտիվ ռեժիմն ակտիվ է, և թիրախային սկավառակի ֆայլի ուղու պարամետրը նշված չէ, ֆայլի բացման գործողությունը հասանելի չէ: Վերադարձնում է բուլյան արժեք: False նշանակում է, որ օգտագործողը որոշել է չեղարկել գործողությունը ինտերակտիվ պահպանման ֆայլի երկխոսության վանդակում:

Ֆայլի մեթոդների օգտագործման օրինակ

// Ինտերակտիվ ռեժիմում սկավառակից ֆայլ ստանալը // և տեղադրել այն ժամանակավոր պահեստում &Հաճախորդի ընթացակարգի վրա SelectDiskFileAndWrite()

Փոփոխական SelectedName; VariableTemporaryStorageAddress; Եթե ​​PutFile (TemporaryStorageAddress, SelectedName, True) Ապա Object.FileName = SelectedName; PlaceObjectFile (TemporaryStorageAddress); վերջԵթե;

Ընթացակարգի ավարտը

// Ֆայլի պատճենում ժամանակավոր պահեստից գրացուցակ // հատկանիշ, օբյեկտի ձայնագրում, ֆայլի ջնջում ժամանակավոր // պահեստից &Սերվերի ընթացակարգի վրա Տեղադրել օբյեկտի ֆայլը (ժամանակավոր պահպանման հասցե)

Տեղեկատու տարր = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage (TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Նոր Ֆայլ (DirectoryItem.FileName); Տեղեկատու Item.FileName = FilePathOnDisk.Name; Գրացուցակի տարր.Write(); Փոփոխված = Սխալ; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes (տեղեկատուի տարր, «Օբյեկտ»);

Ընթացակարգի ավարտը

// Ֆայլի ընթերցում և պահպանում ինտերակտիվ ռեժիմով տեղական սկավառակի վրա & Հաճախորդի ընթացակարգի վրա ReadFileAndSaveToDisk()

Հասցե = GetFileAddressInInformationBase (Object.Link, «FileData»); GetFile (Address, Object.FileName, True);

Ընթացակարգի ավարտը

Նկարի դաշտում հասցեների աջակցություն

Նկարի դաշտի կառավարումն աջակցում է ժամանակավոր պահեստում կամ տվյալների բազայում գտնվող ֆայլի հասցեով նշված նկարի ցուցադրմանը:

Դա անելու համար ձևի տարրի Data հատկության մեջ պետք է սահմանել տողի տիպի հատկանիշ: Այս հատկանիշի արժեքը կմեկնաբանվի որպես նկարի հասցե:

Օրինակ // Պատկերի դաշտի կապում պատկերի հասցեին ժամանակավոր // պահեստում: Հասցե Նկարները ձևավորում են տողի տիպի մանրամասները

PlaceFile (PictureAddress, True)

Picture.Data = ՀասցեՆկարներ

Վեբ հաճախորդի հետ աշխատելիս սահմանափակումներ

Նկարագրված մեխանիզմի գործարկումը Վեբ հաճախորդից օգտվելիս ունի որոշ սահմանափակումներ։ Այս սահմանափակումները կապված են դիտարկիչի անվտանգության մոդելի հետ: Այսպիսով, օրինակ, հաճախորդը չի կարող ինքնուրույն պահել ֆայլը տեղական ֆայլային համակարգում, այսինքն՝ հասանելի է միայն PlaceFile() և GetFile() եղանակների ինտերակտիվ տարբերակը: Բացառություն է արվում, երբ փորձում եք օգտագործել ոչ ինտերակտիվ ռեժիմ: Երկխոսության տուփերը, որոնք հայտնվում են ինտերակտիվ կերպով, հատուկ են ձեր դիտարկիչի տեսակին:

Հատկություններ հաճախորդի վրա Value Storage-ի հետ աշխատելիս

Խնդիր.

Երբ փաստաթուղթը աղյուսակային բաժնում ունի Value Storage տեսակի հատկանիշ, այն դանդաղեցնում է փաստաթղթի ձևի բացումը, եթե այս հատկանիշը մեծ տվյալներ է պարունակում:

Ենթադրյալ պատճառ.

Հավանաբար, ձևը բացելիս հաճախորդին ուղարկվում է ոչ թե Value Store-ում գտնվող տվյալների հղումը, այլ հենց տվյալները:

Լուծում

  • Ձևի աղյուսակի հատկանիշի հատկություններում կա «Միշտ օգտագործիր» դրոշակը: Եթե ​​այն սահմանված է, դաշտի բովանդակությունը միշտ փոխանցվում է սերվերի և հաճախորդի միջև, օրինակ՝ ձևը բացելիս: Այս դրոշը պետք է անջատված լինի, բայց դա պետք է հաշվի առնել կոդում, քանի որ լռելյայնորեն հաճախորդի վրա այս դաշտի արժեք չի լինի: Օրինակ կարելի է գտնել 1C:Archive-ում:

Նույնիսկ ավելի լավ է օգտագործել ժամանակավոր պահեստավորումֆայլերը հաճախորդի և սերվերի միջև փոխանցելու համար:

Մենք ունենք «Products» գրացուցակ, «Տվյալներ» հատկանիշում, որի տեղեկատվությունը պահվում է երկուական տվյալների տեսքով: Հատկանիշն ինքնին ունի «Արժեքի պահպանում» արժեքի տեսակը: Հետևյալ սքրինշոթը ցույց է տալիս գրացուցակի մետատվյալների կառուցվածքը:

Տարրի տեսքով սկավառակից կամայական ֆայլ կցելու համար ներդրվել է «AttachFile» հրամանը։ Դրա ծրագրի կոդը ներկայացված է հետևյալ ցուցակում.

& Հաճախորդի ընթացակարգի վրա AttachFile (հրաման) // Հաճախորդի վրա հրամանների մշակիչ: Ֆայլի ընտրություն // Երկխոսություն՝ սկավառակից ֆայլ ընտրելու համարՌեժիմ = FileSelectionDialogMode: Բացում; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile երկխոսություն: FullFileName = " " ; OpenFile երկխոսություն: MultipleSelect = False; OpenFile երկխոսություն: Title = «Ընտրել ֆայլեր»; Եթե ​​FileOpenDialog. Ընտրեք() Ապա FilePath = FileOpenDialog: FullFileName; // Ստացեք երկուական ֆայլի տվյալներ BinaryData = նոր BinaryData (PathToFile); // Երկուական տվյալները փոխանցեք սերվերին AttachFileServer (BinaryData); Հակառակ դեպքում Text = «ru = "" Ֆայլ (ներ) ընտրված չէ:" " ; en ="" Ֆայլ (ներ) ընտրված չէ:" " " ; Զգուշացում (NStr(Text) ) ; EndIf ; EndProcedure & OnServer Procedure AttachFileServer (BinaryData) // Տեղեկատվական անվտանգության մեջ ֆայլ գրանցելու համար սպասարկիչի կարգավորիչ // Ձևի օբյեկտը վերածել հղման օբյեկտի ObjectCurrent = FormAttributesValue(«Օբյեկտ»); // Նշանակե՛ք նոր արժեք «Տվյալներ» հատկանիշին ObjectCurrent. Տվյալներ = NewValueStorage (BinaryData) ; // Պահպանել փոփոխությունները ObjectCurrent. Գրել(); Ընթացակարգի ավարտը

Եթե ​​մենք նկարագրում ենք ալգորիթմը ընդհանուր տերմիններով, ապա նախ հաճախորդի սկավառակից ընտրվում է ֆայլ: Ստացված երկուական ֆայլի տվյալները ուղարկվում են սերվեր, որտեղ այն գրանցվում է տեղեկատվական բազայում, մասնավորապես՝ ընթացիկ գրացուցակի տարրի «Տվյալներ» հատկանիշում:

Սկզբունքորեն, ամեն ինչ աշխատում է: Տարր բացելիս մենք կարող ենք կարդալ այս տվյալները ըստ անհրաժեշտության: Եթե, օրինակ, պատկերը պահպանված է հատկանիշում, ապա մենք կարող ենք ստանալ այն և ցուցադրել ձևի դաշտում։ Այս լուծումը տեղ ունի, բայց առաջադրանքների մեծ մասում օպտիմալ չէ օգտագործել ատրիբուտներ «Արժեքի պահպանում» արժեքի տիպով գրացուցակներում և փաստաթղթերում: Եվ դրա համար էլ...

Կատարման ազդեցություն

Եկեք կատարենք որոշ կատարողական թեստեր: Թեստերը կօգտագործեն «Products» գրացուցակի երկու տարր՝ կից ֆայլով և առանց դրա: Կցված ֆայլի չափը 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 օբյեկտ. Գրել(); //Վերբեռնեք պատկերը արժեքի պահոցից ֆայլ FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Տեղեկատուի օբյեկտ: Օբյեկտ. Ստանալ(); LabelUpload. Գրել (Ֆայլի անուն) ; Ընթացակարգի ավարտը

Եվ կոդի մի քանի բացատրություն։

  • Օբյեկտը տեղադրվում է խանութում անմիջապես, երբ խանութը ստեղծվում է կոնստրուկտորի միջոցով:

Պահպանման մեջ պատկերներից բացի այլ տեսակի ֆայլեր պահելու համար կարող եք օգտագործել օբյեկտը Երկուական Տվյալներ. Զուտ տեսականորեն, արժեքների պահեստում կարող եք նույնիսկ պահել գրացուցակի տարրերը, փաստաթղթերը և այլն: Բայց գործնականում դա ոչ մի իմաստ չունի: Բայց երբեմն հնարավոր է օգտագործել արժեքների պահեստ՝ արժեքների աղյուսակ, արժեքների ծառ և այլ ունիվերսալ հավաքածուներ պահելու համար: