Gluk
02.02.15
✎
21:13
8.3.5, УТ 11, при отмене проведения ОДНОГО из документов получаю ошибку в общем модуле «НапоминанияПользователяСлужебный», в месте где из объекта документа получаю ссылку. Во всех документах вижу и объект и ссылку, а в этом нет. ТИИ не помогло, при открытии проверил, ссылка есть.
Куда копать?
ShoGUN
02.02.15
✎
21:19
(0) Наоборот — встречал, это если ссылка битая или просто пустая, то из неё объект не получишь. А такие чудеса — не приходилось. Кода покажи хоть чуточку.
Gluk
02.02.15
✎
21:21
все типовое:
Процедура ПроверитьИзмененияДатВПредметеПриЗаписи(Источник, Отказ) Экспорт
Если Не ОбщегоНазначения.ЭтоПланОбмена(Источник.Метаданные()) И Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию(«ИспользоватьНапоминанияПользователя») Тогда
ПроверитьИзмененияДатВПредмете(Источник.Ссылка);
КонецЕсли;
КонецПроцедуры
Gluk
02.02.15
✎
21:22
ПроверитьИзмененияДатВПредмете(Источник.Ссылка);
тут ошибка
Gluk
02.02.15
✎
21:22
источник — объект точно определен
GROOVY
02.02.15
✎
21:23
А текст ошибки?
Gluk
02.02.15
✎
21:23
в ссылке — «Ошибка получения представления значения»
Gluk
02.02.15
✎
21:24
вообще:
Ошибка при выполнении обработчика — ‘ПриЗаписи’
по причине:
{ОбщийМодуль.НапоминанияПользователяСлужебный.Модуль(449)}: Ошибка при вызове метода контекста (Выполнить)
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса
по причине:
В данной транзакции уже происходили ошибки!
ShoGUN
02.02.15
✎
21:24
(6) Права, может? RLS?
Gluk
02.02.15
✎
21:25
тут же другой, точно такой же документ, все нормально.
ShoGUN
02.02.15
✎
21:25
(7) Это же ошибка в другом месте совсем.
GROOVY
02.02.15
✎
21:26
Тут что-то глубже…
Gluk
02.02.15
✎
21:29
(10) отладчик приводит в (2)
ShoGUN
02.02.15
✎
21:32
(12) «Ошибка получения представления значения» — это частая ошибка при недостатке прав на чтение полей. Права точно есть на этот документ? В тексте запроса есть ВЫБРАТЬ РАЗРЕШЕННЫЕ?
FIXXXL
02.02.15
✎
21:35
(3) а что за запрос в процедуре Проверить*** ?
Gluk
02.02.15
✎
21:38
права полные, запроса нет, есть объект и объект.ссылка
скопировал док, в новом ошибок нет
ShoGUN
02.02.15
✎
21:41
(15) >ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
А это что?
Gluk
02.02.15
✎
21:44
(16) это после, перед этим (3), где уже нет ссылки
Gluk
02.02.15
✎
21:58
при проведении в том же куске коду ошибок нет! ссылка видна
Gluk
02.02.15
✎
22:18
Отменил проведение.
Ошибка была в связанном документе, который проверялся до ошибочного, почему получается пустая ссылка не пойму, копаю
Serg_1960
02.02.15
✎
22:31
«Это же ошибка в другом месте совсем.»
«отладчик приводит в…»
(вангую) Демоническое обновление — конфигурация БД отличается от основной(рабочей) — связь строк (по номеру строки) — битая.
Gluk
02.02.15
✎
22:33
(20)Я не делал, до меня х.з.
Так всё-таки, чем и как решилась эта проблема.
У самого УТ 10.3.45.2 (вчера обновил до последней версии) SQL-ный вариант.
Стояла и стоит stunnel. Почта yandex.ru
При получении писем, возникает та же самая ошибка, что и у Вас:
{ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль(204)}: Метод объекта не обнаружен (tags) ТегиКартинок = НовыйHTMLДокумент.all.tags(«img»);
Решения не могу найти. Поиск по ошибке не рулит вообще ни разу.
Вот кусок этого кода, но он типовой:
Если ЗначениеЗаполнено(ХТМЛ_Текст) Тогда
Если УстанавливатьВидТекстаПисьма Тогда
ПисьмоОбъект.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTML;
КонецЕсли;
НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
НовыйHTMLДокумент.open("text/html");
НовыйHTMLДокумент.write(ХТМЛ_Текст);
НовыйHTMLДокумент.close();
ТегиКартинок = НовыйHTMLДокумент.all.tags("img");
Для а = 0 По ТегиКартинок.length - 1 Цикл
ИсточникКартинки = ТегиКартинок.item(а).src;
Если Найти(ИсточникКартинки, "cid:") = 1 Тогда
ИсточникКартинки = Сред(ИсточникКартинки, 5);
ТегиКартинок.item(а).src = ИсточникКартинки;
КонецЕсли;
КонецЦикла;
Не пойму, получается он не может принять письмо с картинками, или не может им присвоить cid.
Добавлено: 10 окт 2017, 15:46
Прошу Вашей помощи, уважаемые знатоки 1ССС
Добавлено: 10 окт 2017, 17:44
А вот теперь точно странно. Поднял с копии базу 1 дневной, недельной и месячной дневной давности — ошибка та же.
Добавлено: 11 окт 2017, 09:05
Попробую вариант полностью очистить от писем «Менеджер контактов». И еще раз получить почту, при этом оставив на внешней почта только пару писем.
Добавлено: 12 окт 2017, 08:44
Вот, что странно:
Очистил всю почту с 1С УТ, на сервере yandex.ru очистил тоже все папки с письмами.
В 1С УТ нажимаю принять почту — загружает 10 каких-то сообщений (???) откуда-то (???) и вываливается с ошибкой.
Откуда берутся эти 10ть сообщений — неизвестно….
Удалил из 1С аккаунт почты — создал новый с теми же данными — ничего не поменялось.
Подскажите, есть ли у кого какие мысли?
Хотели было воспользоваться почтовым клиентом из Управление торговлей 10.3, да не тут-то было. К сожалению, фирма «1С» почти совсем ее забросила и если Ваш респондент отправляет Вам письма, содержащие HTML, то Вас ждут матюки… Ну что же, как говорится: «Спасение утопающих — дело рук самих утопающих».
Недавно возникла необходимость воспользоваться почтовым клиентом в Управление торговлей 10.3. Собирались получать письма из почтового ящика на Яндексе. Новый почтовый ящик — на нем лежало-то всего-ничего — пара писем от Яндекса с благодарностью за регистрацию. И каково же было удивление когда выяснилось, что даже эти несчастные письма мы получить не можем. Если письма содержали HTML то попытка получения этих писем приводила к ошибке:
{ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль(205)}: Метод объекта не обнаружен (tags)
ТегиКартинок = НовыйHTMLДокумент.all.tags(«img»);
Если погуглить данную ошибку, то в ответ тишина. О ней рапортуют на разных форумах, но решений так и нет.
В результате не мудрствуя лукаво (возможно у кого-то будет более красивое решение) отключил код с ошибкой. В модуле «УправлениеЭлектроннойПочтой» в процедуре «УстановитьТекстПисьма» закомментировал кусок кода и вставил под ним строку для обхода:
//НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
//НовыйHTMLДокумент.open("text/html");
//НовыйHTMLДокумент.write(ХТМЛ_Текст);
//НовыйHTMLДокумент.close();
//ТегиКартинок = НовыйHTMLДокумент.all.tags("img");
//Для а = 0 По ТегиКартинок.length - 1 Цикл
// ИсточникКартинки = ТегиКартинок.item(а).src;
// Если Найти(ИсточникКартинки, "cid:") = 1 Тогда
// ИсточникКартинки = Сред(ИсточникКартинки, 5);
// ТегиКартинок.item(а).src = ИсточникКартинки;
// КонецЕсли;
//КонецЦикла;
//ПисьмоОбъект.ТекстПисьма = НовыйHTMLДокумент.all.tags("html").item(0).outerHTML;
ПисьмоОбъект.ТекстПисьма = ХТМЛ_Текст;
На этом дело не закончилось. При попытке просмотра некоторых писем вываливалось аналогичное сообщение об ошибке:
{ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль(3095)}: Поле объекта не обнаружено (innerText)
Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), «»);
Тут на помощь нам приходит более современная конфигурация УНФ, разработчикам которой есть дело до того как в ней работает встроенный почтовый клиент. Все в том же модуле «УправлениеЭлектроннойПочтой» в процедуре «ПреобразоватьТекстИзХТМЛФорматаВПростой» закомментировал кусок кода и вставил под ним строки для обхода:
//НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
//НовыйHTMLДокумент.open("text/html");
//НовыйHTMLДокумент.write(ТекстВФорматеХТМЛ);
//НовыйHTMLДокумент.close();
//Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), "");
ПереводСтроки = Символы.ВК + Символы.ПС;
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</o:p>", "</o:p>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</o:p>" + ПереводСтроки + ПереводСтроки, "</o:p>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</p>", "</p>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</p>" + ПереводСтроки + ПереводСтроки, "</p>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</div>", "</div>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "</div>" + ПереводСтроки + ПереводСтроки, "</div>" + ПереводСтроки);
ТекстВФорматеХТМЛ = СтрЗаменить(ТекстВФорматеХТМЛ, "<br>", ПереводСтроки + ПереводСтроки);
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстВФорматеХТМЛ);
ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
УдалитьТегиИзЭлементаHTML(ДокументHTML, "style");
Если ДокументHTML.Тело = Неопределено Тогда
Возврат "";
КонецЕсли;
Возврат ДокументHTML.Тело.ТекстовоеСодержимое;
И добавить процедуру:
Процедура УдалитьТегиИзЭлементаHTML(ЭлементHTML, Тег)
Для каждого Узел Из ЭлементHTML.ДочерниеУзлы Цикл
Если НРег(Узел.ИмяУзла) = НРег(Тег) Тогда
ЭлементHTML.УдалитьДочерний(Узел);
Иначе
// Рекурсия
УдалитьТегиИзЭлементаHTML(Узел, Тег);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Я же вообще вставил туда вызов функции «ПолучитьТекстИзHTML» из модуля «Гипертекст» из последних релизов УНФ. Подумалось что может еще что-нибудь оттуда пригодится. Правда придется немного обработать его «напильником» (дело в том что там активно используются новые функции «СтрШаблон» и «Найти»).
Так как организация, для которой это делалось, активно использовала механизм событий (собственно из-за чего и начался весь сырбор с интеграцией почты в 1С) то само собой возник вопрос почему документ «Электронное письмо» не тождественен событию. Так например в той же УНФ разрабы реализовали электронное письмо как один из вариантов события (т.е. у них нет в принципе такой отдельной от события сущности как «Электронное письмо»).
Вообщем в итоге решили генерировать документы «Событие» при отправке и получении электронных писем. Для создания документа «Событие» при отправки электронного письма все в том же модуле «УправлениеЭлектроннойПочтой» в процедуре «ПолучениеОтправкаПисем» добавил кусок кода:
НовоеСобытие = Документы.Событие.СоздатьДокумент();
Если (Письма <> Неопределено) И (Письма.Получить(Письмо) <> Неопределено) Тогда
НовоеСобытие.Заполнить(Письма[Письмо].Ссылка);
Иначе
НовоеСобытие.Заполнить(Письмо.Ссылка);
КонецЕсли;
НовоеСобытие.Дата = ТекущаяДата();
НовоеСобытие.ТипСобытия = Перечисления.ВходящееИсходящееСобытие.Исходящее;
НовоеСобытие.СостояниеСобытия = Перечисления.СостоянияСобытий.Завершено;
НовоеСобытие.Записать(РежимЗаписиДокумента.Проведение);
Вставить его нужно сразу после кода отправки:
Аналогично для создания документа «Событие» при получении электронного письма все в том же модуле «УправлениеЭлектроннойПочтой» в той же процедуре «ПолучениеОтправкаПисем» добавил кусок кода:
НовоеСобытие = Документы.Событие.СоздатьДокумент();
НовоеСобытие.Заполнить(Письмо.Ссылка);
НовоеСобытие.Дата = Письмо.ДатаОтправления;
НовоеСобытие.ТипСобытия = Перечисления.ВходящееИсходящееСобытие.Входящее;
НовоеСобытие.СостояниеСобытия = Перечисления.СостоянияСобытий.Завершено;
НовоеСобытие.Записать(РежимЗаписиДокумента.Проведение);
Вставить его нужно сразу после кода получения:
Сразу хочу заметить что поле «СодержаниеСобытия» не заполнялось нами по просьбе заказчика. Предполагается что там не будет содержаться текст электронного письма, а будут вноситься пометки менеджерами характеризующие кратко суть написанного.
Если же Вы решите не идти путем автоматического дублирования событий на основе электронных писем, но все же вводить события на основании будете интерактивно Вы наткнетесь на те же грабли:
{Документ.Событие.МодульОбъекта(416)}: Поле объекта не обнаружено (innerText)
НовоеСобытие.Заполнить(ЭлементыФормы.ЭлектронныеПисьмаСписок.ТекущиеДанные.Ссылка);
Соответственно идем в модуль объекта документа «Событие» в процедуру «ОбработкаЗаполнения», комментируем кусок кода и вставляем под ним строку для обхода (при условии конечно что Вы вносили в него правки, которые я приводил во втором фрагменте кода):
//НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
//НовыйHTMLДокумент.open("text/html");
//НовыйHTMLДокумент.write(ДокОснование.ТекстПисьма);
//НовыйHTMLДокумент.close();
//СодержаниеСобытия = СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), "");
СодержаниеСобытия = УправлениеЭлектроннойПочтой.ПреобразоватьТекстИзХТМЛФорматаВПростой(ДокОснование.ТекстПисьма);
Итак, друзья мои, кто осилил дочитать до этого места не буду Вас больше утомлять кодом настало время картинок 🙂
Решили что гораздо красивее внешний вид формы обработки «Менеджер контактов» (именно она отображает почту) будет выглядеть (мониторы то нонче у всех широкие):
Вместо типового вида (который как в ширину не тяни — все равно ни списка писем толком не видно, да и само письмо отображается куцо):
Последние манипуляции с формой выполнялись при помощи активно используемого мною механизма программной модификации формы. Если очень коротко, то суть в том, что программно осуществляются действия по добавлению новых, изменению имеющихся элементов формы, установка событий и привязок. Список действий хранится в справочнике «Команды модификации форм». Визуально настройки для этой формы выглядят так:
Понятно что тема программного добавления/модифицирования обычных форм не новая. Если кого-либо заинтересовала моя реализация этого механизма — пожалуйста отпишитесь в комментариях. Если желающих будет достаточно много тогда засяду за публикацию (а перед этим судя по всему за расчесывание механизма, одно дело юзать самому — другое выкладывать на суд общественности).
P.S. Все вышесказанное справедливо (тестировалось) на Управление торговлей 10.3.35.1 и 10.3.40.1 но думаю что будет работать плюс минус десяток версий т.к. туда давненько никто из 1С не лазил.
После обновления информационной базы 1С, установки новой версии Платформы, доработки конфигурации 1C можно получить ошибку:
- Метод объекта не обнаружен.
В статье вы познакомитесь с новым инструментом разработчиков Синтаксис помощник и научитесь использовать его при работе с ошибками программного кода 1С.
БухЭксперт8 подготовил 3 примера формирования ошибки Метод объекта не обнаружен в 1С 8.3. Изучив их, вы узнаете причины появления ошибки и получите рекомендации для ее исправления с использованием встроенной справки 1С.
Содержание
- Причины ошибки в 1C Метод объекта не обнаружен
- Метод объекта не обнаружен (Счет покупателю — Подбор)
- Метод объекта не обнаружен (Печатная форма)
- Метод объекта не обнаружен (connect) в 1С 8.3
Причины ошибки в 1C Метод объекта не обнаружен
Причина появления ошибки Метод объекта не обнаружен, как правило, заключается в обращении к несуществующему методу работы с объектом конфигурации.
Объектами в 1С являются данные конфигурации 1С. В специальной литературе такие объекты еще называют Метаданными 1С. В состав объектов конфигурации входят:
- справочники;
- документы;
- регистры сведений;
- регистры накоплений;
- табличные документы;
- и т. д.
Каждый из объектов обладает определенными им разработчиками наборами Свойств и Методами. Посмотреть эту информацию позволяет специальный инструмент разработчиков — Синтаксис помощник. Инструмент встроен в справку Конфигурации 1С. Вызов Синтаксис помощника происходит:
Синтаксис-помощник содержит подробное описание заданных свойств и методов объектов конфигурации. Добавить свои свойства и методы пользователь не может. Изменить — тоже. Задача программиста, дорабатывающего 1С — использовать очень точно методы, что даны в описании. Если в программном коде допускается ошибка в использовании метода объекта, пользователь получает ошибку Метод объекта не обнаружен.
Рассмотрим возникновение ошибки на примерах. Для исправления будем обращаться к справке Синтаксис-помощника.
Метод объекта не обнаружен (Счет покупателю — Подбор)
После программной доработки операции Подбор в документе Счет покупателю появляется ошибка Метод объекта не обнаружен:
Согласно сообщению в окне ошибки, метод Копировать() не обнаружен в списке методов объекта 1С. Для уточнения вида объекта, который использует этот метод, перейдем в Конфигуратор:
- место доработки — процедура ПодборТовары;
- строка ошибки — ТЗ = ЭтотОбъект.Товары.Копировать().
Из программного кода видно, что программист создает таблицу значений ТЗ, используя метод Копировать(). Откроем список методов объекта Таблица значений:
- кнопка Синтаксис-помощник — Содержание;
- объект Универсальные коллекции значений — Таблица значений — Методы.
Согласно Синтаксис-помощнику для объекта Таблица значений нет метода Копировать(). Правильный метод — Скопировать(). После того как метод будет исправлен на правильный, подбор товара в документе Счет покупателю станет выполняться без ошибки.
Метод объекта не обнаружен (Печатная форма)
После программного изменения печатной формы Приложение к договору в документе Счет покупателю появляется ошибка Метод объекта не обнаружен:
Согласно сообщению в окне ошибки, метод ПолучитьРазмерОбластиДанных() не обнаружен в списке методов объекта 1С. Для уточнения вида объекта, который использует этот метод, перейдем в Конфигуратор:
- место доработки — функция ПечатьПриложениякДоговору;
- строка ошибки — ТабличныйДокумент.ПолучитьРазмерОбластиДанных().
В программном коде используется метод Табличного документа ПолучитьРазмерОбластиДанных(). Уточним используемые методы табличного документа через Синтаксис-помощник.
Согласно справке Синтаксис-помощника, нет метода ПолучитьРазмерОбластиДанных(). Для получения размера области данных по горизонтали используется метод ПолучитьРазмерОбластиДанныхПоГоризонтали().
После исправления программного кода печатная форма формируется без ошибки.
Метод объекта не обнаружен (connect) в 1С 8.3
В обработке внешнего подключения к информационной базе Управление Торговлей при попытке соединения появляется ошибка Метод объекта не обнаружен в 1С:
Для исправления ошибки откроем обработку в Конфигураторе базы:
- место возникновения ошибки — процедура ERRORНаСервере;
- строка ошибки — connection = cntr.Connector(“File=””c:InfoBasesTrade””;Usr=””Director””;”)
Для объекта COM-соединений определим в Синтаксис помощнике правильный метод новым способом через вкладку Поиск. Этот вариант часто используют в работе программисты и те пользователи, кто уже знаком с программным языком 1С. По первым буквам набранной в строке поиска команды программа отбирает объекты, использующие данный метод.
Согласно справке Синтаксис-помощника, нет метода Connector. Команду соединения с информационной базой Управление Торговлей нужно исправить на Connect.
После исправления команды соединение с базой Управление Торговлей по заданным параметрам выполнится без ошибки.
В качестве небольшого бонуса наши подписчики могут скачать внешнюю обработку с демонстрацией неправильного и правильного кода
Скачать внешнюю обработку с демонстрацией неправильного и правильного кода
См. также:
- Ошибка. Поле объекта не обнаружено
- Ошибка. Поле объекта недоступно для записи
- Ошибка. Переменная не определена
- Ошибка. Недостаточно фактических параметров
- Ошибка. Слишком много фактических параметров
- Поле объектов недоступно для записи
Если Вы еще не подписаны:
Активировать демо-доступ бесплатно →
или
Оформить подписку на Рубрикатор →
После оформления подписки вам станут доступны все материалы Бухэксперт8, записи поддерживающих эфиров и вы сможете задавать любые вопросы по программе 1С.
Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Метод объекта не обнаружен в 1С 8.3
После обновлений, доработок и других подобных изменений конфигурации пользователи могут столкнуться с ошибкой Метод объекта не обнаружен. В качестве метода выступают процедуры и функции, выполняющие некоторые действия с объектом. За каждым типом метаданных закреплены свои методы. Сообщение Метод объекта не обнаружен программа выдает в случаях, когда не находит во встроенном языке метод с таким именем или одноименную процедуру/функции в модулях объекта.
Примеры появления и исправления ошибки рассмотрены нами на конфигурации 1С:Бухгалтерия 8.3.
Причины возникновения ошибки в 1С 8.3
Пользователь получает предупреждение в виде всплывающего окна с текстом «Метод объекта не обнаружен ([Имя_метода])», если:
- метод не принадлежит к типу метаданных;
- опечатка в имени метода;
- у процедуры или функции, вызываемой в качестве метода объекта, не указанно ключевое слово Экспорт.
Для решения проблемы следует разобраться в структуре объектов конфигурации и их наборе методов.
Объекты и методы
Объекты или метаданные — основные составляющие конфигурации, куда сохраняются данные информационной базы. Состав метаданных закреплен на уровне платформы и не может дополняться программистом.
В список стандартных объектов 1С входят:
- константы;
- справочники;
- документы;
- отчеты;
- регистры сведений;
- и т. д.
Состав метаданных не ограничен объектами, перечисленными в окне дерева конфигурации: их в несколько раз больше. К тому же один объект может иметь несколько типов: например, ДокументОбъект, ДокументСсылка, ДокументВыборка и т. д. У каждого типа есть свой набор методов, которые позволяют выполнить определенную последовательность действий с отдельным экземпляром объекта.
Методы делятся на два вида:
- встроенные в платформу;
- написанные программистом в модулях объектов.
Встроенные методы объектов описаны в Синтакс-Помощнике: например, записать документ позволит метод Записать(). Имена методов созвучны с глаголом действия, которое будет произведено с метаданными.
Процедуры и функции, описанные в модулях объектов с ключевым словом Экспорт, дополняют типовые методы своих объектов и могут вызываться из любых программных модулей, где используются эти метаданные.
Исправление ошибки
Сообщение «Метод объекта не обнаружен» может возникнуть, например, при нажатии кнопки в документе.
Для детального анализа ошибки запустите конфигурацию в режиме отладки из конфигуратора Отладка — Начать отладку и повторите те же действия, чтобы вызвать повторное появление ошибки на экране. Кнопка Подробно раскроет окно с указанием строчки программного кода, где возникает сбой.
Для перехода в конфигуратор нажмите Конфигуратор.
В режиме конфигурирования курсор автоматически установится в месте появления ошибки, а информация из окна с подробным описанием сбоя в 1С отразится в служебном окне Конфигуратора.
Решение вопроса с ошибкой «Метод объекта не обнаружен» в 1С 8.3 будет зависеть от вида метода: созданный вручную или типовой.
Встроенные в платформу методы
Стандартные методы перечислены в Синтакс-Помощнике на ветках соответствующих объектов. Откройте Ситнакс-Помощник через меню конфигуратора Справка или по одноименной кнопке на панели инструментов. Для быстрого поиска на вкладке Индекс введите часть имени типа объекта, а для перехода к его описанию нажмите кнопку Найти текущий элемент в дереве.
Программа перейдет на вкладку Содержание и выделит искомый объект. Раскройте ветвь с методами и попытайтесь отыскать похожий по наименованию. Если такой нашелся, замените на него метод в строке кода с ошибкой.
Запустите 1С в режиме отладки и проверьте работу конфигурации в месте возникновения ошибки. Если окно со сбоем больше не выходит, обратите внимание на корректность обработки данных программой. Исправляйте имя метода в коде на типовое, только если видите явную опечатку в наименовании и не нашли одноименной процедуры/функции в моделях объекта.
Методы, добавленные вручную
Программисты могут добавлять экспортные процедуры и функции (со словом Экспорт) в модулях объектов, например, вкладке Прочее в окне редактирования объекта конфигурации.
Перед поиском метода узнают тип объекта, от которого запускается выполнение. Возможны варианты:
- для типов ДокументОбъект, СправочникОбъект и т. д. методы прописывают в Модуле объекта;
- типы ДокументМенеджер, ПеречислениеМенеджери т. д. — Модуль менеджера;
- типы РегистрСведенийНаборЗаписей и т. д. — Модуль набора записей (у регистров);
- тип КонстантаМенеджерЗначения — Модуль менеджера значения (у констант);
- и др.
Чтобы определить тип объекта, воспользуйтесь одним из способов:
1. Разберите в окне ошибки строку кода, где идет обращение к методу:
- Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента — метод выполняется в модуле формы документа;
- Документ — объект, от которого запускается метод;
- Добавить() — имя метода. Характерная черта — наличие круглых скобок в конце, в них перечисляются параметры, если они необходимы для выполнения операций;
- ПодборТовараСервер() — имя процедуры/функции, где возникает ошибка.
В данном примере Документ является переменной, содержащей объект с типом ДокументОбъект, получаемый встроенным методом ПолучитьОбъект().
2. Если конфигурация допускает вносить изменения, выведите тип объекта в окне сообщений в пользовательском режиме с помощью встроенных функций Сообщить() и ТипЗнч():
- впишите в процедуру строку кода с функцией, указав в скобках обращение к объекту без имени метода;
- запустите 1С в режиме отладки и повторите действия, вызывающие сбой;
- проигнорируйте окно с ошибкой, нажав ОК. В нижней части рабочей области программы появится сообщение с типом объекта.
3. Через команду контекстного меню Вычислить выражение в Конфигураторе
- в строчке, где возникает сбой, поставьте точку останова для принудительной остановки выполнения программного кода, имеет вид красного круга на полях с левой стороны;
- запустите программу в режиме отладки;
- повторите действия, при которых возникала ошибка;
- работа программы остановится, откроется окно конфигуратора;
- выделите часть кода, где идет обращение к объекту, без метода;
- правой кнопкой вызовите контекстное меню, выберите команду Вычислить выражение;
- в открывшемся окне в колонке Тип будет указан тип объекта.
Переменная Документ тип ДокументОбъект.СчетНаОплатуПостащика, поэтому запускаемые методы программа ищет среди экспортных процедур/функций в модуле объекта документа СчетНаОплатуПоставщику.
Для поиска метода:
- откройте модуль объекта/менеджера/набора записей;
- найдите одноименную процедуру или функцию, для быстрого перехода к нужной части текста модуля воспользуйтесь окном поиска, набрав в нем часть имени метода;
- проверьте наличие ключевого слова Экспорт. При его отсутствии программа не сможет передать процедуру/функцию в другой модуль. Соответственно, она не будет обнаружена, что приведет к появлению ошибки «Метод объекта не обнаружен»;
- имя процедуры/функции должно совпадать с вызываемым методом: если имеются явные орфографические ошибки или опечатки, исправьте их;
- если наименование процедуры/функции полностью совпадает с методом, и ключевое слово Экспорт указано, возможно, причина — в неверном типе объекта.
Если тип объект задан неверно, то программа будет производить поиск экспортных процедур/функции вне тех модулях и пользователь получит ошибку «Метод объекта не обнаружен». Для решения проблемы потребуется переписать программный код, пользователю стоит обратиться к программисту.
Если ни один из вариантов исправления ошибки не дал результата, попробуйте закомментировать строку кода, где происходит сбой, добавив в начале строки два правых слеша.
Эти действия приведут к отключению строки кода с методом для выполнения программой. Возможно, это устранит появление ошибки, но может исказить или повредить данные в базе из-за нарушения алгоритма их обработки, т. к. из него исключена последовательность действий, описанная в методе. Поэтому вносить самостоятельные правки в программный код нужно с осторожностью.
Метод объекта не обнаружен Connect 1С 8.3
Ошибку «Метод объекта не обнаружен (Connect)» 1С может показать при попытке обновить конфигурацию, синхронизации или загрузке/выгрузке данных из другой программы, базы.
Connect — наименование встроенного метода, принадлежит COM-объектам, которые 1С создает на основании объектов базы данных для их передачи или получения из других источников.
Поскольку метод типовой, следует проверить в конфигураторе корректность написания его имени в коде программы.
Ошибка «Метод объекта не обнаружен (Сonnect)» в 1С 8.3 не всегда связана с конфигурацией, причина может заключаться в операционной системе. Перед использованием метода Connect программа 1С должна создать COM-объект с помощью специальных компонентов, которые не всегда есть в системе компьютера. Проблему решают через регистрацию dll компонентов обмена, процедуру выполняют на сервере:
- в папке C:Windows найдите и запустите от имени администратора файл cmd.exe;
- в зависимости от вида операционной системы выполните команду:
- для x32: %windir%System32RegSvr32.exe “С:[путь до каталога 1С]bincomcntr.dll”;
- для x64: %windir%SysWoW64RegSvr32.exe “С:[путь до каталога 1С] bincomcntr.dll”;
- перезагрузите компьютер.
Стандартная утилита RegSvr32 автоматически зарегистрирует файл dll с компонентами обмена в реестре операционной системы, что устранит сбой в 1С, связанный с отсутствием метода connect. В Windows есть инструменты для ручного внесения компонент в реестр через пункт Администрирование на Панели управления, но эту задачу лучше поручить системному администратору компьютеров.
Запасным вариантом для решения вопроса с отсутствующим методом Connect остается чистка кэш-памяти 1С.
«Метод объекта не обнаружен» в 1С — ошибка серьезная, говорящая об отсутствии в программе алгоритмов, необходимых для выполнения действий пользователя. Если 1С сообщает о невозможности найти поле, элемент, реквизит или объект — такие проблемы сотрудник может решить самостоятельно. Но при недоступности методов необходимы знания о типах объектов, умения разбираться в программном коде, поэтому, когда ни один из способов не помог устранить сбой, следует обращаться к специалисту 1С.
Заказать консультацию
По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.
Друзья, у кого настроен внутренний почтовый клиент, все ли работает? У меня такая проблема, при выполнении регл.задания «Получение электронной почты», постоянно валится ошибка {ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль}: Метод объекта не обнаружен (tags) Вот код этого модуля: То есть COM объект создается, открыватся пишется, но доходит до последней строчки и валится в ошибку. Код типовой, на платформе пробовали и 8.2 и 8.3 — ошибка та же. Где-то в инете нашел что, что-то в IE запрещено, но что где не сказано… Помогите плиз в какую сторону копать…
копай в сторону освоения отладчика.
, будьте добры, скажите, как в отладчике залезть внутрь COMОбъекта?
подсказать как смотреть наличие нужного объекта и значения свойств? через окно в отладчике.
, у COMОбъекта отладчик не показывает свойства и их значения
Если это проявляется на малом количестве писем, вставь Попытка Исключение
, спс, помогло: теперь письма пропускаются, которые раньше вываливались с ошибкой. Немного подвисает 1С под пользователем, в момент выполнения этого регл.задания, но видимо это особенность файловой базы и фоновых заданий..
Тэги:
Комментарии доступны только авторизированным пользователям
После обновлений, доработок и других подобных изменений конфигурации пользователи могут столкнуться с ошибкой «Метод объекта не обнаружен». В качестве метода выступают процедуры и функции, выполняющие некоторые действия с объектом. За каждым типом метаданных закреплены свои методы. Сообщение «Метод объекта не обнаружен» программа выдает в случаях, когда не находит во встроенном языке метод с таким именем или одноименную процедуру/функции в модулях объекта.
Примеры появления и исправления ошибки рассмотрены нами на конфигурации 1С:Бухгалтерия 8.3.
Содержание
- 1 Причины возникновения ошибки
- 1.1 Объекты и методы
- 2 Исправление ошибки
- 2.1 Встроенные в платформу методы
- 2.2 Методы, добавленные вручную
- 3 Метод объекта не обнаружен Connect 1С 8.3
- 3.1 Вам будет интересно
Причины возникновения ошибки
Пользователь получает предупреждение в виде всплывающего окна с текстом «Метод объекта не обнаружен ([Имя_метода])», если:
- метод не принадлежит к типу метаданных;
- опечатка в имени метода;
- у процедуры или функции, вызываемой в качестве метода объекта, не указанно ключевое слово Экспорт.
Для решения проблемы следует разобраться в структуре объектов конфигурации и их наборе методов.
Объекты и методы
Объекты или метаданные — основные составляющие конфигурации, куда сохраняются данные информационной базы. Состав метаданных закреплен на уровне платформы и не может дополняться программистом.
В список стандартных объектов 1С входят:
- константы;
- справочники;
- документы;
- отчеты;
- регистры сведений;
- и т. д.
Состав метаданных не ограничен объектами, перечисленными в окне дерева конфигурации: их в несколько раз больше. К тому же один объект может иметь несколько типов: например, ДокументОбъект, ДокументСсылка, ДокументВыборка и т. д. У каждого типа есть свой набор методов, которые позволяют выполнить определенную последовательность действий с отдельным экземпляром объекта.
Методы делятся на два вида:
- встроенные в платформу;
- написанные программистом в модулях объектов.
Встроенные методы объектов описаны в Синтакс-Помощнике: например, записать документ позволит метод Записать(). Имена методов созвучны с глаголом действия, которое будет произведено с метаданными.
Процедуры и функции, описанные в модулях объектов с ключевым словом Экспорт, дополняют типовые методы своих объектов и могут вызываться из любых программных модулей, где используются эти метаданные.
Исправление ошибки
Сообщение «Метод объекта не обнаружен» может возникнуть, например, при нажатии кнопки в документе.
Для детального анализа ошибки запустите конфигурацию в режиме отладки из конфигуратора Отладка — Начать отладку и повторите те же действия, чтобы вызвать повторное появление ошибки на экране. Кнопка Подробно раскроет окно с указанием строчки программного кода, где возникает сбой.
Для перехода в конфигуратор нажмите Конфигуратор.
В режиме конфигурирования курсор автоматически установится в месте появления ошибки, а информация из окна с подробным описанием сбоя в 1С отразится в служебном окне Конфигуратора.
Решение вопроса с ошибкой «Метод объекта не обнаружен» в 1С 8.3 будет зависеть от вида метода: созданный вручную или типовой.
Встроенные в платформу методы
Стандартные методы перечислены в Синтакс-Помощнике на ветках соответствующих объектов. Откройте Ситнакс-Помощник через меню конфигуратора Справка или по одноименной кнопке на панели инструментов. Для быстрого поиска на вкладке Индекс введите часть имени типа объекта, а для перехода к его описанию нажмите кнопку Найти текущий элемент в дереве.
Программа перейдет на вкладку Содержание и выделит искомый объект. Раскройте ветвь с методами и попытайтесь отыскать похожий по наименованию. Если такой нашелся, замените на него метод в строке кода с ошибкой.
Запустите 1С в режиме отладки и проверьте работу конфигурации в месте возникновения ошибки. Если окно со сбоем больше не выходит, обратите внимание на корректность обработки данных программой. Исправляйте имя метода в коде на типовое, только если видите явную опечатку в наименовании и не нашли одноименной процедуры/функции в моделях объекта.
Методы, добавленные вручную
Программисты могут добавлять экспортные процедуры и функции (со словом Экспорт) в модулях объектов, например, вкладке Прочее в окне редактирования объекта конфигурации.
Перед поиском метода узнают тип объекта, от которого запускается выполнение. Возможны варианты:
- для типов ДокументОбъект, СправочникОбъект и т. д. методы прописывают в Модуле объекта;
- типы ДокументМенеджер, ПеречислениеМенеджери т. д. — Модуль менеджера;
- типы РегистрСведенийНаборЗаписей и т. д. — Модуль набора записей (у регистров);
- тип КонстантаМенеджерЗначения — Модуль менеджера значения (у констант);
- и др.
Чтобы определить тип объекта, воспользуйтесь одним из способов:
- Разберите в окне ошибки строку кода, где идет обращение к методу:
- Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента — метод выполняется в модуле формы документа;
- Документ — объект, от которого запускается метод;
- Добавить() — имя метода. Характерная черта — наличие круглых скобок в конце, в них перечисляются параметры, если они необходимы для выполнения операций;
- ПодборТовараСервер() — имя процедуры/функции, где возникает ошибка.
В данном примере Документ является переменной, содержащей объект с типом ДокументОбъект, получаемый встроенным методом ПолучитьОбъект().
- Если конфигурация допускает вносить изменения, выведите тип объекта в окне сообщений в пользовательском режиме с помощью встроенных функций Сообщить() и ТипЗнч():
- Через команду контекстного меню Вычислить выражение в Конфигураторе:
Переменная Документ имеет тип ДокументОбъект.СчетНаОплатуПостащика, поэтому запускаемые методы программа ищет среди экспортных процедур/функций в модуле объекта документа СчетНаОплатуПоставщику.
Для поиска метода:
- откройте модуль объекта/менеджера/набора записей;
- найдите одноименную процедуру или функцию, для быстрого перехода к нужной части текста модуля воспользуйтесь окном поиска, набрав в нем часть имени метода;
- проверьте наличие ключевого слова Экспорт. При его отсутствии программа не сможет передать процедуру/функцию в другой модуль. Соответственно, она не будет обнаружена, что приведет к появлению ошибки «Метод объекта не обнаружен»;
- имя процедуры/функции должно совпадать с вызываемым методом: если имеются явные орфографические ошибки или опечатки, исправьте их;
- если наименование процедуры/функции полностью совпадает с методом, и ключевое слово Экспорт указано, возможно, причина — в неверном типе объекта.
Если тип объект задан неверно, то программа будет производить поиск экспортных процедур/функции вне тех модулях и пользователь получит ошибку «Метод объекта не обнаружен». Для решения проблемы потребуется переписать программный код, пользователю стоит обратиться к программисту.
Если ни один из вариантов исправления ошибки не дал результата, попробуйте закомментировать строку кода, где происходит сбой, добавив в начале строки два правых слеша.
Эти действия приведут к отключению строки кода с методом для выполнения программой. Возможно, это устранит появление ошибки, но может исказить или повредить данные в базе из-за нарушения алгоритма их обработки, т. к. из него исключена последовательность действий, описанная в методе. Поэтому вносить самостоятельные правки в программный код нужно с осторожностью.
Метод объекта не обнаружен Connect 1С 8.3
Ошибку «Метод объекта не обнаружен (Connect)» 1С может показать при попытке обновить конфигурацию, синхронизации или загрузке/выгрузке данных из другой программы, базы.
Connect — наименование встроенного метода, принадлежит COM-объектам, которые 1С создает на основании объектов базы данных для их передачи или получения из других источников.
Поскольку метод типовой, следует проверить в конфигураторе корректность написания его имени в коде программы.
Ошибка «Метод объекта не обнаружен (Сonnect)» в 1С 8.3 не всегда связана с конфигурацией, причина может заключаться в операционной системе. Перед использованием метода Connect программа 1С должна создать COM-объект с помощью специальных компонентов, которые не всегда есть в системе компьютера. Проблему решают через регистрацию dll компонентов обмена, процедуру выполняют на сервере:
- в папке C:Windows найдите и запустите от имени администратора файл cmd.exe;
- в зависимости от вида операционной системы выполните команду:
- для x32: %windir%System32RegSvr32.exe “С:[путь до каталога 1С]bincomcntr.dll”;
- для x64: %windir%SysWoW64RegSvr32.exe “С:[путь до каталога 1С] bincomcntr.dll”;
- перезагрузите компьютер.
Стандартная утилита RegSvr32 автоматически зарегистрирует файл dll с компонентами обмена в реестре операционной системы, что устранит сбой в 1С, связанный с отсутствием метода connect. В Windows есть инструменты для ручного внесения компонент в реестр через пункт Администрирование на Панели управления, но эту задачу лучше поручить системному администратору компьютеров.
Запасным вариантом для решения вопроса с отсутствующим методом Connect остается чистка кэш-памяти 1С.
«Метод объекта не обнаружен» в 1С — ошибка серьезная, говорящая об отсутствии в программе алгоритмов, необходимых для выполнения действий пользователя. Если 1С сообщает о невозможности найти поле, элемент, реквизит или объект — такие проблемы сотрудник может решить самостоятельно. Но при недоступности методов необходимы знания о типах объектов, умения разбираться в программном коде, поэтому, когда ни один из способов не помог устранить сбой, следует обращаться к специалисту 1С.
См. также:
- Ошибка в 1С: Поле объекта не обнаружено
- Нарушение прав доступа 1С 8.3: внешняя обработка
- Не обнаружена установленная версия 1С Предприятия 8.3
- Неверный формат хранилища данных 1С
- Ошибка 1С 8.3 “Недостаточно памяти”
- Использование модальных окон в данном режиме запрещено в 1С
- Не запускается 1С 8.3: начало сеанса с информационной базой запрещено
Поставьте вашу оценку этой статье:
Загрузка…
Дата публикации: Дек 18, 2020
Поставьте вашу оценку этой статье:
Загрузка…
IKSparrow
02.06.14 — 16:08
Код такой:
Попытка
Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла);
Исключение
ЗаписьЖурналаРегистрации(
«#COM»,
УровеньЖурналаРегистрации.Ошибка,
ЭтотОбъект,
«Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла): «+Объект.ИмяФайла,
ОписаниеОшибки());
Возврат;
КонецПопытки;
Ошибка такая: Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени
Платформа вот такая: 8.3.4.482
Где ошибка?
1cVandal
1 — 02.06.14 — 16:11
Объект.ИмяФайла что там?
IKSparrow
2 — 02.06.14 — 16:11
(1) D:Книга1.xls
1cVandal
3 — 02.06.14 — 16:14
Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла,»Excel.Application»);
а так?
1cVandal
4 — 02.06.14 — 16:15
да и прежде чем его обрабатывать,попробуй закрой его
IKSparrow
5 — 02.06.14 — 16:16
(3) Неа, теперь так Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Вроде же всю жизнь было Excel.Application.
salvator
6 — 02.06.14 — 16:20
(5) Эксель не установлен?
1cVandal
7 — 02.06.14 — 16:20
(5) а он у тебя установлен? может код на сервере выполняется?
IKSparrow
8 — 02.06.14 — 16:24
(6) Excel установлен.
Балин…. Ну да… В процедуре формы с директивой &НаСервере
IKSparrow
9 — 02.06.14 — 16:25
А на сервере Excel’я нет. А у меня тонкий клиент. Стало быть мне только Excel на сервак ставить и без вариантов, да?
RomaH
10 — 02.06.14 — 16:27
(9) почему? — читаешь таблицу на клиенте
пишешь её в формат 1С — любая коллекция
передаешь её на сервер
IKSparrow
11 — 02.06.14 — 16:32
(10) ТЬфу, не в тот раздел СП посмотрел и не на тот метод «ПолучитьCOMОбъект» =)))
Всем спасибо =)
IKSparrow
12 — 02.06.14 — 16:33
Ну вот же гадство. Теперь Ошибка в получении объекта COM (0x80004002) Интерфейс не поддерживается. Что за фигня.
IKSparrow
13 — 02.06.14 — 16:34
Процедура теперь на клиенте выполняется.
1cVandal
14 — 02.06.14 — 17:00
наКлиенте
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = «»;
Фильтр = «Таблица(*.xlsx)|*.xlsx»;
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = «Выберите файл c описью вложения»;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
Тз = объект.ТЗ;
Тз.Очистить();
//Тз.Колонки.Добавить(«ШК»);
//Тз.Колонки.Добавить(«Сумма»);
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ПутьКФайлу);
ExcelЛист = Excel.Sheets(1);
Исключение
Сообщить(«Не установлено приложение MS Excel!»);
Возврат;
КонецПопытки;
COM-объект и Excel
lilyapo сказал(-а): 20.12.2016 13:59
COM-объект и Excel
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:
Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибка
Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?
avm3110 сказал(-а): 20.12.2016 15:25
Re: COM-объект и Excel
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:
Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибка
Сталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?
lilyapo сказал(-а): 20.12.2016 15:55
Re: COM-объект и Excel
avm3110 сказал(-а): 20.12.2016 16:31
Re: COM-объект и Excel
А попробуй «завернуть» в Попытку
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
Состояние(«Обработка файла Microsoft Excel. «);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
lilyapo сказал(-а): 20.12.2016 17:04
Re: COM-объект и Excel
avm3110 сказал(-а): 20.12.2016 17:25
Re: COM-объект и Excel
[QUOTE=lilyapo;469920]Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибка
похоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Обучение программированию на 1С
Использование COM-соединения, выгрузка в Excel через COM-объект Excel.Application
Вообще COM-объекты используют для соединения информационной базы 1С с файлом Word, Excel, Outlook или любой другой программой, поддерживающей данный интерфейс обмена данными. В этой статье рассмотрим задачу выгрузки/загрузки данных из/в MS Excel. Чтобы это осуществить воспользуемся COM-соединением и объектом Excel.Application. Для примера возьмём задачу выгрузки/загрузки данных о номенклатуре. Пример рассмотрим ниже.
Что же такое COM-соединение? Component Object Model (или COM) – это технология (фирмы Microsoft) взаимодействующих компонентов, которые одновременно могут быть использованы в разных приложениях. При этом весь функционал соответствующего компонента наследуется внутрь разрабатываемого приложения. В нашем случае COM-объект Excel.Application используется внутри кода 1С для операций с файлом книги MS Excel.
Объект Excel.Application
У объекта Excel.Application существует ряд методов, которые нам могут пригодиться для реализации нижепоставленной задачи:
- ОбъектExcel.WorkBooks.Open(ИмяФайла) – Открытие книги MS Excel
- ОбъектExcel.ActiveWorkbook.Close() – Закрытие текущей книги
- ОбъектExcel.Quit() – Закрытие COM-объекта
- ОбъектExcel.Sheets(ИмяЛиста) – Получает лист книги
- ЛистExcel.Cells(НачалоСтрока, НачалоСтолбец) – Ячейка таблицы на данном листе
- ЛистExcel.Range(Ячейка1, Ячейка2) – Выделенная область
- ЯчейкаExcel.Value – Значение ячейки таблицы
- ЯчейкаExcel.Text – Текст ячейки таблицы
Постановка задачи
Итак, предположим, что в обработке 1С у нас имеется табличная часть, состоящая из следующих колонок:
Необходимо реализовать 2 функционала (сделать на форме 2 основные кнопки):
- Выгрузка табличной части в подготовленный файл MS Excel
- Загрузка табличной части из файла.
Алгоритм выгрузки/загрузки в MS Excel
Алгоритм выгрузки следующий:
- Выгружаем табличную часть в таблицу значений
- Создаём новый COM-объект Excel.Application
- Выбираем файл, открываем файл книги MS Excel
- Переходим на заданный лист книги
- Выгружаем данные в файл
- Закрываем книгу, выходим из COM-объекта.
Алгоритм загрузки следующий:
- Создаём новый COM-объект Excel.Application
- Выбираем файл, открываем файл книги MS Excel
- Переходим на заданный лист книги
- Загружаем данные из файла в таблицу значений
- Закрываем книгу, выходим из COM-объекта
- Таблицу значений выгружаем в табличную часть.
Операция выгрузки и загрузки данных о номенклатуре происходит в заранее подготовленный шаблон MS Excel.
Пример кода 1С
Код 1С я постарался разделить на отдельные функции, чтобы, скопировав, с ними можно было работать где угодно. На форме обработки 1С были созданы 3 кнопки:
В итоге в реализации алгоритма получились следующие основные процедуры и функции 1С:
- ПолучитьExcel – Получает COM-объект MS Excel;
- ЗакрытьExcel – Закрывает использование COM-объекта MS Excel;
- ПолучитьЛистExcel – Получает лист книги Excel;
- ДобавитьТабличныйДокументВExcel – Добавляет табличный документ на лист Excel (нужно для выгрузки данных);
- ПрочитатьОбластьИзExcel – Читает область ячеек с листа Excel (нужно для загрузки данных);
- ШиринаЛистаExcel – Ширина листа Excel;
- ВысотаЛистаExcel – Высота листа Excel;
- ПреобразоватьТДвТЗ – Преобразует табличный документ в таблицу значений;
- ПреобразоватьТЗвТД – Преобразует таблицу значений в табличный документ;
Для начала приведу вспомогательную функцию для открытия/сохранения файла на диске:
Настройка DCOM для Excel.Application в 1С, за минуту
Настройка DCOM для Excel.Application в 1С, за минуту
Добрый день! Уважаемые читатели и гости, популярного IT блога pyatilistnik.org. Сегодня я продолжу пополнять свою копилку знаний в разделе 1С. Вчера меня один из разработчиков, попросил ему помочь настроить компоненты DCOM для Excel.Application в связке с приложением 1С. Я ранее этого не делал, так что пришлось в этом разбираться. По итогам найденного решения, появилась и эта заметка. Уверен, что на этот материал найдутся желающие.
Что такое DCOM
Distributed Component Object Model (DCOM) — программная архитектура, разработанная компанией Microsoft для распределения приложений между несколькими компьютерами в сети. Программный компонент на одной из машин может использовать DCOM для передачи сообщения (его называют удаленным вызовом процедуры) к компоненту на другой машине. DCOM автоматически устанавливает соединение, передает сообщение и возвращает ответ удаленного компонента. С данным компонентов мы уже знакомились, когда решали ошибку 10016.
Настройка DCOM для Excel.Application
И так у меня есть виртуальная машина под управлением Windows Server 2012 R2, на ней установлены серверные компоненты 1С, есть задача для Excel.Application модуля, настроить DCOM компоненты.
Нам необходимо открыть в панели управления Windows, компонент «Службы компонентов».
Либо можете, через окно выполнить ввести DCOMCNFG, откроется, тоже самое.
В службах компонентов (Component Services) откройте ветку:
Если по каким-то причинам у вас нет пункта Microsoft Excel Application, откройте реестр Windows, найдите ветку: HKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем ее. В ней должен быть ключ REG_SZ со значением .
КОМУ ЛЕНЬ самому создавать, то можете скачать данный ключ реестра у меня. Просто запустите потом и подтвердите, что согласны добавить. Затем откройте командную строку от имени администратора и выполните команду:
У вас откроется mmc оснастка «Службы компонентов», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты. В результате этих манипуляций компонент Microsoft Excel Application у вас должен появиться. Открываем свойства Microsoft Excel Application.
Переходим на вкладку «Безопасность (Secutity)». В пункте «Разрешения на запуск и активацию (Launch and Activation Permissions)», выберите «Настроить (Customize )» и изменить. Вам нужно добавить сюда учетную запись, от имени которой запускается служба 1С и предоставить ей права:
- Локальный запуск — Local Launch
- Локальная активация — Local Activation
Далее переходим к пункту «Разрешения на доступ (Access Permissions)» и так же меняем их. Добавьте там ту же учетную запись, от имени которой запускается сервис 1С, и дайте ей права «Локальный доступ (Local Access)». Сохраните настройки.
Закрываем окно служб компонентов, теперь для того, чтобы закончит ьнастройку DCOM для 1С и Microsoft Excel Application, вам необходимо дать права на две папки.
Вам нужно убедиться, что у вас есть две папки:
2147221005(0x800401F3): Недопустимая строка с указанием класса — что делать
При выполнении каких-либо задач с комплексом 1С (фоновый обмен данными между компонентами, запуске нужной конфигурации, проверки выполнения кода etc) может появиться сообщение об ошибке 2147221005(0x800401F3). Последняя обычно сопровождается строкой « Недопустимая строка с указанием класса » и связана с неверным кодом программы, не зарегистрированными в системе компонентами и другими релевантными факторами. Давайте разберёмся, что делать при появлении ошибки 2147221005(0x800401F3) в вашей 1С.
Суть и причины «Недопустимая строка с указанием класса»
Ошибка 2147221005(0x800401F3) относится к регулярно встречающимся ошибкам 1С, и фиксируется у многих пользователей. Единственного и эффективного рецепта её решения не существует, так как она может иметь уникальную основу, и вызывается особенностями программного кода в конкретной системе.
Тем не менее к числу наиболее популярных причин ошибки 2147221005 относятся следующие:
- Пользователь использует устаревшую конфигурацию 1С . К примеру, фиксировались случаи появления ошибки 2147221005(0x800401F3) при использовании архаичной конфигурации «Управление торговлей» при попытке обмена данными с 1С «Бухгалтерия предприятия»;
- Наличие некорректного кода программы (к примеру, обращение к устаревшему «V82.COMConnector» вместо модерного «V83.COMConnector»);
- В системе не зарегистрирована библиотека comcntr.dll , имеющая важное значение для работы 1С;
- У пользователя, запускающего определённый комплекс 1С, нет достаточных прав для работы с ним (к примеру, запуск выполняется из гостевой учётной записи, вместо учётки администратора);
- В системе не установлен (не зарегистрирован) Excel , необходимый для работы 1С.
Давайте разберёмся, как исправить ошибку 2147221005 «Недопустимая строка с указанием класса» в вашей системе 1С.
Обновите вашу конфигурацию 1С до актуальной версии
Первым делом убедитесь, что вы используете самую свежую версию конфигурации 1С. При подключении к нужным базам для выполнения обмена она может попытаться использовать устаревшую платформу (к примеру, 8.2), которая фактически отсутствует. Потому обновите вашу версию конфигурации до актуального релиза, а потом попробуйте осуществить требуемое подключение.
Используйте свежую версию 1С
Запускайте 1С с правами админа
Убедитесь, что вы запускаете систему под учётной записью администратора, а не ограниченного в правах «Гостя» или аналога.
Измените код программы
В некоторых случаях код программы может устареть и не соответствовать текущей версии 1С. Эффективным решением ошибки 2147221005 является замена строки кода:
COMConnector = Новый COMObject(«V82.COMConnector»);
COMConnector = Новый COMObject(«V83.COMConnector»);
После указанной замены ошибка «Недопустимая строка с указанием класса» может быть решена.
Зарегистрируйте в системе библиотеку comcntr.dll
Если вы пользуетесь Виндовс 64, то необходимо провести корректную регистрацию в системе библиотеки comcntr.dll . Нажмите на Win+R, введите следующую строку:
C:WindowsSysWOW64regsvr32 «c:Program Files(x86)1cv88.3.12.1469bincomcntr.dll»
Вместо «8.3.12.1469» укажите установленную у вас версию технологической платформы. После этого нажмите на ввод. Указанная регистрация может помочь избавиться от ошибки 2147221005 в 1С.
Проверьте наличие установленного в системе Excel
Наличие установленного в системе Excel является необходимым элементом при обращении к нему системы 1С. Потому рекомендуем убедиться, что Эксель в системе установлен корректно, для чего нажмите Win+R, введите там Excel , и нажмите ввод. Если программа запустилась, тогда всё работает корректно. Если нет, тогда следует установить (переустановить) Excel (комплекс «MS Office») на вашей машине (машинах).
Используйте специализированные форумы 1С
Если не один из указанных советов вам не помог, обратитесь к помощи форумов, которые посещают множество программистов и специалистов 1С. В частности, рекомендуем такие форумы как forum.infostart.ru, cyberforum.ru/1c-standard, is.ideasoft.in.ua где вам могут помочь в решении возникшей дисфункции.
Заключение
В нашем материале мы разобрали, когда появляется ошибка «2147221005(0x800401F3): Недопустимая строка с указанием класса», и как можно её исправить. Данная дисфункция может иметь различные причины, а для её решения рекомендуем задействовать весь комплекс способов, перечисленным нами выше. Их выполнение может помочь устранить ошибку 2147221005 в вашей системе 1С.
ComObject Excel.Application без офисного пакета
Мне нужно прочитать файл Excel из Powershell.
Я использую этот объект:
Он прекрасно работает на машине с установкой Office, но если Office не установлен, я получаю эту ошибку:
Есть ли какая-то среда выполнения для Office, чтобы использовать ее?
3 Ответа
Там нет «runtime» для Excel, которые вы можете использовать без получения надлежащей лицензии для Excel (и установки Excel на машину). Если вы пытаетесь сделать это на сервере OS с несколькими пользователями, вам также нужно рассмотреть возможность специального лицензирования (поскольку одна лицензия Excel не будет охватывать несколько пользователей более чем вероятно).
Вы можете рассмотреть возможность использования OpenXML SDK для Office в качестве способа выполнения некоторых общих действий в файле Excel, как описано здесь . Поскольку это библиотека .NET, вы сможете использовать ее изнутри PowerShell.
Нет времени выполнения, как и доступа.
Там есть зритель, если это вам поможет.
Обзор
С помощью средства просмотра Excel можно открывать, просматривать и печатать книги Excel, даже если у вас не установлен Excel. Вы также можете скопировать данные из Excel Viewer в другую программу. Тем не менее, вы не можете редактировать данные, сохраните книгу или создайте новую книгу.
Вместо COM можно использовать активные X-объекты данных (ADO), например
Похожие вопросы:
Мне нужно закончить заявку в C#. Теперь я хочу получить функцию, которая управляет файлом Excel для получения данных. Я использовал getActiveObject(Excel.Application) , но это ничего не возвращает.
У меня есть набор документов, чтобы запросить, чтобы пользователь открыл версию только для чтения(опция рекомендуется только для чтения). Я хотел бы открыть документ excel без чтения только в.
Я ищу разъяснений относительно влияния New на объекты и сценарий. Я понимаю, что если мне нужно выполнить действия над документом excel и приложение закрыто, то я должен использовать новый.
Я пытался получить доступ к COM объектам всех экземпляров Excel 2010, зарегистрированных в ROT в Visual C# Express 2010. Я нашел код на.
Есть ли способ преобразовать .xls в .csv без установки Excel с помощью Powershell? У меня нет доступа к Excel на конкретной машине, поэтому я получаю ошибку при попытке: New-Object -ComObject.
У меня есть powershell скрипт, который использует -ComObject Word.Application. Я хотел бы использовать это в сервере windows, но у него нет Word. На данный момент , когда я выполняю, у меня есть эта.
У меня есть небольшой скрипт, который позволяет мне объединить несколько .csv к А.файлы XLSX: $path = C:UsersFrancescoMDesktopCSVResults* $csvs = Get-ChildItem $path -Include *.csv $y =.
Я столкнулся с проблемой на Powershell Excel ComObject, где я не могу принять разделитель, отличный от запятой , . Некоторые из внешних .Полученные файлы csv используют другой разделитель, например.
TR Dosya için geçersiz uzantı
HU Rossz kiterjesztésű fájl
NB Ugyldig filtype
PT Extensão incorreta para o ficheiro
IT Estensione errata per il file.
FI Tiedoston tunniste ei kelpaa.
ES Extensión incorrecta para el archivo
CS Chybná přípona souboru
DA Forkert filtypenavn
KO 파일 확장명이 틀립니다.
PL Złe rozszerzenie dla pliku.
NL Ongeldige extensie voor bestand
EL Εσφαλμένη επέκταση αρχείου
DE Ungültige Dateierweiterung
FR Extension de fichier incorrecte
JA ファイルの拡張子が間違っています
ZH 文件的扩展名不正确
SV Felaktigt filnamnstillägg
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Сообщение от vetal_x
Доступ полный — админский.
Сообщение от vetal_x
изменять другие документы — могу
Не знаю, насколько хорошо вы знакомы с 1С, поэтому буду писать подробно, не обессудьте.
В конфигураторе 1С:
1. Открыть: «Администрирование» -> «Пользователи» -> пользователь, который у вас прописан в ConnectString;
2. Перейти на вкладку «Прочие», убедиться, что в списке «Доступные роли» установлен флаг в строке «Полные права». Если не установлен, то установить и нажать «Ок». Закрыть список пользователей.
3. В дереве конфигурации раскрыть ветку «Документы», найти там «ЗаказКлиента» и дважды по нему кликнуть — откроется окно свойств объекта метаданных.
4. Перейти на вкладку «Права».
5. В списке «Роли» найти роль «ПолныеПрава» и установить фокус на нее.
6. Убедиться, что в списке «Права» (под списком «Роли») установлены флаги в строках «Чтение», «Добавление», «Изменение», «Проведение», «Отмена проведения». Если не установлены, установить.
Если на шагах 2 и 6 указанные вы убедились, что флаги стояли там и до вас, значит дело точно не в правах доступа к документу «ЗаказКлиента». Это единственное, что я могу посоветовать сделать, исходя из вашей постановки задачи.
Еще можно попробовать исключить фактор C#, написав простенькую обработку на 1С, которая делает то же, что и ваш код, но это бред.