Версия для печати темы (https://pro1c.org.ua/index.php?s=62a284f7b32b38201a1ecb3b7a92308a&showtopic=67512)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Загрузка EXEL c сервера через COM

Автор: burza 21.03.24, 10:43

На клиенте данные загружает, когда процедуру переношу на сервер, ругается на МассивКолонок = arr.Выгрузить(); именно Выгрузить, что нужно сделать?)

я знаю что есть код для сервера другой я и сам им удачно пользуюсь, но нужен именно этот по причинам.

        
Попытка    
        Excel = Новый COMОбъект("Excel.Application");
        WB   =  Excel.Workbooks.Open(файл);
        WS = WB.Worksheets(1);
        arr = WS.UsedRange.Value;
        WB.Close(0);
        
        Исключение    
        КонецПопытки;
        
        МассивКолонок = arr.Выгрузить();
        ВсегоСтрок = (МассивКолонок.Получить(0).Количество()) - 1;

Автор: Slon747 21.03.24, 10:49

burza @ Сегодня, 10:43 * ,
А какой тип данных у arr и какая ошибка?

Автор: burza 21.03.24, 11:10

Slon747 @ Сегодня, 10:49 * ,
Значение не является значением объектного типа (Выгрузить)

burza @ Сегодня, 10:53 * ,
Обычный старый код чтения xls ))

     файл = "D:\1C\Mail\bas\123.csv";
        
        Попытка    
        Excel = Новый COMОбъект("Excel.Application");
        WB   =  Excel.Workbooks.Open(файл);
        WS = WB.Worksheets(1);
        arr = WS.UsedRange.Value;
        WB.Close(0);        
        Исключение    
        КонецПопытки;
        
        
        МассивКолонок = arr.Выгрузить();
        ВсегоСтрок = (МассивКолонок.Получить(0).Количество()) - 1;
    

          Для СтрокаТП = 59 По ВсегоСтрок Цикл        
        Стр = Таб.Добавить();        
        Стр.Наименование = СокрЛП(МассивКолонок.Получить(0).Получить(СтрокаТП));
        Стр.Производитель = СокрЛП(МассивКолонок.Получить(1).Получить(СтрокаТП));
        Стр.Артикул = СокрЛП(МассивКолонок.Получить(3).Получить(СтрокаТП));
        Стр.Цена = СокрЛП(МассивКолонок.Получить(5).Получить(СтрокаТП));
        Стр.НаличиеОдесса = СокрЛП(МассивКолонок.Получить(6).Получить(СтрокаТП));
        Стр.Наличиефилиалы = СокрЛП(МассивКолонок.Получить(7).Получить(СтрокаТП));
        Стр.Спецпредложение = СокрЛП(МассивКолонок.Получить(8).Получить(СтрокаТП));
        Стр.Полтава = СокрЛП(МассивКолонок.Получить(9).Получить(СтрокаТП));
        Стр.Черкассы = СокрЛП(МассивКолонок.Получить(10).Получить(СтрокаТП));
        Стр.Днепр = СокрЛП(МассивКолонок.Получить(11).Получить(СтрокаТП));
        Стр.Львов = СокрЛП(МассивКолонок.Получить(12).Получить(СтрокаТП));
        Стр.ИваноФранковс = СокрЛП(МассивКолонок.Получить(13).Получить(СтрокаТП));
        Стр.Харьков = СокрЛП(МассивКолонок.Получить(14).Получить(СтрокаТП));
        Стр.Винница = СокрЛП(МассивКолонок.Получить(15).Получить(СтрокаТП));
        Стр.Тернополь = СокрЛП(МассивКолонок.Получить(16).Получить(СтрокаТП));
        Стр.Николаев = СокрЛП(МассивКолонок.Получить(17).Получить(СтрокаТП));
        Стр.Херсон = СокрЛП(МассивКолонок.Получить(18).Получить(СтрокаТП));
        Стр.Кропивницкий = СокрЛП(МассивКолонок.Получить(19).Получить(СтрокаТП));
        Стр.Запорожье = СокрЛП(МассивКолонок.Получить(20).Получить(СтрокаТП));
        Стр.Киев = СокрЛП(МассивКолонок.Получить(21).Получить(СтрокаТП));
        Стр.Черновцы = СокрЛП(МассивКолонок.Получить(22).Получить(СтрокаТП));                
        КонецЦикла;

Автор: Slon747 21.03.24, 11:17

burza @ Сегодня, 11:10 * ,
У вас код выполняется &НаКлиенте, а Выгрузить() не работает на тонком клиенте.

Автор: burza 21.03.24, 11:19

Slon747 @ Сегодня, 11:17 * ,
код в общем модуле лежит, по регламенту нужно делать

Функция Bastion() Экспорт
    
    Таб = Новый ТаблицаЗначений;
    Таб.Колонки.Добавить("Наименование");
    Таб.Колонки.Добавить("Производитель");
    Таб.Колонки.Добавить("Артикул");
    Таб.Колонки.Добавить("Цена");
    Таб.Колонки.Добавить("НаличиеОдесса");
    Таб.Колонки.Добавить("Наличиефилиалы");
    Таб.Колонки.Добавить("Спецпредложение");
    Таб.Колонки.Добавить("Полтава");
    Таб.Колонки.Добавить("Черкассы");
    Таб.Колонки.Добавить("Днепр");
    Таб.Колонки.Добавить("Львов");
    Таб.Колонки.Добавить("ИваноФранковс");
    Таб.Колонки.Добавить("Харьков");
    Таб.Колонки.Добавить("Винница");
    Таб.Колонки.Добавить("Тернополь");
    Таб.Колонки.Добавить("Николаев");
    Таб.Колонки.Добавить("Херсон");
    Таб.Колонки.Добавить("Кропивницкий");
    Таб.Колонки.Добавить("Запорожье");
    Таб.Колонки.Добавить("Киев");
    Таб.Колонки.Добавить("Черновцы");
    
    
         файл = "D:\1C\Mail\bas\bastion.csv";
        
        Попытка    
        Excel = Новый COMОбъект("Excel.Application");
        WB   =  Excel.Workbooks.Open(файл);
        WS = WB.Worksheets(1);
        arr = WS.UsedRange.Value;
        WB.Close(0);        
        Исключение    
        КонецПопытки;
        
        
        МассивКолонок = arr.Выгрузить();
        ВсегоСтрок = (МассивКолонок.Получить(0).Количество()) - 1;
    

          Для СтрокаТП = 59 По ВсегоСтрок Цикл        
        Стр = Таб.Добавить();        
        Стр.Наименование = СокрЛП(МассивКолонок.Получить(0).Получить(СтрокаТП));
        Стр.Производитель = СокрЛП(МассивКолонок.Получить(1).Получить(СтрокаТП));
        Стр.Артикул = СокрЛП(МассивКолонок.Получить(3).Получить(СтрокаТП));
        Стр.Цена = СокрЛП(МассивКолонок.Получить(5).Получить(СтрокаТП));
        Стр.НаличиеОдесса = СокрЛП(МассивКолонок.Получить(6).Получить(СтрокаТП));
        Стр.Наличиефилиалы = СокрЛП(МассивКолонок.Получить(7).Получить(СтрокаТП));
        Стр.Спецпредложение = СокрЛП(МассивКолонок.Получить(8).Получить(СтрокаТП));
        Стр.Полтава = СокрЛП(МассивКолонок.Получить(9).Получить(СтрокаТП));
        Стр.Черкассы = СокрЛП(МассивКолонок.Получить(10).Получить(СтрокаТП));
        Стр.Днепр = СокрЛП(МассивКолонок.Получить(11).Получить(СтрокаТП));
        Стр.Львов = СокрЛП(МассивКолонок.Получить(12).Получить(СтрокаТП));
        Стр.ИваноФранковс = СокрЛП(МассивКолонок.Получить(13).Получить(СтрокаТП));
        Стр.Харьков = СокрЛП(МассивКолонок.Получить(14).Получить(СтрокаТП));
        Стр.Винница = СокрЛП(МассивКолонок.Получить(15).Получить(СтрокаТП));
        Стр.Тернополь = СокрЛП(МассивКолонок.Получить(16).Получить(СтрокаТП));
        Стр.Николаев = СокрЛП(МассивКолонок.Получить(17).Получить(СтрокаТП));
        Стр.Херсон = СокрЛП(МассивКолонок.Получить(18).Получить(СтрокаТП));
        Стр.Кропивницкий = СокрЛП(МассивКолонок.Получить(19).Получить(СтрокаТП));
        Стр.Запорожье = СокрЛП(МассивКолонок.Получить(20).Получить(СтрокаТП));
        Стр.Киев = СокрЛП(МассивКолонок.Получить(21).Получить(СтрокаТП));
        Стр.Черновцы = СокрЛП(МассивКолонок.Получить(22).Получить(СтрокаТП));                
        КонецЦикла;
КонецФункции

Автор: Slon747 21.03.24, 11:41

А если вы уберете обработку исключительной ситуации, то выяснится, что ошибка возникает гораздо раньше.
Не так ли?

Автор: burza 21.03.24, 11:43

Slon747 @ Сегодня, 11:41 * ,
туплю, вы правы! Приложению Microsoft Excel не удается получить доступ к файлу. куда копать?

Автор: Slon747 21.03.24, 11:46

А файл физически не на сервере?

Автор: burza 21.03.24, 11:52

Slon747 @ Сегодня, 11:46 * ,
на сервере,там где скул и 1С.учетка кластера админ

Автор: Slon747 21.03.24, 11:58

А юзеру USR1CV8 доступен данный файл?

Автор: burza 21.03.24, 12:35

Slon747 @ Сегодня, 11:58 * ,
он стоит как администратор. то думаю да.

burza @ Сегодня, 12:16 * ,
https://pro1c.org.ua/redirect.php?https://forum.infostart.ru/forum9/topic132619/

Спасибо кто на мысль натолкнул)

Автор: Slon747 21.03.24, 13:41

Еще можно без екселя работать, а просто загрузить в ТабличныйДокумент и уже с него считывать данные.

Автор: xlmel 09.04.24, 10:25

Цитата(burza @ 21.03.24, 11:43) *
На клиенте данные загружает, когда процедуру переношу на сервер, ругается на МассивКолонок = arr.Выгрузить(); именно Выгрузить, что нужно сделать?)

я знаю что есть код для сервера другой я и сам им удачно пользуюсь, но нужен именно этот по причинам.

        
Попытка    
        Excel = Новый COMОбъект("Excel.Application");
        WB   =  Excel.Workbooks.Open(файл);
        WS = WB.Worksheets(1);
        arr = WS.UsedRange.Value;
        WB.Close(0);
        
        Исключение    
        КонецПопытки;
        
        МассивКолонок = arr.Выгрузить();
        ВсегоСтрок = (МассивКолонок.Получить(0).Количество()) - 1;


А Вы Windows настроили, чтобы Excel через COM работал?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua