Имя: Пароль:
1C
1С v8
Открытие файла 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;";
    Диалог.ПроверятьСуществованиеФайла = Истина;
    
        
    ОбработкаОкончанияЗагрузки         = Новый ОписаниеОповещения("ОбработкаОкончанияЗагрузки", ЭтотОбъект, Диалог);
    
    НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , Диалог, Истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    СохранитьФайлИзХранилищаПоПути();
КонецПроцедуры
Ошибка? Это не ошибка, это системная функция.