Similar presentations:
Двоичные данные
1.
ДВОИЧНЫЕ ДАННЫЕ2. План занятия
1. Двоичные данные и хранилище значения2. Base64
3. Потоки
4. Отказ от модальности
5. Примеры
6. Итог
7. Домашнее задание
2
3. Двоичные данные и хранилище значения
34. Двоичные данные и хранилище значения
Объект ДвоичныеДанные – это массив данных, взятых, какправило, из файла.
Является "черным ящиком". Нельзя просмотреть содержимое,
нельзя его модифицировать. Основные операции:
● Создать (из файла)
● Записать (в файл или поток)
● Выяснить размер в байтах
Начиная с 8.3.9 можно открыть ДвоичныеДанные для чтения с
помощью потока.
4
5. Двоичные данные и хранилище значения
ХранилищеЗначения (хранилищезначений 1С) – это объект в языке
1С, который позволяет хранить в
базе данных произвольные
сериализуемые значения (двоичные
данные, картинки и файлы,
структуры и таблицы значений).
5
6. Двоичные данные и хранилище значения
ХранилищеЗначения - это также объект "черный ящик". Онпозволяет упаковать в некий псевдо-архив произвольное значение.
В дальнейшем это значение можно извлечь методом Получить
В-основном, ХранилищеЗначения используется для хранения в базе
данных нетабличных значений (картинок, массивов 1С, прочих
файлов)
6
7. Двоичные данные и хранилище значения
Варианты применения двоичных данных:● Хранение файлов в базе данных (с использованием
ХранилищеЗначения)
● Передача файла с клиента на сервер и обратно;
● Передача файлов при работе с протоколом HTTP
(НТТРСоединение);
● Передача вложений при работе с почтой (ПочтовоеВложение);
● Криптография (электронная подпись, шифрование);
● Представление файла в виде текста (с использованием Base64).
7
8. Base64
89. Base64
Base64 - стандарт кодирования двоичных данных при помощитолько 64 символов ASCII.
Используется для перевода закодированной строки и обратно.
Base64Строка(<Значение>) - функция преобразуют строку в Base64.
Base64Значение(<Строка>) - переводит обратно.
Закодированный файл
77u/DQrQlNCw0L3QvdGL0LXQl9Cw0L/RgNC+0YHQsCA9INCd0L7QstGL0L
kg0KHRgtGA0YPQutGC0YPRgNCwOw0K0JTQsNC90L3Ri9C10JfQsNC/0Y
DQvtGB0L=
9
10. Base64
Во встроенных типах объектов (ПочтовоеВложение или объектовдля работы с XML) необходимые преобразования платформа 1С
делает самостоятельно.
Base64 может быть полезно при работе с нестандартными
форматами файлов для обмена с внешними системами.
Например, для передачи текста в созданном разработчиком обмене
с сайтом или базой данных.
В ряде случаев необходимо передать двоичные данные,
содержащие любые символы, через простой текст.
10
11. Base64
Base64 это не шифрование, оно просто и быстро восстанавливаетсяв исходный файл.
Основное назначение алгоритма - передача двоичных данных через
видимый текст, там где нельзя применить непечатаемые или
служебные символы.
11
12. Потоки
1213. Поток
Специализированный объект, представляющий собой условнонепрерывный источник байт.Поток можно читать - получать входящие байты
В поток можно записывать - добавлять в поток байты
Основной смысл применения потоков - абстрагирование от
конкретного источника данных:
● Файл на диске
● Сеть
● Память
13
14. Поток
В большинстве случаев действительно неважно, откуда взялисьбайты. Важно, что они есть и что их можно обрабатывать одинаково,
независимо от их расположения: на диске, в памяти или в сетевом
канале.
В 1С существует 2 физических вида потоков:
● ПотокВПамяти
● ФайловыйПоток
И существует базовый объект "Поток", который обозначает "Любой
поток, независимо от происхождения"
14
15. Чтение потока
При чтении потока система автоматически поддерживает текущееположение внутри потока - позицию.
Позиция - это число, показывающее на каком байте сейчас
находится чтение.
Когда вы читаете из потока, скажем 10 байт, указатель позиции
смещается на 10.
Таким образом обеспечивается последовательное чтение всех байт
в потоке. Программист просто выполняет команду "Прочитать", а
система следит за перемещением по потоку.
15
16. Запись потока
При записи в поток система также следит за позицией в потоке.Если мы записываем в поток 10 байт, то указатель позиции
смещается на 10 и следующая запись начнется уже с нового места.
Таким образом, система автоматически следит за тем, чтобы запись
в поток была последовательной и не отвлекала программиста на
контроль позиции в файле.
16
17. Файловый поток
Любой файл на диске (если есть соответствующие права доступа)можно открыть в виде потока. При этом, все операции записи будут
непосредственно попадать в файл.
● Чтение - файл открывается для просмотра
● Запись - это запись в чистый файл. Файл создается, если его не
было, полностью очищается, если он существовал.
● Дописывание - запись ведется в конец файла, с содержимым,
которое уже было в файле ничего не случится.
17
18. Поток в памяти
Существует 2 варианта работы с потоком в памяти:1. Работа с уже существующим буфером данных, известного
размера
2. Запись в буфер неизвестного заранее размера
Для каждого варианта существует собственный конструктор.
Отличие первого варианта заключается в том, что он используется
для работы с данными, которые уже лежат в оперативной памяти и
их нельзя "дополнить"
18
19. Имеющийся буфер и поток
ПотокВПамятиДанные
программы
№1
Наши данные (наш буфер)
Данные программы №2
Оперативная память
Это чужое. Мы не можем
менять это, т.к. рискуем
сломать соседние
алгоритмы, данные других
сеансов
19
20. Работа с содержимым потоков
По аналогии с объектами ЧтениеТекста/ЗаписьТекста существуютобъекты ЧтениеДанных/ЗаписьДанных
Объекты работы с данными нужны для извлечения байтов из
потока.
Байты извлекаются в специальный объект "БуферДвоичныхДанных"
Ситуации побайтового чтения довольно редки. Обычно потоки
читают/копируют целиком или передают в конструкторы других
объектов
20
21. Основные методы работы с потоками
ПотокИсточник.КопироватьВ - метод прямого перенаправленияодного потока в другой. Например из сети - на диск:
Так же, большинство конструкторов объектов, работающих с
файлами, работают так же и с потоками:
● ЧтениеТекста/ЗаписьТекста/ТекстовыйДокумент
● ЗаписьXML/ЗаписьJson
● ЧтениеXML/ЧтениеJson
● и др
21
22. Двоичные данные и Поток
Можно всегда получить из ДвоичныхДанных поток и прочитать его.После завершения записи в поток можно получить двоичные
данные в виде конечного, уже неизменяемого буфера
Круговорот байтов в 1С:
Поток
ДвоичныеДанные
Память
Файл
22
23. Отказ от модальности
2324. Отказ от модальности
Модальное окно – окно, блокирующее весь интерфейс приложения,при этом исполнение кода останавливается до момента получения
ответа пользователя.
Например, окно модальной формы.
Модальный метод – метод глобального контекста или объекта
платформы, при выполнении которого происходит открытие
модального окна.
Например, методы Вопрос(), ОткрытьМодально().
Блокирующее окно – окно, блокирующее весь интерфейс или его
часть, но при этом исполнение кода не останавливается.
Например, форма, блокирующая владельца.
24
25. Отказ от модальности
По мере развития платформы 1С оптимизируется работа веб клиент(браузер) и клиент-серверного режима.
Интернет-приложения создаются с использованием асинхронной
(событийно-управляемой) модели управления логикой, в отличие от
принятой в настольных приложениях синхронной
(последовательной) модели.
25
26. Отказ от модальности
В веб-клиенте нельзя писать код, ожидающий действийпользователя. Например, выбора файла.
В синхронной модели код, зависящий от выбора пользователя,
выполняется последовательно.
В асинхронной модели получаем результат, обрабатывая события,
которые возникают, когда пользователь делает свой выбор.
На время ожидания выбора код приложения не останавливается и
продолжает работать.
26
27. Отказ от модальности
Код разбивается на две процедуры:1. Процедура, которая создает блокирующее окно, ожидающее
действия пользователя
1. Процедура - обработчик оповещения о том, что пользователь
сделал свой выбор и мы можем использовать результат его
действий для дальнейшей работы.
27
28. Отказ от модальности
Для асинхронной модели требуется возможность описанияпроцедур-обработчиков оповещений, которые будут вызваны
платформой 1С при завершении выбора пользователя.
Для этого в платформе существует тип объектов ОписаниеОповещения.
28
29. Отказ от модальности
ОписаниеОповещенияПараметры:
● ИмяПроцедуры - указывает имя процедуры-обработчика
оповещения, которая будет выполнена после получения ответа
пользователя,
● Модуль - указывает, в каком модуле расположена эта
процедура.
● ДополнительныеПараметры - значение любого типа, которое
будет передано в процедуру-обработчик оповещения при ее
вызове.
29
30. Отказ от модальности
ИмяПроцедурыПри вызове указанной процедуры системой ей через параметры
передается результат выбора пользователя и значение
ДополнительныеПараметры.
В некоторых случаях результат выбора может отсутствовать (метод
ПоказатьПредупреждение()) или передаваться несколькими
параметрами (метод НачатьПомещениеФайла()).
30
31. Отказ от модальности
Для перехода на асинхронную модель в платформу были добавленыметоды, аналогичные модальным методам, не блокирующие поток
исполнения.
Группа этих методов отличается следующим:
● Их имена начинаются со слова Показать либо Начать, например
ПоказатьВопрос() вместо Вопрос(), НачатьПомещениеФайла()
вместо ПоместитьФайл(), и тд,
● Первым параметром принимают объект ОписаниеОповещения,
указывающий на процедуру модуля, которая будет выполнена
после того как пользователь сделает выбор в блокирующем
окне,
● Не возвращают значения - результат выбора пользователя
передается в процедуру модуля, описанную объектом
ОписаниеОповещения.
31
32. Примеры
3233. Примеры
Сохранение и получение файла в базе данных33
34. Примеры
Возьмем для примера справочник Сотрудники, который содержитдва реквизита:
ФайлДоговора (тип ХранилищеЗначения) - хранит двоичные данные.
ИмяФайлаДоговора (типа Строка) - хранит имя загруженного файла.
34
35. Примеры
3536. Примеры
Для загрузки и сохранения файла созданы две команды:ЗагрузитьСДиска и СохранитьНаДиск.
Загрузка файла выполняется с помощью немодального метода
глобального контекста НачатьПомещениеФайла().
Первым параметром передается описание оповещения,
описывающее экспортную процедуру (расположенную в том же
модуле – модуле формы) ЗагрузитьСДискаЗавершение(), которая
будет вызвана, когда пользователь выберет файл.
36
37. Примеры
Обработка оповещения будет запущена после выбора файлапользователем.
37
38. Вывод картинки из хранилища
Добавим реквизит формы "ФотоСотрудника" (тип Строка, 0).На форме создадим элемент с типом "Поле картинки".
Путь к данным поля картинки - это адрес картинки во временном
хранилище.
"Фото" - реквизит объекта, в котором хранятся двоичные данные
файла изображения (тип "ХранилищеЗначений").
38
39. Итог
● Мы сегодня узнали:○ Двоичные данные
○ Хранилище значения
○ Потоки
● Мы научились:
○ Работать с двоичными данными
39
40. Домашнее задание
Задача 1 Создать в справочнике Номенклатура возможность загрузкии хранения картинки:
Описание задачи
Добавить возможность загрузки и хранения картинки в справочнике Номенклатура.
Требования к результату
Выгрузка информационной базы (.dt) с конфигурацией из предыдущих заданий, в
которой реализована возможность загружать и просматривать из формы элемента
номенклатуры.
Можно выбрать каталог и картинку для загрузки.
*Смотрите сл. слайд
40
41. Домашнее задание
Задача 1 Создать в справочнике Номенклатура возможность загрузкии хранения картинки:
*Смотрите сл. слайд
41
42. Домашнее задание
Задача 1 Создать в справочнике Номенклатура возможность загрузкии хранения картинки:
42
43. Домашнее задание
Задача 2 (со звездочкой) Разбить файл на части и склеить послеэтого:
43
44. Домашнее задание
Задача 2 (со звездочкой) Разбить файл на части и склеить послеэтого:
44