Имя: Пароль:
1C
1С v8
Прочитать эксель в табличный документ без сервера
,
0 GriGo
 
09.08.19
14:02
Нужно перенести данные из экселя в табличный документ на стороне клиента, не используя серверные методы. И не используя excell.application Это вообще возможно?
1 Cyberhawk
 
09.08.19
14:03
Конечно
2 Cyberhawk
 
09.08.19
14:04
Но откуда ограничение "без сервера"?
3 Cyberhawk
 
09.08.19
14:04
В 1С так не бывает все равно
4 Cyberhawk
 
09.08.19
14:04
В общем ЧтениеZipФайла тебе в помощь, а дальше уже дело техники
5 Cyberhawk
 
09.08.19
14:05
Если конечно же это xlsx-формат
6 dka80
 
09.08.19
14:06
Чем сервер-то вам не угодил? Или не знаете как передать с клиента на сервер файл?
7 GriGo
 
09.08.19
14:15
(6) с клиента на сервер прекрасно передаю, но некоторым пользователям выдается сообщение, что "пермишн денаед".
8 GriGo
 
09.08.19
14:18
(5) Формат, к сожалению, не всегда xlsx.
Но мне интересно, что дальше с этим "ЧтениеZipФайла" делать?
9 dka80
 
09.08.19
14:20
(7) в какой момент?
10 GriGo
 
09.08.19
14:27
(9) в момент записи двоичных данных в файл на сервере.

решил проблему следующим способом -  в качестве пути к файлу задал значение

ПутьКФайлу = КаталогВременныхФайлов() + "temp.xlsx"

Теперь при записи двоичных данных нет ошибки, но возникает ошибка при чтении данных в табличный документ:

ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Текст);

ошибка: "Ошибка при выполнении файловой операции"
11 НадюшаЯ
 
09.08.19
14:28
ПолучитьИмяВременногоФайла
12 Ботаник Гарден Меран
 
09.08.19
14:31
С партнерских далей, как вариант:
"Реальный формат файла не соответствует расширению."
13 dka80
 
09.08.19
14:32
&НаКлиенте
Процедура ПрочитатьФайл(Команда)
    
    Оп = Новый ОписаниеОповещения("НачатьПомещениеФайлаОкончание", ЭтотОбъект);
    АдресВременногоХранилища = "";
    НачатьПомещениеФайла(Оп, АдресВременногоХранилища, ПутьКФайлу,Ложь, ЭтаФорма.УникальныйИдентификатор);
    
КонецПроцедуры

Процедура ПрочитатьФайлНаСервере(АдресВременногоХранилища, ИмяТД)
    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Объект.РасширениеФайла);
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    
    ТД.Прочитать(ИмяВременногоФайла);
    
КонецПроцедуры

Только следи за расширением файла. Например, важно xls или xlsx
14 GROOVY
 
09.08.19
14:37
Без экселя можно грузить используя построитель запроса.
15 vcv
 
09.08.19
14:41
Вроде свеженькие релизы 1С нормально читают эксель в штатный табличный документ. Правда только первый лист из многостраничного документа.
16 GriGo
 
09.08.19
14:41
(13) (11) ПолучитьИмяВременногоФайла("xls") - сработало, спасибо.
Убей не помню, как я раньше без "получитьИзВременногоФайла" делал. Но это уже из области спортивного интереса. Еще раз спасибо, хорошего дня.
17 GriGo
 
09.08.19
14:42
(14) это как?
18 НадюшаЯ
 
09.08.19
14:42
(14) а это как?
19 Ботаник Гарден Меран
 
09.08.19
14:51
(15)
Все листы.
20 Смотрящий
 
09.08.19
15:03
(0) adodb не?
21 GriGo
 
09.08.19
15:05
(20) пример приведешь?
22 GriGo
 
09.08.19
15:05
(20) пример сможешь привести?
23 Смотрящий
 
09.08.19
15:10
дай мыло. скину модуль вечером. для 10.3 писал
24 dka80
 
09.08.19
15:23
(15) +19 каждый лист в отдельную область
25 GROOVY
 
09.08.19
17:32
ТабДок=Новый ТабличныйДокумент;
ТабДок.Прочитать(ВыбранноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    
ПостроительЗапроса=Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных=Новый ОписаниеИсточникаДанных (ТабДок.Область("НазваниеЛиста"));
ПостроительЗапроса.Выполнить();
//В файле первой строчкой должны идти названия колонок. Если этого не будет, то построитель не вернет ТЗ, т.к. не будут заданы имена колонок.
РезТаб=ПостроительЗапроса.Результат.Выгрузить();  //Выбрать или еще что-нить
Для Каждого СтрокаТЗ из РезТаб Цикл
        
Товар = СтрокаТЗ.Товар; //Название колонки
26 НадюшаЯ
 
09.08.19
17:57
(25) что то вроде этого да?
http://catalog.mista.ru/public/1050198/
27 GROOVY
 
09.08.19
20:45
(26) Не, больше это напоминает: https://expert.chistov.pro/public/1050198/
2 + 2 = 3.9999999999999999999999999999999...