Как создать и провести документ в другой базе 1С с помощью COM-соединения?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

В процессе автоматизации учета часто возникает необходимость передать данные из одной базы 1С в другую. Одним из классических способов решения этой задачи является использование COM-соединения. Давайте разберем, как правильно настроить подключение, создать документ и провести его, избегая типичных ошибок.

1. Организация COM-соединения

Для начала работы нам необходимо создать объект-коннектор. Важно учитывать, что версии платформы в обеих базах должны совпадать, иначе вы столкнетесь с ошибками несовместимости файлов или активных сеансов. Рассмотрим пример универсальной функции для инициализации соединения:


Функция ПолучитьCOMОбъектПоВерсииПлатформы()
    ИмяComОбъекта = "V83.COMConnector";
    COMConnector = Новый COMОбъект(ИмяComОбъекта);
    Возврат COMConnector;
КонецФункции

При подключении к файловой базе крайне важно правильно указать путь. Помните: вы указываете путь к каталогу, в котором лежит база, а не к конкретному файлу 1Cv8.1CD. Если вы укажете путь к файлу, система выдаст ошибку доступа.


СтрокаПодключения = "file='\\server\base\path'; usr='Администратор'; pwd='123';";
ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы();
Попытка
    ComConnection = ComConnector.Connect(СтрокаПодключения);
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

2. Создание документа в целевой базе

После успешного соединения мы можем обращаться к объектам метаданных внешней базы через переменную ComConnection. Мы будем использовать МенеджерДокумента для создания нового элемента. Рассмотрим создание документа РеализацияТоваровУслуг:


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

Документ.Дата = ТекущаяДата();
Документ.Организация = ComConnection.Справочники.Организации.НайтиПоКоду("000000001");
Документ.Контрагент = ComConnection.Справочники.Контрагенты.НайтиПоКоду("БП0005005");
// Заполнение остальных реквизитов...
Документ.Записать(РежимЗаписиДокумента.Запись);

3. Проведение документа

Многие пользователи сталкиваются с тем, что документ записывается, но не проводится. Причиной может быть недостаток прав или необходимость использования специфических методов. Чтобы гарантированно провести документ через COM-соединение, используйте метод Записать с параметром РежимЗаписиДокумента.Проведение, обращаясь к перечислению целевой базы:

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

Важные советы для стабильной работы:

  1. Привилегированный режим: Если при записи или проведении возникают ошибки прав доступа, установите привилегированный режим в целевой базе: ComConnection.УстановитьПривилегированныйРежим(Истина).
  2. Конфликт версий: Если вы видите ошибку о разных версиях платформы, убедитесь, что обе базы используют одну и ту же версию 1С. Разные версии создают несовместимые индексы в файловых базах.
  3. Ресурсы: Помните, что V83.Application запускает полноценный экземпляр 1С, что требует значительной оперативной памяти. Используйте COMConnector для более легких операций.
  4. Альтернативы: Если логика переноса становится сложной (например, создание одного документа на основе десяти исходных), рассмотрите использование Плана обмена или механизмов Конвертации данных (КД 2.0/3.0). Эти инструменты позволяют гибко настраивать правила переноса и трансформации данных без необходимости писать код для каждого документа вручную.

Работая с COM-соединением, всегда помните о надежности: любой сбой сети может привести к разрыву соединения. Старайтесь оборачивать каждую операцию в блоки Попытка...Исключение, чтобы отслеживать ошибки на каждом этапе передачи данных.

← На главную