К статье
Практический материал

Разработка и Конфигурация · 13 мин

Как создать документ в другой базе 1С

Как создать документ в другой базе 1С: COM-соединение, веб-сервисы, HTTP и обмен EnterpriseData. Примеры кода, проверка результата, типичные ошибки.

Задача создать документ в другой базе 1С возникает при интеграции учётных систем: например, заказ из базы «Управление торговлей» должен автоматически появляться в «Бухгалтерии», или центральная база собирает накладные из филиалов. Универсального встроенного механизма «создать документ в чужой базе» в платформе нет — для этого используют один из программных способов обращения к внешней информационной базе.

Основные варианты: COM-соединение (только Windows), веб-сервисы и HTTP-сервисы, опубликованные на стороне базы-приёмника, стандартный обмен через формат EnterpriseData, а также план обмена с выгрузкой XML. Выбор зависит от того, работают ли базы в одной сети, какая у вас версия платформы, нужна ли гарантированная доставка и кто отвечает за сопровождение.

Ниже разобраны практические способы с примерами кода, условиями выбора, проверкой результата и типичными ошибками. Материал ориентирован на разработчиков и администраторов 1С, имеющих доступ к конфигуратору хотя бы одной из баз.

Выбор способа: что учесть до начала разработки

Прежде чем писать код, ответьте на четыре вопроса. Первый — топология: базы в одной локальной сети или разделены интернетом. COM-соединение работает только внутри одной сети и требует установленной платформы на компьютере, откуда выполняется подключение. Второй — режим работы: если база-приёмник работает в клиент-серверном варианте на Linux или обслуживается франчайзи без вашего доступа к серверу, COM не подойдёт.

Третий вопрос — требования к надёжности. Если документ обязан быть доставлен даже при недоступности второй базы, нужны очереди и повторные попытки: это умеют планы обмена и механизмы на основе регистрации изменений. Прямое обращение (COM, HTTP) при недоступности приёмника просто вернёт ошибку, и логику повторов придётся писать самостоятельно.

Четвёртый вопрос — кто сопровождает приёмник. Веб-сервис или HTTP-сервис нужно создать и опубликовать в базе-приёмнике, а значит, потребуется доступ к её конфигуратору и веб-серверу (IIS или Apache). Если влиять на приёмник нельзя, остаются варианты через файлы обмена или универсальные механизмы вроде формата EnterpriseData, если он поддерживается конфигурацией.

Маршрут решения

Как выбрать способ

Базы в одной сети, Windows, нужна быстрая разовая интеграцияИспользуйте COM-соединение (V83.COMConnector)
Приёмник доступен по HTTP/HTTPS, нужна независимость от ОССоздайте HTTP-сервис или веб-сервис в базе-приёмнике
Типовые конфигурации с поддержкой EnterpriseDataНастройте обмен через универсальный формат
Нужна гарантированная доставка и работа при разрывах связиНастройте план обмена с регистрацией изменений и регламентной выгрузкой

Способ 1. COM-соединение: прямое создание документа

COM-соединение — самый «прямой» способ: из кода одной базы вы открываете сеанс с другой базой и работаете с её объектами почти как с локальными. Подключение выполняется через объект V83.COMConnector, после чего вызывается метод Connect со строкой соединения, аналогичной строке запуска базы.

Для файловой базы строка подключения выглядит как File="C:\Bases\Trade";Usr="Администратор";Pwd="123", для серверной — Srvr="Server1";Ref="Trade";Usr="...";Pwd="...". После подключения доступен привычный объектный интерфейс: менеджеры документов, справочников, запросы.

Пример создания документа «Реализация товаров и услуг» в другой базе:

Коннектор = Новый COMОбъект("V83.COMConnector");

Соединение = Коннектор.Connect("File=""D:\Bases\UT"";Usr=""Обмен"";Pwd=""pass""");

Док = Соединение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

Док.Дата = ТекущаяДата();

Док.Организация = Соединение.Справочники.Организации.НайтиПоНаименованию("ООО Ромашка");

Док.Комментарий = "Создан из внешней базы";

Док.Записать(Соединение.РежимЗаписиДокумента.Проведение);

Ключевое ограничение: через COM нельзя передавать объекты между базами напрямую — ссылка на справочник одной базы бессмысленна в другой. Поэтому сопутствующие данные (контрагентов, номенклатуру) ищут по наименованию, коду или GUID, либо создают заранее. Также учитывайте, что COM-соединение создаёт полноценный сеанс и потребляет лицензию.

Способ 2. HTTP-сервис или веб-сервис в базе-приёмнике

Более надёжная и переносимая архитектура — опубликовать в базе-приёмнике HTTP-сервис (или классический SOAP веб-сервис), который принимает данные документа и создаёт его внутри своей базы. Источник обращается к сервису обычным HTTP-запросом, что работает из любой ОС и через интернет.

В конфигураторе приёмника добавьте объект «HTTP-сервис», создайте шаблон URL, например /documents, и метод POST. В обработчике разберите тело запроса (обычно JSON), найдите или создайте связанные объекты и запишите документ:

Функция СоздатьДокументPOST(Запрос)

Данные = ПрочитатьJSON(Запрос.ПолучитьТелоКакПоток());

Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

Док.Дата = Данные.Дата;

Док.НомерВходящегоДокумента = Данные.Номер;

// поиск контрагента по ИНН, номенклатуры по коду...

Док.Записать(РежимЗаписиДокумента.Проведение);

Ответ = Новый HTTPСервисОтвет(200);

Ответ.УстановитьТелоИзСтроки("OK:" + Строка(Док.Ссылка.УникальныйИдентификатор()));

Возврат Ответ;

КонецФункции

После этого сервис нужно опубликовать на веб-сервере (Apache или IIS) через диалог «Публикация на веб-сервере» в конфигураторе. Источник вызывает сервис через HTTPСоединение и HTTPЗапрос. Обязательно включите аутентификацию: как минимум базовую по пользователю базы, а лучше — отдельный токен в заголовке и HTTPS.

Способ 3. Обмен через EnterpriseData и планы обмена

Если обе базы — типовые конфигурации фирмы «1С» (Бухгалтерия, Управление торговлей, ERP, ЗУП), в большинстве из них встроена поддержка универсального формата EnterpriseData. Обмен настраивается без программирования: в разделе «Синхронизация данных» создаётся настройка, указывается способ подключения (через каталог, FTP, веб-сервис или прямое подключение), и документы выбранных видов начинают переноситься автоматически.

Преимущество подхода — готовые правила сопоставления справочников, механизмы разрешения коллизий, регистрация изменений и повторная отправка при сбоях. Недостаток — переносятся только те виды документов и в тех сочетаниях конфигураций, которые предусмотрены форматом, а тонкая настройка требует изучения правил конвертации.

Для нестандартных конфигураций остаётся классический план обмена: вы создаёте план обмена, включаете в состав нужные документы, настраиваете правила регистрации и пишете обработчик выгрузки/загрузки (обычно через «Конвертацию данных»). Это самый трудоёмкий, но и самый управляемый вариант для сложных распределённых систем.

Сравнение способов

COM-соединение

Быстро реализовать, но только Windows и одна сеть; потребляет лицензию; нет повторных попыток

HTTP/веб-сервис

Кроссплатформенно, работает через интернет; требует публикации и разработки на стороне приёмника

EnterpriseData

Без программирования для типовых конфигураций; ограничен предусмотренными сценариями обмена

План обмена

Гарантированная доставка и очереди; самая высокая трудоёмкость настройки

Сопоставление данных: ключевая проблема интеграции

Создать сам документ несложно — сложно заполнить его корректными ссылками на справочники другой базы. Контрагент «ООО Ромашка» в источнике и приёмнике — это разные объекты с разными ссылками. Есть три рабочих подхода к сопоставлению.

Первый — поиск по ключевым реквизитам: контрагентов по ИНН и КПП, номенклатуру по коду или артикулу, организации по наименованию. Просто, но чувствительно к качеству данных: дубли и ошибки в ИНН ломают сопоставление. Второй — хранение соответствия в регистре сведений: при первой выгрузке объекта вы сохраняете пару «ссылка источника — ссылка приёмника» и дальше используете её. Это самый надёжный вариант для постоянной интеграции.

Третий — синхронизация по GUID: при переносе объекта в приёмник вы принудительно устанавливаете ему тот же уникальный идентификатор, что в источнике. Тогда ссылки совпадают, и поиск не нужен. Минус — при коллизии GUID (объект с таким идентификатором уже существует) запись завершится ошибкой, поэтому способ годится, когда приёмник изначально заполняется из источника.

Типичные ошибки
01
Передача ссылки из одной базы в другую напрямую — в приёмнике она превращается в «битую» ссылку; передавайте GUID, код или ИНН и ищите объект на месте
02
Отсутствие обработки ошибок: при недоступности базы документ теряется молча — логируйте ошибки и ставьте документ в очередь повторной отправки
03
Создание документа без контроля дублей — при повторной выгрузке появляются двойники; используйте уникальный номер источника или GUID как признак уже загруженного документа
04
Интеграция под пользователем с полными правами — компрометация пароля даёт полный доступ к базе; создайте ограниченного пользователя
05
Игнорирование движений: документ записан, но не проведён, и отчёты его не видят — явно вызывайте Записать с режимом Проведение и обрабатывайте ошибки проведения

Проверка результата и отладка

После создания документа проверьте три вещи. Во-первых, документ реально записался: метод Записать() в попытке-исключении вернёт текст ошибки, если что-то пошло не так (незаполненные обязательные реквизиты, нарушение прав). Во-вторых, документ проведён, если это требуется: проверка Док.Проведен после записи. В-третьих, связанные объекты найдены правильно — откройте документ в приёмнике и убедитесь, что контрагент и номенклатура соответствуют ожиданиям.

Для отладки HTTP-сервиса временно добавьте в ответ расширенную информацию: номер созданного документа, список незаполненных полей, предупреждения. Ведите в источнике журнал интеграции — регистр сведений или текстовый лог с датой, документом, результатом и текстом ошибки. Это окупается при первом же инциденте «документ не доехал».

Полезная практика — режим тестового прогона: сервис проверяет данные и возвращает результат валидации, не записывая документ. Так можно безопасно отладить сопоставление справочников на реальных данных, не засоряя учётную базу.

Контрольные точки

Как проверить результат

Запись документа
Норма

Записать() выполнен без исключения, ссылка присвоена

Тревожный признак

Исключение с текстом про обязательные реквизиты или права

Проведение
Норма

Свойство Проведен = Истина

Тревожный признак

Документ записан, но не проведён — ошибки в движениях или остатках

Сопоставление справочников
Норма

Контрагент и номенклатура в документе совпадают с источником по смыслу

Тревожный признак

Подставлены пустые ссылки или не те элементы

Дубли
Норма

Повторная отправка не создаёт второй документ

Тревожный признак

Каждая выгрузка плодит копии

Ограничения и когда обратиться к специалисту

Самостоятельная интеграция оправдана, когда сценарий простой: один-два вида документов, стабильные конфигурации, есть доступ к обеим базам. Границы разумного — это интеграция с самописной конфигурацией без документации, обмен с высокой нагрузкой (тысячи документов в час), требования к транзакционности «всё или ничего» между базами и сценарии с распределёнными филиалами.

В таких случаях ошибки проектирования обходятся дороже разработки: рассинхронизация остатков, дубли первички, потерянные документы. Здесь имеет смысл привлечь специалиста по интеграциям 1С или использовать готовые шины и брокеры сообщений (например, RabbitMQ с обработчиками на стороне 1С), где вопросы гарантированной доставки решены на уровне инфраструктуры.

Итог

Что важно запомнить

Документ в другой базе создают через COM, HTTP/веб-сервис или обмен данными. Главная сложность — не сама запись, а сопоставление справочников и контроль дублей. Выбирайте способ по топологии сети и требованиям к надёжности, используйте отдельного пользователя с ограниченными правами и обязательно логируйте результат каждой отправки.

Частые вопросы

Можно ли создать документ в другой базе без программирования?

Да, если обе базы — типовые конфигурации с поддержкой синхронизации данных (EnterpriseData). Настройка выполняется через мастер в разделе «Синхронизация данных» и не требует написания кода, но переносятся только предусмотренные форматом виды документов.

Почему COM-соединение выдаёт ошибку «Класс не зарегистрирован»?

Объект V83.COMConnector существует только на компьютере с установленной платформой 1С, причём разрядность COM-объекта должна совпадать с разрядностью процесса, который его вызывает. Если код выполняется на сервере 1С под Linux, COM недоступен в принципе — используйте HTTP-сервисы.

Как избежать дублей при повторной отправке документа?

Передайте в приёмник уникальный идентификатор документа источника (GUID или номер с префиксом базы) и перед созданием проверяйте, нет ли уже документа с таким признаком. Альтернатива — хранить таблицу соответствия «документ источника — документ приёмника» в регистре сведений.

Что надёжнее: веб-сервис или HTTP-сервис?

Функционально они равнозначны для этой задачи. HTTP-сервисы проще в отладке и естественно работают с JSON, SOAP веб-сервисы дают формальное описание интерфейса (WSDL), что удобно при интеграции с внешними системами на других платформах. Для связки «1С — 1С» чаще выбирают HTTP-сервис.

Документ создаётся, но не проводится — в чём причина?

Проведение может не выполняться из-за нехватки остатков на складе, закрытого периода, незаполненных реквизитов, влияющих на движения, или прав пользователя. Записывайте документ в попытке-исключении, читайте текст ошибки и проверяйте сообщения пользователю — они содержат конкретную причину отказа.

Можно ли передавать табличную часть документа через HTTP-сервис?

Да. Сериализуйте табличную часть в массив структур JSON (товар, количество, цена, сумма), передайте в теле POST-запроса, а в обработчике сервиса заполните табличную часть документа циклом. Идентификаторы номенклатуры передавайте как код или GUID для поиска в приёмнике.