바이너리 데이터를 1c 파일에 저장하는 방법. 이진 데이터 작업. 소품에서 데이터 읽기

인쇄(Ctrl+P)

16.3. 이진 데이터 작업

16.3.1. 일반 정보

애플리케이션 솔루션을 구현하다 보면 다양한 바이너리 데이터를 분석해야 하는 상황이 발생할 수 있습니다. 예를 들어, 서명을 사용하여 파일 형식을 결정하거나 사진에 대해 일부 조작을 수행해야 합니다. 바이너리 데이터 작업을 위해 1C:Enterprise는 특수 소프트웨어 인터페이스를 제공합니다. 다음으로, 바이너리 데이터로 작업할 수 있는 가능성을 살펴보겠습니다.
이진 데이터를 사용한 모든 작업은 스트림 개념을 기반으로 합니다. 흐름임의의(일반적인 경우) 데이터 소스(Stream 개체)를 논리적으로 일반화한 것입니다. 시스템은 소스와 연결되지 않은 독립적인 Stream 개체를 생성하는 기능을 제공하지 않습니다. 그러나 생성될 수 있는 파생 개체가 있습니다. 즉, 디스크의 파일과 연결된 스트림(FileStream 개체) 또는 메모리에 생성된 스트림(MemoryStream 개체)이 있습니다. 스트림을 사용하면 데이터를 읽고 쓸 수 있습니다. 특정 작업을 수행할 가능성을 확인하기 위해 스트림(및 파생 개체)에는 어떤 작업을 수행할지 결정할 수 있는 특수 메서드가 있습니다.
이 스레드를 사용하여 작업을 수행할 수 있습니다(메소드 사용 가능한 레코드(), 사용 가능한읽기(), 사용 가능한변경위치()).
더 높은 수준의 스트림, 특히 숫자(다른 비트 심도) 또는 문자열과 같은 데이터 읽기/쓰기 작업을 수행해야 하는 경우 DataRead/DataWrite 개체가 이를 위해 사용됩니다. 이러한 개체를 사용하면 스트림에 있는 이진 데이터에 대해 보다 구조화된 접근 방식을 취할 수 있습니다. 예를 들어, 파일 형식을 알면 헤더(일반적으로 유형 번호와 문자열로 표시됨)에서 필요한 데이터를 얻고 불필요한 데이터 블록을 건너뛰고 해당 파일을 아주 편안하게 읽을 수 있습니다. 처리에 필요한 것을 로드합니다.
이진 데이터 작업을 위한 일반적인 체계는 다음과 같이 표현될 수 있습니다.

  1. 스트림 수신 중
  2. 데이터 판독기 또는 데이터 기록기 개체가 생성됩니다.
  3. 2단계에서 생성된 개체를 사용하여 필요한 작업이 수행됩니다.
  4. 2단계에서 생성된 개체가 닫힙니다.
  5. 더 이상 작업이 필요하지 않으면 1단계에서 얻은 스트림이 닫힙니다.
  6. 스트림 작업을 계속해야 하는 경우 스트림에서 새 위치를 설정하고(이 작업이 지원되는 경우) 2단계부터 작업을 계속할 수 있습니다.

