Передача файла с клиента на сервер или почему метод Прочитать у табличного документа работает на сервере.
Описание проблемы
Создал реквизит формы с типом ТабличныйДокумент, вынес на форму сам реквизит и его командную панель и ужаснулся, команда Сохранить есть, а команда Открыть отсутствует.
![]() |
Стандартные команды табличного документа |
Спасибо разработчикам платформы 1С, они предоставили разработчиками две замечательные функции: ПоместитьФайл и ПоместитьФайлы. Эти функции умеют помещать файлы из локальной файловой системы во временное хранилище. Более детальное описание функций приводить не буду, слишком много строк, просто покажу как работать с функцией ПоместитьФайл на примере открытия файла табличного документа.
Пишем код для команды, которая выполняется на клиенте
&НаКлиенте
Процедура ЗагрузитьПечатнуюФорму(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Текст = "ru = ""Табличный документ""; en = ""Spreadsheet document""";
Фильтр = НСтр(Текст)+"(*.mxl)|*.mxl";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл табличного документа";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ВыбраныйФайл = ДиалогОткрытияФайла.ПолноеИмяФайла;
АдресВременногоХранилища = "";
ПоместитьФайл(АдресВременногоХранилища, ВыбраныйФайл, , Ложь, ЭтаФорма.УникальныйИдентификатор);
ПечатнаяФормаПрочитать(АдресВременногоХранилища);
КонецЕсли;
КонецПроцедуры
Подготавливаем диалог выбора файла и вызываем функцию ПоместитьФайл. После передаем выполнение кода на сервер вызовом процедуры ЗагрузитьПечатнуюФорму.
Создаем процедуру для вызова метода Прочитать, которая выполняется на сервере
&НаСервере
Процедура ПечатнаяФормаПрочитать(АдресВременногоХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЭтаФорма.ПечатнаяФорма.Прочитать(ИмяВременногоФайла);
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
КонецПопытки;
КонецПроцедуры // ПечатнаяФормаПрочитать()
Получаем из временного хранилища двоичные данные файла, сохраняем их во временный файл и вызываем метод Прочитать.
Все просто, единственный минус, это передача файла с клиента на сервер, и чем больше файл и меньше скорость интернета, тем дольше будет выполняться загрузка табличного документа.
Спасибо!
ОтветитьУдалитьСпасибо!
ОтветитьУдалитьОшибка - "...Оказывается метод прочитать доступен только на клиенте..."
ОтветитьУдалить