Имя: Пароль:
1C
1С v8
Загрузка из экзеля в 1с
0 Сержант ВДВ Онегин
 
30.01.18
09:22
Написал обработку, которая из экзеля считывает данные и загружает их в 1с, при этом создавая новую номенклатуру.
На копии базы, которая находится на локальном диске все нормально пашет. Но когда запускаю в базе, которая находится на сервере выходит такая ошибка:

{ВнешняяОбработка.ПереносНоменклатуры.Форма.Форма.Форма(34)}: Ошибка при вызове конструктора (ComОбъект)
Ex=Новый ComОбъект("Excel.Application");
, reason:
-2147221005(0x800401F3): Invalid class string

Код написан такой:

Ex=Новый ComОбъект("Excel.Application");
        Work = Ex.workbooks.Open(СокрЛП(ПутьКФайлу));
        ЛистДанных = Work.Sheets(Лист);
        
        НачатьТранзакцию();
        
        Если Номенклатура Тогда
        ВыполнитьЗаполнениеНоменклатуры(ЛистДанных);            
        ЗафиксироватьТранзакцию();
        Ex.Workbooks.Close();
    КонецЕсли;
1 cw014
 
30.01.18
09:24
Что то с классом не так. Или с доступом к нему от имени текущего юзера
2 Сержант ВДВ Онегин
 
30.01.18
09:25
(1) надо компу, на котром работает юзер открыть доступ на сервер?
3 cw014
 
30.01.18
09:25
(2) Это на сервере или на клиенте выполняется?
4 Адинэснег
 
30.01.18
09:26
щас выяснится, кто клиент запускается в терминале, на котором экселей нет
5 Адинэснег
 
30.01.18
09:26
(3)ВнешняяОбработка.ПереносНоменклатуры.Форма.Форма.Форма
угадай
6 Адинэснег
 
30.01.18
09:27
хотя если УФ... тогда и &НаСервере может
7 cw014
 
30.01.18
09:27
(5) она и уф может быть такая
8 Сержант ВДВ Онегин
 
30.01.18
09:28
(3) на Сервере конечно же.
9 Сержант ВДВ Онегин
 
30.01.18
09:28
(4) Экзель есть и на сервере, и на компе пользователя
10 cw014
 
30.01.18
09:29
(9) Так, давай теперь подробности. Обычные или управляемые формы?
11 Сержант ВДВ Онегин
 
30.01.18
09:29
(10) управляемые
12 Сержант ВДВ Онегин
 
30.01.18
09:30
(10) все дело в том что на актуальной копии данной базы все работает как огурчик. Просто копия лежит на локальном компе.
13 cw014
 
30.01.18
09:30
(11) Так. Обработчик запускается в процедуре или функции с директивой &НаСервере или &НаКлиенте ?
14 yavasya
 
30.01.18
09:30
(11) просто у тебя пользователя платформы нет прав на эксель
15 Бычье сердце
 
30.01.18
09:30
(0) На сервере эксель переустановить/установить.
16 perester
 
30.01.18
09:31
на компьютере сервера работает?
Попробуйте закинуть файл в общую папку к которой есть доступ и у юзера и у сервера
17 Мимохожий Однако
 
30.01.18
09:31
Сделай регистрацию СОМ на локальном компе
18 yavasya
 
30.01.18
09:32
19 Сержант ВДВ Онегин
 
30.01.18
09:32
(13) в процедуре на &НаСервере
20 yavasya
 
30.01.18
09:32
21 yavasya
 
30.01.18
09:33
(19) че совсем ? у тебя прав нет
22 yavasya
 
30.01.18
09:34
(19) замени на другой формат
23 Сержант ВДВ Онегин
 
30.01.18
09:35
(22) про какой формат идет речь?
24 Сержант ВДВ Онегин
 
30.01.18
09:35
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Файлы Excel(*.xls;*.xlsx)|*.xls; *.xlsx";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
        Для Каждого ИмяФайла Из МассивФайлов Цикл
            ПутьКфайлу=ИмяФайла;
        КонецЦикла;
    Иначе
        Предупреждение("Файл не выбран!");
    КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ВыполнитьНажатие(Команда)
    
    Загрузка();    
        
КонецПроцедуры


&НаСервере
Процедура Загрузка() Экспорт
    
        Ex=Новый ComОбъект("Excel.Application");
        Work = Ex.workbooks.Open(СокрЛП(ПутьКФайлу));
        ЛистДанных = Work.Sheets(Лист);
        
        НачатьТранзакцию();
        
        Если Номенклатура Тогда
        ВыполнитьЗаполнениеНоменклатуры(ЛистДанных);            
        ЗафиксироватьТранзакцию();
        Ex.Workbooks.Close();
    КонецЕсли;

КонецПроцедуры
25 cw014
 
30.01.18
09:35
(19) Хорошо. База клиент-серверная? Если да, то агент сервера 1С предприятия локальный или где то еще находится?
26 Barabashka
 
30.01.18
09:36
(19) на сервере нет файла "ПутьФайла", он находится на клиентской машине. При запуске на файловой базе (на копии) - сервер и клиентская машина - это одно и то же. При запуске на сервере - ищет файл на сервере.

