Разработка и Конфигурация · 13 мин
Как получить данные из другой базы 1С
Как получить данные из другой базы 1С: COM-соединение, OLE, веб-сервисы, HTTP, планы обмена и файловая выгрузка. Примеры кода, сравнение способов и типичные ошибки.
Задача получить данные из другой базы 1С возникает постоянно: нужно подтянуть остатки из торговой базы в бухгалтерию, синхронизировать справочник контрагентов между филиалами или выгрузить документы в архивную копию. Платформа 1С предлагает несколько принципиально разных механизмов для этого, и выбор зависит от того, где расположены базы, как часто нужен обмен и есть ли возможность дорабатывать конфигурацию на обеих сторонах.
Основные способы: прямое COM-соединение (или OLE для старых версий), обмен через веб-сервисы и HTTP-запросы, типовые планы обмена, универсальный обмен через файлы XML по правилам конвертации данных, а также доступ к внешним источникам данных через ODBC. Каждый вариант имеет свои ограничения по скорости, безопасности и требованиям к инфраструктуре.
Ниже разобраны рабочие сценарии с примерами кода, критериями выбора и типичными ошибками, которые приводят к потере данных или блокировкам базы.
Как выбрать способ подключения к другой базе
Первый критерий — расположение баз. Если обе базы работают в одной локальной сети и на одной версии платформы, COM-соединение даёт прямой доступ к объектам: вы можете выполнять запросы, читать документы и даже создавать записи в удалённой базе так, будто работаете в ней из кода. При этом не нужно ничего дорабатывать в конфигурации источника.
Если базы разнесены географически или одна из них в облаке, COM не подойдёт: он не работает через интернет и требует, чтобы на компьютере, инициирующем соединение, была установлена платформа той же версии. В этом случае стандартное решение — опубликовать на стороне базы-источника HTTP-сервис или веб-сервис и обращаться к нему по защищённому соединению.
Для регулярного обмена между типовыми конфигурациями (например, «Управление торговлей» и «Бухгалтерия предприятия») правильнее всего использовать штатные планы обмена и настройку синхронизации через «Универсальный формат обмена данными» (EnterpriseData). Это избавляет от написания кода и даёт встроенные механизмы разрешения коллизий и контроля версий.
Как выбрать действие
Получение данных через COM-соединение
COM-соединение — классический способ, при котором одна база 1С подключается к другой как внешнее приложение через COM-объект V83.COMConnector. Соединение устанавливается строкой подключения, аналогичной той, что используется для входа в базу: для файловой базы это путь к каталогу, для серверной — имя сервера и имя базы в кластере.
После установки соединения через объект-коннектор доступны все объекты удалённой базы: справочники, документы, запросы. Типичный сценарий — выполнить запрос в удалённой базе и обойти результат циклом, перенося данные в текущую.
Процедура ПолучитьКонтрагентовИзДругойБазы()
Коннектор = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=""Server1C"";Ref=""TradeBase"";Usr=""Обмен"";Pwd=""Пароль"";";
Попытка
Соединение = Коннектор.Connect(СтрокаПодключения);
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование, ИНН ИЗ Справочник.Контрагенты ГДЕ НЕ ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Поиск по ИНН и создание/обновление контрагента в текущей базе
КонецЦикла;
КонецПроцедурыВажное ограничение: через COM нельзя передавать объекты типа «ЗначениеСсылка» между базами напрямую — ссылка удалённой базы бессмысленна в текущей. Сопоставление объектов выполняйте по уникальному идентификатору (Выборка.Ссылка.УникальныйИдентификатор()) или по естественным ключам вроде ИНН, кода или номера документа. Также помните, что COM-соединение создаёт полноценный сеанс в удалённой базе и занимает лицензию.
Обмен через веб-сервисы и HTTP-сервисы
Если база-источник доступна через интернет или политика безопасности запрещает COM, стандартное решение — опубликовать на стороне источника HTTP-сервис. В конфигурации источника создаётся объект «HTTP-сервис» с шаблоном URL, например /data/contragents, и в модуле сервиса пишется код, который формирует ответ — обычно в формате JSON.
На стороне получателя данные запрашиваются через объект HTTPСоединение и HTTPЗапрос, ответ разбирается штатным ПрочитатьJSON. Этот способ не требует совпадения версий платформы, работает через прокси и файрволы и легко защищается: публикация через веб-сервер (IIS или Apache) позволяет включить HTTPS и базовую аутентификацию.
Альтернатива — классические веб-сервисы (SOAP). Они тяжелее в настройке и дают громоздкий XML, но удобны, когда к базе подключаются внешние системы, ожидающие именно WSDL-описание. Для обмена между двумя базами 1С HTTP-сервисы с JSON почти всегда проще и быстрее.
Планы обмена и типовая синхронизация
Планы обмена — встроенный механизм платформы для регулярной репликации данных между базами. Они автоматически регистрируют изменения объектов (это называется регистрацией изменений) и выгружают только изменённое с момента последнего сеанса обмена. В типовых конфигурациях настройка сводится к мастеру: «Синхронизация данных — Настроить синхронизацию», где указывается префикс базы, состав передаваемых данных и расписание.
Транспорт для планов обмена может быть разным: прямое подключение к другой базе через COM или веб-сервис, обмен через каталог, FTP или электронную почту. Для баз в одной сети удобнее прямое подключение — данные передаются без промежуточных файлов. Для облачных и разнесённых баз — обмен через файл в общем каталоге или через сервис 1С:Линк.
Главное достоинство планов обмена — устойчивость к сбоям: если сеанс обмена прервался, при следующем запуске передача продолжится с номера последнего принятого сообщения. Недостаток — необходимость следить за коллизиями (когда один и тот же объект изменён в обеих базах) и периодически проверять очередь неотправленных данных.
Файловый обмен через конвертацию данных
Для разовых переносов — миграции из старой базы, передачи данных аудитору, загрузки начальных остатков — чаще всего используют обработку «Универсальный обмен данными в формате XML» вместе с правилами конвертации, созданными в конфигурации «Конвертация данных». Правила описывают, как объект источника преобразуется в объект приёмника: соответствие реквизитов, алгоритмы поиска, обработчики событий.
Для типовых пар конфигураций (например, перенос из «1С:Торговля и склад 7.7» в «Управление торговлей 11») готовые правила поставляются фирмой «1С» вместе с конфигурацией. Для нестандартных пар правила придётся разрабатывать самостоятельно в «Конвертации данных» — это требует понимания структуры обеих конфигураций, но даёт полный контроль над переносом.
Файловый обмен хорош тем, что его можно выполнять вручную и поэтапно: выгрузили файл, проверили его содержимое, загрузили в копию базы, сверили итоги — и только потом повторили на рабочей базе. Это самый безопасный вариант для ответственных миграций.
- 1Сделайте архивную копию базы-приёмника
- 2Откройте обработку «Универсальный обмен данными в формате XML» в базе-источнике
- 3Загрузите правила конвертации и выберите данные для выгрузки
- 4Выгрузите данные в файл XML и проверьте его размер и содержимое
- 5Загрузите файл в копию базы-приёмника и сверьте контрольные итоги (обороты, количество документов)
- 6При успешной проверке повторите загрузку в рабочую базу
Внешние источники данных и ODBC
Если данные нужны не из другой базы 1С, а из внешней SQL-системы (Microsoft SQL Server, PostgreSQL, MySQL), платформа предлагает объект «Внешние источники данных». Он подключается к таблицам через ODBC-драйвер и отображает их как виртуальные таблицы, доступные в запросах 1С почти как обычные справочники.
Этот способ удобен для чтения данных в реальном времени без промежуточной выгрузки: например, для просмотра остатков из складской системы стороннего производителя. Ограничения существенные: работает в основном в толстом клиенте и на Windows, производительность зависит от драйвера, а запись во внешние таблицы поддерживается не всегда.
Для файловой базы 1С, к которой нужен доступ извне, существует обратный вариант — доступ к данным 1С через ODBC-драйвер, поставляемый с платформой, но он предназначен только для чтения и подходит скорее для построения отчётов сторонними средствами.
Сравнение способов получения данных
Быстро и без доработок источника, но только в локальной сети и при совпадении версий платформы; занимает лицензию
Работают через интернет и любые версии, но требуют доработки конфигурации источника и публикации на веб-сервере
Лучший вариант для регулярной синхронизации типовых баз; требуют настройки и контроля коллизий
Идеальна для разовых миграций с полным контролем; не подходит для оперативного обмена
Для доступа к не-1С базам в реальном времени; ограничения по платформе и производительности
Проверка результата и типичные ошибки
После любого обмена результат нужно проверять количественно и качественно. Минимум — сверить количество перенесённых документов или элементов справочника с источником и сравнить контрольные суммы: итоговые обороты по регистрам, суммы документов за период. Для справочников обязательна проверка на дубли: поиск по наименованию вместо ИНН или уникального идентификатора почти гарантированно создаёт задвоения.
Отдельная группа проблем — права доступа и блокировки. Пользователь, под которым выполняется подключение, должен иметь в удалённой базе права на чтение нужных объектов, но не более того: учётная запись для обмена создаётся отдельная, с минимально необходимыми правами. Длительные транзакции записи при загрузке могут блокировать работу пользователей базы-приёмника, поэтому массовые загрузки планируйте на нерабочее время.
Как проверить результат
Совпадает с количеством выгруженных из источника (с учётом фильтров)
В приёмнике больше объектов — вероятны дубли от повторной загрузки
Итоговая сумма по выборке совпадает с источником до копейки
Расхождения — часть документов потеряна или проведена дважды
Документы ссылаются на существующих контрагентов и договоры
Появились «битые ссылки» — объекты загружены не в том порядке
Нет ошибок записи и отказов в доступе за время обмена
Ошибки прав или блокировок — обмен завершился не полностью
Часто задаваемые вопросы
Можно ли получить данные из базы 1С 7.7 в базу на платформе 8.3?
Да, но COM-соединение между 7.7 и 8.3 напрямую не работает. Используйте OLE-коннектор 7.7 (V77.Application) или, что надёжнее, типовую выгрузку через правила конвертации: для большинства конфигураций 7.7 существуют готовые правила переноса в современные решения.
COM-соединение выдаёт ошибку «Класс не зарегистрирован». Что делать?
Ошибка означает, что на компьютере, где выполняется код, не установлена платформа 1С нужной версии или не зарегистрирована COM-компонента. Установите платформу той же версии, что и у базы-источника, либо выполните регистрацию компоненты вручную через regsvr32 для библиотеки comcntr.dll из каталога bin платформы.
Как получать данные автоматически по расписанию?
Создайте регламентное задание в конфигурации и поместите код обмена в его обработчик. В файловом режиме регламентные задания выполняются только при запущенном сеансе с соответствующей настройкой, поэтому для регулярного автоматического обмена надёжнее клиент-серверный вариант или запуск через планировщик Windows с ключом /Execute.
Что быстрее: COM или веб-сервис?
При малых объёмах разница незаметна. При передаче больших выборок COM обычно быстрее за счёт отсутствия сериализации в XML или JSON, но проигрывает в стабильности: обрыв COM-соединения требует полного переподключения. Для передачи тысяч документов через интернет выгоднее HTTP-сервис с постраничной выдачей данных порциями.
Как не потерять данные при обрыве соединения во время загрузки?
Оборачивайте загрузку порции данных в транзакцию (НачатьТранзакцию / ЗафиксироватьТранзакцию) и ведите журнал обработанных объектов — например, записывайте идентификаторы загруженных документов в регистр сведений. Тогда после сбоя обмен можно перезапустить, и он продолжится с места обрыва без дублей.
Можно ли читать данные из другой базы без установки соединения, например из файла базы напрямую?
Прямое чтение файла 1Cv8.1CD сторонними средствами платформой не поддерживается и может повредить базу при одновременной работе пользователей. Используйте только штатные механизмы: COM, сервисы, планы обмена или выгрузку в файл. Для аналитического чтения существует отдельный ODBC-драйвер, но он работает только в режиме чтения и с остановленными сеансами.
Что важно запомнить
Выбор способа получения данных из другой базы 1С определяется расположением баз и частотой обмена: COM — для локальной сети, HTTP-сервисы — для обмена через интернет, планы обмена — для регулярной синхронизации, конвертация данных — для разовых миграций. Всегда сопоставляйте объекты по уникальным идентификаторам, работайте под отдельной учётной записью с минимальными правами и проверяйте результат по контрольным итогам на копии базы перед запуском в рабочей среде.