Платформа 8.3.10.25.61. Конфигурация самописная (на основе БСП). Управляемое приложение. Задача: Необходимо загрузить данные из эксель и вывести их в табдок на форме. Решение: файл из клиента через вр.хранилеще передается на сервер. Там обрабатывается и предаеться на форму клиенту. Вопрос: Не могу понять почему табдок не передается с сервера на клиента? На сервере он формируется.
ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("РасширениеФайла", РасширениеФайла); ДополнительныеПараметры.Вставить("ТабДок", Объект.ДанныеИзФайла);
//Сохранение файла во временное хранилище. ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, ДополнительныеПараметры); НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
Объект.ДанныеИзФайла - это реквизит обработки с типом табдок. Далее на сервере обрабатывется и формируется табдок. Но через ДополнительныеПараметры.ТабДок не передаеться на клиента.
Если НЕ ЗначениеЗаполнено(ПолноеИмяФайла) Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Вы не выбрали файл для загрузки.' " + "; en = 'You did not select a file to upload.' "); Сообщение.Сообщить(); Возврат; КонецЕсли;
ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("РасширениеФайла", РасширениеФайла); ДополнительныеПараметры.Вставить("ТабДок", Объект.ДанныеИзФайла);
//Сохранение файла во временное хранилище. ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, ДополнительныеПараметры); НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
//Кол = ДополнительныеПараметры.ТабДок.Области.Количество(); Если ДополнительныеПараметры.ТабДок.Области.Количество() > 0 Тогда Объект.ДанныеИзФайла = ДополнительныеПараметры.ТабДок; Элементы.ДанныеИзФайла.Показать(); //ЭтаФорма.ОбновитьОтображениеДанных(Элементы.ДанныеИзФайла); Иначе Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Не удалось загрузить данные!' " + "; en = 'Failed to load data!' "); Сообщение.Сообщить(); КонецЕсли;
Если Не Результат Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Не удалось открыть файл!' " + "; en = 'Could not open file!' "); Сообщение.Сообщить(); Возврат; КонецЕсли;
В переменной ДополнительныеПараметры.ТабДок табличный документ существует (ДополнительныеПараметры.ТабДок.Области.Количество() = 5) и передается в процедуру ЗагрузитьФайлВХранилище. Но дальше не передается. И как передать на клиента я не пойму?
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Зачем вы вообще его гоняете между клиентом и сервером, если он доступен на сервере... Еще, вы сами придумали весь этот код? Просто вы делаете кучу бесполезных вещей, помещаете файл во временное хранилище, затем извлекаете его, сохраняете и потом читаете, не проще ли сразу прочитать файл в табдок? Ну и работать с полем табдока на сервере.
Личные бесплатные консультации не даю, для этого есть форум!
logist @ Вчера, 20:20
, Изначально я так и думал сделать, но, метод прочитать не работает на тонком клиенте. Может у кого есть ссылки как прочитать файл в табдок на клиенте? В на сайтах где я смотрел методика одна - через врем. хранилище. И все равно интересно, как именно в моем случае табдок передать на клиента?
Вообщем решил задачку. Проблема состояла в моем непонимании, что форма одновременно формируется как на клиенте так и на сервере. Поэтому ничего на сервер (ДополнительныеПараметры.ТабДок) передавать не надо. Может кому пригодится, выложу переделанный код:
Если НЕ ЗначениеЗаполнено(ПолноеИмяФайла) Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Вы не выбрали файл для загрузки.' " + "; en = 'You did not select a file to upload.' "); Сообщение.Сообщить(); Возврат; КонецЕсли;
//Сохранение файла во временное хранилище. ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, РасширениеФайла); НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
Если Не Результат Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Не удалось открыть файл!' " + "; en = 'Could not open file!' "); Сообщение.Сообщить(); Возврат; КонецЕсли;
ТабДокДанные = Новый ТабличныйДокумент; Попытка ТабДокДанные.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение); УдалитьФайлы(ИмяФайла); Исключение УдалитьФайлы(ИмяФайла); Возврат; КонецПопытки;
//Преобразование табличного документа в таблицу значений ТабЗначДанные = ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокДанные);
Если НЕ ЗначениеЗаполнено(ТабЗначДанные) Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Не удалось загрузить данные!' " + "; en = 'Failed to load data!' "); Сообщение.Сообщить(); Возврат; КонецЕсли;
ПреобразоватьСтрокуВДату(ТабЗначДанные);
ОпределитьКонечнуюДатуЗаявки(ТабЗначДанные);
//Разделение колонки "Работник" на две: "ИФ_Анг" и "ИОФ_Рус". //Измененние колонки ИОФ_Рус на ФИО_Рус РазделитьФИОРусскийАнглийский(ТабЗначДанные);
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!