Файл: Методические указания к лабораторным работам по дисциплине Разработка интеллектуальных мобильных приложений и чатботов Самара 2021.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.03.2024
Просмотров: 127
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Список владельцев справочника «ХранимыеФайлы»
Чтобы выполнять обмен данными справочника между планшетом и основным приложением, на закладке Обмен данными окна редактирования справочника ХранимыеФайлы включим его в план обмена Мобильные.
Принадлежность справочника к плану обмена «Мобильные»
Создание и открытие хранимых файлов
Затем создадим форму элемента справочника ХранимыеФайлы и предоставим пользователю две возможности. Нужно, чтобы в этой форме можно было выбрать файл на стационарном компьютере и сохранить его содержимое в справочнике, а также открыть содержимое элемента
справочника соответствующим приложением и сохранить его в локальную файловую систему пользователя.
Для этого на закладке Команды добавим команды
ВыбратьФайлСДискаИЗаписать, ПрочитатьФайлИСохранитьНаДиск и перетащим их в форму.
Форма хранимого файла в редакторе формы
При создании формы элемента справочника хранимых файлов нужно очистить имя файла в том случае, если новый элемент справочника создается путем копирования существующего элемента. Для этого создадим обработчик события формы ПриСозданииНаСервере и заполним его
&НаСервере
Процедура
ПриСозданииНаСервере
(
Отказ
,
СтандартнаяОбработка
)
Если
Параметры
Ключ
Пустая
()
И
НЕ
Параметры
ЗначениеКопирования
Пуст ая
()
Тогда
// при копировании очищаем имя файла, чтобы не возникало иллюзии, что содержимое
// файла тоже скопируется.
Объект
ИмяФайла
=
""
;
КонецЕсли;
КонецПроцедуры
Для этого на закладке Команды добавим команды
ВыбратьФайлСДискаИЗаписать, ПрочитатьФайлИСохранитьНаДиск и перетащим их в форму.
Форма хранимого файла в редакторе формы
При создании формы элемента справочника хранимых файлов нужно очистить имя файла в том случае, если новый элемент справочника создается путем копирования существующего элемента. Для этого создадим обработчик события формы ПриСозданииНаСервере и заполним его
&НаСервере
Процедура
ПриСозданииНаСервере
(
Отказ
,
СтандартнаяОбработка
)
Если
Параметры
Ключ
Пустая
()
И
НЕ
Параметры
ЗначениеКопирования
Пуст ая
()
Тогда
// при копировании очищаем имя файла, чтобы не возникало иллюзии, что содержимое
// файла тоже скопируется.
Объект
ИмяФайла
=
""
;
КонецЕсли;
КонецПроцедуры
Перед записью данных из формы убедимся, что имя файла заполнено.
Иначе запись данных не должна выполняться. Для этого создадим обработчик события формы ПередЗаписью и заполним его.
&НаКлиенте
Процедура
ПередЗаписью
(
Отказ
,
ПараметрыЗаписи
)
Если
Объект
ИмяФайла
=
""
Тогда
ПоказатьПредупреждение
(,
"Не выбран файл!"
);
Отказ
=
Истина;
КонецЕсли;
КонецПроцедуры
После этого создадим клиентский обработчик для команды ВыбратьФайлСДискаИЗаписать и заполним.
&НаКлиенте
Процедура
ВыбратьФайлСДискаИЗаписать
(
Команда
)
НовыйОбъект
=
Объект
Ссылка
Пустая
();
Оповещение
=
Новый
ОписаниеОповещения
(
"ВыбратьФайлСДискаИЗаписатьЗав ершение"
,
ЭтотОбъект
,
НовыйОбъект
);
НачатьПомещениеФайла
(
Оповещение
,
,
""
,
Истина);
КонецПроцедуры
При обработке этой команды во встроенном языке реализуется методика отказа от модальности – то есть вывод пользователю блокирующих окон вместо модальных, для того чтобы модальные окна не останавливали работу программного кода.
Сначала в переменной НовыйОбъект мы получаем признак того, создается ли новый хранимый файл.
Затем создается объект ОписаниеОповещения, в конструкторе которого первым параметром указывается имя процедуры-обработчика оповещения, которая будет выполнена после получения ответа пользователя. Во втором параметре указывается, в каком модуле расположена эта процедура (в нашем случае – в модуле формы). А в третьем в качестве дополнительного параметра передается признак создания нового объекта (Истина или Ложь).
После этого с помощью немодального метода
НачатьПомещениеФайла() файл, выбранный пользователем из локальной
файловой системы, помещается во временное хранилище. После того как пользователь сделает выбор в диалоге выбора файла, файл с именем ВыбранноеИмя будет помещен во временное хранилище по адресу АдресВременногоХранилища.
Эти значения в качестве параметров передаются в экспортную процедуру модуля формы ВыбратьФайлСДискаИЗаписатьЗавершение(), которая описывается в объекте ОписаниеОповещения, переданном в первом параметре в процедуру НачатьПомещениеФайла().
&НаКлиенте
Процедура
ВыбратьФайлСДискаИЗаписатьЗавершение
(
Результат
,
АдресВременн огоХранилища
,
ВыбранноеИмя
,
НовыйОбъект
)
Экспорт
Если
Результат
Тогда
Объект
ИмяФайла
=
ВыбранноеИмя
;
Если
Не
ЗначениеЗаполнено
(
Объект
Наименование
)
Тогда
ОписаниеФайла
=
Новый
Файл
(
ВыбранноеИмя
);
Объект
Наименование
=
ОписаниеФайла
Имя
;
КонецЕсли;
ПоместитьФайлОбъекта
(
АдресВременногоХранилища
);
Если
НовыйОбъект
Тогда
ОтобразитьИзменениеДанных
(
Объект
Ссылка
,
ВидИзмененияДанных
Доба вление
);
Иначе
ОтобразитьИзменениеДанных
(
Объект
Ссылка
,
ВидИзмененияДанных
Изме нение
);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В параметре Результат процедуры-обработчика оповещения содержится результат ответа пользователя. В случае положительного результата (пользователь выбрал файл) мы присваиваем имя выбранного пользователем файла (которое сохраняется в параметре ВыбранноеИмя) реквизиту объекта ИмяФайла.
Эти значения в качестве параметров передаются в экспортную процедуру модуля формы ВыбратьФайлСДискаИЗаписатьЗавершение(), которая описывается в объекте ОписаниеОповещения, переданном в первом параметре в процедуру НачатьПомещениеФайла().
&НаКлиенте
Процедура
ВыбратьФайлСДискаИЗаписатьЗавершение
(
Результат
,
АдресВременн огоХранилища
,
ВыбранноеИмя
,
НовыйОбъект
)
Экспорт
Если
Результат
Тогда
Объект
ИмяФайла
=
ВыбранноеИмя
;
Если
Не
ЗначениеЗаполнено
(
Объект
Наименование
)
Тогда
ОписаниеФайла
=
Новый
Файл
(
ВыбранноеИмя
);
Объект
Наименование
=
ОписаниеФайла
Имя
;
КонецЕсли;
ПоместитьФайлОбъекта
(
АдресВременногоХранилища
);
Если
НовыйОбъект
Тогда
ОтобразитьИзменениеДанных
(
Объект
Ссылка
,
ВидИзмененияДанных
Доба вление
);
Иначе
ОтобразитьИзменениеДанных
(
Объект
Ссылка
,
ВидИзмененияДанных
Изме нение
);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В параметре Результат процедуры-обработчика оповещения содержится результат ответа пользователя. В случае положительного результата (пользователь выбрал файл) мы присваиваем имя выбранного пользователем файла (которое сохраняется в параметре ВыбранноеИмя) реквизиту объекта ИмяФайла.
Если наименование хранимого файла не заполнено, то создаем объект Файл на основе имени выбранного файла и присваиваем наименованию хранимого файла имя созданного нами объекта Файл.
Затем мы вызываем серверную процедуру
ПоместитьФайлОбъекта() для сохранения содержимого выбранного файла в справочнике ХранимыеФайлы и передаем в нее адрес временного хранилища, в которое было помещено это содержимое.
&НаСервере
Процедура
ПоместитьФайлОбъекта
(
АдресВременногоХранилища
)
ЭлементСправочника
=
РеквизитФормыВЗначение
(
"Объект"
);
ДвоичныеДанные
=
ПолучитьИзВременногоХранилища
(
АдресВременногоХранил ища
);
ЭлементСправочника
ДанныеФайла
=
Новый
ХранилищеЗначения
(
ДвоичныеДан ные
,
Новый
СжатиеДанных
());
Файл
=
Новый
Файл
(
ЭлементСправочника
ИмяФайла
);
ЭлементСправочника
ИмяФайла
=
Файл
Имя
;
ЭлементСправочника
Записать
();
Модифицированность
=
Ложь;
УдалитьИзВременногоХранилища
(
АдресВременногоХранилища
);
ЗначениеВРеквизитФормы
(
ЭлементСправочника
,
"Объект"
);
КонецПроцедуры
В данной процедуре мы преобразуем основной реквизит формы в объект – элемент справочника ХранимыеФайлы.
Затем получаем из временного хранилища двоичные данные по адресу временного хранилища, переданному в процедуру. На основе этих данных мы создаем объект ХранилищеЗначения и помещаем его в реквизит элемента справочника ДанныеФайла.
Затем создаем объект Файл на основе значения реквизита элемента справочника ИмяФайла. Этот объект мы создаем для того, чтобы простым способом получить короткое имя файла из его полного имени. Это короткое имя мы записываем в соответствующий реквизит элемента справочника ИмяФайла. После этого сохраняем созданный элемент справочника ХранимыеФайлы.
В заключение удаляем данные из временного хранилища и преобразуем данные объекта обратно в основной реквизит формы Объект. А также свойству Модифицированность формы присваиваем значение Ложь, так как данные элемента справочника уже записаны.
После этого в процедуре ВыбратьФайлСДискаИЗаписатьЗавершение() вызываем метод ОтобразитьИзменениеДанных() для вывода пользователю сообщения об изменении или создания нового объекта и оповещения об этом всех динамических списков об изменениях.
Затем создадим клиентский обработчик для команды
ПрочитатьФайлИСохранитьНаДиск и заполним его следующим образом
&НаКлиенте
Процедура
ПрочитатьФайлИСохранитьНаДиск
(
Команда
)
Если
Объект
Ссылка
Пустая
()
Тогда
ПоказатьПредупреждение
(,
"Данные не записаны!"
);
Возврат;
КонецЕсли;
Если
ПустаяСтрока
(
Объект
ИмяФайла
)
Тогда
ПоказатьПредупреждение
(,
"Имя не задано!"
);
Возврат;
КонецЕсли;
Адрес
=
ПолучитьНавигационнуюСсылку
(
Объект
Ссылка
,
"ДанныеФайла"
);
ПолучитьФайл
(
Адрес
,
Объект
ИмяФайла
,
Истина);
КонецПроцедуры
В данном обработчике мы выполняем открытие файла мультимедиа только в том случае, если данные объекта записаны и имя файла не пустое.
Если это так, то с помощью метода ПолучитьНавигационнуюСсылку() переменной Адрес мы присваиваем навигационную ссылку на реквизит объекта
ДанныеФайла.
В первом параметре метода
ПолучитьНавигационнуюСсылку() передается ссылка на объект –
Объект.Ссылка, а во втором – имя реквизита.
Далее с помощью метода ПолучитьФайл() на основе навигационной ссылки, сохраненной в переменной Адрес, мы получаем файл с именем,
записанным в реквизите ИмяФайла, и сохраняем его в локальную файловую систему пользователя. Третьим параметром в метод передается Истина – признак запуска в интерактивном режиме. В этом случае пользователю будет выдано диалоговое окно, позволяющее указать действие с полученным файлом: запустить его или сохранить по указанному пользователем расположению.
Проверим, как это работает. Запишем в справочник хранимых файлов несколько картинок, которые мы чуть позже установим в качестве картинок товаров.
Откроем список хранимых файлов, выполнив команду Файлы из панели команд «1С:Предприятия». Пока список файлов пуст. Нажмем кнопку Создать. В появившейся форме нового хранимого файла укажем его наименование (в нашем случае – Туфли) и владельца (в нашем случае – товар Туфли).
Создание хранимого файла
Затем нажмем кнопку Выбрать файл с диска и записать и выберем нужный файл картинки.
Проверим, как это работает. Запишем в справочник хранимых файлов несколько картинок, которые мы чуть позже установим в качестве картинок товаров.
Откроем список хранимых файлов, выполнив команду Файлы из панели команд «1С:Предприятия». Пока список файлов пуст. Нажмем кнопку Создать. В появившейся форме нового хранимого файла укажем его наименование (в нашем случае – Туфли) и владельца (в нашем случае – товар Туфли).
Создание хранимого файла
Затем нажмем кнопку Выбрать файл с диска и записать и выберем нужный файл картинки.
Создание хранимого файла
Нажмем Записать и закрыть и вернемся в список хранимых файлов, в котором появится файл с наименованием Туфли. Таким же образом добавим в справочник хранимых файлов еще несколько файлов-картинок.
Теперь откроем форму уже существующего хранимого файла и нажмем кнопку Прочитать файл и сохранить на диск. На вопрос «Открыть или сохранить файл?» ответим Открыть, так как сохранение картинки вряд ли имеет смысл, поскольку мы ее только что выбрали с диска того же компьютера. А вот файлы мультимедиа, полученные с планшета, мы попробуем сохранить на компьютер.
Открытие и сохранение хранимого файла
В результате файл картинки будет открыт программой просмотра изображений, которая установлена как программа по умолчанию для работы с файлами типа jpg.
Открытие хранимого файла
Открытие текущего хранимого файла
Теперь создадим форму списка справочника ХранимыеФайлы и предоставим пользователю возможность открыть содержимое текущего файла ассоциированным с ним приложением.
Для этого на закладке Команды добавим команду ОткрытьФайл и перетащим ее в командную панель формы. А также добавим реквизит Владелец в состав полей списка хранимых файлов. В результате форма списка справочника в редакторе формы примет следующий вид.
Форма списка хранимых файлов в редакторе формы
Затем создадим клиентский обработчик для команды ОткрытьФайл и заполним его следующим образом
&НаКлиенте
Процедура
ОткрытьФайл
(
Команда
)
ХранимыйФайл
=
Элементы
Список
ТекущиеДанные
;
Файл
=
Новый
Файл
(
ХранимыйФайл
ИмяФайла
);
ИмяФайла
=
ПолучитьИмяВременногоФайла
(
Файл
Расширение
);
Адрес
=
ПолучитьНавигационнуюСсылку
(
ХранимыйФайл
Ссылка
,
"ДанныеФайл а"
);
ПолучитьФайл
(
Адрес
,
ИмяФайла
,
Ложь);
ЗапуститьПриложение
(
ИмяФайла
);
КонецПроцедуры
В этом обработчике мы используем таблицу формы Список, которая отображает данные динамического списка, полученного на основе справочника ХранимыеФайлы. Используя свойство ТекущиеДанные этой таблицы, в переменной ХранимыйФайл мы получаем объект, содержащий данные, находящиеся в текущей строке таблицы.
Далее сначала мы создаем объект Файл на основе значения реквизита ИмяФайла текущего элемента справочника хранимых файлов.
Затем, для того чтобы записать содержимое файла во временный файл, методом глобального контекста ПолучитьИмяВременногоФайла() мы получаем уникальное имя временного файла с желаемым расширением, полученным из созданного нами объекта Файл.
Затем с помощью метода
ПолучитьНавигационнуюСсылку() переменной Адрес мы присваиваем навигационную ссылку на реквизит ДанныеФайла текущего элемента справочника хранимых файлов. В первом параметре метода ПолучитьНавигационнуюСсылку() передается ссылка на объект – ХранимыйФайл.Ссылка, а во втором – имя реквизита.
Далее с помощью метода ПолучитьФайл() на основе навигационной ссылки, сохраненной в переменной Адрес, мы получаем временный файл с именем, записанным в переменной ИмяФайла.
И после этого с помощью метода глобального контекста
ЗапуститьПриложение() выполняется открытие этого временного файла с
помощью ассоциированного с ним приложения (например, при открытии видео запускается видеоплеер и т. п.).
Для того чтобы в процедуре ОткрытьФайл() нам были доступны реквизиты ИмяФайла и Ссылка справочника ХранимыеФайлы, нужно установить флажок Использовать всегда для этих полей в свойствах основного реквизита формы Список. Дело в том, что по умолчанию в форме на клиенте доступны данные только тех полей динамического списка, которые отображаются в форме. Но при установке флажка Использовать
всегда данные этих полей будут передаваться на клиента даже несмотря на то, что в форме они нигде не отображаются.
Откроем список хранимых файлов в режиме 1С:Предприятие, выделим нужный элемент списка и нажмем кнопку Открыть файл. Содержимое выбранного файла картинки будет помещено во временный файл и открыто соответствующим приложением.
Открытие текущего хранимого файла из списка файлов
Для того чтобы в процедуре ОткрытьФайл() нам были доступны реквизиты ИмяФайла и Ссылка справочника ХранимыеФайлы, нужно установить флажок Использовать всегда для этих полей в свойствах основного реквизита формы Список. Дело в том, что по умолчанию в форме на клиенте доступны данные только тех полей динамического списка, которые отображаются в форме. Но при установке флажка Использовать
всегда данные этих полей будут передаваться на клиента даже несмотря на то, что в форме они нигде не отображаются.
Откроем список хранимых файлов в режиме 1С:Предприятие, выделим нужный элемент списка и нажмем кнопку Открыть файл. Содержимое выбранного файла картинки будет помещено во временный файл и открыто соответствующим приложением.
Открытие текущего хранимого файла из списка файлов
1 2 3 4 5 6 7 8 9 10 11