Sla binaire gegevens op in bestand 1c. Uitbreiding van de functionaliteit van het werken met binaire gegevens

Binaire gegevens in 1C zijn bedoeld voor het opslaan van bestanden van willekeurig formaat. Met hun hulp kunt u:

  • Organiseer interactie via een binair protocol met verschillende apparaten;
  • Bewaar bestanden van elk formaat als metadata-objectattributen;
  • Converteer tekstgegevens naar binair (meestal gebruikt voor het verzenden van rapporten);
  • Werken met binaire gegevens in het geheugen.

Wat het systeem kan doen

Bij het werken met binaire gegevens kan Platform 8.3 de volgende acties uitvoeren:

  1. Lees en schrijf binaire gegevens;
  2. Verplaats gegevens van client naar server en terug met behulp van tijdelijke opslag;
  3. Initialiseer een object van het type “Picture” met behulp van binaire bestanden;
  4. Lees ze van het World Wide Web met behulp van de objecten “Mail Attachment”, “HTTP Connection”, enz.
  5. Gebruik cryptografische hulpmiddelen om belangrijke bijlagen te coderen en te ondertekenen;
  6. Bereken met behulp van het object “Data Hashing” de hashfunctie.

Gegevens opslaan in details

Laten we bijvoorbeeld een map maken in een testconfiguratie.

In feite is het een beetje onjuist om dezelfde map te gebruiken om informatie over de nomenclatuur en binaire beeldgegevens op te slaan. Bij voldoende grote hoeveelheden gegevens en zware, grote bestanden kunnen ongewenste downtime en “remmen” in de werking van het systeem optreden. Vanuit systeemoogpunt zou het veel juister zijn om een ​​aparte map “Afbeeldingen” te organiseren, een link waarnaar we als rekwisietentype zouden kunnen instellen.


Het is belangrijk op te merken dat vanwege het feit dat attributen van het type “ValueStorage” die binaire gegevens bevatten niet beschikbaar zijn in de beheerde applicatiemodus, ze alleen toegankelijk zijn met behulp van de FormAttributesValue-methode.


Het berichtveld vertegenwoordigt een binair gegevensrecord met waardeopslag.

Gegevens uit rekwisieten lezen

Laten we een verwerking maken die het bestand dat in binaire vorm in onze configuratie is opgeslagen, zal uitvoeren naar een spreadsheetdocument (dit is bijvoorbeeld nodig om een ​​bedrijfslogo af te drukken).


Kortom, dit is alle code die we nodig hebben. Met behulp van de Get()-operator lezen we de binaire gegevens die zijn opgeslagen in het overeenkomstige mapkenmerk en brengen deze over naar het object "Picture", dat wordt weergegeven in de cel linksboven van het spreadsheetdocument van het formulier (Fig. 9).

Afb.9

Data conversie

Het is niet gebruikelijk, maar het komt voor dat het bij het werken met niet-standaard uitwisselingen met externe systemen nodig is om gegevens van binair formaat naar Base64-formaat te converteren of omgekeerd.

In de meeste gevallen converteert het platform de gegevens automatisch; als dit niet gebeurt, moet u globale vertaalfuncties gebruiken:

  1. Base64String – converteert de opgegeven waarde naar een string met de overeenkomstige codering;
  2. Base64Value – voert de omgekeerde conversie uit.

Optimalisatie van bovenstaande code

De code in figuur 4 werkt zeker, maar met één belangrijk voorbehoud: als het selectievakje 'Modaliteitsgebruiksmodus' is ingeschakeld in de configuratie-eigenschappen (figuur 10). Anders zal het gebruik ervan een fout veroorzaken.
Afb.10

Om dit te voorkomen, gaat u in de directory-elementformuliermodule naar het menu Tekst->Refactoring->Verouderde synchrone oproepen->Module-aanroepen converteren.

Na enige tijd worden synchrone oproepen automatisch omgezet in asynchroon en krijgt de code de vorm (Fig. 11)

Afb.11

Geïmplementeerd in versie 8.3.10.2168.

Geleidelijk breiden we de functionaliteit voor het werken met binaire gegevens uit. Hiervoor zijn verschillende redenen. Ten eerste hebben we niet alles uitgevoerd wat we hadden gepland. En ten tweede kregen wij tijdens het bespreken van nieuwe mogelijkheden een aantal wensen van u, die wij ook besloten uit te voeren.

Nieuwe functies voor het converteren van binaire gegevens naar verschillende formaten

In een mondiale context hebben we een groot aantal nieuwe functies toegevoegd voor het converteren van binaire gegevens. U kunt dus bijvoorbeeld voorwaartse en achterwaartse conversie van binaire gegevens uitvoeren naar een gewone tekenreeks, formaatreeks Basis64 en opmaaktekenreeks BinHex. Bovendien kunt u de binaire gegevens zelf naar formaten converteren Basis64, BinHex en terug.

Soortgelijke conversies worden ondersteund voor het type BufferBinairegegevens. Bovendien kunt u een binaire gegevensbuffer omzetten in binaire gegevens en omgekeerd.

Bovendien kunt u met twee nieuwe functies binaire gegevens in verschillende delen splitsen, en omgekeerd, om verschillende objecten van het type te combineren Binaire data in een. In dit geval bevat het nieuwe object de gegevens van alle onderdelen in de volgorde die u opgeeft.

Deze functies zijn qua concept vergelijkbaar met het splitsen en samenvoegen van bestanden, maar zijn in veel gevallen efficiënter. Omdat het niet nodig is om de binaire gegevens eerst in een bestand op te slaan, en omdat er bij het splitsen geen onnodig kopiëren van gegevens plaatsvindt.

De mogelijkheid toevoegen om met streams te werken aan objecten die met bestanden werken

Omdat het gebruik van binaire gegevens grotendeels verband houdt met bestandsbewerkingen, vonden we het volkomen logisch en natuurlijk om werk met stromen toe te voegen aan die objecten die momenteel op de een of andere manier bestanden lezen en schrijven.

Als gevolg hiervan kunt u nu streams openen voor lezen en schrijven wanneer u objecten gebruikt zoals:

  • Leestekst En SchrijfTekst;
  • FastInfoSet lezen En EntryFastInfoSet;
  • HTML lezen En PostHTml;
  • JSON lezen En JSON-invoer;
  • XML lezen En XML-invoer;
  • Zip-bestand lezen En Zip-bestand opnemen.

Je kunt de body als stream ontvangen als je met HTTP werkt:

  • HTTP-verzoek En HTTP-antwoord;
  • HTTPServiceRequest En HTTPServiceResponse.
  • Tekstdocument;
  • Tabelvormig document;
  • Opgemaakt document;
  • Geografisch schema;
  • GrafischSchema;
  • FTP-verbinding.

Schrijven naar een stream is nu beschikbaar als u met typen werkt Afbeelding En Converteren naar canonieke XML. En daarnaast wordt het werken met streams nu ondersteund in verschillende methoden die typen hebben XSL-conversie, Cryptografie Manager, CertificaatCryptografie En Hashinggegevens.

Efficiënt kopiëren door gegevens te lezen en te schrijven

De binaire tools die we hebben geïmplementeerd, maakten het mogelijk om streams te kopiëren. Maar deze operatie werd niet erg efficiënt uitgevoerd op grote hoeveelheden gegevens.

Daarom de soort Gegevens lezen we hebben een nieuwe methode geïmplementeerd KopieerB(). Het elimineert niet alleen dit probleem, maar vereenvoudigt ook de tekst, waardoor deze begrijpelijker wordt.

Vroeger was het bijvoorbeeld mogelijk om binaire gegevens van de ene stream te ontvangen en deze naar een andere stream te schrijven.

Nu is het niet meer nodig om binaire gegevens te ontvangen; het kopiëren wordt uitgevoerd in de fase van het lezen van gegevens.

Het leuke is dat je niet alleen naar een stream kunt kopiëren, maar ook naar een object Schrijfgegevens. Deze optie is handig wanneer u, naast gegevens uit de bronstream, een aantal van uw eigen gegevens naar de uitvoerstream moet schrijven.

Bitsgewijze logische bewerkingen op een binaire gegevensbuffer

U kunt nu bitgewijze logische bewerkingen gebruiken wanneer u met binaire gegevensbuffers werkt. Als resultaat van deze bewerkingen zal het resultaat van een bitsgewijze combinatie van de originele bytes en bytes in de gegeven buffer naar de bronbuffer worden geschreven volgens de regels van de geselecteerde logische bewerking. Wij hebben de volgende operaties uitgevoerd:

  • WriteBitAnd();
  • WriteBitOr();
  • WriteBitExclusiveOr();
  • WriteBitIne();
  • Omkeren().

Een goed voorbeeld van het gebruik van bitsgewijze logische bewerkingen is de taak van het decoderen van het uitwisselingsformaat met winkelapparatuur. Het uitwisselingsformaat met winkelapparatuur wordt bijvoorbeeld beschreven door een veld van 1 byte. Dit veld bevat een reeks kenmerken die het productassortiment beschrijven:

  • Bits 0-2: belastingtarief;
  • Bit 3: 0 - stukgoederen, 1 - gewicht goederen;
  • Bit 4: 0 - verkoop toestaan, 1 - verkoop verbieden;
  • Bit 5: 0 - aantaltelling inschakelen, 1 - hoeveelheidstelling uitschakelen;
  • Bit 6: 0 - enkele verkoop is verboden, 1 - enkele verkoop is toegestaan;
  • Bit 7: Gereserveerd.

Dan kan de code die deze informatie extraheert en presenteert in een vorm die geschikt is voor verdere verwerking er als volgt uitzien.

Een getal verkrijgen uit hexadecimale en binaire letterlijke getallen

  • GetalVanHexString();
  • GetalVanBinaireString().

Binaire letterlijke waarden zijn handig voor het definiëren van maskers wanneer ze worden gebruikt in combinatie met bitsgewijze bewerkingen. In het vorige voorbeeld, met analyse van het uitwisselingsformaat met commerciële apparatuur, worden maskers bijvoorbeeld gespecificeerd met behulp van decimale getallen. Dit is niet erg handig, omdat je bij het schrijven en lezen van code het decimale getal voortdurend mentaal naar het binaire systeem moet vertalen.

Het is veel handiger om in plaats daarvan binaire letterlijke waarden te gebruiken. Tegelijkertijd wordt de code duidelijker en wordt de kans op fouten aanzienlijk verminderd.

Hexadecimale letterlijke waarden zijn handig in gebruik bij het parseren van technische formaten: beeld-, geluid- en videoformaten.

Veranderingen in de technologie van externe NativeAPI-componenten

Voorheen waren er een aantal beperkingen bij het overbrengen van binaire gegevens tussen 1C:Enterprise en een externe component. Het was bijvoorbeeld onmogelijk om binaire gegevens over te dragen naar een externe component, en bij het werken in een webclient was het uitwisselen van binaire gegevens over het algemeen onmogelijk.

Nu verwijderen we al deze beperkingen. U kunt binaire gegevens in beide richtingen en zelfs in de webclient uitwisselen.

Dit heeft op geen enkele wijze invloed op de werking van bestaande externe componenten. Ze zullen werken zoals voorheen. Maar in nieuw gemaakte componenten kunt u nu objecten als parameters doorgeven Binaire data.

Met het 1C:Enterprise 8 technologieplatform kunt u willekeurige bestanden in de informatiebank opslaan, daar vandaan ophalen en op verschillende manieren gebruiken. Laten we deze bewerkingen bekijken aan de hand van voorbeelden.

Voordat u een bestand naar de 1C-informatiebank uploadt, moet u het volledige adres van het bestand op schijf verkrijgen. Het werken met dialoogvensters voor bestandsselectie wordt beschreven in .

Om bestanden op te slaan, gebruikt u een attribuut (of registerbron) met het type Opslagwaarden.

Een willekeurig bestand uploaden naar de 1C-informatiebasis

Elk bestand kan worden weergegeven als binaire gegevens en erin worden geladen Waardeopslag.

Bij het converteren van binaire gegevens naar een object Opslagwaarden ontwerp gebruikt nieuwe opslagwaarden (gegevens, compressie) met twee parameters:

  1. Gegevens— binaire gegevens die in opslag moeten worden opgeslagen
  2. Compressie— compressieverhouding van het Deflatie-algoritme. Geheel getal in het bereik -1...9. -1 is het standaardcompressieniveau. 0 - geen compressie, 9 - maximale compressie. Standaardwaarde: -1. De parameter is optioneel; als deze niet is opgegeven, wordt er geen compressie gebruikt.

//Converteer het bestand naar binaire gegevens
Bestand = Nieuwe binaire gegevens (pad);

//Maak een nieuw Value Storage-object

DataStorage = NewValueStorage(Bestand, NewDataCompression(9) );

Een willekeurig bestand van de 1C-infobase op schijf opslaan

Om een ​​bestand uit de 1C-database op schijf op te slaan, moet u het pad en de bestandsnaam bepalen. Om dit te doen is er een dialoogvenster voor het opslaan van bestanden, waarmee u kunt werken zoals beschreven in.

// Haal binaire gegevens op uit de opslag
//Gegevensopslag - attribuut van een object met het type Waardeopslag

//Schrijf de ontvangen gegevens naar schijf
//De Path-variabele bevat het volledige adres van het bestand op schijf
Gegevens. Schrijven(pad);

Een bestand bekijken dat zich in de 1C-informatiebasis bevindt

Als u een bestand wilt bekijken dat in de database is opgeslagen, moet er een toepassing op uw computer zijn geïnstalleerd die het bestand opent.

// Haal de naam op van het tijdelijke bestand met de vereiste extensie
//In de Extension-variabele moet u de bestandsextensie plaatsen, bijvoorbeeld "pdf"
Pad = GetTemporaryFileName(Extensie);

// Ontvang gegevens uit opslag
//Gegevensopslag - attribuut van een object met het type Waardeopslag
Gegevens = Gegevensopslag. Krijgen() ;

//Schrijf gegevens naar een tijdelijk bestand
Gegevens. Schrijven(pad);

//Probeert het bestand te openen in de beoogde toepassing
//Als de applicatie niet wordt gevonden, verschijnt het systeemdialoogvenster "Openen met...".
LaunchApplication(Pad) ;

Bijna alle informatie kan in een waardeopslag worden opgeslagen, b.v.

... foto's (foto's):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Opsommingen.Types van aanvullende informatie van Objects.Image; Opslag = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Opslag.Get();

// op deze plaats wordt alles weergegeven... Form Elements.PictureField1.Picture = Storage.Get(); HuidigeAfbeelding.Write();

...spreadsheetdocument:

TabDoc=Nieuw TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Opslag=NieuweWaardeOpslag(TabDoc); Schrijven();

Einde procedure

Procedure RestoreFromStoragePress(Element)

TabDoc=Opslag.Get(); Als TabDoc<>Niet gedefinieerd ThenFormElements.TabularDocumentField1.Output(TabDoc); stop als;

Einde procedure

...willekeurige bestanden (binaire gegevens):

XZ = NewValueStorage(NewBinaryData(bestand));

Acht ondersteunt compressie van gegevens die in opslag zijn geplaatst:

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

... externe verwerking en rapportage:

Procedure LoadProcessingIntoStorage(PropsStorageType)

CompressieRate = NewDataCompression(9); //9 maximum PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Compressieverhouding));

Einde procedure

Procedure StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TijdelijkFileDirectory()+"rapport.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write (tijdelijke bestandsnaam); ExternalProcessing = ExternalProcessing.Create(tijdelijkebestandsnaam); ExternalProcessing.GetForm().Open();

Einde procedure

Werken met opbergruimte

Als het binaire gegevens waren, kunnen deze worden hersteld vanuit het waardearchief met behulp van de Get-methode en naar een bestand worden geschreven met behulp van de Write()-methode.

Als TypeWaarde(opslag)<>Type("BinaireData") Vervolgens

BinaryData = Opslag.Get();

BinaireData = Opslag;

stop als; BinaryData.Write(Bestandsnaam);

Als het bijvoorbeeld een Word-document (doc-bestand of een ander geregistreerd bestandstype) was, dan kan het als volgt worden geopend:

LaunchApplication(Bestandsnaam);

Om een ​​veld van het type Waardeopslag te wissen, moet u het Ongedefinieerd toewijzen:

PropsStorage = Ongedefinieerd;

Werken met bestanden en afbeeldingen in de ingebouwde taal 1C:Enterprise 8

Doel

De beheerde applicatie implementeert een nieuw mechanisme voor het werken met bestanden. Het biedt bestandsuitwisseling tussen de infobase en de clientapplicatie. De eigenaardigheid van dit mechanisme is dat het is ontworpen voor gebruik in een thin client en een webclient en is ontworpen rekening houdend met de beperkingen op het werken met bestanden die worden opgelegd door webbrowsers.

Het mechanisme is een reeks methoden die kunnen worden gebruikt om gegevens die lokaal op de computer van de gebruiker zijn opgeslagen, in een tijdelijke opslag van de informatiebasis te plaatsen, deze informatie van de tijdelijke opslag naar de database over te brengen en deze terug te ontvangen naar de computer van de gebruiker. De meest voorkomende toepassingsproblemen die door dit mechanisme worden opgelost, zijn de opslag van begeleidende informatie, bijvoorbeeld afbeeldingen van goederen, documenten met betrekking tot contracten, enz.

Methode Reikwijdte

Tijdelijke opslag

Tijdelijke opslag is een gespecialiseerd gebied van de informatiebasis waarin binaire gegevens kunnen worden geplaatst. Het hoofddoel is de tijdelijke opslag van informatie tijdens client-server-interactie voordat deze naar de database wordt overgebracht.

De behoefte aan tijdelijke opslag ontstaat omdat het besturingsmodel van de webbrowser vereist dat het door de gebruiker geselecteerde bestand rechtstreeks naar de server wordt overgebracht zonder de mogelijkheid om het op de client op te slaan. Wanneer een bestand wordt overgedragen, wordt het tijdelijk opgeslagen en kan het vervolgens worden gebruikt bij het schrijven van een object naar de database.

De meest typische toepassingstaak die door tijdelijke opslag wordt opgelost, is het verlenen van toegang tot bestanden of afbeeldingen voordat het object in de informatiebasis wordt vastgelegd, bijvoorbeeld in de vorm van een element.

Een bestand of binaire gegevens die in de opslag worden geplaatst, worden geïdentificeerd door een uniek adres, dat later kan worden gebruikt bij schrijf-, lees- of verwijderbewerkingen. Dit adres wordt gegeven door methoden voor het schrijven van een bestand naar tijdelijke opslag. Met een aparte methode in de ingebouwde taal kunt u bepalen of het doorgegeven adres een adres is dat verwijst naar gegevens in tijdelijke opslag.

Informatiebasis

Met dit mechanisme kunt u toegang krijgen tot binaire gegevens die zijn opgeslagen in attributen van het type Waardeopslag.

Net als bij tijdelijke opslag is toegang tot informatie mogelijk via een speciaal adres. U kunt dit via een speciale methode verkrijgen door een link door te geven naar een object of een toegangssleutel voor het informatieregister, en de naam van het attribuut. Bij een tabeldeel is het bovendien nodig om de rijindex van het tabeldeel over te dragen.

Methoden voor het werken met bestanden hebben beperkingen bij het werken met infobase-details. Voor hen is, in tegenstelling tot tijdelijke opslag, alleen leesinformatie beschikbaar, maar niet schrijven of verwijderen.

Beschrijving van methoden voor het werken met bestanden

Gegevens opslaan in tijdelijke opslag

Het meest typische scenario voor het gebruik van dit mechanisme houdt in dat gebruikersgegevens in eerste instantie in tijdelijke opslag worden geplaatst. Hiervoor zijn twee methoden: PlaceFile() en PlaceFileInTemporaryStorage().

De eerste methode, PlaceFile(), plaatst een bestand uit het lokale bestandssysteem in tijdelijke opslag. De methode kan een doeladres in de opslag accepteren. Als het niet is gedefinieerd of een lege string is, wordt er een nieuw bestand gemaakt en retourneert de methode zijn adres via de overeenkomstige parameter.

Als de parameter die de interactieve werkingsmodus bepaalt True is, zal de methode een standaard dialoogvenster voor bestandsselectie weergeven waarin u een bestand kunt selecteren om in de opslag te plaatsen. In dit geval retourneert de methode ook het adres van het geselecteerde bestand.

Als resultaat retourneert de methode False als de gebruiker interactief weigert een bewerking uit te voeren in het bestandsselectiedialoogvenster. De methode is alleen beschikbaar op de client.

De tweede methode, PlaceFileInTemporaryStorage(), is vergelijkbaar met de vorige, behalve dat deze beschikbaar is op de server en dat de gegevens die naar de tijdelijke opslag moeten worden geschreven, niet worden weergegeven als een pad in het bestandssysteem, maar als een variabele van het type Binaire data. Op dezelfde manier wordt er, als er geen doeladres is opgegeven, een nieuw bestand in de opslag aangemaakt. Het adres wordt geretourneerd als resultaat van de functie.

Een bestand ophalen uit tijdelijke opslag

Wanneer u een object naar de infobase schrijft, moet u mogelijk gegevens uit de tijdelijke opslag halen en deze bijvoorbeeld in een attribuut plaatsen. Er is hiervoor een overeenkomstige servermethode: GetFileFromTemporaryStorage(). Deze methode haalt gegevens op uit tijdelijke opslag en retourneert deze als resultaat. Om dit te doen, moet u het adres in de tijdelijke opslag opgeven. Dit adres wordt geretourneerd door de hierboven beschreven methoden PlaceFile() en PlaceFileInTemporaryStorage() als deze met succes worden uitgevoerd.

Een bestand verwijderen uit de tijdelijke opslag

Nadat de gegevens in de details zijn opgeslagen, kan het bestand in de tijdelijke opslag worden verwijderd. Voor dit doel is er een methode DeleteFileFromTemporaryStorage(), die een bestand uit de tijdelijke opslag verwijdert. De methode neemt als parameter het adres van een bestand in tijdelijke opslag. Beschikbaar op de server.

Adres controleren voor tijdelijke opslag

Het bestandsadres kan zowel tijdelijke opslag als details in de infobase aangeven. Om het type te controleren, is er een methode This isTemporaryStorageAddress().

Er wordt gecontroleerd of het doorgegeven adres een adres is dat naar de winkel verwijst. Retourneert True als het adres verwijst naar tijdelijke opslag. De methode is beschikbaar op de server.

Het adres van de rekwisieten ontvangen

Nadat de gegevens in de details in de infobase zijn geplaatst, moet u deze mogelijk openen via bestandsmethoden.

Maar voordat u gegevens ontvangt van bijvoorbeeld een woning, moet u het adres van deze woning opvragen. Voor dit doel is er een methode GetFileAddressInInformationBase().

Het doel ervan is om het bestandsadres in de infobase terug te geven volgens de originele parameters. Om dit te doen, moet u de objectsleutel (dit kan een link naar het object zijn of een toegangssleutel voor het informatieregister) en de naam van het attribuut doorgeven. Als u het adres wilt ophalen van een bestand dat is opgeslagen in een tabellair onderdeelattribuut, moet u vóór de attribuutnaam in de parameter die de attribuutnaam specificeert, de naam van het tabellair onderdeel en een punt “.” toevoegen. De methode is beschikbaar op zowel de client als de server.

Een bestand ophalen uit de infobase

De GetFile()-methode ontvangt een bestand van de infobase en slaat dit op in het lokale bestandssysteem van de gebruiker. De eerste parameter specificeert het adres van het bestand in de rekwisieten of tijdelijke bestandsopslag. De tweede parameter specificeert de bestemmingslocatie van het resulterende bestand. In de niet-interactieve modus moet u het pad opgeven. In de interactieve modus is de parameter optioneel.

Standaard wordt de methode uitgevoerd in de interactieve modus, dat wil zeggen dat de laatste parameter True is. Dit betekent dat er een dialoogvenster wordt weergegeven waarin u een actie kunt opgeven met het ontvangen bestand: voer het uit of sla het op op een door de gebruiker opgegeven locatie. Als de interactieve modus actief is en de parameter Doelschijfbestandspad niet is opgegeven, is de bewerking voor het openen van het bestand niet beschikbaar. Retourneert een Booleaanse waarde. Onwaar betekent dat de gebruiker ervoor heeft gekozen de bewerking in het interactieve dialoogvenster voor het opslaan van bestanden te annuleren.

Voorbeeld van het gebruik van bestandsmethoden

// Een bestand ontvangen van schijf in interactieve modus // en het in tijdelijke opslag plaatsen &Op de clientprocedure SelectDiskFileAndWrite()

Variabele geselecteerde naam; Variabel Tijdelijk Opslagadres; Als PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile (tijdelijk opslagadres); stop als;

Einde procedure

// Een bestand kopiëren van een tijdelijke opslag naar een map // attribuut, een object opnemen, een bestand verwijderen uit een tijdelijke opslag // &Op de server Procedure Objectbestand plaatsen (adres voor tijdelijke opslag)

Directory-element = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(tijdelijkeopslagadres); Directory Element.File-gegevens = NewValueStorage (BinaryData); FilePathOnDisk = Nieuw bestand (DirectoryItem.FileName); Directory Item.FileName = BestandPathOnDisk.Name; Directory-element.Write(); Gewijzigd = Onwaar; DeleteFileFromTemporaryStorage (tijdelijk opslagadres); ValueFormAttributes(Directory Element, "Object");

Einde procedure

// Een bestand uit de rekwisieten lezen en opslaan // op de lokale schijf in interactieve modus &Op de clientprocedure ReadFileAndSaveToDisk()

Adres = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Adres, Object.Bestandsnaam, True);

Einde procedure

Ondersteuning voor adressen in het afbeeldingsveld

Het besturingselement Afbeeldingsveld ondersteunt het weergeven van een afbeelding gespecificeerd door het adres van een bestand in tijdelijke opslag of in een database.

Om dit te doen, moet u een stringtype-attribuut instellen in de eigenschap Data van het formulierelement. De waarde van dit attribuut wordt geïnterpreteerd als het adres van de afbeelding.

Voorbeeld // Het afbeeldingsveld binden aan het afbeeldingsadres in tijdelijke // opslag. AdresAfbeeldingen vormen details van het stringtype

PlaatsBestand(Afbeeldingsadres,True)

Picture.Data = AdresAfbeeldingen

Beperkingen bij het werken met de webclient

De werking van het beschreven mechanisme bij gebruik van de webclient heeft enkele beperkingen. Deze beperkingen houden verband met het beveiligingsmodel van de browser. De client kan dus bijvoorbeeld niet zelfstandig een bestand opslaan in het lokale bestandssysteem, dat wil zeggen dat alleen de interactieve versie van de clientmethoden PlaceFile() en GetFile() beschikbaar is. Er wordt een uitzondering gegenereerd wanneer wordt geprobeerd de niet-interactieve modus te gebruiken. De dialoogvensters die interactief verschijnen, zijn specifiek voor uw browsertype.

Functies bij het werken met Value Storage op de Client

Probleem:

Wanneer een document een attribuut van het type Waardeopslag in de tabelsectie heeft, vertraagt ​​dit het openen van het documentformulier als dit attribuut grote gegevens bevat.

Veronderstelde reden:

Misschien wordt bij het openen van een formulier niet de link naar de gegevens in de Value Store naar de klant verzonden, maar de gegevens zelf.

Oplossing

  • In de eigenschappen van het tabelattribuut van het formulier staat een vlag "Altijd gebruiken". Als dit is ingesteld, wordt de inhoud van het veld altijd overgedragen tussen de server en de client, bijvoorbeeld bij het openen van een formulier. Deze vlag moet worden uitgeschakeld, maar er moet in de code rekening mee worden gehouden, aangezien er standaard geen waarde voor dit veld op de client zal staan. Een voorbeeld is te vinden in 1C:Archief.

Het is zelfs beter om te gebruiken tijdelijke opslag om bestanden over te dragen tussen client en server.