Nhận từ nơi lưu trữ tạm thời 1c. Hạn chế khi làm việc với Web client

In (Ctrl+P)

Phần này mô tả cách sử dụng phổ biến nhất của cơ chế làm việc với các tệp và lưu trữ tạm thời.

Lưu dữ liệu từ một tập tin vào bộ nhớ tạm thời

Vị trí của một tập tin

Phương thức PlaceFile() đặt một tệp từ hệ thống tệp cục bộ vào bộ lưu trữ tạm thời. Phương thức này có thể chấp nhận một địa chỉ trong bộ lưu trữ tạm thời nơi tệp sẽ được lưu. Nếu địa chỉ không được xác định hoặc là một chuỗi trống thì một địa chỉ mới sẽ được tạo và phương thức sẽ trả về địa chỉ đó thông qua một tham số đặc biệt.
Ghi chú. Lượng dữ liệu được di chuyển giữa máy khách và máy chủ trong một lần gọi phương thức PutFile()
Nếu tham số xác định chế độ hoạt động tương tác là True thì phương thức sẽ hiển thị hộp thoại chọn tệp tiêu chuẩn trong đó bạn có thể chọn tệp để lưu trữ. Trong trường hợp này, phương thức cũng sẽ trả về địa chỉ của tệp đã chọn.
Kết quả là phương thức này trả về Sai nếu người dùng tương tác từ chối thực hiện một thao tác trong hộp thoại chọn tệp.

Đặt một tập hợp các tập tin

Phương pháp PlaceFiles()đặt nhiều tệp vào bộ lưu trữ tạm thời trong một cuộc gọi. Có nhiều cách khác nhau để sử dụng phương pháp này:
● tạo trước danh sách các tệp sẽ được thêm vào, ví dụ: khi trước đó bạn đã chọn các tệp cần được đặt vào cơ sở thông tin;
● chuyển mặt nạ tìm kiếm tệp cho phương thức, ví dụ: khi bạn muốn đặt tất cả các tệp thuộc một loại nhất định, ví dụ: tất cả ảnh, vào cơ sở dữ liệu thông tin;
● truyền một đối tượng đã chuẩn bị trước đó vào phương thức Hộp thoại chọn tệpở chế độ mở tập tin.
Sau khi hoàn thành công việc, phương thức có thể trả về danh sách các tệp thực sự được thêm vào.

// FileList – thuộc tính có dạng kiểu ValueList,
// chứa danh sách các file được thêm vào
FileArray = Mảng mới;
Đối với mỗi thành phần của danh sách từ chu trình danh sách tệp
FileArray.Add(NewDescriptionofTransferFile(ListElement,));
Chu kỳ cuối;
Đã đặt các tập tin= Mảng mới;
Kết quả = PlaceFiles(ArrayFiles, PlacedFiles, False, UniqueIdentifier);

Lưu ý 1: Sử dụng phương pháp PlaceFiles() Máy khách web yêu cầu kết nối của tiện ích mở rộng xử lý tệp.
Lưu ý 2: Lượng dữ liệu được di chuyển giữa máy khách và máy chủ trên mỗi lệnh gọi phương thức PlaceFiles(), không được vượt quá 4 Gb (ở dạng tuần tự).

Đưa dữ liệu vào nơi lưu trữ tạm thời

Phương thức này tương tự như phương thức PlaceFile(), ngoại trừ dữ liệu được ghi vào bộ lưu trữ tạm thời
không được biểu diễn dưới dạng đường dẫn trong hệ thống tệp mà dưới dạng giá trị. Tương tự, nếu không có địa chỉ hiện tại nào được chỉ định trong bộ lưu trữ tạm thời thì một địa chỉ mới sẽ được tạo. Địa chỉ được trả về là kết quả của hàm. Cũng như các tập tin, dữ liệu được đăng phải thuộc một dạng nào đó và sẽ tự động bị xóa sau khi xóa.
Ghi chú. Lượng dữ liệu được di chuyển giữa máy khách và máy chủ trên mỗi lệnh gọi phương thức PlaceInTemporaryStorage(), không được vượt quá 4 Gb (ở dạng tuần tự).
Chú ý! Khi được đặt trong bộ lưu trữ tạm thời, giá trị không thực sự được tuần tự hóa. Tham chiếu đến giá trị được đặt và lưu trữ trong bộ đệm trong 20 phút. Sau khoảng thời gian này, giá trị được tuần tự hóa, ghi vào đĩa (lưu trữ dữ liệu phiên) và xóa khỏi bộ đệm.

Lấy dữ liệu từ bộ lưu trữ tạm thời

Khi ghi một đối tượng vào cơ sở thông tin, bạn có thể cần trích xuất dữ liệu từ bộ lưu trữ tạm thời và đặt nó, ví dụ: vào thuộc tính đối tượng cơ sở thông tin. Có một phương pháp đặc biệt cho việc này - GetFromTemporaryStorage(). Phương thức này lấy dữ liệu từ bộ lưu trữ tạm thời và trả về dưới dạng kết quả thực thi. Để nhận dữ liệu, bạn phải cho biết địa chỉ tạm thời
kho. Địa chỉ này được trả về bằng các phương thức đặt dữ liệu vào bộ lưu trữ tạm thời nếu chúng thành công (xem các phần trước).
Chú ý! Khi truy xuất một giá trị từ bộ lưu trữ tạm thời trên máy chủ, bạn nên tính đến việc giá trị đó được lấy bằng cách tham chiếu. Trong thực tế, liên kết này trỏ đến một giá trị được lưu trong bộ đệm. Trong vòng 20 phút, kể từ thời điểm nó được đưa vào bộ lưu trữ hoặc kể từ thời điểm được truy cập lần cuối, giá trị sẽ được lưu trong bộ đệm, sau đó được ghi vào đĩa và xóa khỏi bộ đệm. Lần tiếp theo giá trị được truy cập, nó sẽ được tải từ đĩa và được đặt lại vào bộ đệm.
Sau khi khử lưu trữ và khôi phục các giá trị từ bộ lưu trữ tạm thời, các tham chiếu sẽ không được khôi phục. Giá trị bộ đệm được khôi phục từ đĩa. Nhưng sau khi tuần tự hóa/giải tuần tự hóa, không thể khôi phục các tham chiếu đến các đối tượng khác bên trong giá trị.

