Tumanggap ng data mula sa imbakan ng halaga 1s 8.3. Mga limitasyon kapag nagtatrabaho sa Web client

Halos anumang impormasyon ay maaaring maimbak sa isang value store, hal.

... mga larawan (mga larawan):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types ng Karagdagang Impormasyon ng Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// sa lugar na ito ipinapakita nito ang lahat... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...dokumento ng spreadsheet:

TabDoc=Bagong TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Sumulat ();

Katapusan ng Pamamaraan

Pamamaraan RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Kung ang TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); tapusin kung;

Katapusan ng Pamamaraan

...arbitrary na mga file (binary data):

XZ = NewValueStorage(NewBinaryData(file));

Sinusuportahan ng walo ang compression ng data na inilagay sa storage:

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

... panlabas na pagproseso at pag-uulat:

Pamamaraan LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 maximum PropsStorageType = Bagong StorageValues(Bagong BinaryData("c:\reports\report.epf", Compression Rate));

Katapusan ng Pamamaraan

Pamamaraan StartProcessingFromStorage(PropsStorageType)

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

Katapusan ng Pamamaraan

Paggawa gamit ang imbakan

Kung ito ay Binary Data, maaari itong maibalik mula sa value store gamit ang Get method at isulat sa isang file gamit ang Write() method.

Kung TypeValue(Storage)<>I-type ang("BinaryData") Pagkatapos

BinaryData = Storage.Get();

BinaryData = Imbakan;

tapusin kung; BinaryData.Write(FileName);

Kung ito ay, halimbawa, isang dokumento ng Word (doc file, o iba pang nakarehistrong uri ng file), maaari itong buksan tulad nito:

LaunchApplication(FileName);

Upang i-clear ang isang field ng uri ng Value Storage, kailangan mong italaga ito na Hindi Natukoy:

PropsStorage = Hindi Natukoy;

Paggawa gamit ang mga file at larawan sa built-in na wika 1C:Enterprise 8

Layunin

Ang pinamamahalaang application ay nagpapatupad ng isang bagong mekanismo para sa pagtatrabaho sa mga file. Nagbibigay ito ng pagpapalitan ng file sa pagitan ng infobase at application ng kliyente. Ang kakaiba ng mekanismong ito ay na ito ay dinisenyo para sa paggamit sa isang manipis na kliyente at isang Web client at idinisenyo na isinasaalang-alang ang mga paghihigpit sa pagtatrabaho sa mga file na ipinataw ng mga Web browser.

Ang mekanismo ay isang hanay ng mga pamamaraan na maaaring magamit upang ilagay ang data na lokal na nakaimbak sa computer ng gumagamit sa isang pansamantalang imbakan ng base ng impormasyon, ilipat ang impormasyong ito mula sa pansamantalang imbakan patungo sa database, at matanggap ito pabalik sa computer ng gumagamit. Ang pinakakaraniwang mga problema sa aplikasyon na nalutas ng mekanismong ito ay ang pag-iimbak ng kasamang impormasyon, halimbawa, mga larawan ng mga kalakal, mga dokumentong nauugnay sa mga kontrata, atbp.

Saklaw ng Pamamaraan

Pansamantalang imbakan

Ang pansamantalang imbakan ay isang espesyal na lugar ng base ng impormasyon kung saan maaaring ilagay ang binary data. Ang pangunahing layunin ay ang pansamantalang pag-iimbak ng impormasyon sa panahon ng pakikipag-ugnayan ng client-server bago ito mailipat sa database.

Ang pangangailangan para sa pansamantalang imbakan ay lumitaw dahil ang modelo ng pagpapatakbo ng web browser ay nangangailangan na ang pinili ng user na file ay direktang ilipat sa server nang walang posibilidad na iimbak ito sa kliyente. Kapag ang isang file ay inilipat, ito ay inilalagay sa pansamantalang imbakan at pagkatapos ay magagamit kapag nagsusulat ng isang bagay sa database.

Ang pinakakaraniwang gawain ng application na nalutas sa pamamagitan ng pansamantalang imbakan ay ang pagbibigay ng access sa mga file o mga larawan bago ang bagay ay naitala sa base ng impormasyon, halimbawa, sa anyo ng isang elemento.

Ang isang file o binary na data na inilagay sa imbakan ay kinikilala ng isang natatanging address, na maaaring magamit sa ibang pagkakataon sa pagsulat, pagbabasa, o pagtanggal ng mga operasyon. Ang address na ito ay ibinibigay sa pamamagitan ng mga pamamaraan para sa pagsulat ng isang file sa pansamantalang imbakan. Ang isang hiwalay na paraan sa built-in na wika ay nagbibigay-daan sa iyo upang matukoy kung ang ipinasa na address ay isang address na tumuturo sa data sa pansamantalang imbakan.

Batayan ng impormasyon

Ang mekanismo ay nagbibigay-daan sa iyo upang ma-access ang binary data na nakaimbak sa mga katangian ng uri ng Value Storage.

Tulad ng kaso ng pansamantalang imbakan, ang pag-access sa impormasyon ay posible sa pamamagitan ng isang espesyal na address. Makukuha mo ito sa pamamagitan ng isang espesyal na paraan sa pamamagitan ng pagpasa ng link sa isang object o isang information register entry key, at ang pangalan ng attribute. Sa kaso ng isang tabular na bahagi, kinakailangan din na ilipat ang row index ng tabular na bahagi.

Ang mga pamamaraan para sa pagtatrabaho sa mga file ay may mga limitasyon kapag nagtatrabaho sa mga detalye ng infobase. Para sa kanila, hindi tulad ng pansamantalang pag-iimbak, tanging pagbabasa ng impormasyon ang magagamit, ngunit hindi pagsusulat o pagtanggal nito.

Paglalarawan ng mga pamamaraan para sa pagtatrabaho sa mga file

Pag-save ng data sa pansamantalang imbakan

Ang pinakakaraniwang senaryo para sa paggamit ng mekanismong ito ay kinabibilangan ng paunang paglalagay ng data ng user sa pansamantalang imbakan. Mayroong dalawang paraan para dito: PlaceFile() at PlaceFileInTemporaryStorage().

Ang unang paraan, PlaceFile(), ay naglalagay ng file mula sa lokal na file system sa pansamantalang imbakan. Ang pamamaraan ay maaaring tumanggap ng isang target na address sa imbakan. Kung hindi ito tinukoy o isang walang laman na string, isang bagong file ang gagawin at ibabalik ng pamamaraan ang address nito sa pamamagitan ng kaukulang parameter.

Kung True ang parameter na tumutukoy sa interactive na mode ng pagpapatakbo, magpapakita ang paraan ng karaniwang dialog box ng pagpili ng file kung saan maaari kang pumili ng file na ilalagay sa storage. Sa kasong ito, ibabalik din ng pamamaraan ang address ng napiling file.

Bilang resulta, ang pamamaraan ay nagbabalik ng False kung interactive na tumanggi ang user na magsagawa ng operasyon sa dialog ng pagpili ng file. Ang pamamaraan ay magagamit lamang sa kliyente.

Ang pangalawang paraan, PlaceFileInTemporaryStorage(), ay katulad ng nauna, maliban na ito ay magagamit sa server, at ang data na isusulat sa pansamantalang imbakan ay kinakatawan hindi bilang isang landas sa file system, ngunit bilang isang variable ng uri BinaryData. Gayundin, kung walang tinukoy na target na address, isang bagong file ang gagawin sa storage. Ibinalik ang address nito bilang resulta ng function.

Pagkuha ng file mula sa pansamantalang imbakan

Kapag nagsusulat ng isang bagay sa infobase, maaaring kailanganin mong kunin ang data mula sa pansamantalang imbakan at ilagay ito, halimbawa, sa isang katangian. Mayroong katumbas na paraan ng server para dito - GetFileFromTemporaryStorage(). Kinukuha ng paraang ito ang data mula sa pansamantalang imbakan at ibinabalik ito bilang resulta. Upang gawin ito, kailangan mong tukuyin ang address sa pansamantalang imbakan. Ibinabalik ang address na ito ng mga pamamaraang inilarawan sa itaas na PlaceFile() at PlaceFileInTemporaryStorage() kung matagumpay na naisakatuparan ang mga ito.

Pagtanggal ng file mula sa pansamantalang imbakan

Matapos ma-save ang data sa mga detalye, maaaring tanggalin ang file sa pansamantalang imbakan. Para sa layuning ito, mayroong isang paraan na DeleteFileFromTemporaryStorage(), na nagtatanggal ng isang file mula sa pansamantalang imbakan. Kinukuha ng pamamaraan bilang parameter ang address ng isang file sa pansamantalang imbakan. Available sa server.

Sinusuri ang address para sa pansamantalang imbakan

Ang file address ay maaaring magpahiwatig ng parehong pansamantalang imbakan at mga detalye sa infobase. Upang suriin ang uri nito, mayroong isang paraan na This isTemporaryStorageAddress().

Tinitingnan nito na ang ipinasang address ay isang address na tumuturo sa tindahan. Nagbabalik ng True kung tumuturo ang address sa pansamantalang storage. Ang pamamaraan ay magagamit sa server.

Pagtanggap ng props address

Pagkatapos mailagay ang data sa mga detalye sa infobase, maaaring kailanganin mong i-access ito gamit ang mga paraan ng file.

Ngunit bago ka makatanggap ng data, halimbawa mula sa isang property, kailangan mong makuha ang address ng property na ito. Para sa layuning ito, mayroong isang paraan na GetFileAddressInInformationBase().

Ang layunin nito ay ibalik ang file address sa infobase ayon sa orihinal na mga parameter. Upang gawin ito, kailangan mong ipasa ang object key (maaaring ito ay isang link sa object o isang information register entry key) at ang pangalan ng attribute. Kung kailangan mong makuha ang address ng isang file na naka-imbak sa isang tabular na bahagi na katangian, bago ang pangalan ng katangian sa parameter na tumutukoy sa pangalan ng katangian, kailangan mong idagdag ang pangalan ng tabular na bahagi at isang tuldok na ".". Ang pamamaraan ay magagamit sa parehong kliyente at sa server.

Pagkuha ng file mula sa infobase

Ang GetFile() na paraan ay tumatanggap ng file mula sa infobase at ini-save ito sa lokal na file system ng user. Tinutukoy ng unang parameter ang address ng file sa props o pansamantalang imbakan ng file. Tinutukoy ng pangalawang parameter ang patutunguhang lokasyon ng resultang file. Sa non-interactive na mode, dapat mong tukuyin ang path. Sa interactive na mode, opsyonal ang parameter.

Bilang default, ang pamamaraan ay isinasagawa sa interactive na mode, iyon ay, ang huling parameter ay True. Nangangahulugan ito na ang isang dialog box ay ipinapakita kung saan maaari mong tukuyin ang isang aksyon sa natanggap na file: patakbuhin ito o i-save ito sa isang lokasyon na tinukoy ng user. Kung aktibo ang interactive na mode at hindi tinukoy ang parameter ng Target na disk file path, hindi available ang file open operation. Nagbabalik ng boolean value. Ang ibig sabihin ng False ay pinili ng user na kanselahin ang operasyon sa dialog box ng interactive na save file.

Halimbawa ng paggamit ng mga pamamaraan ng file

// Pagtanggap ng file mula sa disk sa interactive na mode // at paglalagay nito sa pansamantalang storage &Sa Pamamaraan ng Kliyente SelectDiskFileAndWrite()

Variable SelectedName; VariableTemporaryStorageAddress; Kung PutFile(TemporaryStorageAddress, SelectedName, True) Pagkatapos Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); tapusin kung;

Katapusan ng Pamamaraan

// Pagkopya ng file mula sa pansamantalang imbakan patungo sa isang direktoryo // attribute, pagtatala ng isang bagay, pagtanggal ng file mula sa pansamantalang // storage &Sa Server Procedure Place Object File (Temporary Storage Address)

Elemento ng Direktoryo = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Bagong File(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Directory element.Write(); Binago = Mali; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Directory Element, "Object");

Katapusan ng Pamamaraan

// Pagbabasa ng file mula sa props at pag-save nito // sa lokal na disk sa interactive na mode &Sa Pamamaraan ng Kliyente ReadFileAndSaveToDisk()

Address = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

Katapusan ng Pamamaraan

Suporta para sa mga address sa field ng larawan

Sinusuportahan ng kontrol ng Picture Field ang pagpapakita ng larawan na tinukoy ng address ng isang file sa pansamantalang imbakan o sa isang database.

Upang gawin ito, dapat kang magtakda ng katangian ng uri ng string sa property ng Data ng elemento ng form. Ang halaga ng katangiang ito ay bibigyang-kahulugan bilang ang address ng larawan.

Halimbawa // Pagbubuklod ng field ng imahe sa address ng imahe sa pansamantalang // storage. Mga detalye ng AddressPictures ng uri ng string

PlaceFile(PictureAddress,True)

Larawan.Data = AddressPictures

Mga limitasyon kapag nagtatrabaho sa Web client

Ang pagpapatakbo ng inilarawang mekanismo kapag gumagamit ng Web client ay may ilang mga limitasyon. Ang mga paghihigpit na ito ay nauugnay sa modelo ng seguridad ng browser. Kaya, halimbawa, ang kliyente ay hindi maaaring independiyenteng mag-save ng isang file sa lokal na file system, iyon ay, tanging ang interactive na bersyon ng mga pamamaraan ng kliyente na PlaceFile() at GetFile() ang available. Ang isang pagbubukod ay itinapon kapag sinusubukang gumamit ng non-interactive na mode. Ang mga dialog box na lumilitaw nang interactive ay partikular sa uri ng iyong browser.

Mga tampok kapag nagtatrabaho sa Value Storage sa Client

Problema:

Kapag ang isang Dokumento ay may katangian ng uri ng Value Storage sa tabular na seksyon, pinapabagal nito ang pagbubukas ng form ng dokumento kung ang attribute na ito ay naglalaman ng malaking data.

Ipinapalagay na dahilan:

Marahil, kapag binubuksan ang isang form, hindi ang link sa data na matatagpuan sa Value Store ang ipinadala sa kliyente, ngunit ang data mismo.

Solusyon

  • Sa mga katangian ng katangian ng talahanayan ng form mayroong isang flag na "Palaging gamitin". Kung ito ay nakatakda, ang mga nilalaman ng field ay palaging inililipat sa pagitan ng server at ng kliyente - halimbawa, kapag nagbubukas ng isang form. Dapat na hindi pinagana ang flag na ito, ngunit dapat itong isaalang-alang sa code, dahil bilang default ay walang halaga para sa field na ito sa kliyente. Ang isang halimbawa ay makikita sa 1C:Archive.

Mas maganda pang gamitin pansamantalang imbakan para maglipat ng mga file sa pagitan ng client at server.

Mayroon kaming direktoryo na "Mga Produkto", sa katangiang "Data" kung saan naka-imbak ang impormasyon sa anyo ng binary data. Ang katangian mismo ay may uri ng halaga na "Value Storage". Ipinapakita ng sumusunod na screenshot ang istraktura ng metadata ng direktoryo.

Upang mag-attach ng isang arbitrary na file mula sa disk sa anyo ng isang elemento, ang "AttachFile" na utos ay ipinatupad. Ang code ng programa nito ay ipinakita sa sumusunod na listahan:

& Sa Pamamaraan ng Kliyente AttachFile(Command) // Command handler sa kliyente. Pagpili ng file // Dialog para sa pagpili ng file mula sa disk Mode = FileSelectionDialogMode. Pagbubukas; OpenFileDialog = NewFileSelectDialog(Mode); OpenFile Dialog. FullFileName = " " ; OpenFile Dialog. MultipleSelect = False ; OpenFile Dialog. Pamagat = "Pumili ng mga file" ; Kung ang FileOpenDialog. Piliin () Pagkatapos FilePath = FileOpenDialog. FullFileName; // Tumanggap ng binary file data BinaryData = bagong BinaryData(PathToFile) ; // Maglipat ng binary data sa server AttachFileServer(BinaryData) ; Kung hindi, Text = "ru = " " File (mga) hindi napili!" " ; en =" " File (mga) hindi napili!" " " ; Babala(NStr(Text) ); EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // Handler sa server para sa pag-record ng isang file sa seguridad ng impormasyon // I-transform ang form object sa isang reference object ObjectCurrent = FormAttributesValue("Object" ); // Magtalaga ng bagong value sa attribute na "Data". ObjectCurrent. Data = NewValueStorage(BinaryData) ; // I-save ang mga pagbabago ObjectCurrent. Sumulat (); Katapusan ng Pamamaraan

Kung inilalarawan namin ang algorithm sa mga pangkalahatang tuntunin, pagkatapos ay pipiliin muna ang isang file mula sa disk sa kliyente. Ang resultang binary file data ay ipinadala sa server, kung saan ito ay naitala sa base ng impormasyon, lalo na sa "Data" na katangian ng kasalukuyang elemento ng direktoryo.

Sa prinsipyo, gumagana ang lahat. Kapag binubuksan ang isang elemento, mababasa natin ang data na ito kung kinakailangan. Kung, halimbawa, ang isang imahe ay nai-save sa katangian, maaari naming makuha ito at ipakita ito sa field ng form. Ang solusyon na ito ay may lugar, ngunit sa karamihan ng mga gawain ay hindi pinakamainam na gumamit ng mga katangian na may uri ng halaga na "Value Storage" sa mga direktoryo at dokumento. At dahil jan...

Epekto sa Pagganap

Magsagawa tayo ng ilang pagsubok sa pagganap. Ang mga pagsubok ay gagamit ng dalawang elemento ng direktoryo ng "Mga Produkto", na may at walang naka-attach na file. Ang laki ng naka-attach na file ay 5 megabytes.

Ginagawa ang lahat ng mga pagsubok gamit ang pagproseso ng "GetElement" sa configuration ng pagsubok. Maaari mong i-download ang pagsasaayos na ito mula sa link sa dulo ng artikulo.

Sukatin natin ang oras na kailangan upang buksan ang mga item sa direktoryo ng "Mga Produkto." Upang magbukas ng isang elemento, ginagamit ang pangkalahatang paraan ng konteksto na "OpenValue()", na nagpapasa ng reference sa elemento bilang isang parameter. Sukatin natin ang oras ng pagbubukas gamit ang isang karaniwang tool sa pagsukat ng pagganap. Ang mga resulta ay ipinakita sa sumusunod na screenshot:

Tulad ng nakikita natin, ang oras na kinakailangan upang buksan ang isang elemento na may nakalakip na file ay 10 beses na mas mahaba! Gumawa tayo ng isa pang pagsubok. Isagawa natin ang paraan na "GetObject()" para i-reference ang elemento ng katalogo ng produkto. Maaari mong makita ang resulta ng pagsubok sa sumusunod na screenshot.

Ang pagkakaiba ay medyo makabuluhan. Ang pagtanggap ng isang elemento nang walang kalakip na file ay 194 beses na mas mabilis!

Nangyayari ito dahil natatanggap ng pamamaraang "GetObject()" ang lahat ng data mula sa mga detalye ng elemento ng direktoryo sa pamamagitan ng sanggunian. Alinsunod dito, natatanggap ng pamamaraan ang mga halaga ng hindi lamang mga katangian ng "Code" at "Pangalan", kundi pati na rin ang halaga ng katangian ng "Data". Kung nag-iimbak ito ng binary data na 5 megabytes ang laki (tulad ng sa aming halimbawa), pagkatapos ay kapag natanggap ang bagay, ang data na ito ay inilalagay sa RAM (tulad ng iba pang mga detalye) at pagkatapos ay inilipat sa panig ng kliyente. Ito ay ang pagtanggap ng data mula sa katangiang ito na nagpapataas ng oras para sa pagkuha ng elementong object. Kung ang isang manipis na channel ng komunikasyon ay ginagamit, kung gayon ang oras ng pagbubukas ay tataas nang higit pa dahil sa paglipat ng isang malaking halaga ng impormasyon sa network.

Tandaan: kapag isinasagawa ang pamamaraang "OpenValue()", ang object ng elemento ng direktoryo ay unang nakuha, at pagkatapos ay binago sa isang form na bagay at ipinasa sa kliyente (para sa mga pinamamahalaang form). Iyon ay, kapag ang isang elemento ay binuksan sa pamamagitan ng sanggunian, ang bagay ay nakuha din.

Magsagawa tayo ng pangwakas na pagsubok sa oras na kinakailangan upang buksan at magsulat ng isang item sa direktoryo na may at walang nakalakip na file. Ang resulta ay ipinapakita sa sumusunod na screenshot.

Natural na resulta. Ang oras para makatanggap at pagkatapos ay magsulat para sa isang item sa direktoryo na may kalakip na file ay naging ~19 beses na mas mahaba. Tulad ng nabanggit sa itaas, kapag tumatanggap ng isang bagay, ang mga halaga ng lahat ng mga detalye nito ay nakuha, kabilang ang katangiang "Data" kung saan nakaimbak ang 5 megabytes ng impormasyon. Kapag naisulat ang isang elemento, ang dami ng data na ito ay muling isusulat sa infobase. Dahil dito, ang pag-iimbak ng data sa isang katangian ng direktoryo (o dokumento) na may uri ng "Value Storage" ay negatibong nakakaapekto sa pagganap kapwa kapag kinukuha ang isang bagay at kapag inilalagay ito sa infobase.

Ano ang pinakatamang paraan upang malutas ang problema ng pag-iimbak ng data para sa mga bagay na base ng impormasyon?

Tamang solusyon

Kung titingnan natin ang pagpapatupad ng mekanismong ito sa karaniwang mga pagsasaayos, makikita natin na para sa mga bagay ang karagdagang impormasyon ay nakaimbak sa isang hiwalay na talahanayan ng rehistro ng impormasyon. Ito ay, halimbawa, kung ano ang hitsura ng mekanismo ng attachment file sa isang karaniwang pagsasaayos ng bersyon 11 ng “Trade Management”.

Ang direktoryo ng "Nomenclature" ay ang may-ari para sa direktoryo ng "NomenclatureAttachedFiles". Ito naman ay nauugnay sa rehistro ng impormasyon ng AttachedFiles, ang dimensyon ng AttachedFile na tumutukoy sa elemento nito. Kaya, ang data na naka-attach sa mga object ng base ng impormasyon ay aktwal na naka-imbak sa talahanayan ng rehistro ng impormasyon, ang pagpapatakbo nito ay halos hindi apektado ng dami ng data na nakaimbak sa mapagkukunan. Ang intermediate na direktoryo na "Nomenclature of Attached Files" ay kinakailangan upang mag-imbak ng karagdagang impormasyon para sa naka-attach na file, pati na rin upang suportahan ang access sa naka-attach na file sa pamamagitan ng sanggunian.

Lahat ng nasa itaas ay muling kinukumpirma ang napakalaking epekto sa pagganap ng isang maayos na idinisenyong istraktura ng metadata ng configuration.

Pagsubok ng configuration na may isang halimbawa mula sa artikulo: LINK .

Platform 1C: Enterprise nagbibigay ng maraming posibilidad para sa pag-iimbak ng data ng iba't ibang uri.

Ngunit kadalasan ang mga pagkakataong ito ay hindi sapat. At pagkatapos ay isang espesyal na bagay ang tumulong sa amin - StorageValues. Binibigyang-daan ka ng bagay na ito na mag-imbak sa isang espesyal na format ng parehong karaniwang 1C:Enterprise na mga bagay, halimbawa, isang talahanayan ng mga halaga, at mga hindi pamantayan kung saan ang isang uri ay hindi ibinigay sa platform. Ang mga hindi karaniwang uri ay maaaring may kasamang mga file. Halimbawa, gamit ang isang value store sa isang 1C database, maaari kang mag-imbak ng mga litrato ng mga empleyado, pag-scan ng mga dokumento, panlabas na pagproseso, atbp. Ang kalamangan dito ay ang lahat ng mga bagay na ito ay naka-imbak sa database mismo. Alinsunod dito, kapag nagde-deploy ng bagong database mula sa isang backup na kopya, ang lahat ng mga bagay na ito ay makikita rin sa bagong database. Sa kabilang banda, kung mag-imbak ka ng malalaking file sa database, maaari nitong mapataas nang malaki ang volume nito at negatibong makaapekto sa pagganap nito. Samakatuwid, ang isang makatwirang balanse ay dapat mapanatili dito.

Tingnan natin ang pagtatrabaho sa isang value store gamit ang isang halimbawa. Gumawa tayo ng isang espesyal na direktoryo sa configurator - tawagan natin ito ExternalObjects, at gagawa kami ng mga kinakailangan para sa direktoryo Isang bagay may uri StorageValues

At ngayon ay maaari na tayong lumikha ng mga elemento sa direktoryong ito, at sa props Isang bagay Ang bawat elemento ay nakasulat sa isang file.

Ang pagtatrabaho sa isang tindahan ng halaga ay napakasimple. Kung titingnan natin ang syntax helper, makikita natin na ang bagay na ito ay may isang paraan lamang at isang constructor.

Ngayon, para sa pagpapakita, isulat natin ang pinakasimpleng code na magsusulat ng file sa props Isang bagay isang dating nilikha na elemento ng direktoryo, at pagkatapos ay basahin ang file na ito mula sa props at isulat ito sa disk, ngunit sa ilalim ng ibang pangalan.

&Sa Pamamaraan ng Server LoadUnloadFile(Directory Element)Directory Object =Directory Element. GetObject() ; //Ilagay ang larawan sa value store LabelDownload = Bagong Larawan("g:\musor\favicon.ico" ) NewValueStorage; //Sumulat ng elemento ng direktoryo Direktoryo na object. object ng DirectoryObject. Sumulat (); //I-upload ang larawan mula sa value store patungo sa isang file FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Bagay sa Direktoryo. Isang bagay. Kumuha (); LabelUpload. Sumulat(FileName) ; Katapusan ng Pamamaraan

At ilang paliwanag para sa code.

  • Direktang inilalagay ang bagay sa tindahan kapag ginawa ang tindahan gamit ang constructor.

Upang mag-imbak ng iba pang mga uri ng mga file maliban sa mga imahe sa imbakan, maaari mong gamitin ang bagay BinaryData. Puro theoretically, maaari ka ring mag-imbak ng mga elemento ng direktoryo, dokumento, atbp. sa value store. Ngunit sa pagsasagawa ito ay walang anumang kahulugan. Ngunit kung minsan ay posible na gumamit ng isang tindahan ng halaga upang mag-imbak ng isang talahanayan ng mga halaga, isang puno ng mga halaga, at iba pang pangkalahatang koleksyon.