Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Загрузка из экзеля в 1с

Загрузка из экзеля в 1с
Я
   Сержант ВДВ Онегин
 
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();
    КонецЕсли;
 
 
   cw014
 
1 - 30.01.18 - 09:24
Что то с классом не так. Или с доступом к нему от имени текущего юзера
   Сержант ВДВ Онегин
 
2 - 30.01.18 - 09:25
(1) надо компу, на котром работает юзер открыть доступ на сервер?
   cw014
 
3 - 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
хотя если УФ... тогда и &НаСервере может
   cw014
 
7 - 30.01.18 - 09:27
(5) она и уф может быть такая
   Сержант ВДВ Онегин
 
8 - 30.01.18 - 09:28
(3) на Сервере конечно же.
   Сержант ВДВ Онегин
 
9 - 30.01.18 - 09:28
(4) Экзель есть и на сервере, и на компе пользователя
   cw014
 
10 - 30.01.18 - 09:29
(9) Так, давай теперь подробности. Обычные или управляемые формы?
 
 Рекламное место пустует
   Сержант ВДВ Онегин
 
11 - 30.01.18 - 09:29
(10) управляемые
   Сержант ВДВ Онегин
 
12 - 30.01.18 - 09:30
(10) все дело в том что на актуальной копии данной базы все работает как огурчик. Просто копия лежит на локальном компе.
   cw014
 
13 - 30.01.18 - 09:30
(11) Так. Обработчик запускается в процедуре или функции с директивой &НаСервере или &НаКлиенте ?
   yavasya
 
14 - 30.01.18 - 09:30
(11) просто у тебя пользователя платформы нет прав на эксель
   Бычье сердце
 
15 - 30.01.18 - 09:30
(0) На сервере эксель переустановить/установить.
   perester
 
16 - 30.01.18 - 09:31
на компьютере сервера работает?
Попробуйте закинуть файл в общую папку к которой есть доступ и у юзера и у сервера
   МимохожийОднако
 
17 - 30.01.18 - 09:31
Сделай регистрацию СОМ на локальном компе
   yavasya
 
18 - 30.01.18 - 09:32
   Сержант ВДВ Онегин
 
19 - 30.01.18 - 09:32
(13) в процедуре на &НаСервере
   yavasya
 
20 - 30.01.18 - 09:32
   yavasya
 
21 - 30.01.18 - 09:33
(19) че совсем ? у тебя прав нет
   yavasya
 
22 - 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();
    КонецЕсли;

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

как вариант - вынести получение файла &НаКлиенте и передать уже полученный на сервер
   cw014
 
27 - 30.01.18 - 09:38
(26) У него валится на создании Com-объекта
   Сержант ВДВ Онегин
 
28 - 30.01.18 - 09:38
(26) как это сделать?
   Сержант ВДВ Онегин
 
29 - 30.01.18 - 09:38
(27) да вы точно подметили
   cw014
 
30 - 30.01.18 - 09:39
(29) ответь на (25)
   Сержант ВДВ Онегин
 
31 - 30.01.18 - 09:40
(25) не понял вопроса )база находится на сервере рабочая
   cw014
 
32 - 30.01.18 - 09:41
Как 1С запускается? Через терминальное подключение? Или локально на машине?
   Сержант ВДВ Онегин
 
33 - 30.01.18 - 09:42
(32) локально на машине
 
 
   cw014
 
34 - 30.01.18 - 09:43
Так, он подключается к серверу какому то (можно посмотреть в строке подключения). На сервере точно эксель есть? То есть можете подключиться через RDP и запустить эксель от имени пользователя, под которым запущен агент сервера 1с?
   dezss
 
35 - 30.01.18 - 09:43
(33) попробуй зайти на сервак под пользователем, под которым работает служба и запусти эксель.
   Barabashka
 
36 - 30.01.18 - 09:43
(27) тьфу... но смысл тот же. На сервере 1С нет Excel. Выносить создание COM-объекта на клиента.
   Сержант ВДВ Онегин
 
37 - 30.01.18 - 09:45
(34) на сервере точно есть экзель, сейчас попробую его запустить
   cw014
 
38 - 30.01.18 - 09:45
(36) Может и есть, только агент установлен по умолчанию на usr1cv как там его, а у того нет прав на эксель
   МимохожийОднако
 
39 - 30.01.18 - 09:49
(38) Как определить от какого юзера запускается агент 1С, если написано "системная "
   cw014
 
40 - 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Объект'
   cw014
 
42 - 30.01.18 - 09:53
(41) Нельзя передавать COMОбъект на сервер и на клиент. Открываешь, выбираешь, собираешь структуру, передаешь на сервер. Сервер создает и возвращает управление. Повторить, пока не станет хорошо
   Сержант ВДВ Онегин
 
43 - 30.01.18 - 09:55
942) как это прописать в коде?
   Сержант ВДВ Онегин
 
44 - 30.01.18 - 09:56
(42) защел на сервер через ремоут десктоп и открыл экзель. сработало
   cw014
 
45 - 30.01.18 - 09:56
(44) Зайди в службы, найди агент сервера 1с предприятия, ткни правой кнопкой, открой свойства. Посмотри пользователя. Подумай
   МимохожийОднако
 
46 - 30.01.18 - 09:58
(40) Уточню. Кружочек Вход в систему- с системной учетной записью...Поэтому и вопрос. У меня есть схожая проблема,когда в клиентском режиме нормально читает Excel, а в регламентном задании - сбой.
   cw014
 
47 - 30.01.18 - 09:58
(43)
&НаКлиенте
СоздаемЕксель();
Для Сч = 1 По НашЕксель.СвойствоКоличествоСтрок Цикл
   СтруктураСтроки = Новый Структура;
   СтруктураСтроки.Вставить(КакойТоКлючПолученныйИзСтрокиЕкселя, КакоеТоЗначениеИзСтрокиЕкселя);
   
  СоздатьНаСервере(СтруктураСтроки);
КонецЦикла;

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует