Загрузка данных из файла табличного документа в управляемом приложении В управляемом приложении (если конечно вы не работаете в Толстом клиенте) можно столкнутся с такой проблемой, что многие функции работают только на сервере. Что делать, если у Вас есть файл-макет с данными, которые надо прочитать (обработать)? Надо передать этот файл на сервер и дальше работать с ним на сервере.
Для начала на клиенте через диалог получим имя файла
Код 1C v 8.2 УП длгВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
длгВыборФайла.Заголовок = "Выберите табличный документ...";
длгВыборФайла.Фильтр = "Табличный документ (*.mxl)|*.mxl";
длгВыборФайла.Расширение = "mxl";
длгВыборФайла.ПроверятьСуществованиеФайла = Истина;
Если Не длгВыборФайла.Выбрать() Тогда Возврат; КонецЕсли;
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(длгВыборФайла.ПолноеИмяФайла));
ЗаполнитьИзФайлаНаСервере(Адрес);
На сервере обработам полученные данные:
Код 1C v 8.2 УП ФайлПриемник = ПолучитьИмяВременногоФайла("mxl");
ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
ДанныеХранилища.Записать(ФайлПриемник);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ФайлПриемник);
Вот и все,теперь данные из файла загружены
Категория:
Табличный документ Открытие, перемещение и загрузка файла Пример обработки загрузки данных на управляемой форме, с определением необходимости передачи файла на сервер:
Код 1C v 8.2 УП &НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "*.xml|*.xml";
Если Диалог.Выбрать() Тогда
Объект.ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗапуститьПриложение(Объект.ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
ws = НСтр(СтрокаСоединения, "ws");
ИмяСервера = НСтр(СтрокаСоединения, "Srvr");
Если ИмяСервера = "" Тогда
Если ws = "" Тогда
ПередачаФайлаНаСервер = Ложь;
Иначе
ПередачаФайлаНаСервер = Истина;
КонецЕсли;
Иначе
ПередачаФайлаНаСервер = (ИмяКомпьютера() <> ИмяСервера);
КонецЕсли;
Если ПередачаФайлаНаСервер Тогда
ПоместитьФайл(АдресХранилища, Объект.ИмяФайла,, Ложь, УникальныйИдентификатор);
КонецЕсли;
ЗагрузитьСервер();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСервер()
ЧтениеXML = Новый ЧтениеXML;
Если ПередачаФайлаНаСервер Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла);
Иначе
ЧтениеXML.ОткрытьФайл(Объект.ИмяФайла);
КонецЕсли;
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
/// Код загрузки
Сообщить("Загрузка завершена");
КонецПроцедуры
Категория:
Работа с Файлами и Каталогами Пример использования хранилища значения на примере справочника "Картинки" Код 1C v 8.х
Процедура ОтобразитьКартинку()
ЗначениеКартинки = Картинка.Получить();
Если ЗначениеКартинки <> Неопределено Тогда
ЭлементыФормы.ПолеКартинки.Картинка = ЗначениеКартинки;
Иначе
ЭлементыФормы.ПолеКартинки.Картинка = Новый Картинка(Неопределено);
КонецЕсли;
КонецПроцедуры
Процедура ВыбратьИзФайлаНажатие(Элемент)
// Выбор файла с просмотром
ДиалогВыбораФайла = Новый
ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Каталог = "";
ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
ДиалогВыбораФайла.ИндексФильтра = 0;
Если ДиалогВыбораФайла.Выбрать() Тогда
Файл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Картинка = Новый ХранилищеЗначения(Новый Картинка(ДиалогВыбораФайла.ПолноеИмяФайла));
ОтобразитьКартинку();
КонецЕсли;
КонецПроцедуры
Категория:
Работа с Хранилищем Значений Функция копирования файла с выводом сообщений о результатах Код 1C v 8.х //Возвращает Истина - скопирован, иначе Ложь
Функция СкопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение, ВыдаватьСообщения = Ложь) Экспорт
Попытка
ПозицияСимвола = СтрДлина(ИмяФайлаНазначение);
Пока ПозицияСимвола >= 1 Цикл
Если Сред(ИмяФайлаНазначение, ПозицияСимвола, 1) = "\" Тогда
Возврат ПозицияСимвола;
КонецЕсли;
ПозицияСимвола = ПозицияСимвола - 1;
КонецЦикла;
КаталогФайла=Сред(ИмяФайлаНазначение, 1, ПозицияСимвола - 1);
СоздатьКаталог(КаталогФайла);
КопироватьФайл(ИмяФайлаИсточник, ИмяФайлаНазначение);
Исключение
Сообщение = "Ошибка при копировании: " + ОписаниеОшибки() +
" (источник: " + ИмяФайлаИсточник + "; приемник: " + ИмяФайлаНазначение + ")";
Если ВыдаватьСообщения Тогда
Сообщить(Сообщение);
КонецЕсли;
Предупреждение(Сообщение);
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Категория:
Работа с Файлами и Каталогами