1с ошибка при вызове метода контекста execute произошла исключительная ситуация 0x80020005

Обновлено: 05.07.2024

Программы » 1С:Предприятие 1C - 1C: Вопросы по конфигурациям
Варезник » 1C:Предприятие 7.7 - 1С:Предприятие v.8.x - 1C Диск ИТС - 1С: Совместимо 8.х Топик 1C Ebooks
ЗДЕСЬ (обновлено 22.02.14 ) - небольшая библиотечка (книги, документация, видео, утилиты) по 1С, финансам, бухучету и т.п.
Все рассортировано по версиям. Для заблудившихся в трех соснах >>> FAQ по форуму RU.Board

Образец карты есть в самой папке программы.
Заранее огромное спасибо!

Первый раз после запуска висел минут 7, но так ничего и не произошло, а потом начал ошибки выводить.

: Значение не является значением объектного типа (Application)
MSWord.Application.Quit();

: Ошибка при вызове метода контекста (Получить): Не удалось создать объект.
Возможно, отсутствует соответствующее приложение.

: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (0x80020005)

При замене вот этой строчки:

Замена = Документ.Content.Find;
Замена.Execute("[НазваниеРабочегоМеста]", Ложь, Истина, Ложь, , , Истина, , Ложь, ТекСтрока.НазваниеРабочегоМеста);

Предполагаю, что это из того, что реквизит таблицы "НазваниеРабочегоМеста" является ссылочного типа. В этой колонке выводится ссылка на определенный справочник, тип которого выбирается в колонке перед этой.

а ещё вопрос можно? Вот они все открываются, эти файлы, и потом их самому надо сохранять, а нельзя ли сделать так, чтоб они сохранялись где нибудь автоматически, например под именем:
"Аттестационная карта - " + "а тут бы было наименование профессии". И чтоб не закрывались они, а так же открытыми были, ну вдруг изменение какое внести или дописать что, и закрываешь и просто сохранить с изменениями и всё. Или это очень долго и сложно?
Заранее большое спасибо!

Добавлено:
vizlipuzli
И ещё вопрос, если я буду загружать данные из другой табличной части этого же документа, который находится на 2-ой странице, т.е. вторая вкладка, то так же будет:
Замена = Документ.Content.Find;
Замена.Execute("[НазваниеРабочегоМеста]", Ложь, Истина, Ложь, , , Истина, , Ложь, ТекСтрока.НазваниеРабочегоМеста);

Добавлено:
Свою почту проверьте - справа, вверху страницы "Личный Ящик"

Трудовой договор

Для большенства организаций стандартная печатная форма трудового договора в программе 1С:Зарплата и управление персоналом не подходит. Фирма 1С, в восьмой версии своей программы, любезно предусмотрела возможность добавлять дополнительные печатные формы для документов и других объектов. Воспользуемся данной возможностью и создадим трудовой договор, который будет открываться в Microsoft Word.

Специалисты по конфигурированию могут разрабатывать внешние обработки вне конфигурации, используемой в организации. Разработанный отчет или обработка передается в виде файла так называемой внешней обработки с расширением .epf. Пользователь может подключить эту обработку к конфигурации самостоятельно.

Сведения о подключенных обработках хранятся в справочнике «Внешние обработки». Чтобы подключить новую внешнюю обработку, нужно зарегистрировать ее в указанном справочнике.

Технические требования к внешней печатной форме

Внешняя обработка должна содержать:

  • Реквизит «СсылкаНаОбъект», куда при вызове будет передана ссылка на объект, для которого необходимо выполнить печать;
  • Необязательный реквизит «ДополнительныеПараметры» произвольного типа, которому будут передаваться дополнительные параметры примитивного типа в виде структуры;
  • Функция Печать() - без параметров, возвращающая табличный документ;

Также внешняя печатная обработка может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» и состоящий из двух колонок: «Полное имя метаданного» и «Имя табличной части».

Создание внешней обработки

Запустим 1С:Предприятие в режиме «Конфигуратор» и через меню «Файл» - «Новый» создадим внешнюю обработку.

Создание внешней обработки

Создадим реквизит «СсылкаНаОбъект». Для этого нажимем кнопку «Добавить» или клавишу «Insert» и заполним свойства. В зависимости от того, для каких объектов будет использоваться эта печатная форма, нужно выбрать тип. В нашем случае, внешняя печатная форма будет использоваться только для справочника «Сотрудники организации», поэтому укажем соответствующий тип «СправочникСсылка.СотрудникиОрганизаций».

Свойства реквизита

Реквизит «ДополнительныеПараметры» нам не понадобится. Создадим экспортную функцию Печать() («Действия» - «Открыть модуль объекта»).

Функция Печать()

Прежде чем написать тело этой функции, создадим макет, который она будет возвращать.

Макет трудового договора в формате Microsoft Word

Существует, по меньшей мере, три способа создания шаблона.

Первый. В тексте документа содаются метки особого формата, например, «м_НомерДоговора», затем, в модуле обработки производится поиск и замена значений.

Второй способ. В документе Word создаются закладки, к которым потом можно обращаться по имени. Минус этого способа в том, что метка должна быть уникальна, т.е., например, если нужно вставить фамилию сотрудника в каждый абзац текста, то придется сделать несколько закладок с разными именами.

Способ три. В шаблон добавляются служебные поля, например, «DocVariable» или «Author». Используя DocVariable можно обращаться к переменной по имени, например, «ДокументВорд.Variables.Add(ИмяПеременной, ЗначениеПеременной);», но ее не видно в шаблоне. Поле «Author» отображается в шаблоне, но обращаться к нему придется в цикле по индексу: «ДокументВорд.Fields.item(Индекс).Result.Text = Значение;».

На мой взгляд, первый способ является самым оптимальным. Шаблон документа легко редактируется, метки видны в тексте, для создания меток не нужны сложные вставки. Поэтому будем делать шаблон именно этим способом.

Откроем программу Microsoft Office. Для примера добавим лишь одну строку: «Трудовой договор № [НомерДоговора]».

Добавим получившийся шаблон в нашу обаботку. Для этого выбираем «Макеты» и нажимаем кнопку «Добавить» или клавишу «Insert».

Выбор макета трудового договора

Откроется конструктор запроса, в котором выберем тип «Active Document» и файл шаблона.

Конструктор макета Active Document

Функция Печать()

Вернемся к функции, которую мы создали ранее. Настало время написать ее тело.

// Предопределенная функция для внешних печатных форм
//
Функция Печать () Экспорт

// Получим объект Microsoft Word из макета
ОбъектВорд = ПолучитьМакет ( "ТрудовойДоговор" ). Получить ();

// Получим документ из объекта и активируем его
Документ = ОбъектВорд . Application . Documents ( 1 );
Документ . Activate ();

// Поиск и замена маркеров
Замена = Документ . Content . Find ;
Замена . Execute ( "[НомерДоговора]" , , , , , , , , , "007" , 2 );

// Вывод документа
ОбъектВорд . Application . Visible = Истина;
ОбъектВорд . Activate ();

Из кода видно, что в файле шаблона производится поиск строки «[НомерДоговора]» и ее замена на строку «007».

Параметры авторегистрации

Для автоматического заполнения принадлежности печатной формы к объектам конфигурации, добавим еще один макет «Параметры_Авторегистрации». Это будет табличный документ, содержащий одну колонку с именами объектов метаданных, к которым будет принадлежать печатная форма. В нашем случае таблица будет выглядить следующим образом.

Параметры авторегистрации

Сохраним получившуюся внешнюю обработку.

Подключение дополнительных внешних печатных форм

Запустим 1С Предприятие. Откроем справочник «Дополнительные внешние печатные формы» через меню «Сервис» - «Дополнительные отчеты и обработки».

Нажмем кнопку «Добавить», затем зарегистрируем новую печатную форму, нажав «Заменить файл внешней обработки». Автоматически заполнится принадлежность печатной формы справочнику «Сотрудники». Выберем «Трудовой договор» в колонке «Заменяемая печатная форма» чтобы стандартная печатная форма более не использовалась.

В итоге справочник будет выглядить следующим образом.

Дополнительные внешние печатные формы

Проверка результата

Откроем любого работающего сотрудника и нажмем кнопку «Печать» - «Трудовой договор». Откроется документ Microsoft Word с трудовым договором под номером «007».

Трудовой договор в MS Word

Дальнейшее описывать не имет смысла. Думаю, не составит большого труда доработать функцию Печать() и макет договора.

Перед формированием договора контрагента, убедитесь, что контактное лицо, банк, договор и адрес контрагента установлены основными. Заполняйте ФИО контактного лица контрагента (для договора указывайте директора) полностью, также укажите его должность (Директор или Генеральный директор).

Второй файл - второй вариант договора с возможностью склонения ФИО и должностей руководителей. Для его функционирования необходимо дополнительно скачать внешнюю компоненту V7NDS и словарь исключений по ссылке:

(свободный доступ). Разархивировать файлы из скачанных архивов в папку Bin каталога 1cv81. И всё. После этого можно пользоваться обработкой.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Форма.Форма(157)>: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (0x80020005 (1) В предупреждении написано, что нужно всё необходимое заполнить и установить основным: контактное лицо, его должность, адрес физический или юридический юр. лица, банк и договор контрагента. Только после этого формировать договор. : Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (0x80020005)
(5) Внимательно читайте предупреждение, прежде чем формировать договор. Должны стоять везде (у контрагента и организации) телефоны, адреса юр. лица и проч. из предупреждения. не дружественная обработка - пусть бы выходили предупреждения но текст договора показала бы.. а для управляемого приложения ты не переписывала для ут 11 Неплохая штука, плюс ко всему еще можно отредактировать в Ворде. Для некоторых пользователей это ключевой момент. Супер. Лучшего способа и не придумаеш. Все гениально просто. Молодец! dll-ки точно в Bin кидать? А то ругается чего-то:
Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту)
ЗагрузитьВнешнююКомпоненту("ndeclin.dll");
по причине:
Ошибка при загрузке внешней компоненты

Просмотры 35298

Загрузки 1955

Рейтинг 36

Создание 29.03.10 13:35

Обновление 18.06.15 23:33

№ Публикации 68187

Кому Для всех

Операционная система Windows

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Не указано


См. также

Инвентаризационная ведомость с выбором типа цены и по группам

Дает возможность проведения инвентаризации в любых типах цен, в частности - по розничной. Выводит по группам и с колонкой отклонений.

18.01.2011 12464 246 leska 15

Реестр документов контрагентов со свойствами и категориями (УПП,УТ,КА 8.1/8.2)

Простенький отчет на СКД с не очень простенькой настройкой для отображения реестра документов контрагентов с доп.свойствами и категориями.

12.08.2010 27432 449 anig99 10

Печать характеристик номенклатуры

Печать развернутой характеристики номенклатуры на основе СКД

15.03.2010 20794 198 anig99 3

Печать договора с контрагентом из 1С в MS Word (для 1С: Бухгалтерия предприятия)

Печать договора с контрагентом. Внешняя обработка формирует договор с контрагентом и выгружает его в MS Word. Пункты договора под свои можете отредактировать через макет. На моем предприятии - это договор на поставку инертных материалов.

11.03.2010 17740 684 SvetaTsp 23

АНКЕТА НА ВИЗУ ФРАНЦИИ

Отчет позволяет на основании хранимых в базе анкетных данных сотрудников сформировать анкету на визу Франции в электронном виде. Транслитерация производится по ГОСТ 7.79-2000 (ИСО 9-95) Межгосударственный стандарт «Правила транслитерации кирилловского письма латинским алфавитом»

06.01.2010 9578 57 Svetlachok 4

Формирование договора в Ворде из справочника Сотрудники 1С8 (ЗУП или УПП)

В конфигурации УПП в справочник Сотрудники добавлена кнопка, по которой запускается код, позволяющий вызвать шаблон трудового договора с принимаемым на работу сотрудником, заполнить его данными этого сотрудника (из справочника Сотрудники) и сохранить его в Ворде с номером трудового договора, соответствующим номеру трудового договора в справочнике Сотрудники. Обработка представляет собой модификацию этого кода, позволяющего запускать его из внешней обработки в любой информационной базе УПП или ЗУП. На базе этой обработки можно делать другие обработки, формирующие документы в Ворде по информации из 1С8 любой конфигурации.

19.06.2009 10094 418 hoholist 12

Обработка печати списка номенклатуры со свойствами, ценой и штрихкодами

Простая обработка печати справочника номенклатуры со свойствами, ценой и штрихкодами, нужна для контроля заполнения списка реквизитов на этапе внедрения.

Однажды появилась задача ускорить печать из 1С в документы MS Office Word. Формирование документов происходит около 60-90 секунд.

Программы: «1С:Зарплата и управление персоналом, редакция 3.1.14.98», MS Office Word 2016.

Много ранее я работал с печатью в MS Word, и проблем с производительностью не возникало, но и шаблон был всего один, и заполнение каждого параметра было прописано кодом, и БСП не использовалось.

В данном же случае: внешняя обработка печатает 3 шаблона, вызывается функция БСП для каждого шаблона; соответственно, параметры заполняются в функции БСП.

Я запустил замер производительности конфигуратором, чтобы посмотреть, какие именно строки занимают более всего времени.


В топе находятся строки кода, которые работают с шаблоном MS Word через COM-соединение. Суммарно первые строки занимают время: 20+14+12+6+6+6 = 64 секунды — это почти 60% времени. Если удастся сократить это время хотя бы на половину, но эффект уже будет заметен.

Разбираем каждую строку.

Строка №1.

Первая строка (Object.Select();) выполняется 219 раз — это достаточно много. Возникает вопрос: почему так много раз она выполняется? Может, в шаблонах так много параметров? Суммарно в шаблонах оказалось 95 параметров. Смотрим стек вызовов и находим причину столь частого выполнения кода.


На уровень раньше видим цикл.


Значит, в переменную ДанныеОбъекта передается излишне больше параметров, чем на самом деле необходимо.

Смотрим, откуда передается столько параметров, т.е. еще на уровень раньше.


Переменная Данные передана, поэтому переходим еще на уровень раньше.

Снова передача переменной Данные, поэтому снова переходим на уровень раньше.



Это процедура ПечатьМакета. В данном случае то, что передавалось в предыдущих переменных Данные — это значение переменной лПараметры (тип Соответствие), которое заполняется запросом, но заполняется всевозможными данными, нужными и ненужными, после чего вызывается процедура БСП.

Первая неоптимальность найдена — передача в процедуру БСП заранее лишнего количества параметров. Решить данную ситуацию можно просто: передать только необходимое количество параметров, которые используются в шаблоне.

Далее если вернуться еще на уровень раньше, то видим самое начало — процедура Печать.


Процедура Печать выполняет печать трех шаблонов, иными словами, три раза вызывает одну и ту же процедуру ПечатьМакета, в которой одна из неоптимальностей уже найдена.

Решено так: отдельная процедура заполняет только нужные параметры, ничего лишнего.


Немного про особенность замены.

На сайтах предлагается следующий вариант замены:

Однако этот способ показал свою нестабильность следующим образом:

Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (0x80020005)

И более никакой информации, никаких подробностей; в интернете искать можно долго и безрезультатно; исследовать можно тоже долго и безрезультатно.

Поэтому замена выполнена типовой процедурой.

Перейдем ко второй топовой времязатратной строке замера:

Смотрим, в каком именно месте она вызывается.


Вызывается эта строка 69 раз в типовой функции ПолучитьМакетMSWord, получающей макет MSWord. Так как шаблон MS Word сохранен в макете с уже заранее настроенными параметрами, то в данном случае вызываемая строка просто лишняя. Исключая данную строку, функционал остается прежним и сокращается время формирования на 14 секунд.

Теперь рассмотрим третью времязатратную строку:

COMОбъект = Новый COMОбъект("Word.Application");

Смотрим, в каком именно месте она вызывается.


Объект COM создается три раза в той же типовой функции ПолучитьМакетMSWord.

Однако COM объект MS Word способен работать с несколькими документами MS Word, поэтому в данном случае создаются лишние COM объекты, на которые затрачивается время.

Решение: создание только одного COM объекта, с помощью которого заполняются все три шаблона. Решена эта ситуация кешированием COM соединения следующим образом.


Четвертая строка аналогична третьей:

COMОбъект = Новый COMОбъект("Word.Application");

Но вызывается данная строка в типовой функции ИнициализироватьПечатнуюФормуMSWord тоже три раза.


Возникает вопрос: если в типовой функции ПолучитьМакетMSWord уже создан COM объект, то почему же вызывается типовая функция ИнициализироватьПечатнуюФормуMSWord , в которой тоже создается COM объект?

По стеку вызовов находим процедуру, в которой вызывается функция ИнициализироватьПечатнуюФормуMSWord , и попадаем в о внешнюю обработку .


По коду видно, похоже, была попытка обойтись средствами БСП, пренебрегая производительностью, так как вызваны две функции, создающие COM объект, и обе функции в цикле.

В данном случае функцию ИнициализироватьПечатнуюФормуMSWord можно исключить, используя только переменную Макет.

Рассмотрим пятую времязатратную строку.

Строка вызывается три раза в типовой функции ПолучитьПозициюНачалаОбласти перед непосредственным поиском и заменой.


Так как достаточно использовать типовую процедуру Заменить, которая выполняет замену параметров по всему документу, то функцию ПолучитьПозициюНачалаОбласти можно исключить.

Читайте также: