|
Открытие файла Excel загруженного через обработку на web клиенте | ☑ | ||
---|---|---|---|---|
0
brenli
14.07.21
✎
15:17
|
Всем добра.
Переделываю обработку которая на тонком клиенте читала файл excel для использования через web. В обработке есть реквизит типа строка который получает путь к файлу, из которого в последствии происходит его открытие. Погуглив нашел такие куски кода.. &НаКлиенте Процедура ОбработчикОкончанияПомещения(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Результат Тогда Объект.ИмяФайла = Адрес; Сообщить(Адрес); Иначе Сообщить("Файл не был помещен."); КонецЕсли КонецПроцедуры &НаКлиенте Процедура ВыборФайла Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Собственный заголовок диалога загрузки файла"; ОбработкаОкончанияЗагрузки = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтотОбъект, Диалог); НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , Диалог, Истина, УникальныйИдентификатор); КонецПроцедуры Получается ссылка во временном хранилище я так понимаю, но дальше открытие не происходит и через переход по ссылке файл не открывается. Синтаксис помощник говорит что в описанииоповещения <Адрес> - расположение нового файла. Но ничего не работает. Подскажите кто сталкивался |
|||
1
OldCondom
14.07.21
✎
15:26
|
задача то какая?
|
|||
2
OldCondom
14.07.21
✎
15:36
|
Может пригодится. Загружает файл в реквизит типа "Хранилище значений". Открывай потом где хочешь.
&НаКлиенте Процедура ЗагрузитьПравилаВыгрузки(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выбор файла правил выгрузки"; Диалог.ПредварительныйПросмотр = Ложь; Диалог.Фильтр = "*.xml"; Диалог.МножественныйВыбор = Ложь; Если Диалог.Выбрать() Тогда ЗагрузитьПравилаВыгрузкиНаСервере(Диалог.ПолноеИмяФайла); Иначе КонецЕсли; КонецПроцедуры Процедура ЗагрузитьПравилаВыгрузкиНаСервере(АдресФайла) ХранилищеПравилаВыгрузки = Новый ХранилищеЗначения(Новый ДвоичныеДанные(АдресФайла)); СпрОбъект = РеквизитФормыВЗначение("Объект"); СпрОбъект.ПравилаВыгрузки = ХранилищеПравилаВыгрузки; СпрОбъект.Записать(); Модифицированность = Ложь; ЗначениеВРеквизитФормы(СпрОбъект, "Объект"); КонецПроцедуры |
|||
3
Kassern
14.07.21
✎
15:39
|
(2) модально уже не модно)
|
|||
4
brenli
14.07.21
✎
15:57
|
(1) загрузка данных из Excel файла.
|
|||
5
Мультук
гуру
15.07.21
✎
08:04
|
Копипаста из https://chistov.pro/utilities/st83/
== Загрузка данных из Excel АСИНХ == &НаКлиенте АСИНХ Процедура ПоместитьФайлКоманда(Команда) ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов; ПараметрыДиалога.Заголовок = "НачатьПомещениеФайлаНаСервер"; ПараметрыДиалога.МножественныйВыбор = Истина; ПараметрыДиалога.Фильтр = НСтр("en = 'Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|'; ru = 'Файл таблицы Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|'"); ПрогрессОбратныйВызов = Новый ОписаниеОповещения("ПрогрессОбратныйВызов", ЭтотОбъект); ПередНачалоОбратныйВызов = Новый ОписаниеОповещения("ПередНачалоОбратныйВызов", ЭтотОбъект); ОписаниеПомещенногоФайла = ЖДАТЬ ПоместитьФайлНаСерверАсинх(ПрогрессОбратныйВызов, ПередНачалоОбратныйВызов, , ПараметрыДиалога); Если ОписаниеПомещенногоФайла = Неопределено Тогда Возврат; КонецЕсли; Сообщить("Помещение файла " + ?(ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено, "отменено", "выполнено успешно")); Сообщить("Адрес во временном хранилище: " + ОписаниеПомещенногоФайла.Адрес); Сообщить("Имя файла: " + ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя); Сообщить("Размер файла, байт: " + ОписаниеПомещенногоФайла.СсылкаНаФайл.Размер()); ОбработатьЗагруженныйФайл(ОписаниеПомещенногоФайла.Адрес); КонецПроцедуры &НаСервереБезКонтекста Процедура ОбработатьЗагруженныйФайл(Адрес) ФайлНаДиске = ПолучитьИмяВременногоФайла("xlsx"); ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес); ДанныеФайла.Записать(ФайлНаДиске) ; ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ФайлНаДиске, СпособЧтенияЗначенийТабличногоДокумента.Значение); ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных (ТабДок.Область("Лист1")); //Здесть Лист1 - название листа экселя. ПостроительЗапроса.Выполнить(); //В файле первой строчкой должны идти названия колонок. Если этого не будет, то построитель не вернет ТЗ, т.к. не будут заданы имена колонок. //Также нужно смотреть на типы ячеек файла. Типизация нормально отрабатывает, если заданы соответствующие типы. Иначе "10.08.2017" в экселе - это строка, а не дата. СтрокиТЗ = ПостроительЗапроса.Результат.Выгрузить(); //Выполняем запрос к источнику данных, автоматически выбирая все поля и получаем таблицу значений Для каждого СтрокаТЗ Из СтрокиТЗ Цикл //Полученные данные КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПрогрессОбратныйВызов(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт Состояние("Файл " + ПомещаемыйФайл.Имя, Помещено, "Файл имеет размер " + ПомещаемыйФайл.Размер() + " байт", БиблиотекаКартинок.Документ); КонецПроцедуры &НаКлиенте Процедура ПередНачалоОбратныйВызов(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт Сообщить("Помещаемый файл - " + ПомещаемыйФайл.Имя + ", размер = " + ПомещаемыйФайл.Размер()); КонецПроцедуры |
|||
6
brenli
15.07.21
✎
09:37
|
(5) Спасибо.
Я сделал так Процедура СохранитьФайлИзХранилищаПоПути() ИмяФайлаСПутем = ПолучитьИмяВременногоФайла("xlsx"); ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); ДвоичныеДанныеФайла.Записать(ИмяФайлаСПутем); Объект.ИмяФайла = ИмяФайлаСПутем; Сообщить(АдресВХранилище); КонецПроцедуры &НаКлиенте Процедура ОбработкаОкончанияЗагрузки(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Результат Тогда АдресВХранилище = Адрес; Иначе Сообщить("Файл не был помещен."); КонецЕсли КонецПроцедуры &НаКлиенте Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Собственный заголовок диалога загрузки файла"; Диалог.МножественныйВыбор = Ложь; Диалог.Фильтр = "Документы(*.xlsx)|*.xlsx;"; Диалог.ПроверятьСуществованиеФайла = Истина; ОбработкаОкончанияЗагрузки = Новый ОписаниеОповещения("ОбработкаОкончанияЗагрузки", ЭтотОбъект, Диалог); НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , Диалог, Истина, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) СохранитьФайлИзХранилищаПоПути(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |