Что делать? Переводить пока не планируем, а обмен нужен в реальном времени? Так мало того, у нас новый 64-битный сервер!
Не беда, есть решение!
Справка
OLE (англ. Object Linking and Embedding) — технология связывания и внедрения объектов в другие документы и объекты, разработанная корпорацией Майкрософт.
В 1996 году Microsoft переименовала технологию в ActiveX.
Более подробно пишет Википедия: https://ru.wikipedia.org/wiki/Object_Linking_and_Embedding
Вступление
Сейчас у вас есть база на платформе 1С 8.Х, а также база на платформе 1С 7.7. И вам нужно их подружить.
В интернете есть информация по взаимодействию, но вся она разбросана. И мало того никто не учитывает, что сейчас сервера идут 64-битные, а клиенты 32-битные.
Итак давайте знакомить платформу 8 с 7. Для этого нам нужно использовать OLE Automation сервер.
По этому вопросу уже есть готовая публикация, привожу для примера: //infostart.ru/public/57224/
Подготовка технической части
Будем рассматривать пример на базе Windows Server 2012 R2, где уставновлена платформа 1С 8.Х для сервера 64-битная, для клиента 32-битная. Также нужно установить последний релиз платформы 1С 7.7 у нас 7.70.027.
Рабочая база 1С 7.7 расположена на другом сервере, вариант установки SQL.
Поэтому на нашем сервере также выбираем вариант установки SQL.
Установка 1С 7.7:
Устанавливаем под администратором:
Перезагружаемся.
Далее чтобы 1С 7.7 прописалась в реестре важно запустить ее также под администратором, создать пустую базу и зайти в нее.
Перезагружаемся.
Так же скорее всего вам понадобится подменить в папке (BIN) «BkEnd.dll» и добавить туда пустой файл «OrdNoChk.prm» (файлы внизу публикации).
Далее важно, чтобы у вас в реестре появились записи:
V77.GeneralPropPage
V77.Application
V77S.Application и прочие.
А также как минимум DCOM (нужно проверить, за давностью установки, не уверен в надобности).
Пуск — Выполнить — DCOMCNFG.
Там разворачиваем «Службы компонентов» — «Компьютеры» — «Мой компьютер» — «Настройка DCOM»:
V77.GeneralPropPage
Если их нет, значит у вас что-то с доступом. Настраиваем и начинаем заново установку.
Настройка Windows Server 2012 R2
Для открытия 1С 7.7 по OLE на сервере потребует больше, чем по умолчанию, памяти для запуска приложений в «не интерактивном» режиме (т.е. в регламентном задании) для этого в реестре нужно изменить/добавить запись:
HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control>Session Manager>SubSystems
Меняем значение Windows, было:
%SystemRoot%system32csrss.exe ObjectDirectory=Windows SharedSection=1024,3072,512
Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16
SharedSection=1024,3072,512
Вот здесь редактируем 3 значение, мы поставили 5 мб (было 512 кб). Важно чтобы 2 и 3 значение не превысило 48 мб.
Этот параметр отвечает в Windows за «кучу» для неинтерактивного сеанса.
Про изменение «кучи» подробно написали в статье: http://www.techarp.com/showarticle.aspx?artno=238&pgno=1
Первый нюанс с «кучей» решили, теперь осталось разобраться с правами у пользователя, который запускает службу «Агент сервера 1С:Предприятия 8.Х (x86-64)»
Если у вас служба настроена в таком режиме, то потребуется прописать в реестре путь до базы 1С 7.7:
KEY_USERSS-1-5-18Software1C1Cv77.7Titles
Для каждой новой базы, нужно создать новую запись(New->String value или Создать->Строковый параметр):
Name: Путь_и_Имя_базы
Type: REG_SZ
Data: Ваше_название_для_базы
В итоге код для системной учетной записи заработает.
Но в этом случае сеть не доступна (нам такой вариант не подходит).
В таком случае нужно выбрать конкретного пользователя и проверить чтобы у него был доступ на сеть!
Так же у этого пользователя должна быть прописана база в реестре или вы можете зайти интерактивно под этим пользователем и добавить в список нужную сетевую базу 1С 7.7.
Делаем регламентное задание
Систему к работе мы подготовили теперь дело за малым написать код!
Создаем регламентное задание и определяем процедуру в которой записан код:
Попытка
v7=Новый COMОбъект("V77.Application");
Исключение
v7=Новый COMОбъект("V1CEnterprise.Application");
КонецПопытки;
КаталогБазыОЛе = "\ВашСерверD$КаталогНаДискеДВашейБазы";//пример сетевого каталог на диске D
ПользовательОле = "Пользователь1С8СозданныйВ1С7";
ПарольОле = "ПарольПользователяОле";
МонопольныйРежимOLE = "";
//МонопольныйРежимOLE = " /m";
//для немонопольного запуска указать пустую строку!
ЗапускБезЗаставки = 1;
// для появления заставки поставьте "0"
РезультатПодключения = v7.Initialize (v7.RMTrade,"/d"+Сокрлп(КаталогБазыОле)+" /n"+Сокрлп(ПользовательОле)+" /p"+Сокрлп(ПарольОле)+МонопольныйРежимOLE, ?(ЗапускБезЗаставки=1,"NO_SPLASH_SHOW",""));
Если РезультатПодключения=1 Тогда
Сообщить("Соединение установлено");
Иначе
Сообщить(""+КаталогБазыОле);
Сообщить("Соединение не установлено");
КонецЕсли;
Все, подключение работает!
Теперь можете написать код в 1С 7.7 при старте системы или опишите на языке 1С 7.7 нужный алгоритм прямо в 1С 8.Х.
Однозначно +
(1) almas, все получилось с первого раза? А то может пару нюансов не отразил в статье, пол года назад проект делал.
Поймал аналогичную проблему, не делал ничего из написанного. После того как установил 8.3.7.1776 проблема исчезла. Похоже, плавающий глюк в релизах платформы.
(3) zombi81, о каком глюке идет речь?
Делал все, как написано здесь, но проблема так и не решилась…
(5) Гриффин, значит не все или прав нет у вас.
Конкретно что не вышло?
V77.Application (и все прочие 77) не работают на сервере для второго коннекта, виснет подключение. Это не зависит от базы или пользователя. Так что если у вас несколько регламентных заданий для синхронизации с разными базами или с разными данными, то как только очередное регламентное задание «пересечется» по времени с уже выполняющимся — будет «зависон». Можно решить очередью, когда очередное задание по синхронизации ждет, когда выполнится активное.
(7) этот момент я не смогу продиагностировать, но у нас была 1 база 7.7 и было одно регламентное задание.
В реестре записи про 1с появились, но в dcom — нет, переустановки и перегрузки не помогают.
При этом в обычном приложении (и в файловом и в кдиент-серверном) и в управляемом файловом com-соединение с 7.7 работает, проблемы только в управляемом клиент-серверном:(
Что делать?
(9) обновлять конфигурацию. У вас явно ошибки в конфе. К решению задачи это не относится!
(10) Да нет, разобралась, вылетело из головы что dcomcfg надо с ключом /32 запускать — там все настройки для 7.7 на месте…
(11) т.е. «Пуск — Выполнить — DCOMCNFG» запускает 64-битный конфиг?
(12) Да
Странно, у меня при вызове OLE в функции с директивой НаСервере сразу выдает ошибку
V7 = New COMObject(«V77.Application»);
по причине:
-2147467262(0x80004002): Интерфейс не поддерживается
Хотя все тоже самое с директивой НаКлиенте отрабатывает отлично
Релиз 8.3.11.3034
(14) вероятно на сервере нет 1С 7.7.
(15) Клиент запускаю на сервере (в сессии удаленного рабочего стола). 1С 7.7 на сервере установлен. Функция с директивой НаКлиенте отрабатывает без вопросов, а вот таже функция с директивой НаСервере уже выдает ошибку.
(16) тогда пишите по пунктам что сделали из статьи и чего не сделали.
Плюс все ваше окружение!
Используйте выгрузку-загрузку в файл, и не связывайтесь с этими кривыми реализациями )
(18) так для этого и нужен этот алгоритм, чтобы запустить 1С 7.7 из 8.3 и загрузить файл КД2. Хотя мой коллега из-за не знания КД2 переписал полностью обмен на ком. Так что вы как-то не зная область комментируете!