Имя: Пароль:
1C
1С v8
Проблема со вставкой картинки в Excel
0 Access granted
 
12.06.18
10:06
Добрый день!
Имеется простейший код:

ExcelDoc = Новый COMОбъект("Excel.Application");
ExcelDoc.Visible = Ложь;
    
РабочаяКнига = ExcelDoc.WorkBooks.Open("C:\1.xls");
        
ExcelDoc.ActiveSheet.Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select();

Я зашел на сервер 1С и выполняю его через инструменты разработчика. На клиенте все работает (картинка вставляется), а в режиме "на сервере" не работает, выдает "Ошибка при вызове метода контекста (AddPicture): Неизвестная ошибка". Уже не знаю, куда копать. Дал USR1CV8 полные права, не помогло.
1 hhhh
 
12.06.18
10:12
(0) файл C:\1.jpg  точно есть на сервере? может он у вас на клиентском компе расположен?
2 Access granted
 
12.06.18
10:14
+(0) Посмотрел через диспетчер задач, что различаются пользователи, от имени которых запускается процесс Excel.exe. С клиента это админ, а с сервера это usr1cv8. Через dcomcnfg поставил для Microsoft Excel application запуск от имени админа, а он все равно продолжает от имени usr1cv8 открываться.
3 Access granted
 
12.06.18
10:14
(1) Я прямо на сервер зашел, т.е. в данном случае компьютер клиента = компьютер сервера. Просто код выполняется по-разному (клиент/сервер)
4 Access granted
 
12.06.18
10:16
(1) Права я тоже проверил - дал права на xls и jpg админу и usr1cv8 полные.
5 Остап Сулейманович
 
12.06.18
10:50
(0) За ActiveSheet и прочие активы  нужно гнать из професии.
Вы уверены что оно есть в неинтерактивном режиме? Конечно что-то есть. Но тот ли это актившит, который вам нужен? Вы в него мышкой тыкали, чтобы он стал Актив?
6 Access granted
 
12.06.18
10:56
(5) ExcelDoc.Sheets(1).Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select();

Ничего не меняется.
7 shuhard
 
12.06.18
11:03
(0)[Я зашел на сервер 1С и выполняю его через инструменты разработчика]
что за инструменты разработчика
8 Access granted
 
12.06.18
11:08
(7) Подсистема с набором внешних обработок. Считайте, что через консоль кода выполняю.
9 Access granted
 
12.06.18
11:10
Возможно, причина в том, что сервер 1С 64 бит, а excel 32 бит?
10 Остап Сулейманович
 
12.06.18
11:11
(6) Почему "ExcelDoc.Sheets(1)"? Разве у вас лист расположен в ExcelDoc? Судя по вашему же коду нужный лист расположен в "РабочаяКнига". И еще. Он точно имеет индекс "1". В ВБА все индексы начинаются с "0".
11 Остап Сулейманович
 
12.06.18
11:13
+(10) Если уж так хочется через ExcelDoc - тогда так :
ExcelDoc.WorkBooks(1).Shets(1)...
Проверить индексы.
12 Access granted
 
12.06.18
11:15
(11) Как я ранее уже сказал, код на клиенте работает. Картинка вставляется куда надо. На сервере не работает. Клиент и сервер - один и тот же компьютер.
13 Остап Сулейманович
 
12.06.18
11:17
+ (11) А вообще так тоже плохо. Откуда вы можете знать, что открытая книга единственная? Если пользователь перед этим открыл еще несколько WorkBooks-ов - ваша будет иметь индекс точно не "1". К нужной книге обращаться нужно все-таки через объект, который возвращается вот здесь :
РабочаяКнига = ExcelDoc.WorkBooks.Open("C:\1.xls");
14 hhhh
 
12.06.18
11:18
(12) попробуйте какой нибудь диск другой. Всё-таки корень диска С: сервера - это не самый лучший вариант. Туда даже у админа не все права.
15 Остап Сулейманович
 
12.06.18
11:19
(12)
Зайти на сервер пользователем "usr1cv8".
Открыть файл интерактивно.
Прочитать все предупреждения от Эксель.
Возможно ограничения выставляются именно пользователю "usr1cv8".
16 Access granted
 
12.06.18
11:20
(14) Уже пробовал другой диск. И права туда тоже задавал. Уже и службу агента 1С запустил с полными правами от админа. Дело в чем-то другом. Возможно, в разрядности 1С и Excel.
17 Access granted
 
12.06.18
11:21
(15) Уже служба агента от имени админа запущена. Никаких сообщений не выдает при интерактивном открытии. Да и с клиента под ним же отрабатывает нормально.
18 Остап Сулейманович
 
12.06.18
11:27
(17) Разбивай вот это вот счастье на этапы и определи где именно возникает ошибка :

ExcelDoc.Sheets(1).Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select();

1. Лист = ExcelDoc.Sheets(1);
2. Рисунки = Лист.Shapes;
3. Рисунок = Рисунки.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70);
4. Выделение = Рисунок.Select();
19 Access granted
 
12.06.18
11:29
(18) Сейчас Excel переустановлю на х64, после чего проверю.
20 Остап Сулейманович
 
12.06.18
11:33
(19) Если бы дело было в разрядности - ошибка была бы здесь :
ExcelDoc = Новый COMОбъект("Excel.Application");
21 Access granted
 
12.06.18
11:36
(20) Согласен. Но у меня больше нет идей. При одинаковых условиях (один и тот же запускающий пользователь, один компьютер) с клиента работает (32бит), с сервера не работает (64бит).
22 Остап Сулейманович
 
12.06.18
11:38
(21) Не понял... Как так может быть, что на одной машине у разных пользователей разная разрядность ОС?
23 Access granted
 
12.06.18
11:43
(22) Сервер 1С 64 бит, Excel стоял 32 бит. Пользователи тут ни при чем.
24 Access granted
 
12.06.18
11:48
(22) Про пользователей понял вопрос - сервер 64, а клиентская платформа 32, вот и разная разрядность.
25 sechs
 
12.06.18
11:53
(0) Почему второй параметр AddPicture равен Истина?
26 Access granted
 
12.06.18
11:55
(25) Да это я поменял, в исходном коде вообще число было. Пробовал всякие разные варианты параметров, прочитав хелп MSDN, это не помогло.
27 Access granted
 
12.06.18
11:56
Мопед, как говорится, не мой, но починить его надо :)
28 sechs
 
12.06.18
11:58
А, разработка методом тыка... Ну, удачи.
29 Access granted
 
12.06.18
11:59
(28) Это вообще не разработка, нужно починить сломанное.
30 Access granted
 
12.06.18
12:06
Собственно, я был прав. Дело в разрядности Excel. Все заработало.