8.х Внешняя обработка ComОбъект Excel 1C сервер, ошибка или передать функцию...

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Фархад, 30 июн 2016.

  1. TopicStarter Overlay
    Фархад
    Offline

    Фархад

    Регистрация:
    30 июн 2016
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Всем привет! Столкнулся с такой траблой, был файловый режим работы с базой данных, моя обработка с получением данных из ексель работала хорошо. База выросла, решили перейти на сервер 1С (WinServ2003, MSSQL 5) и тут стала появляться ошибка на строку Excel = Новый COMОбъект("Excel.Application");
    Ведь эта функция записана НаСервере, почитал кучу форумов, попробовал потыкать DCOM и права пользователей и прочее, запарился. И тут пришла идея - а если эту функцию вызвать НаКлиенте а потом передать переменную в функцию НаСервер и после обработки вернуть ее обратно клиенту? Кто-нить заморачивался так?

    что-то типа
    Код:
    &НаКлиенте
    Процедура Команда1(Команда)
        // Вставить содержимое обработчика.
        Excel = Новый COMОбъект("Excel.Application");
        Excel = ОбработатьФайл(Excel);    
       
    КонецПроцедуры
    
    &НаСервере
    Функция ОбработатьФайл(Excel1)    
    
     Excel1.WorkBooks.Open(ИмяФайла);
    
     и прочая обработка ведется тут, а потом все это клинту возвратить
    
    Возврат Excel1;   
    КонецФункции
    
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Нет, так не получится. Либо запускаете ексель на каждом клиентском компьютере, либо на сервере. Если эксель на клиенте, то получаете данные на сервере, передаете их на клиент и формируете файл эксель. Если эксель на сервере, то передаете файл с клиента на сервер и заполняете файл на сервере, по окончании переписываете файл на клиенте файлом с сервера.
  3. TopicStarter Overlay
    Фархад
    Offline

    Фархад

    Регистрация:
    30 июн 2016
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Агась, потыкался я и понял что платформа не умеет передавать переменные такого типа ))) зато нашел косяк при настройке прав пользователя от которого запускается сервер 1С, оказывается в сетевой папке я в доступе ему не разрешил, а в безопасности и в dcom все выставил ))) вот и косяк, нашел его простым методом - закинул на сервер файл в корень диска, в обработке принудительно прописал путь и запустил. И все заработало )) стал искать причину доступов и вот - косяк был в закладке ОбщийДоступ )))
  4. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Ну я вот как-то так делал
    Код:
    &НаКлиенте
    Процедура ЗагрузитьЗаявку(Команда)
    ...
        ЗагрузитьЗаявкуНаКлиенте();
    ...
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ЗагрузитьЗаявкуНаКлиенте()
    ...
       ЗагрузитьЗаявкуНаСервере(МассивДанных);
    ...
    КонецПроцедуры
    
    &НаСервере
    Процедура ЗагрузитьЗаявкуНаСервере(МассивДанных)
        ИмяФайлаНаСервере=КаталогВременныхФайлов()+"Заявка_"+Формат(ТекущаяДата(),"ДФ=dd_MM_yyyy_hh_mm_ss")+".xlsx";  
        Попытка
            ФайлExcel=ПолучитьИзВременногоХранилища(АдресВременногоХранилища); 
            ФайлExcel.Записать(ИмяФайлаНаСервере)
        Исключение
            Сообщить("Не удалось записать файл" + Символы.ПС + ОписаниеОшибки());
            Возврат
        КонецПопытки;
    
        Попытка
            Excel=Новый COMОбъект("Excel.Application")
        Исключение
            Сообщить("Не удалось запустить Excel" + Символы.ПС + ОписаниеОшибки());
            УдалитьФайлы(ИмяФайлаНаСервере);
            Возврат
        КонецПопытки;
        Книга            =Excel.WorkBooks;
        ЗагружаемыйФайл    =Книга.Open(ИмяФайлаНаСервере);
        ВсегоЛистовВКниге=ЗагружаемыйФайл.WorkSheets.Count;
    ...
        Для ТекЛист=1 По ВсегоЛистовВКниге Цикл
            Лист=ЗагружаемыйФайл.Sheets(ТекЛист);
    ...
        КонецЦикла;
     
        Excel.DisplayAlerts = 0;
        Excel.Workbooks.Close();
        Excel.Quit();
        Попытка
            УдалитьФайлы(ИмяФайлаНаСервере);
        Исключение
            Сообщить("Не удалось удалить временный файл" + Символы.ПС + ОписаниеОшибки());
            Возврат
        КонецПопытки;
    КонецПроцедуры
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Для того что бы получить что-то из временного хранилища, необходимо сперва это что-то в него поместить.

    Схема работы такая: с клиента помещаем в хранилище файл, на сервер передаем адрес файла во временном хранилище, на сервере получаем файл и открываем эксель, заполняем файл, помещаем во временное хранилище, передаем на клиент адрес файла в хранилище, на клиенте получаем файл из хранилища и перезаписываем.
  6. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Ну само собой сначала поместил на клиенте. Где-то когда сюда закидывал или пропустил этот кусок, или вырезал нечаяно.

Поделиться этой страницей