Имя: Пароль:
1C
1С v8
Управляемый работа с excel на веб-клиенте
0 Шахтер_с
 
24.04.20
11:38
Есть такой вопрос. Необходимо создать многостраничный файл excel.
Ньюанс, что это необходимо на вебклиенте.
Насколько это реализуемо?
В толстом клиенте без вопросов все работает.
Алгоритм таков:
-делаю несколько файлов в excel;
-потом их читаю и добавляю в один;
На вебклиенте проблемы такие:
-1.Всплывающие окна при первом проходе сохранения файлов.
ПолучитьФайл(АдресХранилища, ИмяФайла, Истина);
-2.Этап Как это можно сделать навебклиенте.
Рабочий код толстого клиента
    Попытка
        ДокЭксель = Новый COMОбъект("Excel.Application");
        ДокЭксель.DisplayAlerts=Ложь;
        ДокЭксель.visible = Ложь;
        ОбщаяКнига= ДокЭксель.WorkBooks.Add();
    Исключение
        Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
        Возврат ;
    КонецПопытки;
    УдалитьФайлы(Отчет.КаталогСохранения+"\statistics.xls");
    Попытка
        ОбщаяКнига.SaveAs(КаталогВременныхФайлов()+"statistics.xls");
    Исключение
        Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
    КонецПопытки;
    ОбщаяКнига.close();
    
    ОбщаяКнига2=ДокЭксель.WorkBooks.Open(КаталогВременныхФайлов()+"statistics.xls");
    Первый      = истина;
    ПрошлыйЛист = Неопределено;
    МассивПутейФайловXLS = НайтиФайлы(Отчет.РабочийКаталог,"*.xls",Ложь);
    Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл
        ИмяЛиста="";
        Если ПутьКФайлуXLS.ИмяБезРасширения="Итоговая" Тогда
            ИмяЛиста = "Total";
        Иначе
            Продолжить;
        КонецЕсли;    
        Книга            = ДокЭксель.WorkBooks.Open(ПутьКФайлуXLS.ПолноеИмя);
        Книга.Worksheets(1).Cells.Select();
        ДокЭксель.Selection.Copy();
        Если Первый Тогда
            НовыйЛист =  ОбщаяКнига2.Worksheets(1);
            Первый = Ложь;
        Иначе    
            НовыйЛист = ОбщаяКнига2.Worksheets.Add(,ПрошлыйЛист);
        КонецЕсли;
        НовыйЛист.Paste();
        НовыйЛист.Activate();
        НовыйЛист.Name=ИмяЛиста;
        ДокЭксель.Range("A1").Select();
        ПрошлыйЛист = НовыйЛист;
        Книга.Close();
    КонецЦикла;
    ОбщаяКнига2.close();
    ДокЭксель.Quit();
    ДокЭксель = Неопределено;
1 Garykom
 
гуру
24.04.20
11:47
(0) 1. На веб-клиенте требуется чтобы стоял плагин в браузере "Расширение для работы с 1С:Предприятием"

2. Нафик это делать на клиенте? На сервере делай.
2 Шахтер_с
 
24.04.20
12:16
(1) Я в курсе. На сервер все работает.
Плагин при первом запуске у клиента устанавлюваю автоматически.
Наборка файлов по пункту 1 сохраняется.
Немогу собрать все страницы воедино на вебе)
Меня интересует этот гемор можно сделать навебклиенте, или сказать клиенту что это не решаемо?
3 Cyberhawk
 
24.04.20
12:17
Если веб-клиент ИЕ, то там все еще есть СОМ-объекты )
4 Шахтер_с
 
24.04.20
12:27
(3) Та я пробую сейчас на разных браузерах (firefox, ie,chrom, opera).
Наверное переделаю сейчас по другому. Пошла мысль)
Сделаю многостраничный таблдок на форме, а там пусть сохраняет и собирает.
5 Garykom
 
гуру
24.04.20
12:34
(2) Так в чем проблема то сделать на сервере файлик экселя и отправить его на клиента и там сохранить куда нуна?
6 Шахтер_с
 
24.04.20
18:53
Сейчас вопрос про comобъект.
Почему наклиенте comобъект отрабатывает, а на вебклиенте выдает ошибку отказано в доступе?
Какого ему доступа не хватает?
В вебклиенте через сервер обращаюсь к com
&НаСервере
Функция  ПоключитьсяКExcel(ИмяФайла)
    //ИмяФайла = Полный путь к файлу Excel
    Соотв = Новый Соответствие;
    Попытка
        Листы = Новый Массив;
        Excel = Новый COMОбъект("Excel.Application");//выбивает с ошибкой :ошибка при вызове конструктора() - отказано в доступе
        ...
    Исключение
        Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
        лРезультат = Неопределено;
    КонецПопытки;
    
    Возврат лРезультат;
КонецФункции

на клиенте без веба все работает
...
Попытка
        ДокЭксель = Новый COMОбъект("Excel.Application");
        ДокЭксель.DisplayAlerts=Ложь;
        ДокЭксель.visible = Ложь;
        ОбщаяКнига= ДокЭксель.WorkBooks.Add();
    Исключение
        Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
        Возврат ;
    КонецПопытки;
...
7 Garykom
 
гуру
24.04.20
19:10
(6) COMОбъект на веб-клиенте? Нюню https://forum.infostart.ru/forum9/topic138606/
8 arsik
 
гуру
24.04.20
19:41
(0) Все не читал, но нафига через COMОбъект("Excel.Application"), если штатно все это можно через 1с-ный табличный документ сделать?
9 Сияющий в темноте
 
24.04.20
23:06
на Web-клиенте с excel можно подружиться через внешнюю компоненту,ну или через запуск excel из командной строки,по другому никак.
так что делать или на сервере или делать службу,к которой будет сервер обращаться и просить сделать ему документ ecxel.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший