Подключение к 1C 8.3 и 8.2 и работа по COM соединению
Подключение к другой базе 1С 8 по COM-соединению — очень полезная вещь. В основном, эта функция необходима для обмена данными между конфигурациями.
Но по каким-то причинам у новичков часто возникают затруднения с этим несложным процессом. Ниже я подскажу способ решения этой проблемы на примере простой задачки.
Поставлена задача:
Из конфигурации «Документооборот» необходимо подключится к базе УПП:
- найти документ по заранее известному коду, допустим «123»;
- получить статус документа;
- если статус изменился, то поменять и в соответствующем документе «документооборота».
Реализация задачи:
Создание подключения к базе 1C по COM
Первым делом необходимо создать подключение к базе 1С 8.3, рассмотрим функцию, которая вернет подключение по ком-объекту к другой базе для файлового режима 1С:
Функция ПолучитьПодключениеКФайловойБД() Параметры = "File=""C:\1CBase""";Usr=""login"";Pwd=""password"";"; V82COMConnector= Новый COMОбъект("V82.COMConnector"); Попытка Возврат V82COMConnector.Connect(Параметры); Исключение Предупреждение ("Ошибка подключения!"); Возврат Неопределено; КонецПопытки; КонецФункции;
Функция вернет СОМ-объект, с помощью которого можно производить действия с другой базой данных 1С 8.2.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Для клиент-серверного режима строка подключения будет немного отличаться:
Функция ПолучитьПодключениеКСервернойБД() Параметры = "Srvr=""server"";Ref=""BaseName"";Usr=""login"";Pwd=""password"";"; V82COMConnector= Новый COMОбъект("V82.COMConnector"); Попытка Base1С = V82COMConnector.Connect(Параметры); Исключение Предупреждение ("Ошибка подключения!"); КонецПопытки; КонецФункции;
Если Вы подключаетесь к базе на платформе 1C 8.1, то Вам необходимо использовать не «V82.COMConnector», а «V81.COMConnector».
Найти документ 1С по COM
Для примера, пусть номер нужного документа будет «1234», а наш Документ-объект — «ДокументОбъект»:
Соединение = ПолучитьПодключениеКСервернойБД(); СсылкаНаОбъект = Соединение.Документы.РеализацияТоваровУслуг.НайтиПоКоду("1234"); Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда Сообщить("Не найден документ!"); Возврат; КонецЕсли; СтатусДокумента = СсылкаНаОбъект.Статус; Если ДокументОбъект.Статус <> СтатусДокумента Тогда ДокументОбъект.Статус = СтатусДокумента; ДокументОбъект.Записать(); КонецЕсли;
Вот и все: мы подключились по COM, получили нужный документ, прочитали его статус и, если он отличается, установили статус нашему документу.
Другие статьи по 1С:
- Администрирование (обновление 1С, резервные копии и т.д);
- Программирование 1С
- Обучение 1С
Видеоурок по подключению 1С 8.3 через COM:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Санька:
«Функция вернет COM объект» — почему-то я не вижу оператор «Возврат» )
Программист 1С:
Спасибо! Поправили 🙂
Ambabas:
Для серверного варианта тоже поправьте, чтоб люди не путались
Виталий:
Что произойдет, если из базы №1, но на разных клиентах, к базе №2 будут создаваться несколько внешних соединений одновременно или сразу друг за другом, с одними и теми же параметрами подключения (когда логин и пароль базы №2 совпадают)?
Произойдет ли коллизия? Как поведут себя второе и последующие внешние соединения, когда предыдущее еще выполняет обработку?
Кирилл:
Коллизий с ком-соединениями быть не должно.
Другое дело, если вы будете обращаться для записи к одним и тем же ресурсам — могут возникнуть блокировки.
Виталий:
Спасибо за ответ!
А как будут выданы лицензии на платформу и на типовое отраслевое решение Рарус (ТОР)? Одна на несколько активных внешних соединений, или для каждого внешнего соединения отдельно?
Кирилл:
На счет раруса сказать не могу, скорее всего на каждое соединение будет кушать по лицензии.
В обычных платформенных лицензиях, если ничего не поменялось, занимает по лицензии за каждое подключение.
romku:
Есть обработка, устанавливающая com соединение к файловой базе.
Из файловой базы она работает. А из той же базы в клиент-серверном варианте нет.
В чем может быть причина? Платформа 8.3.6.2076
Спасибо.
Сергей:
Вопрос, требуется ли подключение в монопольном режиме для COM Объектов?
И что делать с ошибкой: Ошибка разделения доступа к базе данных ?
Кирилл:
Нет, монопольный доступ не требуется.
В момент подключения вываливается ошибка?
Олеся:
Добрый день!
А если мне заранее не известен документ, как мне получить его тип?
Кирилл:
Олеся, здравствуйте!
Ну без типа документа наверное и не ясно что забирать вообще. Объясните поподробнее не до конца понял вас.
Игорь:
Добрый день.
Такой вопрос.
Подключаемся по COM из базы 1 в базу 2. И нужно по GUID в базе 2 найти документ, например Платежное поручение.
Такое возможно без перебора всех платежных поручений?
Аноним:
Документы.ПлатежноеПоручение.ПолучитьСсылку(ГУИД)
M_Volkov:
Не удается установить Com-соединение если релизы (сборки) платформы разные. Возможность есть, но админские права нужны для перерегистрации comcntr.dll, не давать же их каждому пользователю 1С.
Сергей:
Скажите пожалуйста как сформировать например ОСВ по счету в другой базе и вернуть результат
Ал:
попправь также в серверной функции…возврат же
Кирилл:
а можно ли создать документ через com соединение?
Аноним:
можно
Павел:
Соединение.Документы.РеализацияТоваровУслуг.НайтиПоКоду(«1234»);
//тут не найти по коду, а НайтиПоНомеру(«1234») и желательно указать второй параметр даты из искомого периода
Аноним:
Произошла исключительная ситуация (V83.COMConnector.1): Неправильный путь к файлу ‘1Cv8.cdn’. Схема не зарегистрирована
Не подскажете как с этим бороться?
ИщуОтветы:
Если мы проводим документ в другой базе через COM, а он использует функцию обработки и она не срабатывает. Я знаю если функция общего модуля в 1С8, там галку внешнее соединение ставим и функцию ЭКСПОРТ пишем, а как с обработкой быть?
Аноним:
Почти бесполезная статья, ни запросов, ни структур, одним поиском документов через ком не ограничивается.
А:
Это для совсем новичков , общие принципы.
Вщдеук:
! Соединение.Документы.РеализацияТоваровУслуг.НайтиПоКоду(«1234»)
Аноним:
в документах нет метода найтиПоКоду, нужно использывать найтиПоНомеру