COM соединение 8.3 к 7.7
Добрый день, возникла необходимость подключаться к 7ке 7.70.027 из обработки 8ки 1С:Предприятие 8.3 (8.3.18.1289)
и там и там переписанная торговля, но, полагаю, это к делу относится опосредованно, 8ка крутится на MS SQL Server 2017.
Все действия происходят в системе Windows Server 2012 R2 Standard
7ка прописана как сетевая, я понимаю это как файловая, 7ка копия, кроме этой обработки туда никто не стучится, естественно все открывается, все работает, если тыркаем её как пользователь.
Но когда пытаюсь подключиться программно:
База77 = Новый COMОбъект("V77.Application"); // Этот фрагмент отрабатывает, все ок
База77.Initialize(База77.RMTrade,"","NO_SPLASH_SHOW"); //Ошибка здесь
Управление переходит на 7ку, и в диспетчере появляется фоновый процесс 1C:V7 starter program (multi-user) и больше ничего не происходит, а 8 ка зависает на много времени, потом вывалится с неинформативной ошибкой подключения
То же самое, под тем же пользователем в той же базе, но файловой(я про 8ку), все отрабатывает нормально, выскакивает окошко выбора базы, выбираешь, заходишь и проходит подключение, все ок
Пробовал менять на:
База77.Initialize(База77.RMTrade, "/d" + ПутьКБазе77 + " /n" + Пользователь77 + " /p" + Пароль,"");//,"NO_SPLASH_SHOW");
Прописывая все переменные, но та же фигня
и там и там переписанная торговля, но, полагаю, это к делу относится опосредованно, 8ка крутится на MS SQL Server 2017.
Все действия происходят в системе Windows Server 2012 R2 Standard
7ка прописана как сетевая, я понимаю это как файловая, 7ка копия, кроме этой обработки туда никто не стучится, естественно все открывается, все работает, если тыркаем её как пользователь.
Но когда пытаюсь подключиться программно:
База77 = Новый COMОбъект("V77.Application"); // Этот фрагмент отрабатывает, все ок
База77.Initialize(База77.RMTrade,"","NO_SPLASH_SHOW"); //Ошибка здесь
Управление переходит на 7ку, и в диспетчере появляется фоновый процесс 1C:V7 starter program (multi-user) и больше ничего не происходит, а 8 ка зависает на много времени, потом вывалится с неинформативной ошибкой подключения
То же самое, под тем же пользователем в той же базе, но файловой(я про 8ку), все отрабатывает нормально, выскакивает окошко выбора базы, выбираешь, заходишь и проходит подключение, все ок
Пробовал менять на:
База77.Initialize(База77.RMTrade, "/d" + ПутьКБазе77 + " /n" + Пользователь77 + " /p" + Пароль,"");//,"NO_SPLASH_SHOW");
Прописывая все переменные, но та же фигня
По теме из базы знаний
- Выгрузка документов из УТ 11.4 в УСН 7.7 через COM-соединение
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- Перенос (и исправление) номенклатуры и единиц из (по) 7.7 в 8.3 и из 8.3 в 7.7. COM-объект 8.3 (ОФ)
- Перенос проводок из ЗУП 3.1 в 1С:Бухгалтерию 7.7 по com-соединению (синхронизация)
- Переход с УПП на ERP с использованием COM соединения
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6)Да, оно будет работать, Но, весь функционал обработки работает через сервер не ради удобства), просто обрабатывать всю кипу инфы на клиенте обрабатывать очень долго, такой вариант не оптимальный
ну и конечно переписывать 4к строк обработки не очень хочется)
ну и конечно переписывать 4к строк обработки не очень хочется)
(7)
Но, весь функционал обработки работает через сервер не ради удобства), просто обрабатывать всю кипу инфы на клиенте обрабатывать очень долго
А зачем обрабатывать? Получаете на клиенте все необходимые данные (там же все поля примитивного типа будут) и отправляете на сервер. Далее обрабатываете их на сервере так, как если бы вы их получили на сервере, то есть серверный код менять не требуется.
Процедура Иниц77(Проверить = Ложь)
Сообщить("Запускаем 1С 7.7",СтатусСообщения.Информация);
Попытка
V77 = Новый COMОбъект("V77.Application");
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
Возврат;
КонецПопытки;
Сообщить("1С 7.7 успешно запущена, соединяемся с базой",СтатусСообщения.Информация);
Каталог = СокрЛП(ПутьКИсточнику) + "\";
Стр = """" + Каталог77 + """" + "enterprise /d""" + Каталог + """"
+ ?(Не ЗначениеЗаполнено(Логин) = 0, " /n", "") + """" + СокрЛП(Логин) + """"
+ ?(Не ЗначениеЗаполнено(Пароль) = 0, " /p", "") + """" + СокрЛП(Пароль) + """";
Открыта = V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW");
Если Открыта = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Базу данных открыть не удалось!" + Символы.ПС +
"- Проверьте параметры подключения." + Символы.ПС +
"- Проверьте открывается ли база 1С 7.7 (возможно требуется восстановление индексных файлов, либо она уже открыта монопольно).");
РазорватьСоединение();
Возврат;
КонецЕсли;
Сообщить("Соединение с базой прошло успешно",СтатусСообщения.Информация);
КонецПроцедуры
Показать
Нужно залогиниться на сервер под пользователем, которым запускается сервер 1с.
И запустить 77. Оно само всё пропишет
И да. Если всё это делается в серверном модуле, то кому оно там будет показывать окно выбора базы? О_о
И запустить 77. Оно само всё пропишет
И да. Если всё это делается в серверном модуле, то кому оно там будет показывать окно выбора базы? О_о
самое первое - подключиться сначала пожд этим пользователем явно интерактивно. убрать все настройки инфоокон. а то может подключились а там окно мастера висит.. ждет...
Вообще, нужно, что бы в списке баз 7.7 эта база присутствовала для пользователя windows, под которым запускается сервер 1С 8.
Для анализа поведения запустите 7.7 под любым пользователем windows, удалите базу 1С из списка баз.
Потом запустите 1С 8 под этим же пользователем и попробуйте запустить COM-соединение не с сервера а с клиента.
Вы увидите что происходит при отсутствии базы 7.7 в списке.
(будет висеть окно добавления новой базы в список баз, и пока не нажмете ОК - ничего дальше не произойдёт, а если база будет в списке, то Ваш код отработает без проблем).
При этом, бывают ситуации, что данные о списке баз куда-то пропадают)))
Для решения этой проблемы я использовал батник, который заносил список баз в реестр, и только после этого запускал 1С.
И ещё:
Я удалял файлы 1cv7Cnfg.tip и 1cv7Main.tip из каталога bin 1С 7.7, что-бы исключить отображение "Советов дня", которые так же могут модально висеть и не давать работать, но это для запуска обработок в 7.7 через Планировщик Windows, тут наверно не должно мешать...
Для анализа поведения запустите 7.7 под любым пользователем windows, удалите базу 1С из списка баз.
Потом запустите 1С 8 под этим же пользователем и попробуйте запустить COM-соединение не с сервера а с клиента.
Вы увидите что происходит при отсутствии базы 7.7 в списке.
(будет висеть окно добавления новой базы в список баз, и пока не нажмете ОК - ничего дальше не произойдёт, а если база будет в списке, то Ваш код отработает без проблем).
При этом, бывают ситуации, что данные о списке баз куда-то пропадают)))
Для решения этой проблемы я использовал батник, который заносил список баз в реестр, и только после этого запускал 1С.
И ещё:
Я удалял файлы 1cv7Cnfg.tip и 1cv7Main.tip из каталога bin 1С 7.7, что-бы исключить отображение "Советов дня", которые так же могут модально висеть и не давать работать, но это для запуска обработок в 7.7 через Планировщик Windows, тут наверно не должно мешать...
morin помог, объяснил как базу прописать в реестре, теперь подключение проходит, все ок, Но) дальше следует ошибка создания объекта... и опять тупик, то есть
в 7ке такой справочник есть, если что)
База77 = Новый COMОбъект("V77.Application"); // Этот фрагмент отрабатывает, все ок
База77.Initialize(База77.RMTrade,"","NO_SPLASH_SHOW"); //Здесь теперь тоже все отрабатывает
Фирма77 = База77.CreateObject("Справочник.Фирмы"); // А вот здесь теперь выскакивает ошибка "Неудачная попытка создания объекта"
в 7ке такой справочник есть, если что)
(17)
Если эти строчки и в коде идут так, то в этом нет никакого смысла – аутентификация не выполнена, база не выбрана. Ну и результат База77.Initialize смотрите.
База77.Initialize(База77.RMTrade,"","NO_SPLASH_SHOW"); //Здесь теперь тоже все отрабатывает
Фирма77 = База77.CreateObject("Справочник.Фирмы"); // А вот здесь теперь выскакивает ошибка "Неудачная попытка создания объекта"
Фирма77 = База77.CreateObject("Справочник.Фирмы"); // А вот здесь теперь выскакивает ошибка "Неудачная попытка создания объекта"
Если эти строчки и в коде идут так, то в этом нет никакого смысла – аутентификация не выполнена, база не выбрана. Ну и результат База77.Initialize смотрите.
Последняя проблема была связана с тем, что у пользователя под которым запускается сервер 1с не хватало прав на запуск 7ки)
Так в принципе возможно подключаться к 1с7 (скл) из 1с8 в фоновом режиме или нет? На каком-то форуме читал, что это в принципе не возможно. У меня проблемы с подключением к 1с7 скл в фоновом режиме. К 1с7 фаловой из 1с8 в фоном режиме подключается без проблем. При попытке инициализировать 7.7 выдает ошибку: Ошибка при вызове метода контекста (Initialize): Неизвестная ошибка. База 7.7 на SQL 2008 R2
это у нас не появилось:
А также как минимум DCOM (нужно проверить, за давностью установки, не уверен в надобности).
Пуск - Выполнить - DCOMCNFG.
Там разворачиваем "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Настройка DCOM":
V77.GeneralPropPage
Если их нет, значит у вас что-то с доступом. Настраиваем и начинаем заново установку.
И заработало только при запуске службы "Агент сервера 1С:Предприятия 8.Х (x86-64)" с системной учеткой и только при влюченой галке "Разрешить взаимодествие с рабочим столом"
А также как минимум DCOM (нужно проверить, за давностью установки, не уверен в надобности).
Пуск - Выполнить - DCOMCNFG.
Там разворачиваем "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Настройка DCOM":
V77.GeneralPropPage
Если их нет, значит у вас что-то с доступом. Настраиваем и начинаем заново установку.
И заработало только при запуске службы "Агент сервера 1С:Предприятия 8.Х (x86-64)" с системной учеткой и только при влюченой галке "Разрешить взаимодествие с рабочим столом"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