Xóa dữ liệu khỏi bộ lưu trữ tạm thời

Sau khi dữ liệu được lưu trong thuộc tính đối tượng infobase, dữ liệu trong bộ lưu trữ tạm thời có thể bị xóa. Có một phương pháp cho việc này
RemoveFromTemporaryStorage(), thực hiện việc loại bỏ. Phương thức này lấy một địa chỉ trong bộ lưu trữ tạm thời làm tham số.

Kiểm tra địa chỉ lưu trữ tạm thời

Địa chỉ có thể cho biết cả nơi lưu trữ tạm thời và thông tin chi tiết trong cơ sở thông tin. Có một phương pháp để kiểm tra loại của nó
Đây là Địa chỉ lưu trữ tạm thời(). Nó kiểm tra xem địa chỉ được truyền có phải là địa chỉ trỏ đến cửa hàng hay không. Trả về True nếu địa chỉ trỏ tới nơi lưu trữ tạm thời.

Nhận địa chỉ đạo cụ

Sau khi dữ liệu được đặt vào thuộc tính đối tượng infobase, bạn có thể cần truy cập nó bằng các phương thức tệp.
Nhưng trước khi bạn nhận dữ liệu, chẳng hạn như từ một thuộc tính, bạn cần lấy địa chỉ của thuộc tính này. Có một phương pháp cho việc này GetNavigationLink().

Nó có thể trả về địa chỉ của giá trị trong cơ sở thông tin dựa trên các tham số ban đầu. Để làm điều này, bạn cần truyền khóa đối tượng (điều này có thể
cả liên kết đến đối tượng và khóa nhập của thanh ghi thông tin) và tên của thuộc tính. Nếu bạn cần lấy địa chỉ của giá trị được lưu trong thuộc tính
phần dạng bảng thì đến tên thuộc tính trong tham số xác định tên thuộc tính phải thêm tên phần dạng bảng và dấu chấm “.”. Ví dụ: Sản phẩm.Hình ảnh

Lấy một tập tin từ cơ sở thông tin

Đang nhận một tập tin

Phương thức GetFile() nhận một tệp từ cơ sở thông tin và lưu nó vào hệ thống tệp cục bộ của người dùng. Tham số đầu tiên chỉ định địa chỉ tệp trong thuộc tính đối tượng infobase hoặc trong bộ lưu trữ tệp tạm thời. Việc lưu sẽ không xảy ra nếu người dùng thay mặt họ thực hiện thao tác không có quyền Xem thông tin chi tiết của đối tượng cơ sở thông tin. Tham số thứ hai xác định vị trí lưu tệp kết quả. Ở chế độ không tương tác, bạn phải chỉ định đường dẫn. Trong chế độ tương tác, tham số là
không bắt buộc.
Theo mặc định, phương thức này được thực thi một cách tương tác. Điều này có nghĩa là một hộp thoại sẽ được tạo trong đó bạn có thể chỉ định một hành động với tệp đã nhận: chạy hoặc lưu nó vào vị trí do người dùng chỉ định trong hệ thống tệp. Nếu chế độ tương tác được chọn và tùy chọn Tên tệp không được chỉ định thì thao tác mở tệp sẽ không khả dụng. Phương thức trả về giá trị Boolean. Sai có nghĩa là người dùng đã chọn hủy thao tác trong hộp thoại lưu tệp tương tác.

Nhận một tập hợp các tập tin

Phương thức GetFiles() cho phép bạn nhận và lưu một số tệp được lưu trữ trong cơ sở thông tin trong hệ thống tệp cục bộ của người dùng. Danh sách các tệp đã tải lên được chuyển dưới dạng tham số.

// FileList – danh sách các giá trị chứa liên kết tới các phần tử
// thư mục chứa các tập tin được tải lên
// Danh sách giá trị biểu diễn là tên file đang upload
FileArray = Mảng mới;
Đối với mỗi thành phần của danh sách từ chu trình danh sách tệp
Tệp = Mới Tệp(Chuỗi(ListElement.Value));
Nhận tập tin = Mới Mô tả tệp được truyền;
NhậnFile.Name = ListElement.View;
NhậnFile.Storage= P getNavigationLink(ListItem.Value, “Dữ liệu”);
FileArray.Add(ReceiveFile);
Chu kỳ cuối;
Tệp đã nhận= Mảng mới;
Kết quả = NhậnTệp(FilesArray, Đã nhậnTệp, Đường dẫn Tệp đã tải lên, Sai);
Nếu KHÔNG có kết quả thì
Tin nhắn = Mới Tin nhắn cho người dùng;
Tin nhắn.Text = “Lỗi khi nhận tập tin!”;
Message.Message();
Hết Nếu ;

Sau khi hoàn tất, phương thức có thể trả về danh sách các tệp đã tải xuống thực sự, cho biết tên đầy đủ của từng tệp đã lưu.
GHI CHÚ. Để sử dụng phương thức GetFiles() trong máy khách web, bạn cần kết nối phần mở rộng tệp. Nếu thuộc tính Tên đối tượng Mô tả file được truyền chứa đường dẫn tuyệt đối tới tệp, tệp sẽ được lưu vào đường dẫn này, bất kể tham số Vị trí tập tin.
Tham số Vị trí tệp có thể là đường dẫn trong hệ thống tệp cục bộ hoặc đối tượng Hộp thoại chọn tệp ở chế độ chọn thư mục hoặc lưu tệp. Nếu giá trị tham số Vị trí tập tinđối tượng được chỉ định Hộp thoại chọn tệp trong chế độ
lưu tập tin, sau đó:

● hộp thoại sẽ được gọi cho mỗi tệp được truyền, ngoại trừ những tệp mà thuộc tính tên đối tượng Mô tả tệp được truyền chứa đường dẫn tuyệt đối;
● giá trị của đối tượng Tên của thuộc tính Mô tả Tệp được Truyền sẽ được sử dụng làm tên tệp ban đầu trong hộp thoại;
● nếu từ chối lưu được chọn cho bất kỳ tệp nào thì Tên của đối tượng Mô tả thuộc tính Tệp được Truyền sẽ chứa một chuỗi trống;
● phương thức GetFiles() sẽ trả về giá trị True nếu ít nhất một tệp được nhận thành công;
● cần lưu ý rằng các tệp thực sự được nhận sau khi người dùng trả lời các câu hỏi về việc chỉ định tên và đường dẫn
tất cả các tập tin đã nhận được;
● nếu người dùng thay mặt họ thực thi phương thức GetFile() không có quyền Xem đối với ít nhất một thuộc tính của đối tượng infobase mà từ đó các tệp được truy xuất thì toàn bộ thao tác sẽ thất bại.
Ví dụ:

TransferedFiles = Mảng mới;
Mô tả = Mới Mô tả file được truyền(“Mô tả”, Địa chỉ tệp);
Tập tin đã chuyển.Thêm(Sự miêu tả );
Chọn tệp = Mới FileSelectionDialog(FileSelectionDialogMode.Save);
FileSelect.Header= “Lưu kho lưu trữ”;
Lựa chọn tệp.Extension= “khóa kéo”;
Chọn tệp.Filter= “Lưu trữ(*.zip)|*.zip|Tất cả các tệp|*.*”;
FileSelect.FilterIndex = 0;
NhậnTệp(ChuyểnTệp, ChọnTệp, Sai);

Nếu chế độ tương tác để chọn thư mục lưu tệp được chọn, máy khách web sẽ yêu cầu thêm quyền lưu tệp được chỉ định bằng đường dẫn tuyệt đối. Trong trường hợp lưu không tương tác (đường dẫn đến thư mục được chỉ định trong tham số tương ứng), yêu cầu sẽ được thực thi đối với toàn bộ danh sách các tệp đã lưu.

Ví dụ về sử dụng phương thức tập tin

// Lấy một tập tin từ đĩa một cách tương tác
// và đặt nó vào nơi lưu trữ tạm thời.
&Trên máy khách
Thủ tục ChọnDiskFileIWrite()
Tên biến được chọn;
Perem Địa chỉ lưu trữ tạm thời;
NewObject = Object.Link.Empty();
Nếu như PlaceFile(Địa chỉ lưu trữ tạm thời, “”, Tên đã chọn, Đúng) Sau đó
Object.FileName = Tên đã chọn;
PlaceObjectFile(Địa chỉ lưu trữ tạm thời);
endIf;
Kết thúc thủ tục
// Sao chép một tập tin từ bộ lưu trữ tạm thời sang props
// thư mục, ghi một đối tượng, xóa một tập tin khỏi thư mục tạm thời
// kho.
&Trên máy chủ
Thủ tục PlaceObjectFile(Địa chỉ lưu trữ tạm thời)
Phần tử thư mục = Thuộc tính biểu mẫuValue(“Đối tượng”);
Dữ liệu nhị phân = GetFromTemporaryStorage(TemporaryStorageAddress);
Thư mục Element.File dữ liệu= Mới Giá trị lưu trữ(Dữ liệu nhị phân, NewDataCompression()) ;
Tệp = Mới Tệp (Mục thư mục.Tên tệp);
Mục thư mục.FileName = File.Name;
Phần tử thư mục.Write();
Đã sửa đổi = Sai;
DeleteFromTemporaryStorage(TemporaryStorageAddress);
ValueВFormAttribut(Thành phần thư mục, “Đối tượng”);
Kết thúc thủ tục
// Đọc file từ props và lưu nó
// trên đĩa cục bộ ở chế độ tương tác.
&Trên máy khách
Thủ tục ReadFileAndSaveToDisk()
Địa chỉ = GetNavigationLink(Object.Link,"FileData");
GetFile(Địa chỉ, Object.FileName, True);
Kết thúc thủ tục

Quyền thực hiện một nhóm thao tác tệp

Khi thực hiện một số thao tác trong máy khách web, bạn có thể cần phải có được quyền thực hiện nhiều thao tác với tệp.
Ví dụ: bạn cần truy xuất tài liệu từ cơ sở thông tin và sau đó mở tài liệu đã lưu bằng ứng dụng được liên kết.
Để thực hiện thao tác này, bạn sẽ cần trả lời câu hỏi về việc lưu tài liệu và câu hỏi về nhu cầu chạy nó. Nếu có nhiều thao tác hơn thì người dùng cũng sẽ có nhiều câu hỏi hơn.
Để giảm số lượng câu hỏi, bạn có thể sử dụng phương pháp này. Khi sử dụng phương pháp này
Người dùng được hiển thị danh sách tất cả các hoạt động được lên kế hoạch thực hiện và được yêu cầu cho phép thực hiện nhóm hoạt động đó. Nếu người dùng đã cho phép thực thi thì các thao tác được yêu cầu sẽ được thực hiện mà không có yêu cầu bổ sung nào đối với người dùng. Nếu không được phép, các hoạt động sẽ diễn ra như bình thường: một yêu cầu cho mỗi hoạt động.
GHI CHÚ. Để sử dụng phương pháp Yêu cầuNgười dùngPermission() Trong máy khách web, bạn cần kích hoạt tiện ích mở rộng quản lý tệp.
Hãy xem một ví dụ về việc sử dụng phương pháp này:

Nếu như ConnectExtensionLàm việc với tập tin() Sau đó
Liên kết = GetNavigationLink(Object.Link, “FileData”);
// Hình thành mô tả của các tệp được chuyển (trong trường hợp này chỉ có một tệp)
Tập tin đã chuyển= Mảng mới;
Mô tả = Mô tả mới của tệp được chuyển (Object. FileName, Link);
TransferredFiles.Add(Mô tả);
// Chuẩn bị một đối tượng để nhận thông tin về các file đã nhận
Tập tin đã chuyển= Mảng mới;

// Xác định các tham số phương thức khác
Thư mụcLưu= “c:\temp”;
Tương tác = Sai;
Tên tệp được truyền = Thư mục lưu + “\” + Object.FileName;
// Chuẩn bị mô tả các phương thức để lấy quyền
Phương thức = Mảng mới;

Methods.Add(“GetFiles”);
Methods.Add(TransferFiles);
Methods.Add(TransferredFiles);
Methods.Add(SaveDirectory);
Methods.Add(Tương tác);
Methods.Add(Mảng mới);
Methods.Add(“RunApplication”);
Methods.Add(TransferredFileName);
Nếu không Yêu cầuPermission(Phương thức) Sau đó
Warning("Người dùng đã từ chối quyền.");
Trở lại;
endIf;
GetFiles(Tệp truyền, Tệp được truyền, SavingDirectory, Tương tác);
RunApplication(TransferredFileName);
Nếu không thì
Warning("Không hỗ trợ thực thi. Phần mở rộng của tập tin chưa được cài đặt.");
endIf;

Một số đặc điểm của phương pháp cần lưu ý Yêu cầuPermissionUser().

1. Chỉ yêu cầu quyền đối với các phương pháp sau:

GetFiles()/StartGettingFiles(),
● PlaceFiles()/StartPlaceFiles(),
● FindFiles()/StartSearchFiles(),
● CopyFile()/StartCopyFile(),
● MoveFile()/StartMovingFile(),
●DeleteFiles()/StartDeleteFiles(),
● CreateDirectory()/StartCreatingDirectory(),
● LaunchApplication()/StartRunApplication().

2. Cần có quyền đối với một bộ tham số phương thức cụ thể. Nếu trong quá trình thực thi thực tế một phương thức thao tác tệp, các giá trị tham số khác với giá trị được cấp quyền thì quyền này sẽ không hợp lệ và người dùng sẽ nhận được một yêu cầu riêng để xác nhận thao tác.

3. Nếu bạn cần thực hiện hai (hoặc nhiều) thao tác giống hệt nhau với các tệp (ngay cả với cùng một bộ tham số), bạn nên chỉ định số phần tử thích hợp trong mảng tham số phương thức Yêu cầuNgười dùngPermission(). Ví dụ: nếu bạn cần lấy cùng một tệp từ cơ sở thông tin hai lần và đặt nó ở một vị trí cố định trong hệ thống tệp, bạn nên yêu cầu quyền
cho hai thao tác.

4. Nếu quyền được yêu cầu cho một thao tác thực hiện thao tác tương tác (ví dụ: hàm GetFiles(), một đối tượng sẽ được truyền dưới dạng tham số Hộp thoại chọn tệp), thì thao tác như vậy sẽ bị loại khỏi yêu cầu.

Các quyền đã cấp sẽ được giữ lại cho đến khi cuộc gọi được ủy quyền được thực hiện hoặc cho đến khi ngôn ngữ tích hợp hoàn tất việc thực thi.
GHI CHÚ. Ở khách hàng dày và mỏng Yêu cầuNgười dùngPermission() Phương thức luôn trả về True mà không có sự tương tác của người dùng.

Làm việc với bộ nhớ tạm thời trong tác vụ nền

Cơ chế làm việc với bộ lưu trữ tạm thời có khả năng chuyển dữ liệu từ tác vụ nền sang phiên đã khởi tạo tác vụ nền.
Để chuyển như vậy, bạn nên đặt một giá trị trống vào bộ lưu trữ tạm thời trong phiên chính (sử dụng phương thức PlaceInTemporaryStorage()), chỉ định bất kỳ mã định danh nào của bộ lưu trữ tạm thời đang được tạo (Tham số địa chỉ). Sau đó chuyển địa chỉ nhận được tới công việc nền thông qua các tham số công việc nền. Hơn nữa, nếu trong công việc nền, địa chỉ này được sử dụng làm giá trị của tham số Địa chỉ Phương thức PlaceInTemporaryStorage(), thì kết quả sẽ được sao chép vào phiên mà tác vụ nền được khởi chạy.
Dữ liệu được đặt trong bộ lưu trữ tạm thời trong tác vụ nền sẽ không thể truy cập được từ phiên gốc cho đến khi tác vụ nền hoàn thành.

Hỗ trợ địa chỉ trong trường hình ảnh

Phần tử biểu mẫu Trường Xem Trường Hình ảnh hỗ trợ hiển thị ảnh được chỉ định theo địa chỉ của một giá trị (có thể là ảnh hoặc dữ liệu nhị phân) trong bộ lưu trữ tạm thời hoặc cơ sở dữ liệu.
Để thực hiện việc này, bạn phải đặt thuộc tính loại chuỗi trong thuộc tính Dữ liệu của thành phần biểu mẫu. Giá trị của thuộc tính này sẽ được hiểu là địa chỉ của hình ảnh.

// Ví dụ 1
// Liên kết trường hình ảnh với địa chỉ hình ảnh tạm thời
// kho. Địa chỉHình ảnh – chi tiết biểu mẫu kiểu chuỗi
PlaceFile(ImageAddress, Tên ban đầu, Tên được chọn, Đúng, UniqueIdentifier);
// Ví dụ 2
// Lấy địa chỉ của ảnh từ thuộc tính đối tượng
// cơ sở thông tin
FilePictures = Object.FilePictures;
Nếu không phải PictureFile.Empty() thì
ImageAddress = GetNavigationLink(ImageFile, “FileData”);
Nếu không thì
Địa chỉ Hình ảnh = “”;
Bất tận;

Truy cập vào các thư mục tiêu chuẩn