단락 1과 단락 2를 결합하는 것이 가능하다는 점은 주목할 가치가 있습니다. 즉, 시스템은 객체를 생성하는 기능을 제공합니다. 데이터 읽기/데이터 쓰기예를 들어 BinaryData 객체에서 직접.
이진 데이터로 다양한 작업을 수행하기 위해 시스템은 스트림의 일부를 무작위(바이트 단위) 액세스(객체)를 통해 별도의 조각으로 얻을 수 있는 기능을 제공합니다. 버퍼바이너리데이터). 버퍼 크기는 생성 시 설정되며 나중에 변경할 수 없습니다. 바이너리 데이터 버퍼로 작업할 때 다음과 같이 다양한 비트 깊이로 작업할 수 있습니다.
전체적으로. 이 경우 "little endian" 또는 "big endian"(big endian)이라는 단어로 바이트 순서를 지정할 수 있습니다. 하나의 버퍼를 여러 개로 분할하고 여러 바이너리 데이터 버퍼를 하나의 결과 버퍼로 결합하는 것도 가능합니다.
클라이언트 애플리케이션 측에서 비동기 모드로 바이너리 데이터 작업이 구현된 경우 바이너리 데이터 버퍼를 사용하여 작업하면 구현이 크게 단순화될 수 있다는 점에 유의하는 것이 중요합니다. 이 경우 버퍼로 데이터를 읽는 작업은 비동기식 작업으로 수행되며 버퍼 데이터 작업은 동기식으로 수행됩니다.
바이너리 데이터 작업은 애플리케이션의 클라이언트 측(웹 클라이언트 포함)과 서버 측뿐만 아니라 동기 및 비동기 작업 방식에서도 가능합니다. 추가 예에서는 동기식 작업 방식을 사용합니다.

16.3.2. 바이너리 데이터 읽기

이진 데이터를 읽는 예로서 향후 사용을 위해 시스템에서 선택된 올바른 파일 형식을 결정하는 작업을 고려해 보겠습니다. 오디오 데이터가 포함된 .wav 파일이 확인되는 파일로 사용됩니다. .wav 파일을 저장하기 위해 RIFF(Resource Interchange File Format)가 사용되며 이에 대한 설명은 다음 링크에 나와 있습니다.

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx(위치 영어). 읽기 예에서는 다음 형식 정보가 사용됩니다.
1. 파일의 처음 4바이트에는 RIFF 형식 식별자가 포함됩니다.
2. 다음 4바이트에는 리틀 엔디안 바이트 순서로 실제 오디오 데이터의 크기가 포함됩니다.
3. 다음 4바이트에는 사용된 데이터의 텍스트 유형(WAVE)이 포함됩니다.
이러한 작업을 수행하려면 내장 언어로 된 다음 코드가 필요합니다.

