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 — 12.06.18 — 10:12
(0) файл C:1.jpg точно есть на сервере? может он у вас на клиентском компе расположен?
2 — 12.06.18 — 10:14
+(0) Посмотрел через диспетчер задач, что различаются пользователи, от имени которых запускается процесс Excel.exe. С клиента это админ, а с сервера это usr1cv8. Через dcomcnfg поставил для Microsoft Excel application запуск от имени админа, а он все равно продолжает от имени usr1cv8 открываться.
3 — 12.06.18 — 10:14
(1) Я прямо на сервер зашел, т.е. в данном случае компьютер клиента = компьютер сервера. Просто код выполняется по-разному (клиент/сервер)
4 — 12.06.18 — 10:16
(1) Права я тоже проверил — дал права на xls и jpg админу и usr1cv8 полные.
5 — 12.06.18 — 10:50
(0) За ActiveSheet и прочие активы нужно гнать из професии.
Вы уверены что оно есть в неинтерактивном режиме? Конечно что-то есть. Но тот ли это актившит, который вам нужен? Вы в него мышкой тыкали, чтобы он стал Актив?
6 — 12.06.18 — 10:56
(5) ExcelDoc.Sheets(1).Shapes.AddPicture(«C:1.jpg», Истина, Истина, 100, 100, 70, 70).Select();
Ничего не меняется.
7 — 12.06.18 — 11:03
(0)[Я зашел на сервер 1С и выполняю его через инструменты разработчика]
что за инструменты разработчика
8 — 12.06.18 — 11:08
(7) Подсистема с набором внешних обработок. Считайте, что через консоль кода выполняю.
9 — 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 — 12.06.18 — 11:15
(11) Как я ранее уже сказал, код на клиенте работает. Картинка вставляется куда надо. На сервере не работает. Клиент и сервер — один и тот же компьютер.
13 — 12.06.18 — 11:17
+ (11) А вообще так тоже плохо. Откуда вы можете знать, что открытая книга единственная? Если пользователь перед этим открыл еще несколько WorkBooks-ов — ваша будет иметь индекс точно не «1». К нужной книге обращаться нужно все-таки через объект, который возвращается вот здесь :
РабочаяКнига = ExcelDoc.WorkBooks.Open(«C:1.xls»);
14 — 12.06.18 — 11:18
(12) попробуйте какой нибудь диск другой. Всё-таки корень диска С: сервера — это не самый лучший вариант. Туда даже у админа не все права.
15 — 12.06.18 — 11:19
(12)
Зайти на сервер пользователем «usr1cv8».
Открыть файл интерактивно.
Прочитать все предупреждения от Эксель.
Возможно ограничения выставляются именно пользователю «usr1cv8».
16 — 12.06.18 — 11:20
(14) Уже пробовал другой диск. И права туда тоже задавал. Уже и службу агента 1С запустил с полными правами от админа. Дело в чем-то другом. Возможно, в разрядности 1С и Excel.
17 — 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 — 12.06.18 — 11:29
(18) Сейчас Excel переустановлю на х64, после чего проверю.
20 — 12.06.18 — 11:33
(19) Если бы дело было в разрядности — ошибка была бы здесь :
ExcelDoc = Новый COMОбъект(«Excel.Application»);
21 — 12.06.18 — 11:36
(20) Согласен. Но у меня больше нет идей. При одинаковых условиях (один и тот же запускающий пользователь, один компьютер) с клиента работает (32бит), с сервера не работает (64бит).
22 — 12.06.18 — 11:38
(21) Не понял… Как так может быть, что на одной машине у разных пользователей разная разрядность ОС?
23 — 12.06.18 — 11:43
(22) Сервер 1С 64 бит, Excel стоял 32 бит. Пользователи тут ни при чем.
24 — 12.06.18 — 11:48
(22) Про пользователей понял вопрос — сервер 64, а клиентская платформа 32, вот и разная разрядность.
25 — 12.06.18 — 11:53
(0) Почему второй параметр AddPicture равен Истина?
26 — 12.06.18 — 11:55
(25) Да это я поменял, в исходном коде вообще число было. Пробовал всякие разные варианты параметров, прочитав хелп MSDN, это не помогло.
27 — 12.06.18 — 11:56
Мопед, как говорится, не мой, но починить его надо
28 — 12.06.18 — 11:58
А, разработка методом тыка… Ну, удачи.
29 — 12.06.18 — 11:59
(28) Это вообще не разработка, нужно починить сломанное.
Access granted
30 — 12.06.18 — 12:06
Собственно, я был прав. Дело в разрядности Excel. Все заработало.
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 полные права, не помогло.
hhhh
1 — 12.06.18 — 10:12
(0) файл C:1.jpg точно есть на сервере? может он у вас на клиентском компе расположен?
Access granted
2 — 12.06.18 — 10:14
+(0) Посмотрел через диспетчер задач, что различаются пользователи, от имени которых запускается процесс Excel.exe. С клиента это админ, а с сервера это usr1cv8. Через dcomcnfg поставил для Microsoft Excel application запуск от имени админа, а он все равно продолжает от имени usr1cv8 открываться.
Access granted
3 — 12.06.18 — 10:14
(1) Я прямо на сервер зашел, т.е. в данном случае компьютер клиента = компьютер сервера. Просто код выполняется по-разному (клиент/сервер)
Access granted
4 — 12.06.18 — 10:16
(1) Права я тоже проверил — дал права на xls и jpg админу и usr1cv8 полные.
Остап Сулейманович
5 — 12.06.18 — 10:50
(0) За ActiveSheet и прочие активы нужно гнать из професии.
Вы уверены что оно есть в неинтерактивном режиме? Конечно что-то есть. Но тот ли это актившит, который вам нужен? Вы в него мышкой тыкали, чтобы он стал Актив?
Access granted
6 — 12.06.18 — 10:56
(5) ExcelDoc.Sheets(1).Shapes.AddPicture(«C:1.jpg», Истина, Истина, 100, 100, 70, 70).Select();
Ничего не меняется.
shuhard
7 — 12.06.18 — 11:03
(0)[Я зашел на сервер 1С и выполняю его через инструменты разработчика]
что за инструменты разработчика
Access granted
8 — 12.06.18 — 11:08
(7) Подсистема с набором внешних обработок. Считайте, что через консоль кода выполняю.
Access granted
9 — 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)…
Проверить индексы.
Access granted
12 — 12.06.18 — 11:15
(11) Как я ранее уже сказал, код на клиенте работает. Картинка вставляется куда надо. На сервере не работает. Клиент и сервер — один и тот же компьютер.
Остап Сулейманович
13 — 12.06.18 — 11:17
+ (11) А вообще так тоже плохо. Откуда вы можете знать, что открытая книга единственная? Если пользователь перед этим открыл еще несколько WorkBooks-ов — ваша будет иметь индекс точно не «1». К нужной книге обращаться нужно все-таки через объект, который возвращается вот здесь :
РабочаяКнига = ExcelDoc.WorkBooks.Open(«C:1.xls»);
hhhh
14 — 12.06.18 — 11:18
(12) попробуйте какой нибудь диск другой. Всё-таки корень диска С: сервера — это не самый лучший вариант. Туда даже у админа не все права.
Остап Сулейманович
15 — 12.06.18 — 11:19
(12)
Зайти на сервер пользователем «usr1cv8».
Открыть файл интерактивно.
Прочитать все предупреждения от Эксель.
Возможно ограничения выставляются именно пользователю «usr1cv8».
Access granted
16 — 12.06.18 — 11:20
(14) Уже пробовал другой диск. И права туда тоже задавал. Уже и службу агента 1С запустил с полными правами от админа. Дело в чем-то другом. Возможно, в разрядности 1С и Excel.
Access granted
17 — 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();
Access granted
19 — 12.06.18 — 11:29
(18) Сейчас Excel переустановлю на х64, после чего проверю.
Остап Сулейманович
20 — 12.06.18 — 11:33
(19) Если бы дело было в разрядности — ошибка была бы здесь :
ExcelDoc = Новый COMОбъект(«Excel.Application»);
Access granted
21 — 12.06.18 — 11:36
(20) Согласен. Но у меня больше нет идей. При одинаковых условиях (один и тот же запускающий пользователь, один компьютер) с клиента работает (32бит), с сервера не работает (64бит).
Остап Сулейманович
22 — 12.06.18 — 11:38
(21) Не понял… Как так может быть, что на одной машине у разных пользователей разная разрядность ОС?
Access granted
23 — 12.06.18 — 11:43
(22) Сервер 1С 64 бит, Excel стоял 32 бит. Пользователи тут ни при чем.
Access granted
24 — 12.06.18 — 11:48
(22) Про пользователей понял вопрос — сервер 64, а клиентская платформа 32, вот и разная разрядность.
sechs
25 — 12.06.18 — 11:53
(0) Почему второй параметр AddPicture равен Истина?
Access granted
26 — 12.06.18 — 11:55
(25) Да это я поменял, в исходном коде вообще число было. Пробовал всякие разные варианты параметров, прочитав хелп MSDN, это не помогло.
Access granted
27 — 12.06.18 — 11:56
Мопед, как говорится, не мой, но починить его надо
sechs
28 — 12.06.18 — 11:58
А, разработка методом тыка… Ну, удачи.
Access granted
29 — 12.06.18 — 11:59
(28) Это вообще не разработка, нужно починить сломанное.
Access granted
30 — 12.06.18 — 12:06
Собственно, я был прав. Дело в разрядности Excel. Все заработало.
Всем доброго времени суток!
Прошу прощения за мою некорректность — данный вопрос на самом деле не вопрос, а собственно сам ответ — очень много времени я его искал, и кроме одного косвенного скудного ответа на каком-то сайте не нашел.
И мне хочется чтобы такой ответ в сети был! Особенно на нашем сайте! *07
Я очень долго сидел с изменением отчета, который формируется в MS Word. В этом отчете иногда необходимо вставлять рисунок, но располагать его в обрамлении текстом.
Для этого вставляемый рисунок надо «конвертировать» в фигуру. В итоге код такой (в данном случае, у меня):
Код 1C v 8.2 УП
InlineShape = Document.InlineShapes.AddOLEObject(, ПолноеИмяФайла, True, False,,,, ActiveTable.Cell(RowCount, 2).Range);
Shape = InlineShape.ConvertToShape();
Но довольно часто при этой операции выскакивает ошибка:
Код 1C v 8.2 УП
{ВнешнийОтчет.ВнешнийОтчетНаРабочемСтоле.МодульОбъекта()}: Ошибка при вызове метода контекста (ConvertToShape)
Shape = InlineShape.ConvertToShape();
по причине:
Произошла исключительная ситуация (0x80004005)
Оказывается все решается просто: надо «сфокусироваться» на том месте, куда происходит вставка рисунка, а именно таким образом:
Код 1C v 8.2 УП
InlineShape = Document.InlineShapes.AddPicture(ПолноеИмяФайла, False, True, ActiveTable.Cell(RowCount, 2).Range);
ActiveTable.Cell(RowCount, 2).Range.S_elect();
Shape = InlineShape.ConvertToShape();
Ситуации разные, но без использования Range.S_elect() зачастую не обойтись…
4129 / 2233 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
03.12.2014, 08:03
3
ВаЛерика
Сравните
mySlide.Shapes.AddPicture FileName:=f & «» & myfile.Name, LinkToFile:=msofolse,
savewithDokument:=msoTrue, Left:=0, Top:=0, Width:=100, Higth:=100
и
mySlide.Shapes.AddPicture FileName:=myfile.Path, LinkToFile:=msoFalse,
SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=100, Height:=100
Добавлено через 34 минуты
Тоже самое, только вместо FSO используется функция Dir, что даёт нам возможность перебирать только файлы с указанным расширением.
Visual Basic | ||
|
К слову сказать, у меня прокатил вариант и без использования счётчика
Visual Basic | ||
|
1
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
03.12.2014, 08:03
3
ВаЛерика
Сравните
mySlide.Shapes.AddPicture FileName:=f & «» & myfile.Name, LinkToFile:=msofolse,
savewithDokument:=msoTrue, Left:=0, Top:=0, Width:=100, Higth:=100
и
mySlide.Shapes.AddPicture FileName:=myfile.Path, LinkToFile:=msoFalse,
SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=100, Height:=100
Добавлено через 34 минуты
Тоже самое, только вместо FSO используется функция Dir, что даёт нам возможность перебирать только файлы с указанным расширением.
Visual Basic | ||
|
К слову сказать, у меня прокатил вариант и без использования счётчика
Visual Basic | ||
|
1
Ошибка в макете
Автор Goblany, 10 фев 2010, 21:07
0 Пользователей и 1 гость просматривают эту тему.
Добрый день.
Изучаю 1С по уроку
http://masich.biz/articles/9/1/Oaa-8-Caiieiaiea-oaaeiia-aaiiuie/Nodaieoa1.html
Но выводится ошибка
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента(67)}: Ошибка при вызове метода контекста (Вывести): Несоответствие типов (параметр номер «1»)
ТабДок.Вывести(«Шапка»);
по причине:
Несоответствие типов (параметр номер «1»)
Вот сама функция
Процедура ОсновныеДействияФормыПечать2(Кнопка)
// Вставить содержимое обработчика.
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.ПриходнаяНакладная.ПолучитьМакет(«Макет1»);
Область = Макет.ПолучитьОбласть(«Область1»);
Область.Параметры.у=Номер;
ТабДок.Вывести(«Шапка»);
КонецПроцедуры
Вернее, вот такая процедура
Процедура ОсновныеДействияФормыПечать2(Кнопка)
// Вставить содержимое обработчика.
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.ПриходнаяНакладная.ПолучитьМакет(«Макет1»);
Область = Макет.ПолучитьОбласть(«Область1»);
Область.Параметры.у=Номер;
ТабДок.Вывести(«Область1»);
КонецПроцедуры
Проблему решил
В ТабДок.Вывести(«Область1»); надо было без кавычек писать ТабДок.Вывести(Область1);
Только непонятно почему
ТабДок.Вывести(Область1);
а не
ТабДок.Вывести(Область);
Теги:
- Форум База
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Ошибка в макете
Похожие темы (5)
Поиск
Прошу прощения за мою некорректность — данный вопрос на самом деле не вопрос, а собственно сам ответ — очень много времени я его искал, и кроме одного косвенного скудного ответа на каком-то сайте не нашел.
И мне хочется чтобы такой ответ в сети был! Особенно на нашем сайте! *07
Я очень долго сидел с изменением отчета, который формируется в MS Word. В этом отчете иногда необходимо вставлять рисунок, но располагать его в обрамлении текстом.
Для этого вставляемый рисунок надо «конвертировать» в фигуру. В итоге код такой (в данном случае, у меня):
Код 1C v 8.2 УП
InlineShape = Document.InlineShapes.AddOLEObject(, ПолноеИмяФайла, True, False,,,, ActiveTable.Cell(RowCount, 2).Range);
Shape = InlineShape.ConvertToShape();
Но довольно часто при этой операции выскакивает ошибка:
Код 1C v 8.2 УП
{ВнешнийОтчет.ВнешнийОтчетНаРабочемСтоле.МодульОбъекта()}: Ошибка при вызове метода контекста (ConvertToShape)
Shape = InlineShape.ConvertToShape();
по причине:
Произошла исключительная ситуация (0x80004005)
Оказывается все решается просто: надо «сфокусироваться» на том месте, куда происходит вставка рисунка, а именно таким образом:
Код 1C v 8.2 УП
InlineShape = Document.InlineShapes.AddPicture(ПолноеИмяФайла, False, True, ActiveTable.Cell(RowCount, 2).Range);
ActiveTable.Cell(RowCount, 2).Range.S_elect();
Shape = InlineShape.ConvertToShape();
Ситуации разные, но без использования Range.S_elect() зачастую не обойтись…