как вариант - вынести получение файла &НаКлиенте и передать уже полученный на сервер
27 cw014
 
30.01.18
09:38
(26) У него валится на создании Com-объекта
28 Сержант ВДВ Онегин
 
30.01.18
09:38
(26) как это сделать?
29 Сержант ВДВ Онегин
 
30.01.18
09:38
(27) да вы точно подметили
30 cw014
 
30.01.18
09:39
(29) ответь на (25)
31 Сержант ВДВ Онегин
 
30.01.18
09:40
(25) не понял вопроса )база находится на сервере рабочая
32 cw014
 
30.01.18
09:41
Как 1С запускается? Через терминальное подключение? Или локально на машине?
33 Сержант ВДВ Онегин
 
30.01.18
09:42
(32) локально на машине
34 cw014
 
30.01.18
09:43
Так, он подключается к серверу какому то (можно посмотреть в строке подключения). На сервере точно эксель есть? То есть можете подключиться через RDP и запустить эксель от имени пользователя, под которым запущен агент сервера 1с?
35 dezss
 
30.01.18
09:43
(33) попробуй зайти на сервак под пользователем, под которым работает служба и запусти эксель.
36 Barabashka
 
30.01.18
09:43
(27) тьфу... но смысл тот же. На сервере 1С нет Excel. Выносить создание COM-объекта на клиента.
37 Сержант ВДВ Онегин
 
30.01.18
09:45
(34) на сервере точно есть экзель, сейчас попробую его запустить
38 cw014
 
30.01.18
09:45
(36) Может и есть, только агент установлен по умолчанию на usr1cv как там его, а у того нет прав на эксель
39 Мимохожий Однако
 
30.01.18
09:49
(38) Как определить от какого юзера запускается агент 1С, если написано "системная "
40 cw014
 
30.01.18
09:50
(39) системная? ХЗ. Давно не сталкивался, что бы пользователь был "системная"
41 Сержант ВДВ Онегин
 
30.01.18
09:51
(36) вынес на клиента. теперь такая ошибка выходит

{ВнешняяОбработка.ПереносНоменклатуры.Форма.Форма.Форма(41)}: Error calling context method (ВыполнитьЗаполнениеНоменклатуры)
        ВыполнитьЗаполнениеНоменклатуры(ЛистДанных);            
, reason:
Data transfer between client and server error. Invalid value type.
, reason:
Error converting XDTO data:
Property value record 'param':
    form: Item
    name: {http://v8.1c.ru/8.2/managed-application/modules}param
, reason:
XDTO type mapping on V8 type is missing:
Missing view for type 'COMОбъект'
42 cw014
 
30.01.18
09:53
(41) Нельзя передавать COMОбъект на сервер и на клиент. Открываешь, выбираешь, собираешь структуру, передаешь на сервер. Сервер создает и возвращает управление. Повторить, пока не станет хорошо
43 Сержант ВДВ Онегин
 
30.01.18
09:55
942) как это прописать в коде?
44 Сержант ВДВ Онегин
 
30.01.18
09:56
(42) защел на сервер через ремоут десктоп и открыл экзель. сработало
45 cw014
 
30.01.18
09:56
(44) Зайди в службы, найди агент сервера 1с предприятия, ткни правой кнопкой, открой свойства. Посмотри пользователя. Подумай
46 Мимохожий Однако
 
30.01.18
09:58
(40) Уточню. Кружочек Вход в систему- с системной учетной записью...Поэтому и вопрос. У меня есть схожая проблема,когда в клиентском режиме нормально читает Excel, а в регламентном задании - сбой.
47 cw014
 
30.01.18
09:58
(43)
&НаКлиенте
СоздаемЕксель();
Для Сч = 1 По НашЕксель.СвойствоКоличествоСтрок Цикл
   СтруктураСтроки = Новый Структура;
   СтруктураСтроки.Вставить(КакойТоКлючПолученныйИзСтрокиЕкселя, КакоеТоЗначениеИзСтрокиЕкселя);
  
  СоздатьНаСервере(СтруктураСтроки);
КонецЦикла;

&НаСервере
Процедура СоздатьНаСервере(СтруктураСтроки)
  СоздатьНоменклатуруПоДаннымСтруктуры();
КонецПроцедуры
48 cw014
 
30.01.18
09:59
(46) Ну вот тогда снимай и указывай пользователя принудительно. Того, кто 100% имеет доступ к таким вещам
49 Сержант ВДВ Онегин
 
30.01.18
10:02
(47) а куда девать создание нового ком обьекта?
50 cw014
 
30.01.18
10:02
(49) Это тебе алгоритм, а не готовый код ;)
51 cw014
 
30.01.18
10:02
(49) Дальше включай мозги
52 Мимохожий Однако
 
30.01.18
10:02
(48) При этом надо убедиться, что у этого пользователя есть права на запуск агента 1С и взаимодействия с SQL. Так?
53 cw014
 
30.01.18
10:03
(52) Ну как бы да
54 Barabashka
 
30.01.18
10:07
(49) А вообще есть возможность узнать у админа, установлен ли Excel на машине, где крутится сервер 1С?
55 Сержант ВДВ Онегин
 
30.01.18
10:10
(54) да там есть 1с. установлен
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший