Ошибка инициализации ole 1с
Здравствуйте, у меня следующая проблема, убил на нее целый день так и не понял причины.
Хочу в внешнем обработчике их 1С 8.2 подключится к 1С 7.7 чтобы получить данные.
Пишу так:
Функция ПодключитсяК1С77 ()
База77 = Новый COMОбъект("V77.Application");
РезультатПодключения=База77.Initialize(База77.RMTrade, "","");
Возврат РезультатПодключения;
КонецФункции
При под отладчиком вижу что в переменную РезультатПодключения передается лож. В чем проблема, объект База77 создается,
при инициализации открывается 1С я указываю к какой базе подключится пароль тоже ввожу. Нов итоге лож! Почему? помогите пожалуйста понять.
В итоге опять лож. Я вывел в отдельную переменную строку с ключами, путем к БД, логином и паролем. Под отладчиком в ней формируется вот такая вот строка
Может в ней проблема что-то не так?
У меня по итогам (3) РезультатПодключения = Истина.
Но естетсвенно у меня другие каталог, имяпользователя, пароль.
пробовал на 8.2.3.219 + 7.70.027 а у Вас?
Кроме того у вас установленs все 3 компоненты 7.7? Каталог с БД прописан в списке баз 7.7?
Кстати, если в (3) функция - она должна что-то возвращать!
путь к базе прописан(в списке есть), У меня для Администратора пароля нет.
По поводу функции она у меня возвращает результат подключения в примере просто не указал.
Что вы имеете в виду под 3 компонентами 7,7?
(9)>путь к базе прописан(в списке есть), У меня для Администратора пароля нет.
это не важно, пробовал и с паролем и без (естественно без пароля над тем юзером у которого нет пароля).
>Что вы имеете в виду под 3 компонентами 7,7?
У пользователя ОС под которым выполняется код из (3) права админа есть?
У того кто назван админом политикой безопасности права на создание COM-объектов не отрубили?
а если в клюшках выполнить:
> У того кто назван админом политикой безопасности права на создание COM-объектов не отрубили?
А где это посмотреть?
(16)Ты хоть 1С 7.7 пробовал в обычном режиме запускать?
Пропиши админские права у пользователя в удаленной БД.
Да и локально. Всякое могёт быть.
да все я запускал и там у всех стоит права администратора, но там я не нашол прав на права создание COM-объектов
>завернул инициализацию в если, во внутрь не попал.
ну значит снеговик вообще не при делах. Или не хватает прав или клюшки стали криво -
>А где это посмотреть?
это лучше сисадмин скажет.
Всё-же если всё что написано ранее не поможет:
1.Попробуйте выполнить в консоли regsvr32 1Cv7.exe
ЗЫ задача №1 - добится что-бы код из (15) отработал, если от отработает - значит с клюшками и окнами проблем нет, тогда отрабатывать код из (3).
«ОбщийМодуль.ЭлектронныеДокументыЭДО.Модуль(191,2)>: Процедура или функция с указанным именем не определена (ЗаполнитьОтпечаткиСертификатов)».
Из возможных действий: «Перезапустить» или «Завершить». Здрасьте, приехали.
Ошибка 1С в модуле EF_00_00406132 «Процедура или функция с указанным именем не определена» Ошибка 1С в модуле EF_00_00406132 «Процедура или функция с указанным именем не определена»Окно ошибки
Временное решение
Выход: отключение патча EF_00_00406132 через Конфигуратор.
Откройте вашу базу 1С в режиме Конфигуратор. В главном меню нажмите « Конфигурация — Расширения конфигурации ».
Если пункт недоступен, то сначала выполните команду « Конфигурация — Открыть конфигурацию ».
В окне со списком установленных расширений выберите расширение EF_00_00406132 и нажмите в строке на галку в поле «Активно».
Что делать, если у вас базовая версия
Попробуйте сделать таким образом:
- Укажите в дополнительных параметрах запуска информационной базы следующий ключ для удаления патча.
/DeleteCfg -Extension EF_00_00406132
- Запустите 1С в режиме конфигуратора. При этом Конфигуратор отроется и сразу закроется.
- После уберите этот ключ запуска и зайдите в режиме 1С:Предприятия, как обычно.
Дополнительная рекомендация
Чтобы исключить повторную автоматическую установку этого патча, на какое-то время через функции для технического специалиста уберите галку с « Загружать и устанавливать исправления (патчи) автоматически ». Нажмите на «Записать и закрыть».
В режиме 1С:Предприятия:
- Кнопка «Сервис и настройки» — Параметры — Режим технического специалиста (поставить ☑).
- Настройки — Функции для технического специалиста.
✅ После отключения «мешающего» патча вы с большой долей вероятности сможете успешно войти в базу.
⚡ Подписывайтесь на канал или задавайте вопрос на сайте — постараемся помочь всеми техническими силами. Безопасной и производительной работы в Windows и 1С.
Подпишитесь на рассылку, чтобы быть в курсе последних новостей и обновлений. Кейсы клиентов и рекомендации по настройке 1С. Читайте первыми ► здесь .
Краткая справка по использованию OLE в 1С-Предприятии.
Для запуска системы 1С-Предприятия в качестве OLE Automation сервера из внешнего приложения выполняется следующая последовательность действий:
- Создается объект с OLE идентификатором (регистр символов непринципиален):
- V1CEnterprise.Application - версия независимый ключ;
- V77.Application - версия зависимый ключ;
- V77S.Application - версия зависимый ключ, SQL версия;
- V77L.Application - версия зависимый ключ, локальная версия;
- V77M.Application - версия зависимый ключ, сетевая версия.
- Выполняется инициализация системы 1С-Предприятие методом Initialize().
- Вызываются атрибуты и методы системы 1С-Предприятия как OLE Automation сервера.
1С-Предприятие в качестве OLE Automation сервера имеет 4 метода:
- Initialize() - выполнить инициализацию системы 1С-Предприятие.
- CreateObject() - Создает объект агрегатного типа данных 1С-Предприятия и возвращает ссылку на него.
- EvalExpr() - Вычислить выражение системы 1С-Предприятие.
- ExecuteBatch() - Выполнить последовательность операторов системы 1С-Предприятие.
Методы:
1. Initialize() - открыть базу.
Синтаксис метода такой:
Initialize(<Имя объекта>.RMTrade, <Командная строка>, <Пустая строка>)
<Имя объекта>.RMTrade - имя переменной и ключевое слово RMTrade.
<Командная строка> - командная строка, в которой можно прописать путь к базе, имф пользователя и пароль.
<Пустая строка>) - либо пустая строка, либо "NO_SPLASH_SHOW" - чтобы не показывать заставку при загрузке.
Для того, чтобы открыть базу через OLE - необходимо создать объект с идентификатором OLE, выполнить инициализацию базы и проверить успешность выполнения инициализации. В своем примере я не указываю никаких дополнительных параметров, поэтому открывается квадратное окошко выбора базы, предлагается выбрать пользователя и ввести пароль.
2. CreateObject() - создать объект агрегатного типа.
Этот метод создает объект агрегатного типа данных системы 1С-Предприятия и возвращает ссылку на него.
Синтаксис метода такой:
<ИмяАгрегатногоТипа> - строковое выражение, значение которого содержит имя агрегатного типа данных, заданного в конфигураторе. Например: "Справочник.Номенклатура", "Документ.ПриходнаяНакладная".
3. EvalExpr() - вычислить выражение.
Синтаксис метода такой:
<СтрокаВыражения> - строковое выражение, записанное на встроенном языке 1С-Предприятия.
Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных. Результат с неопределенным типом преобразуется к строковому типу.
4. ExecuteBatch() - выполнить последовательность операторов.
Синтаксис метода такой:
<СтрокаОператоров> - строковое выражение, текст программы на встроенном языке 1С-предприятия.
Возвращает значение логического типа: TRUE, если последовательность операторов выполнена успешно, FALSE, если нет. В OLE Automation TRUE и FALSE имеют соответственно значения -1 (минус единица) и 0.
Пример: создание документа в другой базе, открытой через OLE.
Выгрузка происходит из обработки. ВыбДокумент - документ, выбранный пользователем для выгрузки в другую базу.
Этот пример на 100% рабочий. Используется у меня для выгрузки документов из одной конфигурации в другую.
Сравнение в базе OLE. Константы, перечисления, элементы справочников.
Для сравнения значений агрегатных типов данных в базе, открытой через Оле, использовать стандартный алгоритм с использование знаков равно и неравно (=,<>) не получается. Выход простой. Необходимо перейти от сравнения агрегатных типов данных к простым типам данных - дата, строка и число.
Отсюда вывод: мы сравниваем не сами элементы, а их уникальные атрибуты. Например, для элементов справочника - это код (если он есть), либо наименование. Для перечисления используется метод Идентификатор(). Вот два примера:
В реестре нашла HKEY_LOCAL_MACHINE\SOFTWARE\Classes\V77.Application\ но CLSID и прочего там нет - пусто.
Помогите, времени в обрез. Не пойму что не так.
1с устанавливала обычным способом (не копировала)
П.С. аналогичная обработка только для другого справочника работает отлично.
Когда работаю через удаленный стол. При вызове обработки (прикрепила) первый раз - все норм. На следующий выдает ошибку памяти (фото 1). После нее 1с предприятие вырубается. При повторном входе в 1с ошибка по прежнему остается.
Если после появления ошибки удалить в базе файлы с индексами и перезайти удаленно - работает. НО это не выход. Помогите.
Иногда еще появляется (фото 2), но после него хоть работает.
Капец.
П.С. аналогичная обработка только для другого справочника работает отлично. Но после появления ошибки при вызове новой обработки, тоже перестает работать и выдает туже ошибку (фото).
(37) anit135, переменную COM объекта очищаете в коде после окончания работы с ней?если создаете COM объект при открытии, то очищайте при закрытии, если создаете в процедуре по кнопке, то очищайте в конце процедуры
(41) Заглянул в обработкуКаталогБазыОЛе = "d:\KPI\KNU\";
У меня в подобной строке нет последней наклонной черты. П.С. аналогичная обработка только для другого справочника работает отлично.
не совсем понял, в одной обработке объект создается нормально а в другой обработке на том же компе ошибка?
(42) это в любом случае не может повлиять на создание самого СОМ объекта
в одной обработке объект создается нормально а в другой обработке на том же компе ошибка?Обработки пишу одного вида, копированием первой и внесением изменений для конкретного справочника.
Обработка Организации - работает хорошо, а Активы вылетает при повторном запуске после удаления.
Что бы ею пользоваться и не перегружать удаленку, в отладчике выключаю процес который запускается для Оле базы.
(40) этот код еще не пробовала.
(45) поняла, извините.Не правильно указала, ПС лишнее в том посте.
На рабочем постоянно, выдает ошибку: Неудачная попытка создания объекта (V77.Application) (46) anit135, платформу переустановить пробовали? ОС какая? (49) anit135, аналогичным образом нужно все переменные, которым любые другие объекты ole базы присваиваются очистить.
Т.е.
OLE отказывается работать, когда я пытаюсь запустить обоработку на удаленном рабочем столе (Сервер2003).
Если же я запускаю 1С на своем локальном компе, то все ОК, даже когда обрабатывается информация из баз, лежащих все на том же сервере.
В чем может быть проблема?
Оригинал = СоздатьОбъект("V77.Application");
Каталог = "Z:\ЧЧЧ\Форест 2008 (494) новая\";
Пользователь = "ЧЧЧ";
Пароль = "";
МонопольныйРеж = "";
ЗапускБезЗаставки = 0;
РезультатПодключения = Оригинал.Initialize ( Оригинал.RMTrade , "/d" +
СокрЛП(Каталог) + " /n" + СокрЛП(Пользователь)+
" /p" + СокрЛП(Пароль) + МонопольныйРеж,
?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
Если РезультатПодключения = 0 Тогда
Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
Иначе
Сообщить("Подключение произведено");
КонецЕсли;
вот и выдает мне: Не удалось подключится к указанной базе - проверьте вводные!
Z:\. Это типа сетевой диск у вас ? С локального компа к серванту стучитесь ? Да, Z - это на сервере. И что?Когда я со своего рабочего места туда же стучусь, то работает. А с удаленного рабочего стола - нет Получается, что местонахождение рабочей базы - не имеет значения.
А зависит от того, с какого места сама программа На серваке какая 1с-ина стоит ? С удаленого рабочего стола, сама 1с-ина по этому пути запущается вообще ? В зависимости от версии 77 подключаться через объекты
"V1CEnterprise.Application", "версия независимый ключ (V1CEnterprise)");
"V77.Application", "версия зависимый ключ (V77)");
"V77S.Application", "версия зависимый ключ, SQL версия (V77S)");
"V77L.Application", "версия зависимый ключ, локальная версия (V77L)");
"V77M.Application", "версия зависимый ключ, сетевая версия (V77M)");
**V77.Application
Смените на V1CEnterprise.Application
Или V77S для SQL версии и V77M для сетевой.
Еще попробуйте каталог привести к короткому и англоязычному виду. Засунь свой каталог в . :)
Каталог = """Z:\ЧЧЧ\Форест 2008 (494) новая\""";
Ну почему всегда находится такой человек, как vovan519.
Спасибо, попробую.
Убрала русский язык. Не помогло
Удачи. Все тщетно(((((((.
1. Я убрала русский так (и в пользователе тоже):
Каталог = "Z:\WWW\F\";
Пользователь = "WWW";
2. Ни один из предложенных вариантов не помог, причем, когда я использую V77.Application он достаточно долго ковыряется (примерно также, как в работающем варианте), а потом sorry. Все же остальные варианты отметает мгновенно, сразу после нажатия на кнопку.
Что-то я внимательно посмотрела на окошко "О программе", и узрила, что у меня на сервере
1С:Предприятие 7.7 для SQL
Но все равно не проходит V77S.Application
Ну попробуйте упростить командную строку в initialize, не задавайте параметры пользователя режима пароля. или сведите его к виду (Оригинал.RMTrade ,"/dZ:\WWW\F /M /NWWW","")PS Надеюсь диск Z у Вас подключен и там есть каталог WWW в котором есть каталог F, где лежит Ваша база :-) и у Вас есть права на запись и чтение этого каталога :-)))
ЗЫ /M - это запуск в монопольном режиме, этот параметр нужно убрать если запускаете в разделенном режиме
Пишет: Неудачная попытка создания объекта (V77.Application)
или Неудачная попытка создания объекта (V77S.Application) - смотря что поставлю.
А непосредственно на компе у меня сетевая версия.
Используйте Всегда "V1CEnterprise.Application" .
Уже просто боюсь показаться грубым и невежественным мужланом.Было бы намного конструктивней, если бы все отвечающие узнали о том, в чем собственно у Вас проблема? В инициализации или создании объекта? А то в начале ветки речь о первом, сейчас о втором.
(((((Неудачная попытка создания объекта (V1CEnterprise.Application)
Так что пишет, то и говорю. Не знаю, почему изменилось.
Если бы я еще и программистом была, наверно, не задавала бы такие вопросы.
Попробовала следующее:
1. Обе сравниваемые базы перенесла на сервере в каталог C:\1Cv77. Саму обработку положила туда же.
2. Пробовала
Оригинал = СоздатьОбъект("V1CEnterprise.Application");
и
Оригинал = СоздатьОбъект("V77S.Application");
3. Использовала предложенный вариант:
РезультатПодключения = Оригинал.Initialize (Оригинал.RMTrade ,"/dC:\1Cv77\F /M /NWWW","");
Ответ всегда один:
Оригинал = СоздатьОбъект("V1CEnterprise.Application");
Неудачная попытка создания объекта (V1CEnterprise.Application)
или
Оригинал = СоздатьОбъект("V77S.Application");
Неудачная попытка создания объекта (V77S.Application)
При использовании СоздатьОбъект("V77.Application")
долго думает, потом пишет то же самое:
Оригинал = СоздатьОбъект("V77.Application");
Неудачная попытка создания объекта (V77.Application)
Читайте также: