Ստացեք տվյալներ արժեքի պահեստից 1s 8.3. Վեբ հաճախորդի հետ աշխատելիս սահմանափակումներ
Գրեթե ցանկացած տեղեկատվություն կարող է պահվել արժեքի պահեստում, օրինակ.
... նկարներ (լուսանկարներ):
// այս վայրում այն ցուցադրում է ամեն ինչ... 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); վերջԵթե;
Ընթացակարգի ավարտը
...կամայական ֆայլեր (երկուական տվյալներ).
Ութն աջակցում է պահեստում տեղադրված տվյալների սեղմմանը.
... արտաքին մշակում և հաշվետվություն.
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() մեթոդը։
BinaryData = Storage.Get();
BinaryData = Պահպանում;
վերջԵթե; BinaryData.Write(FileName);
Եթե դա, օրինակ, Word փաստաթուղթ էր (doc ֆայլ կամ այլ գրանցված ֆայլի տեսակ), ապա այն կարող է բացվել այսպես.
Value Storage տիպի դաշտը մաքրելու համար պետք է այն նշանակել Undefined:
Ֆայլերի և նկարների հետ աշխատել ներկառուցված լեզվով 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 նշանակում է, որ օգտագործողը որոշել է չեղարկել գործողությունը ինտերակտիվ պահպանման ֆայլի երկխոսության վանդակում:
Ֆայլի մեթոդների օգտագործման օրինակ
Փոփոխական 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. Գրել (Ֆայլի անուն) ; Ընթացակարգի ավարտըԵվ կոդի մի քանի բացատրություն։
- Օբյեկտը տեղադրվում է խանութում անմիջապես, երբ խանութը ստեղծվում է կոնստրուկտորի միջոցով:
Պահպանման մեջ պատկերներից բացի այլ տեսակի ֆայլեր պահելու համար կարող եք օգտագործել օբյեկտը Երկուական Տվյալներ. Զուտ տեսականորեն, արժեքների պահեստում կարող եք նույնիսկ պահել գրացուցակի տարրերը, փաստաթղթերը և այլն: Բայց գործնականում դա ոչ մի իմաստ չունի: Բայց երբեմն հնարավոր է օգտագործել արժեքների պահեստ՝ արժեքների աղյուսակ, արժեքների ծառ և այլ ունիվերսալ հավաքածուներ պահելու համար: