Hur man sparar binär data till en 1c-fil. Arbeta med binär data. Läser data från rekvisita

Skriv ut (Ctrl+P)

16.3. Arbeta med binär data

16.3.1. allmän information

Vid implementering av applikationslösningar kan det finnas situationer där det är nödvändigt att analysera olika binära data. Till exempel måste du bestämma filtypen med hjälp av en signatur eller utföra några manipulationer med en bild. För att arbeta med binär data tillhandahåller 1C:Enterprise speciella mjukvarugränssnitt. Därefter ska vi titta på möjligheterna att arbeta med binär data.
Allt arbete med binär data bygger på konceptet en ström. Flödeär en logisk generalisering av en godtycklig (i allmänhet) datakälla (Stream-objekt). Systemet ger inte möjlighet att skapa ett oberoende Stream-objekt som inte är associerat med någon källa. Men det finns härledda objekt som kan skapas - en ström associerad med en fil på disken (FileStream-objekt) eller en ström skapad i minnet (MemoryStream-objekt). En stream låter dig både läsa data och skriva den. För att bestämma möjligheten att utföra vissa operationer har en ström (och härledda objekt) speciella metoder som låter dig bestämma vilken
operationer är tillgängliga med denna tråd (metoder AvailableRecord(), AvailableRead(), AvailableChangePosition()).
Om du behöver arbeta med en stream på en högre nivå, i synnerhet läsa/skriva data som ett antal (med olika bitdjup) eller en sträng, så är DataRead/DataWrite-objekten avsedda för detta. Genom att använda dessa objekt kan du ta ett mer strukturerat förhållningssätt till de binära data som finns i strömmen. Så, till exempel, genom att känna till formatet på en fil, kan du ganska bekvämt läsa en sådan fil, få nödvändiga data från rubrikerna (som i regel representeras av typens nummer och sträng), hoppa över onödiga datablock och ladda de nödvändiga för bearbetning.
Det allmänna schemat för att arbeta med binära data kan representeras enligt följande:

  1. Streammottagning pågår
  2. Ett Data Reader- eller Data Writer-objekt skapas.
  3. Med hjälp av objektet som skapades i steg 2 utförs de nödvändiga åtgärderna.
  4. Objektet som skapades i steg 2 stängs.
  5. Om inga fler operationer krävs, stängs strömmen som erhölls i steg 1.
  6. Om du behöver fortsätta arbeta med strömmen kan du ställa in en ny position i strömmen (om den här operationen stöds) och fortsätta arbeta från steg 2.

Det är värt att notera att det är möjligt att kombinera punkterna 1 och 2. Systemet ger med andra ord möjlighet att skapa objekt Läs data/skriv data direkt från till exempel ett BinaryData-objekt.
För att utföra olika operationer med binär data ger systemet möjligheten att erhålla en del av strömmen som ett separat fragment med slumpmässig (byte-för-byte) åtkomst (objekt BufferBinaryData). Buffertstorleken ställs in när den skapas och kan inte ändras senare. När man arbetar med en binär databuffert är det möjligt att arbeta med antal olika bitdjup som
som en helhet. I det här fallet är det möjligt att specificera byteordningen i ord: "lite endian" eller "big endian" (big endian). Det är också möjligt att dela en buffert i flera och kombinera flera binära databuffertar till en resulterande buffert.
Det är viktigt att notera att arbete med en binär databuffert avsevärt kan förenkla implementeringen om arbete med binär data implementeras på klientapplikationssidan i asynkront läge. I detta fall kommer inläsning av data i bufferten att utföras som en asynkron operation, och arbetet med buffertdata kommer att vara synkront.
Arbete med binär data är tillgängligt på klientsidan (inklusive webbklienten) av applikationen och på serversidan, såväl som i synkrona och asynkrona arbetsscheman. Ytterligare exempel kommer att använda ett synkront arbetsschema.

16.3.2. Läser binär data

Som ett exempel på att läsa binär data kommer vi att överväga uppgiften att bestämma det korrekta filformatet som valdes i systemet för vidare användning. En .wav-fil med ljuddata kommer att användas som filen som kontrolleras. För att lagra .wav-filer används Resource Interchange File Format (RIFF), en beskrivning av detta finns på länken:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (at engelska språket). För läsexemplet kommer följande formatinformation att användas:
1. De första 4 byten av filen innehåller formatidentifieraren: RIFF.
2. de nästa 4 byten innehåller storleken på den faktiska ljuddatan i little-endian byteordning.
3. De nästa 4 byten innehåller texttypen för data som används: WAVE.
För att utföra dessa åtgärder behöver du följande kod på det inbyggda språket:

Läs = Ny ReadData(Filnamn, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Om filformat<>"RIFF" Då
Report("Detta är inte en RIFF-fil");
Lämna tillbaka ;
EndIf ;
Om FileType = "WAVE" Då
Rapport ("Detta är en WAV-fil med data, storlek " + DataSize + " bytes");
Annat
Rapport (“Detta är inte en WAV-fil”);
Lämna tillbaka;
endIf;

Låt oss titta på exemplet mer detaljerat.
Först öppnas filen vars namn finns i filnamnsvariabeln, filen öppnas för läsning ( FileOpenMode.Open), kommer bara att läsa från filen ( FileAccess.Read) och en 16-byte buffert kommer att användas för läsning.
Sedan genereras en ström för läsning av data, som kommer att ha den minst signifikanta byteordningen för data av typen Number. Sedan läses fyra tecken, ett 32-bitars heltal och ytterligare fyra tecken från den resulterande strömmen. Den resulterande datan analyseras och baserat på resultaten av analysen fattas ett beslut om den valda filen är en .wav-fil eller inte.

16.3.3. Skriver binär data

Att skriva binära data till en fil, i det enklaste fallet, görs på följande sätt:

Entry = Nytt WriteData(Filnamn);
För Index = 0 till 255 cykel
Write.WriteByte(Index);
EndCycle;
Record.Close() ;

Detta exempel skriver till en fil en sekvens av byte från 0 till 255 (0xFF i hexadecimal). Detta är det enklaste inspelningsalternativet.
Du kan också använda en metod som liknar läsmetoden som diskuterades i föregående exempel, där en filström erhålls och data skrivs till denna filström.

16.3.4. Arbeta med en binär databuffert

Som nämnts ovan tillhandahåller den binära databufferten ett bekvämt sätt att manipulera fragment av binär data.
Inte bara läsning av data stöds, utan även skrivning.
Som ett exempel kommer vi att överväga att analysera RIFF-filhuvudet från dataläsningsexemplet (se här). För att bygga exemplet kommer exakt samma information om filformatet att användas. Det är alltså nödvändigt att läsa en buffert från källfilen som är lika stor som filhuvudet. Rubriken består av tre 4-byte fält. Således måste 12 byte läsas.

Buffert = Ny BufferBinaryData(12);
Fil = FileStreams.Open(Temporary Files Directory() + "Windows Logon.wav", FileOpenMode.Open, FileAccess.Read);
File.Read(Buffer, 0, 12);
Storlek = Buffer.ReadInteger32(4);
StreamString = newStreamInMemory(Buffer);
StreamRows.Go(0, PositionInStream.Start);

Filformat = ReadLines.ReadCharacters(4, "windows-1251");
ReadLines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = new DataReader(RowStream);
FileType = ReadLines.ReadCharacters( 4, "windows-1251");
ReadLines.Close();

Processen att få in data i en binär databuffert är inget speciellt. Ytterligare operationer kräver några kommentarer. Det är möjligt att läsa siffror för vilket bitdjup som helst från vilken position som helst i bufferten. I i detta exempel Buffer.ReadInteger32(4); betyder att läsa ett 32-bitars heltal från byte 4 i bufferten. Således, om du behöver läsa flera nummer placerade på olika ställen i bufferten, kan detta göras utan direkt positionering i den bufferten.
Att läsa en sträng stöds dock inte av den binära databufferten. Därför bör du använda ett objekt som låter dig göra detta: Läsa data. Ett DataReader-objekt kan inte skapas från en binär databuffert. Men baserat på en binär databuffert kan du skapa en ström som är en universell mellanhand mellan den fysiska lagringsplatsen för information (fil, binär databuffert) och ett högnivåobjekt som låter dig arbeta med denna data.
När ett DataReader-objekt skapas baserat på en ström börjar det läsa data från positionen i det här ögonblicket installerat i strömmen. Därför, i exemplet, ställs först positionen i strömmen, och sedan skapas ett DataReader-objekt och det erforderliga antalet tecken läses. Detaljerad beskrivning för skillnaden mellan antalet byte och tecken vid läsning av strängar, se nästa avsnitt 16.3.5

16.3.5. Användningsegenskaper

När du använder binär data bör du ta hänsyn till funktionerna i att arbeta med data av typen String. Det speciella är att längden på strängen som den globala kontextfunktionen StrLength() returnerar mäts i tecken. I symboler ska du ange storleken på data som ska läsas/skrivas i metoderna för att skriva/läsa strängar i objekt för att arbeta med binär data ( Lästecken(),
ReadString(), WriteCharacters(), WriteString()). Det finns dock inget entydigt alternativ för att konvertera längden på en sträng i tecken till en liknande parameter i byte. Beroende på innehållet i strängen och kodningen kommer detta förhållande att vara annorlunda. När du arbetar med datastrukturer som inkluderar strängar med variabel längd bör du därför tydligt förstå i vilka enheter stränglängderna uttrycks.
Om i tillgänglig data stränglängden anges i byte, och strängen är specificerad i en multi-byte kodning med variabel längd (till exempel UTF-8), använd binära dataobjekt för att läsa en sådan struktur från en fil till data av typen String är i allmänhet omöjliga.
Men i det här fallet kan du enkelt ändra läs-/skrivpositionen i filströmmen. Om längden på en sträng anges i tecken, blir det möjligt att läsa in en sådan sträng till data av typen String, men det blir omöjligt att ändra läs/skrivpositionen i en sådan ström.
För att få längden på en sträng i byte kan du använda följande funktion för att konvertera strängen till ett BinaryData-objekt:

Fungera Hämta binär data från sträng(Värde StrParameter, värdekodning = “UTF-8”)
MemoryThread = NewMemoryThread;
Författare = Ny WriteData(StreamMemory);
Writer.Write String(StrParameter, Encoding);
Writer.Close();
Returnera StreamMemory.CloseAndGetBinaryData();
EndFunction

Den faktiska storleken i byte kan erhållas genom att anropa funktionen Size() på BinaryData-objektet, som erhålls som ett resultat av funktionen.
Samtidig användning av föremål rekommenderas inte Läs data/skriv data och strömma objekt. Om det mellan två på varandra följande läsoperationer från ReadData eller två på varandra följande skrivoperationer till WriteData sker en positionsändring i strömmen som Ch-objekten arbetar med ShadowData/WriteData– ett undantag genereras. Följande exempel visar alltså den korrekta positionsändringen i en ström när du skriver data till en ström:

Stream = newStreamInMemory();

WriteData.WriteString("Hej världen!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Hejdå!");
WriteData.Close();
Följande exempel hej till ett undantag som kastas:

Stream = NewStreamInMemory();

WriteData.WriteString(“Hej världen!”);
Stream.Go(0, PositionInStream.Start);
// Nästa rad ger ett undantag
WriteData.WriteString(“Hejdå!”);
Samtidigt är situationer möjliga när systemets beteende kommer att vara felaktigt, men inga fel kommer att genereras:

Stream = GetStream();
ReadData = new ReadData(Stream);
TestString = ReadData.Read();
InitialPosition = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString(“Oväntad sträng”);
WriteData.Close();
Stream.Go(InitialPosition, PositionInStream.Start);
// I allmänhet är det omöjligt att avgöra vilket värde som kommer att placeras i variabeln TestString2
TestLine2 = ReadData.ReadLine();

Beteendet som beskrivs i det här avsnittet orsakas av o Data Reader/Data Writer-objekt använder sina egna buffertar när de arbetar med en ström. Som ett resultat skiljer sig trådens faktiska position från den logiska positionen, som bildas som ett resultat av de avslutade operationerna.
Dessutom stöds inte samtidig användning av Data Reader- och Data Writer-objekt, som använder en tråd för sitt arbete.

Teknikplattformen 1C:Enterprise 8 låter dig spara godtyckliga filer i informationsbasen, hämta dem därifrån och använda dem olika sätt. Låt oss titta på dessa operationer med hjälp av exempel.

Innan du laddar upp en fil till 1C-informationsbasen måste du få den fullständiga adressen till filen på disken. Att arbeta med filvalsdialoger beskrivs i .

För att lagra filer, använd ett attribut (eller registerresurs) med typen Lagringsvärden.

Ladda upp en godtycklig fil till 1C-informationsbasen

Vilken fil som helst kan representeras som binär data och laddas in i Värdeförvaring.

Vid konvertering av binär data till ett objekt Lagringsvärden design som används nya lagringsvärden (data, komprimering) med två parametrar:

  1. Data— binära data som måste lagras i lagring
  2. Kompression— Kompressionsförhållandet för deflationsalgoritmen. Heltal i intervallet -1...9. -1 är standardkomprimeringsnivån. 0 - ingen kompression, 9 - maximal kompression. Standardvärde: -1. Parametern är valfri, om den inte anges används inte komprimering.

//Konvertera filen till binär data
File = New BinaryData(Path) ;

//Skapa ett nytt Value Storage-objekt

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

Sparar en godtycklig fil från 1C infobas till disk

För att spara en fil från 1C-databasen till disk måste du bestämma sökvägen och filnamnet. För att göra detta finns det en dialogruta för att spara filer, som beskrivs i.

//Hämta binär data från lagring
//Datalagring - attribut för ett objekt med typen Value Storage

//Skriv mottagna data till disk
//I variabel vägär den fullständiga adressen till filen på disken
Data. Write(Path) ;

Visa en fil som finns i 1C-informationsbasen

För att se en fil som sparats i databasen måste du ha ett program installerat på din dator som öppnar filen.

//Hämta namnet på den temporära filen med önskad tillägg
//I Extension-variabeln måste du sätta filtillägget, till exempel "pdf"
Sökväg = GetTemporaryFileName(Extension) ;

//Ta emot data från lagring
//Datalagring - attribut för ett objekt med typen Value Storage
Data = Datalager. Skaffa sig() ;

//Skriv data till en temporär fil
Data. Write(Path) ;

//Försöker öppna filen i det avsedda programmet
//Om applikationen inte hittas kommer systemdialogrutan "Öppna med..." att visas.
LaunchApplication(Path) ;

Nästan vilken information som helst kan lagras i ett värdelager, t.ex.

... bilder (foton):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of additional information of Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// på denna plats visar den allt... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...kalkylarksdokument:

TabDoc=Nytt TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Skriva();

Slut på förfarandet

Procedur RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Om TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Slut på förfarandet

...godtyckliga filer (binära data):

XZ = NewValueStorage(NewBinaryData(fil));

Åtta stöder komprimering av data som lagras:

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

... extern bearbetning och rapportering:

Procedur LoadProcessingIntoStorage(PropsStorageType)

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

Slut på förfarandet

Procedur StartProcessingFromStorage(PropsStorageType)

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

Slut på förfarandet

Jobbar med förvaring

Om det var binär data kan den återställas från värdelagret med metoden Get och skrivas till en fil med metoden Write().

If TypeValue(Storage)<>Typ("BinaryData") Sedan

BinaryData = Storage.Get();

BinaryData = Lagring;

endIf; BinaryData.Write(Filnamn);

Om det till exempel var ett Word-dokument (doc-fil eller annan registrerad filtyp), så kan det öppnas så här:

LaunchApplication(Filnamn);

För att rensa ett fält av typen Value Storage måste du tilldela det Undefined:

PropsStorage = Odefinierat;

Arbeta med filer och bilder i det inbyggda språket 1C:Enterprise 8

Syfte

Den hanterade applikationen implementerar en ny mekanism för att arbeta med filer. Det ger filutbyte mellan infobasen och klientapplikationen. Funktion denna mekanismär att den är avsedd att användas i tunn klient och webbklient och är utformad för att ta hänsyn till de filhanteringsbegränsningar som webbläsare inför.

Mekanismen är en uppsättning metoder som kan användas för att placera data som lagras lokalt av användaren till tillfällig lagring informationsbas, överför denna information från tillfällig lagring till en databas och få tillbaka den till användarens dator. De vanligaste applikationsproblemen som löses av denna mekanism är lagring av åtföljande information, till exempel bilder av varor, dokument relaterade till kontrakt, etc.

Metodens omfattning

Tillfällig förvaring

Tillfällig lagring är ett specialiserat område i informationsbasen där binär data kan placeras. Huvudsyftet är tillfällig lagring av information under klient-server-interaktion innan den överförs till databasen.

Behovet av tillfällig lagring uppstår eftersom webbläsarens driftmodell kräver att den användarvalda filen överförs direkt till servern utan möjlighet att lagra den på klienten. När en fil överförs läggs den i ett tillfälligt lager och kan sedan användas när man skriver ett objekt till databasen.

Den mest typiska applikationsuppgiften som löses av tillfällig lagring är att ge tillgång till filer eller bilder innan objektet registreras i informationsbasen, till exempel i form av ett element.

En fil eller binär data som lagras identifieras av en unik adress, som senare kan användas i skriv-, läs- eller raderingsoperationer. Denna adress ges av metoder för att skriva en fil till tillfällig lagring. En separat metod i det inbyggda språket låter dig avgöra om den skickade adressen är en adress som pekar på data i tillfällig lagring.

Informationsbas

Mekanismen låter dig komma åt binära data lagrade i attribut av typen Value Storage.

Liksom vid tillfällig lagring är tillgång till information möjlig via en särskild adress. Du kan få det genom en speciell metod genom att skicka en länk till ett objekt eller en inmatningsnyckel för informationsregister och namnet på attributet. I fallet med en tabelldel krävs det dessutom att tabelldelens radindex överförs.

Metoder för att arbeta med filer har begränsningar när man arbetar med infobasdetaljer. För dem, till skillnad från tillfällig lagring, är endast läsinformation tillgänglig, men inte att skriva eller radera den.

Beskrivning av metoder för att arbeta med filer

Spara data till tillfällig lagring

Det mest typiska scenariot för att använda denna mekanism involverar initialt att placera användardata i tillfällig lagring. Det finns två metoder för detta: PlaceFile() och PlaceFileInTemporaryStorage().

Den första metoden, PlaceFile(), placerar en fil från det lokala filsystemet i tillfällig lagring. Metoden kan acceptera en måladress i lagring. Om det inte är definierat eller är tom rad, då skapas en ny fil och metoden returnerar sin adress genom motsvarande parameter.

Om parametern som bestämmer det interaktiva driftläget är True, kommer metoden att visa en standardfilvalsdialogruta där du kan välja en fil som ska lagras. I det här fallet kommer metoden också att returnera adressen till den valda filen.

Som ett resultat returnerar metoden False om användaren interaktivt vägrade att utföra en operation i filvalsdialogrutan. Metoden är endast tillgänglig på klienten.

Den andra metoden, PlaceFileInTemporaryStorage(), liknar den föregående, förutom att den är tillgänglig på servern, och data som ska skrivas till temporär lagring representeras inte som en sökväg i filsystemet, utan som variabel typ BinaryData. På samma sätt, om ingen måladress anges, skapas en ny fil i lagringen. Dess adress returneras som ett resultat av funktionen.

Hämtar en fil från tillfällig lagring

När du skriver ett objekt till infobasen kan du behöva extrahera data från tillfällig lagring och placera den till exempel i ett attribut. Det finns en motsvarande servermetod för detta - GetFileFromTemporaryStorage(). Denna metod hämtar data från tillfällig lagring och returnerar den som ett resultat. För att göra detta måste du ange adressen i den tillfälliga lagringen. Denna adress returneras av de ovan beskrivna metoderna PlaceFile() och PlaceFileInTemporaryStorage() om de exekveras framgångsrikt.

Ta bort en fil från tillfällig lagring

Efter att data har sparats i detaljerna kan filen i tillfällig lagring raderas. För detta ändamål finns det en metod DeleteFileFromTemporaryStorage(), som tar bort en fil från den tillfälliga lagringen. Metoden tar som parameter adressen till en fil i temporär lagring. Finns på servern.

Kontrollerar adressen för tillfällig lagring

Filadressen kan indikera både tillfällig lagring och detaljer i infobasen. För att kontrollera dess typ finns det en metod This isTemporaryStorageAddress().

Den kontrollerar att den skickade adressen är en adress som pekar mot butiken. Returnerar True om adressen pekar på tillfällig lagring. Metoden är tillgänglig på servern.

Tar emot rekvisitaadressen

Efter att data har placerats i informationen i infobasen kan du behöva komma åt den med filmetoder.

Men innan du får data, till exempel från en fastighet, måste du få adressen till denna fastighet. För detta ändamål finns det en metod GetFileAddressInInformationBase().

Syftet är att returnera filadressen i infobasen enligt de ursprungliga parametrarna. För att göra detta måste du skicka objektnyckeln (detta kan antingen vara en länk till objektet eller en informationsregisternyckel) och namnet på attributet. Om du behöver få adressen till en fil som är lagrad i ett tabelldelsattribut, innan attributnamnet i parametern som anger attributnamnet, måste du lägga till namnet på tabelldelen och en punkt ".". Metoden är tillgänglig på både klienten och servern.

Hämtar en fil från infobasen

Metoden GetFile() tar emot en fil från infobasen och sparar den till den lokala filsystem användare. Den första parametern anger adressen till filen i rekvisitan eller temporär fillagring. Den andra parametern anger destinationsplatsen för den resulterande filen. I icke-interaktivt läge måste du ange sökvägen. I interaktivt läge är parametern valfri.

Som standard exekveras metoden i interaktivt läge, det vill säga den sista parametern är True. Det betyder att en dialogruta visas där du kan ange en åtgärd med den mottagna filen: kör den eller spara den på en användarspecificerad plats. Om interaktivt läge är aktivt och parametern Target disk file path inte specificeras, är filöppningen inte tillgänglig. Returnerar ett booleskt värde. Falskt betyder att användaren valde att avbryta operationen i den interaktiva dialogrutan för att spara filen.

Exempel på användning av filmetoder

// Ta emot en fil från disk i interaktivt läge // och placera den i tillfällig lagring &På klienten Procedur SelectDiskFileAndWrite()

Variabel SelectedName; VariableTemporaryStorageAddress; Om PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Slut på förfarandet

// Kopiera en fil från temporär lagring till en katalog // attribut, spela in ett objekt, ta bort en fil från temporär // lagring &På servern Procedur Placera objektfil (temporär lagringsadress)

Katalogelement = Form AttributesValue("Objekt"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = New File(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Katalogelement.Write(); Modifierad = Falskt; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Katalogelement, "Objekt");

Slut på förfarandet

// Läser filen från rekvisita och sparar den // till lokal disk i interaktivt läge &På klienten Procedur ReadFileAndSaveToDisk()

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

Slut på förfarandet

Stöd för adresser i bildfältet

Bildfältskontrollen stöder visning av en bild som specificeras av adressen till en fil i tillfällig lagring eller i en databas.

För att göra detta måste du ställa in attributet i egenskapen Data för formulärelementet strängtyp. Värdet på detta attribut kommer att tolkas som bildens adress.

Exempel // Bindning av bildfältet till bildadressen i tillfällig // lagring. AddressPictures bildar information om strängtyp

PlaceFile(PictureAddress,True)

Picture.Data = AddressPictures

Begränsningar vid arbete med webbklienten

Funktionen av den beskrivna mekanismen när du använder webbklienten har vissa begränsningar. Dessa begränsningar är relaterade till webbläsarens säkerhetsmodell. Så till exempel kan klienten inte självständigt spara en fil till det lokala filsystemet, det vill säga bara den interaktiva versionen av klientmetoderna PlaceFile() och GetFile() är tillgänglig. Ett undantag görs när man försöker använda icke-interaktivt läge. Dialogrutor, som visas interaktivt, är specifika för en viss webbläsartyp.

Funktioner när man arbetar med Value Storage på klienten

Problem:

När ett dokument har ett attribut av typen Value Storage i tabellsektionen, saktar det upp öppningen av dokumentformuläret om detta attribut innehåller stora data.

Förmodad anledning:

När du öppnar ett formulär är det kanske inte länken till data som finns i Value Store som skickas till klienten, utan själva data.

Lösning

  • I egenskaperna för formulärets tabellattribut finns en flagga "Använd alltid". Om det är inställt överförs alltid innehållet i fältet mellan servern och klienten - till exempel när ett formulär öppnas. Denna flagga måste vara inaktiverad, men detta måste beaktas i koden, eftersom det som standard inte kommer att finnas något värde för detta fält på klienten. Ett exempel finns i 1C:Archive.

Det är ännu bättre att använda Tillfällig förvaring för att överföra filer mellan klient och server.