Khi sử dụng hệ thống, cần có một số dung lượng trong hệ thống tệp để có thể lưu trữ nhiều dữ liệu tệp khác nhau, một mặt là tạm thời và mặt khác phải được lưu trữ trong một thời gian khá dài. Các tệp như vậy bao gồm bản nháp cho hệ thống quản lý tài liệu, các thành phần bên ngoài chạy trên phía máy khách, v.v.
Một thư mục đặc biệt nhằm mục đích lưu trữ các tệp như vậy, được gắn với một người dùng cụ thể của một cơ sở thông tin cụ thể.
Cùng một người dùng làm việc với hai cơ sở thông tin sẽ có quyền truy cập vào hai thư mục khác nhau để lưu trữ dữ liệu người dùng. Vị trí của thư mục này được xác định bằng phương pháp WorkUserDataDirectory(). Nếu thư mục không tồn tại, nó sẽ được tạo trong lần truy cập đầu tiên. Nếu không tạo được thư mục, hệ thống sẽ đưa ra một ngoại lệ.
GHI CHÚ. Phương thức UserDataWorkDirectory() không khả dụng ở phía máy chủ.
Hệ điều hành có một thư mục đặc biệt được phân bổ để lưu trữ vĩnh viễn dữ liệu người dùng. Nó có thể là một số
báo cáo, dạng in tài liệu, v.v. Dữ liệu được đặt trong thư mục này, sau này có thể được gửi ra bên ngoài
tới người tiêu dùng. Phương thức DocumentDirectory() được sử dụng để truy cập thư mục này. Vị trí vật lý của thư mục khác nhau tùy thuộc vào hệ điều hành.
hệ thống nơi ứng dụng được thực thi và được liệt kê trong trợ lý cú pháp.

Hầu hết mọi thông tin đều có thể được lưu trữ trong kho giá trị, ví dụ:

... hình ảnh (ảnh):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types thông tin bổ sung của Objects.Image; Lưu trữ = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// ở nơi này nó hiển thị mọi thứ... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...tài liệu bảng tính:

TabDoc=Tài liệu dạng bảng mới; TabDoc.Output(FormElements.TabularDocumentField1); Lưu trữ=NewValueStorage(TabDoc); Viết();

Kết thúc thủ tục

Thủ tục RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Nếu TabDoc<>Không xác định ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Kết thúc thủ tục

...tệp tùy ý (dữ liệu nhị phân):

XX = NewValueStorage(NewBinaryData(file));

Tám hỗ trợ nén dữ liệu được lưu trữ:

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

... xử lý và báo cáo bên ngoài:

Thủ tục LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 PropsStorageType tối đa = StorageValues ​​mới (Dữ liệu nhị phân mới ("c:\reports\report.epf", Tốc độ nén));

Kết thúc thủ tục

Thủ tục StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(Tên tệp tạm thời); Xử lý bên ngoài = InternalProcessing.Create(TemporaryFileName); Bên ngoàiProcessing.GetForm().Open();

Kết thúc thủ tục

Làm việc với bộ nhớ

Nếu đó là Dữ liệu nhị phân thì nó có thể được khôi phục từ kho lưu trữ giá trị bằng phương thức Get và ghi vào tệp bằng phương thức Write().

Nếu TypeValue(Storage)<>Nhập ("Dữ liệu nhị phân") Sau đó

Dữ liệu nhị phân = Storage.Get();

Dữ liệu nhị phân = Lưu trữ;

endIf; BinaryData.Write(Tên tệp);

Ví dụ: nếu đó là tài liệu Word (tệp doc hoặc loại tệp đã đăng ký khác), thì nó có thể được mở như sau:

LaunchApplication(Tên tệp);

Để xóa trường thuộc loại Lưu trữ giá trị, bạn cần gán nó Không xác định:

PropsStorage = Không xác định;

Làm việc với các tệp và hình ảnh bằng ngôn ngữ tích hợp 1C:Enterprise 8

Mục đích

Ứng dụng được quản lý triển khai cơ chế mới để làm việc với các tệp. Nó cung cấp trao đổi tập tin giữa cơ sở thông tin và ứng dụng khách. Điểm đặc biệt của cơ chế này là nó được thiết kế để sử dụng trong máy khách mỏng và máy khách Web và được thiết kế có tính đến các hạn chế khi làm việc với các tệp do trình duyệt Web áp đặt.

Cơ chế này là một tập hợp các phương pháp có thể được sử dụng để đặt dữ liệu được lưu trữ cục bộ trên máy tính của người dùng vào bộ lưu trữ tạm thời của cơ sở thông tin, chuyển thông tin này từ bộ lưu trữ tạm thời sang cơ sở dữ liệu và nhận lại vào máy tính của người dùng. Các vấn đề ứng dụng phổ biến nhất được giải quyết bằng cơ chế này là việc lưu trữ các thông tin đi kèm, ví dụ như hình ảnh hàng hóa, tài liệu liên quan đến hợp đồng, v.v.

Phạm vi phương pháp

Lưu trữ tạm thời

Lưu trữ tạm thời là một khu vực chuyên biệt của cơ sở thông tin, trong đó có thể đặt dữ liệu nhị phân. Mục đích chính là lưu trữ tạm thời thông tin trong quá trình tương tác giữa máy khách và máy chủ trước khi nó được chuyển vào cơ sở dữ liệu.

Nhu cầu lưu trữ tạm thời nảy sinh do mô hình hoạt động của trình duyệt web yêu cầu tệp do người dùng chọn phải được chuyển trực tiếp đến máy chủ mà không có khả năng lưu trữ nó trên máy khách. Khi một tệp được truyền, nó sẽ được đặt trong bộ lưu trữ tạm thời và sau đó có thể được sử dụng khi ghi một đối tượng vào cơ sở dữ liệu.

Nhiệm vụ ứng dụng điển hình nhất được giải quyết bằng lưu trữ tạm thời là cung cấp quyền truy cập vào các tệp hoặc hình ảnh trước khi đối tượng được ghi vào cơ sở thông tin, ví dụ, dưới dạng một phần tử.

Một tệp hoặc dữ liệu nhị phân được đặt trong bộ lưu trữ được xác định bằng một địa chỉ duy nhất, địa chỉ này sau này có thể được sử dụng trong các hoạt động ghi, đọc hoặc xóa. Địa chỉ này được cung cấp bởi các phương thức ghi tệp vào bộ lưu trữ tạm thời. Một phương thức riêng biệt bằng ngôn ngữ tích hợp cho phép bạn xác định xem địa chỉ được truyền có phải là địa chỉ trỏ đến dữ liệu trong bộ lưu trữ tạm thời hay không.

Cơ sở thông tin

Cơ chế này cho phép bạn truy cập dữ liệu nhị phân được lưu trữ trong các thuộc tính của loại Lưu trữ Giá trị.

Giống như trường hợp lưu trữ tạm thời, có thể truy cập thông tin thông qua một địa chỉ đặc biệt. Bạn có thể lấy nó thông qua một phương thức đặc biệt bằng cách chuyển một liên kết đến một đối tượng hoặc khóa nhập thanh ghi thông tin và tên của thuộc tính. Đối với phần dạng bảng thì phải chuyển thêm chỉ số hàng của phần dạng bảng.

Các phương pháp làm việc với tệp có những hạn chế khi làm việc với các chi tiết cơ sở thông tin. Đối với họ, không giống như việc lưu trữ tạm thời, chỉ có thể đọc thông tin chứ không thể viết hoặc xóa nó.

Mô tả các phương pháp làm việc với tập tin

Lưu dữ liệu vào bộ nhớ tạm thời

Kịch bản điển hình nhất để sử dụng cơ chế này liên quan đến việc ban đầu đặt dữ liệu người dùng vào bộ lưu trữ tạm thời. Có hai phương pháp cho việc này: PlaceFile() và PlaceFileInTemporaryStorage().

Phương thức đầu tiên, PlaceFile(), đặt một tệp từ hệ thống tệp cục bộ vào bộ lưu trữ tạm thời. Phương thức này có thể chấp nhận một địa chỉ đích trong bộ lưu trữ. Nếu nó không được xác định hoặc là một chuỗi trống thì một tệp mới sẽ được tạo và phương thức sẽ trả về địa chỉ của nó thông qua tham số tương ứng.

Nếu tham số xác định chế độ hoạt động tương tác là True thì phương thức sẽ hiển thị hộp thoại chọn tệp tiêu chuẩn trong đó bạn có thể chọn tệp để lưu trữ. Trong trường hợp này, phương thức cũng sẽ trả về địa chỉ của tệp đã chọn.

Kết quả là, phương thức này trả về Sai nếu người dùng tương tác từ chối thực hiện một thao tác trong hộp thoại chọn tệp. Phương pháp này chỉ có sẵn trên máy khách.

Phương thức thứ hai, PlaceFileInTemporaryStorage(), tương tự như phương thức trước, ngoại trừ việc nó có sẵn trên máy chủ và dữ liệu được ghi vào bộ lưu trữ tạm thời được biểu diễn không phải dưới dạng đường dẫn trong hệ thống tệp mà dưới dạng một biến có kiểu Dữ liệu nhị phân. Tương tự, nếu không có địa chỉ đích nào được chỉ định thì một tệp mới sẽ được tạo trong bộ lưu trữ. Địa chỉ của nó được trả về là kết quả của hàm.

Lấy một tập tin từ bộ nhớ tạm thời

Khi ghi một đối tượng vào cơ sở thông tin, bạn có thể cần trích xuất dữ liệu từ bộ lưu trữ tạm thời và đặt nó vào một thuộc tính chẳng hạn. Có một phương thức máy chủ tương ứng cho việc này - GetFileFromTemporaryStorage(). Phương pháp này lấy dữ liệu từ bộ lưu trữ tạm thời và trả về kết quả. Để làm điều này, bạn cần chỉ định địa chỉ trong bộ nhớ tạm thời. Địa chỉ này được trả về bằng các phương thức được mô tả ở trên PlaceFile() và PlaceFileInTemporaryStorage() nếu chúng được thực thi thành công.

Xóa một tập tin khỏi bộ nhớ tạm thời

Sau khi dữ liệu được lưu chi tiết, tệp trong bộ lưu trữ tạm thời có thể bị xóa. Với mục đích này, có một phương thức DeleteFileFromTemporaryStorage() để xóa một tập tin khỏi bộ lưu trữ tạm thời. Phương thức này lấy tham số là địa chỉ của tệp trong bộ lưu trữ tạm thời. Có sẵn trên máy chủ.

Kiểm tra địa chỉ lưu trữ tạm thời

Địa chỉ tệp có thể cho biết cả bộ nhớ tạm thời và thông tin chi tiết trong cơ sở thông tin. Để kiểm tra loại của nó, có một phương thức This isTemporaryStorageAddress().

Nó kiểm tra xem địa chỉ được truyền có phải là địa chỉ trỏ đến cửa hàng hay không. Trả về True nếu địa chỉ trỏ tới nơi lưu trữ tạm thời. Phương pháp này có sẵn trên máy chủ.

Nhận địa chỉ đạo cụ

Sau khi dữ liệu được đặt vào chi tiết trong cơ sở thông tin, bạn có thể cần truy cập dữ liệu đó bằng các phương thức tệp.

Nhưng trước khi bạn nhận dữ liệu, chẳng hạn như từ một thuộc tính, bạn cần lấy địa chỉ của thuộc tính này. Với mục đích này, có một phương thức GetFileAddressInInInInformationBase().

Mục đích của nó là trả về địa chỉ tệp trong cơ sở thông tin theo các tham số ban đầu. Để thực hiện việc này, bạn cần chuyển khóa đối tượng (đây có thể là liên kết đến đối tượng hoặc khóa nhập thanh ghi thông tin) và tên của thuộc tính. Nếu cần lấy địa chỉ của file được lưu trong thuộc tính phần dạng bảng, trước tên thuộc tính trong tham số chỉ định tên thuộc tính, bạn cần thêm tên phần dạng bảng và dấu chấm “.”. Phương thức này có sẵn trên cả máy khách và máy chủ.

Lấy một tập tin từ cơ sở thông tin

Phương thức GetFile() nhận một tệp từ cơ sở thông tin và lưu nó vào hệ thống tệp cục bộ của người dùng. Tham số đầu tiên chỉ định địa chỉ của tệp trong props hoặc bộ lưu trữ tệp tạm thời. Tham số thứ hai chỉ định vị trí đích của tệp kết quả. Ở chế độ không tương tác, bạn phải chỉ định đường dẫn. Trong chế độ tương tác, tham số là tùy chọn.

Theo mặc định, phương thức được thực thi ở chế độ tương tác, nghĩa là tham số cuối cùng là True. Điều này có nghĩa là một hộp thoại được hiển thị trong đó bạn có thể chỉ định một hành động với tệp đã nhận: chạy tệp hoặc lưu tệp vào vị trí do người dùng chỉ định. Nếu chế độ tương tác đang hoạt động và tham số đường dẫn tệp đĩa đích không được chỉ định thì thao tác mở tệp sẽ không khả dụng. Trả về một giá trị boolean. Sai có nghĩa là người dùng đã chọn hủy thao tác trong hộp thoại lưu tệp tương tác.

Ví dụ về sử dụng phương thức tập tin

// Nhận tệp từ đĩa ở chế độ tương tác // và đặt nó vào bộ lưu trữ tạm thời &Trên quy trình máy khách SelectDiskFileAndWrite()

Tên biến được chọn; Biến địa chỉ lưu trữ tạm thời; Nếu PutFile(TemporaryStorageAddress, SelectedName, True) thì Object.FileName = SelectedName; PlaceObjectFile(Địa chỉ lưu trữ tạm thời); endIf;

Kết thúc thủ tục

// Sao chép tệp từ bộ lưu trữ tạm thời vào một thư mục // thuộc tính, ghi lại một đối tượng, xóa tệp khỏi bộ lưu trữ tạm thời &Trên quy trình máy chủ Đặt tệp đối tượng (Địa chỉ lưu trữ tạm thời)

Phần tử thư mục = Thuộc tính biểu mẫuValue("Object"); Dữ liệu nhị phân = GetFileFromTemporaryStorage(TemporaryStorageAddress); Thư mục Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Tệp mới(DirectoryItem.FileName); Mục thư mục.FileName = FilePathOnDisk.Name; Phần tử thư mục.Write(); Đã sửa đổi = Sai; XóaFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttribut(Thành phần thư mục, "Đối tượng");

Kết thúc thủ tục

// Đọc một tập tin từ props và lưu nó // trên đĩa cục bộ ở chế độ tương tác &Trên thủ tục máy khách ReadFileAndSaveToDisk()

Địa chỉ = GetFileAddressInInInformationBase(Object.Link, "FileData"); GetFile(Địa chỉ, Object.FileName, True);

Kết thúc thủ tục

Hỗ trợ địa chỉ trong trường hình ảnh

Điều khiển Trường Ảnh hỗ trợ hiển thị ảnh được chỉ định theo địa chỉ của tệp trong bộ lưu trữ tạm thời hoặc trong cơ sở dữ liệu.

Để thực hiện việc này, bạn phải đặt thuộc tính loại chuỗi trong thuộc tính Dữ liệu của thành phần biểu mẫu. Giá trị của thuộc tính này sẽ được hiểu là địa chỉ của hình ảnh.

Ví dụ // Liên kết trường hình ảnh với địa chỉ hình ảnh trong bộ lưu trữ // tạm thời. Chi tiết biểu mẫu Địa chỉHình ảnh của loại chuỗi

PlaceFile(PictureAddress,True)

Picture.Data = Địa chỉHình ảnh

Hạn chế khi làm việc với Web client

Hoạt động của cơ chế được mô tả khi sử dụng máy khách Web có một số hạn chế. Những hạn chế này có liên quan đến mô hình bảo mật của trình duyệt. Vì vậy, ví dụ, máy khách không thể lưu tệp một cách độc lập vào hệ thống tệp cục bộ, nghĩa là chỉ có phiên bản tương tác của các phương thức máy khách PlaceFile() và GetFile() khả dụng. Một ngoại lệ được đưa ra khi cố gắng sử dụng chế độ không tương tác. Các hộp thoại xuất hiện tương tác dành riêng cho loại trình duyệt của bạn.

Các tính năng khi làm việc với Value Storage trên Client

Vấn đề:

Khi Tài liệu có thuộc tính thuộc loại Lưu trữ Giá trị trong phần dạng bảng, nó sẽ làm chậm việc mở biểu mẫu tài liệu nếu thuộc tính này chứa dữ liệu lớn.

Lý do giả định:

Có lẽ, khi mở một biểu mẫu, không phải liên kết đến dữ liệu nằm trong Kho lưu trữ giá trị được gửi đến khách hàng mà chính là dữ liệu đó.

Giải pháp

  • Trong thuộc tính của thuộc tính bảng của biểu mẫu có cờ "Luôn sử dụng". Nếu được đặt, nội dung của trường luôn được chuyển giữa máy chủ và máy khách - ví dụ: khi mở biểu mẫu. Cờ này phải bị tắt, nhưng điều này phải được tính đến trong mã, vì theo mặc định sẽ không có giá trị nào cho trường này trên máy khách. Một ví dụ có thể được tìm thấy trong 1C:Archive.

Nó thậm chí còn tốt hơn để sử dụng lưu trữ tạm thờiđể truyền tập tin giữa máy khách và máy chủ.

Lưu trữ cấu hình trong 1C 8.2 và 8.3 là một công cụ để phát triển giải pháp theo nhóm, được tích hợp trên nền tảng 1C: Enterprise 8. Kho lưu trữ cho phép phát triển các giải pháp cho nhiều người dùng với số lượng người dùng không giới hạn. Với sự trợ giúp của nó, bạn có thể xem toàn bộ lịch sử phát triển cấu hình và từng bước của nhà phát triển một cách chi tiết.

Chúng ta hãy xem xét kỹ hơn các cài đặt và làm việc với bộ lưu trữ cấu hình.

Kho lưu trữ về cơ bản là một cơ sở dữ liệu nơi lưu trữ các thay đổi cấu hình. Mỗi nhà phát triển làm việc với cơ sở thông tin riêng của mình được kết nối với bộ lưu trữ. Đế làm việc cũng có thể được kết nối với bộ lưu trữ. Sơ đồ chung được mô tả rõ nhất trong hình này:

Cơ sở dữ liệu này cũng lưu trữ thông tin về người đã bắt được đối tượng này hoặc đối tượng kia. Chụp một đối tượng là nhãn do nhà phát triển đặt. Bản chụp được cài đặt cho phép bạn tránh xung đột trong quá trình phát triển nhóm. Trong khi một đối tượng được chụp, không ai có thể chỉnh sửa nó.

Bạn có thể chụp toàn bộ đối tượng (đệ quy) hoặc một đối tượng hoặc hình dạng riêng biệt.

Sau khi nhà phát triển thực hiện một số hành động trên đối tượng, anh ta có nghĩa vụ đưa các sửa đổi vào kho lưu trữ. Và từ đó loại bỏ dấu hiệu đối tượng bị bắt.

Cách tạo bộ lưu trữ 1C

Tạo kho lưu trữ khá đơn giản, để thực hiện việc này, bạn cần chọn mục “Tạo kho lưu trữ” trong menu “Cấu hình - Kho lưu trữ cấu hình”. Trong menu xuất hiện, chỉ cần chỉ định đường dẫn đến vị trí lưu trữ trong tương lai và thông tin đăng nhập/mật khẩu của người dùng quản trị viên:

Khi tạo, hãy nhớ tạo một tài khoản dự phòng với quyền quản trị - điều này rất thường xuyên hữu ích.

Cách kết nối với bộ lưu trữ 1C

Để kết nối với bộ lưu trữ cấu hình, bạn cần chọn mục “Kết nối với bộ lưu trữ” trong menu “Cấu hình - Lưu trữ cấu hình”. Trong cửa sổ xuất hiện, bạn phải chỉ định đường dẫn đến bộ lưu trữ và thông tin đăng nhập/mật khẩu người dùng, nhấp vào “Kết nối”:

Nhận miễn phí 267 bài học video trên 1C:

Tại thời điểm kết nối, cấu hình của bạn sẽ được thay thế bằng cấu hình từ bộ lưu trữ, hãy cẩn thận.

Quản trị lưu trữ cấu hình 1C

Để quản lý bộ lưu trữ 1C, bạn phải chọn mục sau trong menu cấu hình - “Cấu hình - Lưu trữ cấu hình - Quản trị”:

  • Trên tab “Người dùng”, bạn có thể thêm hoặc xóa người dùng mới cũng như xác định quyền cho từng người trong số họ.
  • Trên tab “Kết nối”, bạn có thể xem tất cả người dùng được kết nối với bộ lưu trữ và nếu cần, hãy ngắt kết nối họ.
  • Trên tab “Hủy chụp”, bạn có thể xóa chế độ chụp của bất kỳ người dùng nào trên một đối tượng cụ thể, tất nhiên nếu bạn có quyền làm như vậy.

Cách xem lịch sử lưu trữ 1C

Để xem lịch sử, vào menu “Cấu hình - Lưu trữ cấu hình”, chọn “Lịch sử lưu trữ”:

Trong lịch sử lưu trữ 1C, bạn có thể biết khi nào, ai và những gì đã được thay đổi.

Phát triển với bộ lưu trữ 1C 8.3

Làm việc với bộ lưu trữ có thể được chia thành các hành động chính:

  • cấu hình từ kho cấu hình 1C;
  • cập nhật trạng thái lưu trữ 1C;
  • chụp trong kho;
  • không gian lưu trữ.

Chúng ta hãy xem xét kỹ hơn từng hành động:

Cập nhật trạng thái lưu trữ 1C

Truy xuất trạng thái mới nhất của đối tượng (đã chụp hoặc chưa).

Gọi là: “Cấu hình - Lưu trữ cấu hình - Cập nhật trạng thái”.

Cập nhật cấu hình từ kho cấu hình 1C

Hành động này sẽ truy xuất tất cả các đối tượng cấu hình đã thay đổi đã được đặt trong kho lưu trữ. Việc thực hiện lệnh này cũng cập nhật trạng thái đối tượng.

Gọi là: “Cấu hình - Lưu trữ cấu hình - Cập nhật cấu hình từ bộ lưu trữ.”

Chụp lưu trữ cấu hình 1C

Sử dụng lệnh này, bạn có thể chặn các thay đổi đối với đối tượng này đối với các nhà phát triển khác: trong khi đối tượng được bạn nắm bắt, không người dùng nào có thể thay đổi nó cho đến khi bạn đặt đối tượng trở lại.

Bạn có thể chụp bằng cách bấm chuột phải vào menu ngữ cảnh của đối tượng siêu dữ liệu:

Trong cửa sổ mở ra, bạn có thể đặt một số cài đặt:

  • Thực hiện đệ quy- cho phép bạn nắm bắt tất cả các đối tượng phụ - biểu mẫu, v.v.
  • Cho phép nhận đã chụp— cho phép người dùng khác nhận phiên bản trung gian của một đối tượng

Phòng trong kho 1C

Sau khi thay đổi một đối tượng, nó phải được đặt lại vào bộ lưu trữ; việc này được thực hiện giống như cách chụp, chỉ có tùy chọn “Đặt trong bộ lưu trữ” được chọn:

Khi đăng bài, hãy nhớ điền vào ô “bình luận”, điều này rất quan trọng trong quá trình phát triển nhóm. Sáu tháng sau, bạn thậm chí sẽ không nhớ tại sao mình lại thực hiện một số hành động nhất định. Cũng giống như việc chụp, phòng có cài đặt cụ thể riêng:

  • Thực hiện đệ quy— cho phép bạn đặt tất cả các đối tượng phụ - biểu mẫu, v.v.
  • Rời khỏi bị bắt— cho phép bạn đặt một phiên bản “trung gian” của một đối tượng trong khi vẫn để người dùng nắm bắt

Cách thêm đối tượng mới vào bộ lưu trữ 1C