읽음 = 신규 ReadData(파일 이름, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
파일 유형 = Read.ReadCharacters(4);
파일 형식인 경우<>“리프” 그 다음
Report("RIFF 파일이 아닙니다.");
반품 ;
종료If ;
FileType = "WAVE"인 경우
보고서(“이것은 데이터 크기가 ” + DataSize + ” 바이트인 WAV 파일입니다.”);
그렇지 않으면
보고(“이것은 WAV 파일이 아닙니다”);
반품;
endIf;

예를 더 자세히 살펴보겠습니다.
먼저 FileName 변수에 이름이 포함된 파일이 열리고 읽기용으로 파일이 열립니다( 파일열기모드.열기), 파일( 파일액세스.읽기) 및 16바이트 버퍼가 읽기에 사용됩니다.
그런 다음 데이터 읽기를 위해 스트림이 생성됩니다. 이 스트림은 Number 유형의 데이터에 대해 최하위 바이트 순서를 갖습니다. 그런 다음 결과 스트림에서 4개의 문자, 32비트 정수 및 4개의 추가 문자를 읽습니다. 결과 데이터가 분석되고 분석 결과에 따라 선택한 파일이 .wav 파일인지 여부가 결정됩니다.

16.3.3. 바이너리 데이터 쓰기

가장 간단한 경우 파일에 이진 데이터를 쓰는 것은 다음과 같이 수행됩니다.

항목 = 신규 쓰기데이터(파일 이름);
인덱스 = 0 ~ 255 사이클
Write.WriteByte(인덱스);
엔드사이클;
Record.Close() ;

이 예에서는 0에서 255(16진수로 0xFF)까지의 바이트 시퀀스를 파일에 씁니다. 이것은 가장 간단한 녹음 옵션입니다.
이전 예제에서 설명한 읽기 방법과 유사한 방법을 사용할 수도 있습니다. 여기서 파일 스트림을 얻고 데이터가 이 파일 스트림에 기록됩니다.

16.3.4. 바이너리 데이터 버퍼 작업

위에서 언급한 것처럼 이진 데이터 버퍼는 이진 데이터 조각을 조작하는 편리한 방법을 제공합니다.
데이터 읽기뿐만 아니라 쓰기도 지원됩니다.
예를 들어 데이터 읽기 예제에서 RIFF 파일 헤더를 구문 분석하는 것을 고려해 보겠습니다(여기 참조). 예제를 작성하려면 파일 형식에 대해 정확히 동일한 정보가 사용됩니다. 따라서 소스 파일에서 파일 헤더 크기의 버퍼를 읽어야 합니다. 헤더는 3개의 4바이트 필드로 구성됩니다. 따라서 12바이트를 읽어야 합니다.

버퍼 = 신규 버퍼바이너리데이터(12);
파일 = FileStreams.Open(임시 파일 디렉터리() + “Windows Logon.wav”, 파일열기모드.열기, 파일액세스.읽기);
파일.읽기(버퍼, 0, 12);
크기 = Buffer.ReadInteger32(4);
StreamString = newStreamInMemory(버퍼);
StreamRows.Go(0, PositionInStream.Start);

파일 형식 = ReadLines.ReadCharacters(4, “windows-1251”);
ReadLines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = 새로운 DataReader(RowStream);
파일 유형 = ReadLines.ReadCharacters( 4, “windows-1251”);
ReadLines.Close();

데이터를 바이너리 데이터 버퍼로 가져오는 과정은 특별한 것이 아닙니다. 추가 작업에는 몇 가지 설명이 필요합니다. 버퍼의 어느 위치에서나 지원되는 비트 심도의 숫자를 읽을 수 있습니다. 안에 이 예에서는 Buffer.ReadInteger32(4); 버퍼의 4바이트부터 시작하는 32비트 정수를 읽는 것을 의미합니다. 따라서 버퍼의 서로 다른 위치에 있는 여러 숫자를 읽어야 하는 경우 해당 버퍼에 직접 위치를 지정하지 않고도 이 작업을 수행할 수 있습니다.
그러나 문자열 읽기는 바이너리 데이터 버퍼에서 지원되지 않습니다. 따라서 데이터 읽기를 수행할 수 있는 개체를 사용해야 합니다. DataReader 개체는 이진 데이터 버퍼에서 만들 수 없습니다. 그러나 이진 데이터 버퍼를 기반으로 하면 정보의 물리적 저장 위치(파일, 이진 데이터 버퍼)와 이 데이터로 작업할 수 있는 상위 수준 개체 사이의 범용 중개자 역할을 하는 스트림을 생성할 수 있습니다.
DataReader 객체는 스트림을 기반으로 생성되면 스트림의 위치부터 데이터를 읽기 시작합니다. 이 순간스트림에 설치됩니다. 따라서 이 예제에서는 먼저 스트림의 위치를 ​​설정한 다음 DataReader 개체를 생성하고 필요한 수의 문자를 읽습니다. 상세 설명문자열을 읽을 때 바이트 수와 문자 수의 차이는 다음 섹션 16.3.5를 참조하세요.

16.3.5. 사용의 특징

이진 데이터를 사용할 때 문자열 유형의 데이터 작업 기능을 고려해야 합니다. 특이한 점은 전역 컨텍스트 함수 StrLength()가 반환하는 문자열의 길이가 문자 단위로 측정된다는 것입니다. 심볼에서는 바이너리 데이터 작업을 위한 객체의 문자열 쓰기/읽기 메소드에서 읽고 쓸 데이터의 크기를 나타내야 합니다( 문자 읽기(),
문자열 읽기(), 쓰기문자(), 쓰기문자열()). 그러나 문자 단위의 문자열 길이를 바이트 단위의 유사한 매개변수로 변환하는 명확한 옵션은 없습니다. 문자열의 내용과 인코딩에 따라 이 비율은 달라집니다. 따라서 가변 길이의 문자열을 포함하는 데이터 구조로 작업할 때는 문자열 길이가 어떤 단위로 표현되는지 명확하게 이해해야 합니다.
사용 가능한 데이터에서 문자열 길이가 바이트로 표시되고 문자열이 멀티바이트 가변 길이 인코딩(예: UTF-8)으로 지정된 경우 이진 데이터 개체를 사용하여 파일에서 해당 구조를 String 유형의 데이터는 일반적으로 불가능합니다.
하지만 이 경우 파일 스트림에서 읽기/쓰기 위치를 쉽게 변경할 수 있습니다. 문자열의 길이가 문자 단위로 지정되면 해당 문자열을 String 유형의 데이터로 읽어들이는 것이 가능해집니다. 하지만 해당 스트림에서 읽기/쓰기 위치를 변경할 수는 없습니다.
문자열 길이를 바이트 단위로 얻으려면 다음 함수를 사용하여 문자열을 BinaryData 객체로 변환할 수 있습니다.

기능 문자열에서 바이너리 데이터 가져오기(값 StrParameter, 값 인코딩 = "UTF-8")
MemoryThread = NewMemoryThread;
작가=신인 쓰기데이터(StreamMemory);
작가.문자열 쓰기(StrParameter, 인코딩);
작가.닫기();
StreamMemory.CloseAndGetBinaryData 반환();
EndFunction

실제 크기(바이트)는 함수의 결과로 얻은 BinaryData 개체에서 Size() 함수를 호출하여 얻을 수 있습니다.
개체를 동시에 사용하는 것은 권장되지 않습니다. 데이터 읽기/데이터 쓰기그리고 스트림 객체. ReadData에서 두 번의 연속 읽기 작업 또는 WriteData에 대한 두 번의 연속 쓰기 작업 사이에 Ch 개체가 작동하는 스트림의 위치가 변경되는 경우 ShadowData/WriteData– 예외가 생성됩니다. 따라서 다음 예제에서는 스트림에 데이터를 쓸 때 스트림의 올바른 위치 변경을 보여줍니다.

스트림 = newStreamInMemory();

WriteData.WriteString("안녕하세요!");
쓰기데이터.닫기();
스트림.고(0, PositionInStream.Start);
DataWrite = newDataWrite(스트림);
WriteData.WriteString("안녕!");
쓰기데이터.닫기();
예외가 발생하는 경우 다음 예를 참조하세요.

스트림 = NewStreamInMemory();

WriteData.WriteString("안녕하세요, 세상!");
Stream.Go(0, PositionInStream.Start);
// 다음 줄에서는 예외가 발생합니다.
WriteData.WriteString("안녕!");
동시에 시스템 동작이 올바르지 않지만 오류가 생성되지 않는 상황이 발생할 수 있습니다.

스트림 = GetStream();
ReadData = 새로운 ReadData(스트림);
TestString = ReadData.Read();
초기 위치 = Stream.CurrentPosition();
DataWrite = newDataWrite(스트림);
WriteData.WriteString("예기치 않은 문자열");
쓰기데이터.닫기();
Stream.Go(초기 위치, PositionInStream.Start);
// 일반적으로 TestString2 변수에 어떤 값이 들어갈지 결정하는 것은 불가능합니다.
TestLine2 = ReadData.ReadLine();

이 섹션에 설명된 동작은 다음으로 인해 발생합니다. o 데이터 판독기/데이터 기록기 개체는 스트림 작업 시 자체 버퍼를 사용합니다. 결과적으로 스레드의 실제 위치는 완료된 작업의 결과로 형성된 논리적 위치와 다릅니다.
또한 하나의 스레드를 사용하여 작업하는 Data Reader 및 Data Writer 개체의 동시 사용은 지원되지 않습니다.

1C:Enterprise 8 기술 플랫폼을 사용하면 정보 베이스에 임의의 파일을 저장하고 거기에서 검색하여 사용할 수 있습니다. 다른 방법들. 예제를 사용하여 이러한 작업을 살펴보겠습니다.

1C 정보 베이스에 파일을 업로드하기 전에 디스크에 있는 파일의 전체 주소를 얻어야 합니다. 파일 선택 대화상자 작업은 에 설명되어 있습니다.

파일을 저장하려면 다음 유형의 속성(또는 등록 리소스)을 사용하세요. 스토리지 값.

1C 정보 기반에 임의의 파일 업로드

모든 파일은 바이너리 데이터로 표현되어 로드될 수 있습니다. 가치 저장.

바이너리 데이터를 객체로 변환하는 경우 스토리지 값사용된 디자인 새로운 StorageValues(데이터, 압축)두 개의 매개변수를 사용합니다.

  1. 데이터— 스토리지에 저장해야 하는 바이너리 데이터
  2. 압축— 디플레이션 알고리즘의 압축 비율. -1~9 범위의 정수입니다. -1은 기본 압축 수준입니다. 0 - 압축 없음, 9 - 최대 압축. 기본값: -1. 매개변수는 선택사항이며 지정하지 않으면 압축이 사용되지 않습니다.

//파일을 바이너리 데이터로 변환
파일 = 새 BinaryData(경로) ;

//새 값 저장소 객체 생성

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

1C 정보베이스의 임의 파일을 디스크에 저장

1C 데이터베이스의 파일을 디스크에 저장하려면 경로와 파일 이름을 결정해야 합니다. 이를 위해 작업에 설명된 파일 저장 대화 상자가 있습니다.

//스토리지에서 바이너리 데이터 가져오기
//데이터 저장 - 값 저장 유형을 가진 객체의 속성

//수신된 데이터를 디스크에 쓰기
//안에 변수 경로디스크에 있는 파일의 전체 주소입니다.
데이터. 쓰기(경로) ;

1C 정보 베이스에 있는 파일 보기

데이터베이스에 저장된 파일을 보려면 해당 파일을 여는 응용 프로그램이 컴퓨터에 설치되어 있어야 합니다.

//필요한 확장자를 가진 임시 파일의 이름을 가져옵니다.
//확장 변수에 파일 확장자를 입력해야 합니다(예: "pdf")
경로 = GetTemporaryFileName(확장자) ;

//스토리지로부터 데이터를 받아온다
//데이터 저장 - 값 저장 유형을 가진 객체의 속성
데이터 = 데이터스토어. 얻다() ;

//임시파일에 데이터 쓰기
데이터. 쓰기(경로) ;

//원하는 응용프로그램에서 파일을 열려고 합니다.
//애플리케이션을 찾을 수 없으면 "다음 프로그램으로 열기..." 시스템 대화상자가 나타납니다.
LaunchApplication(경로) ;

거의 모든 정보는 가치 저장소에 저장될 수 있습니다.

... 사진(사진):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Objects.Image의 추가 정보 Enumerations.Types; 저장소 = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = 저장소.Get();

// 이 위치에는 모든 것이 표시됩니다... Form Elements.PictureField1.Picture = Storage.Get(); 현재이미지.쓰기();

...스프레드시트 문서:

TabDoc=새 테이블 형식 문서; TabDoc.Output(FormElements.TabularDocumentField1); 저장소=NewValueStorage(TabDoc); 쓰다();

절차 종료

프로시저 RestoreFromStoragePress(요소)

TabDoc=스토리지.Get(); TabDoc인 경우<>정의되지 않은 ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

절차 종료

...임의 파일(바이너리 데이터):

XZ = NewValueStorage(NewBinaryData(파일));

Eight는 스토리지에 있는 데이터의 압축을 지원합니다.

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

... 외부 처리 및 보고:

프로시저 LoadProcessingIntoStorage(PropsStorageType)

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

절차 종료

프로시저 StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = 임시파일디렉토리()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(임시파일이름); 외부처리 = 외부처리.만들기(임시파일이름); 외부처리.GetForm().Open();

절차 종료

스토리지 작업

이진 데이터인 경우 Get 메서드를 사용하여 값 저장소에서 복원하고 Write() 메서드를 사용하여 파일에 쓸 수 있습니다.

TypeValue(스토리지)인 경우<>Type("BinaryData") 그런 다음

BinaryData = Storage.Get();

BinaryData = 저장소;

endIf; BinaryData.Write(파일이름);

예를 들어 Word 문서(doc 파일 또는 기타 등록된 파일 형식)인 경우 다음과 같이 열 수 있습니다.

LaunchApplication(파일명);

값 저장 유형의 필드를 지우려면 해당 필드를 정의되지 않음으로 할당해야 합니다.

PropsStorage = 정의되지 않음;

내장 언어 1C:Enterprise 8로 파일 및 그림 작업

목적

관리되는 애플리케이션은 파일 작업을 위한 새로운 메커니즘을 구현합니다. 정보베이스와 클라이언트 응용 프로그램 간의 파일 교환을 제공합니다. 특징 이 메커니즘에 사용하도록 되어 있다는 것입니다. 씬 클라이언트및 웹 클라이언트는 웹 브라우저에 의해 부과된 파일 처리 제한을 고려하도록 설계되었습니다.

메커니즘은 사용자가 로컬에 저장한 데이터를 임시 저장소에 저장하는 데 사용할 수 있는 일련의 방법입니다. 정보 기반, 이 정보를 임시 저장소에서 데이터베이스로 전송하고 사용자의 컴퓨터로 다시 가져옵니다. 이 메커니즘으로 해결되는 가장 일반적인 응용 프로그램 문제는 상품 이미지, 계약 관련 문서 등과 같은 동반 정보의 저장입니다.

방법 범위

임시저장

임시 저장소는 바이너리 데이터를 배치할 수 있는 정보 베이스의 특수 영역입니다. 주요 목적은 클라이언트-서버 상호 작용 중에 정보가 데이터베이스로 전송되기 전에 임시로 저장하는 것입니다.

웹 브라우저 운영 모델에서는 사용자가 선택한 파일을 클라이언트에 저장할 가능성 없이 서버에 직접 전송해야 하기 때문에 임시 저장 장치의 필요성이 발생합니다. 파일이 전송되면 임시 저장소에 저장되어 데이터베이스에 개체를 쓸 때 사용할 수 있습니다.

임시 저장소로 해결되는 가장 일반적인 응용 작업은 개체가 요소 형태로 정보 베이스에 기록되기 전에 파일이나 그림에 대한 액세스를 제공하는 것입니다.

저장소에 있는 파일이나 이진 데이터는 고유 주소로 식별되며 나중에 쓰기, 읽기 또는 삭제 작업에 사용될 수 있습니다. 이 주소는 임시 저장소에 파일을 쓰는 방법으로 제공됩니다. 내장된 언어의 별도 메소드를 사용하면 전달된 주소가 임시 저장소의 데이터를 가리키는 주소인지 여부를 확인할 수 있습니다.

정보 기반

이 메커니즘을 사용하면 값 저장소 유형의 속성에 저장된 이진 데이터에 액세스할 수 있습니다.

임시저장의 경우와 마찬가지로 특수주소를 통해 정보에 대한 접근이 가능하다. 객체에 대한 링크나 정보 등록 항목 키, 속성 이름을 전달하여 특별한 방법을 통해 얻을 수 있습니다. 테이블 형식의 경우, 테이블 형식 부분의 행 인덱스를 추가로 전송해야 합니다.

정보베이스 세부정보 작업 시 파일 작업 방법에는 제한이 있습니다. 임시저장과 달리 정보를 읽을 수만 있고, 쓰거나 삭제할 수는 없습니다.

파일 작업 방법에 대한 설명

임시 저장소에 데이터 저장

이 메커니즘을 사용하는 가장 일반적인 시나리오는 처음에 사용자 데이터를 임시 저장소에 배치하는 것입니다. 이를 위한 두 가지 방법이 있습니다: PlaceFile() 및 PlaceFileInTemporaryStorage().

첫 번째 메서드인 PlaceFile()은 로컬 파일 시스템의 파일을 임시 저장소에 배치합니다. 이 메서드는 저장소의 대상 주소를 허용할 수 있습니다. 정의되어 있지 않거나 다음과 같은 경우 빈 줄, 그러면 새 파일이 생성되고 메소드는 해당 매개변수를 통해 해당 주소를 반환합니다.

대화형 작업 모드를 결정하는 매개 변수가 True인 경우 해당 메서드는 저장소에 저장할 파일을 선택할 수 있는 표준 파일 선택 대화 상자를 표시합니다. 이 경우 메소드는 선택한 파일의 주소도 반환합니다.

결과적으로 사용자가 파일 선택 대화 상자에서 작업 수행을 대화형으로 거부하면 메서드는 False를 반환합니다. 이 메서드는 클라이언트에서만 사용할 수 있습니다.

두 번째 방법인 PlaceFileInTemporaryStorage()는 서버에서 사용 가능하다는 점과 임시 저장소에 쓸 데이터가 파일 시스템에서 경로로 표시되지 않고 변수 유형바이너리데이터. 마찬가지로 대상 주소를 지정하지 않으면 저장소에 새 파일이 생성됩니다. 해당 주소는 함수의 결과로 반환됩니다.

임시 저장소에서 파일 검색

정보베이스에 개체를 쓸 때 임시 저장소에서 데이터를 추출하여 예를 들어 속성에 배치해야 할 수 있습니다. 이에 해당하는 서버 메서드인 GetFileFromTemporaryStorage()가 있습니다. 이 메서드는 임시 저장소에서 데이터를 검색하고 결과로 반환합니다. 이렇게 하려면 임시 저장소에 주소를 지정해야 합니다. 이 주소는 위에서 설명한 PlaceFile() 및 PlaceFileInTemporaryStorage() 메서드가 성공적으로 실행되면 반환됩니다.

임시 저장소에서 파일 삭제

상세정보에 데이터가 저장된 후, 임시저장된 파일은 삭제될 수 있습니다. 이를 위해 임시 저장소에서 파일을 삭제하는 DeleteFileFromTemporaryStorage() 메서드가 있습니다. 이 메서드는 임시 저장소에 있는 파일의 주소를 매개변수로 사용합니다. 서버에서 사용 가능합니다.

임시저장 주소 확인하기

파일 주소는 정보베이스의 임시 저장 공간과 세부 정보를 모두 나타낼 수 있습니다. 유형을 확인하려면 This isTemporaryStorageAddress() 메소드가 있습니다.

전달된 주소가 매장을 가리키는 주소인지 확인합니다. 주소가 임시 저장소를 가리키는 경우 True를 반환합니다. 이 방법은 서버에서 사용할 수 있습니다.

소품 주소 받기

데이터가 정보베이스의 세부사항에 배치된 후 파일 메소드를 사용하여 해당 데이터에 액세스해야 할 수도 있습니다.

하지만 예를 들어 부동산으로부터 데이터를 받기 전에 이 부동산의 주소를 얻어야 합니다. 이를 위해 GetFileAddressInInformationBase() 메서드가 있습니다.

그 목적은 원래 매개변수에 따라 정보베이스의 파일 주소를 반환하는 것입니다. 이를 수행하려면 객체 키(객체에 대한 링크 또는 정보 레지스터 항목 키일 수 있음)와 속성 이름을 전달해야 합니다. 표 부분 속성에 저장된 파일의 주소를 얻어야 하는 경우, 속성 이름을 지정하는 매개변수의 속성 이름 앞에 표 부분의 이름과 점 “.”을 추가해야 합니다. 이 방법은 클라이언트와 서버 모두에서 사용할 수 있습니다.

정보베이스에서 파일 검색

GetFile() 메서드는 정보베이스로부터 파일을 받아 로컬에 저장합니다. 파일 시스템사용자. 첫 번째 매개변수는 props나 임시 파일 저장소에 있는 파일의 주소를 지정합니다. 두 번째 매개변수는 결과 파일의 대상 위치를 지정합니다. 비대화형 모드에서는 경로를 지정해야 합니다. 대화형 모드에서 매개변수는 선택사항입니다.

기본적으로 메서드는 대화형 모드에서 실행됩니다. 즉, 마지막 매개 변수는 True입니다. 즉, 수신된 파일에 대한 작업을 지정할 수 있는 대화 상자가 표시됩니다. 파일을 실행하거나 사용자가 지정한 위치에 저장합니다. 대화형 모드가 활성화되어 있고 대상 디스크 파일 경로 매개변수가 지정되지 않은 경우 파일 열기 작업을 사용할 수 없습니다. 부울 값을 반환합니다. False는 사용자가 대화형 저장 파일 대화 상자에서 작업을 취소하기로 선택했음을 의미합니다.

파일 메소드 사용 예

// 대화형 모드에서 디스크로부터 파일을 수신하고 // 임시 저장소에 배치 &클라이언트 프로시저 SelectDiskFileAndWrite()

변수 선택이름; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(임시저장주소); endIf;

절차 종료

// 임시 저장소에서 디렉터리로 파일 복사 // 속성, 개체 기록, 임시 저장소에서 파일 삭제 // 서버 프로시저에 개체 파일 배치(임시 저장소 주소)

디렉토리 요소 = 양식 AttributesValue("개체"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); 디렉터리 요소.파일 데이터 = NewValueStorage(BinaryData); FilePathOnDisk = 새 파일(DirectoryItem.FileName); 디렉토리 Item.FileName = FilePathOnDisk.Name; 디렉토리 요소.Write(); 수정됨 = 거짓; DeleteFileFromTemporaryStorage(임시저장소주소); ValueВFormAttributes(디렉터리 요소, "개체");

절차 종료

// props에서 파일을 읽고 // 저장합니다. 로컬 디스크대화형 모드에서 &클라이언트 프로시저 ReadFileAndSaveToDisk()에서

주소 = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(주소, 개체.파일 이름, True);

절차 종료

이미지 필드의 주소 지원

그림 필드 컨트롤은 임시 저장소나 데이터베이스의 파일 주소로 지정된 그림 표시를 지원합니다.

이렇게 하려면 양식 요소의 Data 속성에 속성을 설정해야 합니다. 문자열 유형. 이 속성의 값은 사진의 주소로 해석됩니다.

// 이미지 필드를 임시 저장소의 이미지 주소에 // 바인딩합니다. AddressPictures는 문자열 유형의 세부정보를 형성합니다.

PlaceFile(사진주소,참)

Picture.Data = AddressPictures

웹 클라이언트 작업 시 제한 사항

웹 클라이언트를 사용할 때 설명된 메커니즘의 작동에는 몇 가지 제한 사항이 있습니다. 이러한 제한 사항은 브라우저의 보안 모델과 관련이 있습니다. 따라서 예를 들어 클라이언트는 파일을 로컬 파일 시스템에 독립적으로 저장할 수 없습니다. 즉, 클라이언트 메서드 PlaceFile() 및 GetFile()의 대화형 버전만 사용할 수 있습니다. 비대화형 모드를 사용하려고 하면 예외가 발생합니다. 대화 상자대화형으로 표시되는 은 특정 브라우저 유형에 따라 다릅니다.

클라이언트에서 Value Storage 작업 시 기능

문제:

문서의 표 형식 섹션에 값 저장 유형의 속성이 있는 경우 이 속성에 대용량 데이터가 포함되어 있으면 문서 양식을 여는 속도가 느려집니다.

추정되는 이유:

아마도 양식을 열 때 클라이언트에 전송되는 것은 값 저장소에 있는 데이터에 대한 링크가 아니라 데이터 자체일 것입니다.

해결책

  • 양식의 테이블 속성 속성에는 "항상 사용" 플래그가 있습니다. 설정된 경우 필드의 내용은 항상 서버와 클라이언트 간에 전송됩니다(예: 양식을 열 때). 이 플래그는 비활성화되어야 하지만 기본적으로 클라이언트에는 이 필드에 대한 값이 없으므로 코드에서 이를 고려해야 합니다. 1C:Archive에서 예제를 찾을 수 있습니다.

사용하면 더욱 좋습니다 임시 저장클라이언트와 서버 간에 파일을 전송합니다.