Как реализовать синхронизацию с 1С:Бухгалтерией 3.0, не снимая её с поддержки?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При автоматизации бизнеса часто возникает ситуация, когда типовая конфигурация, например, 1С:Бухгалтерия 3.0, должна оставаться полностью типовой («на замке») для обеспечения беспроблемного обновления. При этом требуется настроить обмен данными с другой, часто нетиповой или самописной конфигурацией. Разберем подробно, как реализовать программную синхронизацию, используя современные инструменты платформы 1С:Предприятие 8.3.

Метод 1: Использование расширений конфигурации

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

Добавление планов обмена в расширение

Ранее планы обмена нельзя было добавлять в расширения, но теперь это возможно. Мы можем создать собственный план обмена в расширении для 1С:Бухгалтерии. Это позволит нам регистрировать изменения объектов (документов, справочников), которые нужно передать во внешнюю базу (например, в конфигурацию «Аренда»).

HTTP-сервисы и Web-сервисы в расширении

Мы можем создать Web-сервис или HTTP-сервис прямо внутри расширения. Это ключевой момент решения: внешняя система будет обращаться к 1С:Бухгалтерии через этот сервис. Поскольку сервис находится в расширении, основная конфигурация остается нетронутой.

Разберем пример передачи данных через структуру, которую можно сериализовать в строку для передачи через сервис:


// Пример упаковки данных для передачи через сервис
ДанныеДляПередачи = Новый Структура;
ДанныеДляПередачи.Вставить("Номер", Объект.Номер);
ДанныеДляПередачи.Вставить("Дата", Объект.Дата);
ДанныеДляПередачи.Вставить("КонтрагентИНН", Объект.Контрагент.ИНН);

// Сериализация в строку
СтрокаДанных = ЗначениеВСтрокуВнутр(ДанныеДляПередачи);
// Далее отправляем СтрокаДанных через HTTP-запрос или Web-сервис

Метод 2: Интерфейс OData (REST API)

Рассмотрим вариант, когда мы вообще не хотим вносить изменения даже в расширения 1С:Бухгалтерии. В платформе 1С реализован автоматический REST API через интерфейс OData.

Для реализации этого метода выполним следующие шаги:

  1. Опубликуем базу 1С на веб-сервере (Apache или IIS).
  2. В коде конфигурации «Аренда» (отправителя) настроим доступ к нужным метаданным через стандартный интерфейс.
  3. Используем стандартные HTTP-запросы (GET, POST, PATCH) для чтения или записи данных в Бухгалтерию.

Проанализируем преимущество этого способа: он позволяет работать с данными напрямую. Например, чтобы получить список документов из закрытой базы, нам достаточно отправить регламентированный URL-запрос, и 1С вернет данные в формате JSON или XML.

Метод 3: Технология EnterpriseData и Конвертация данных 3.0

Поскольку 1С:Бухгалтерия 3.0 построена на базе БСП (Библиотеки стандартных подсистем), в ней уже заложен механизм универсального обмена данными в формате EnterpriseData. Рассмотрим, как это использовать:

Выясним причину, по которой этот метод удобен: в Бухгалтерии уже есть готовые обработчики для загрузки/выгрузки данных большинства типовых объектов. Нам достаточно в нетиповой конфигурации («Аренда») реализовать логику формирования XML-пакета по правилам EnterpriseData. При этом на стороне Бухгалтерии мы просто создаем настройку синхронизации через «Другую информационную систему».

Для настройки потребуется:

  1. Использовать обработку «Регистрация изменений для обмена» (входит в состав БСП).
  2. Описать правила конвертации в программе «Конвертация данных 3.0».
  3. Загрузить правила в «Аренду», а в Бухгалтерии использовать штатный механизм.

Метод 4: Внешние обработки и регламентные задания

Если заказчик категорически против любых изменений, включая расширения, мы можем воспользоваться механизмом Дополнительных отчетов и обработок.

Разберем по шагам алгоритм реализации:

  1. Создаем внешнюю обработку в 1С:Бухгалтерии.
  2. Внутри обработки прописываем логику подключения к базе «Аренда» (например, через COM-соединение или HTTP-запросы).
  3. Регистрируем эту обработку в справочнике «Дополнительные отчеты и обработки» (раздел Администрирование).
  4. Настраиваем регламентное задание прямо в пользовательском интерфейсе Бухгалтерии, которое будет запускать эту обработку по расписанию.

Пример кода для подключения через COM-соединение, который можно использовать внутри такой обработки:


ПараметрыПодключения = "Srvr=""ServerName"";Ref=""BaseName"";Usr=""Admin"";Pwd=""123"";";
V83COMConnector = Новый COMОбъект("V83.COMConnector");

Попытка
    Соединение = V83COMConnector.Connect(ПараметрыПодключения);
    // Теперь мы можем обращаться к объектам другой базы напрямую
    НовыйДок = Соединение.Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    // ... заполнение реквизитов ...
    НовыйДок.Записать();
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Метод 5: Использование ХранилищаЗначения для сложных структур

Если нам нужно передать сложную коллекцию данных (например, таблицу значений с результатами расчета аренды), проанализируем использование объекта ХранилищеЗначения. Это удобно при передаче данных через Web-сервисы.

Посмотрим на пример упаковки данных:


// На стороне отправителя (база Аренда)
ТаблицаДанных = ПолучитьТаблицуАренды(); // Ваша функция получения данных
Хранилище = Новый ХранилищеЗначения(ТаблицаДанных);
ДанныеДляСервиса = Base64Строка(Хранилище.Получить());

// На стороне получателя (база Бухгалтерия в расширении)
ДвоичныеДанные = Base64Значение(ПринятаяСтрока);
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
ТаблицаРезультат = Хранилище.Получить();

Выводы и рекомендации

Подводя итог, можно уверенно сказать: реализовать синхронизацию с 1С:Бухгалтерией 3.0 без изменения её конфигурации (без снятия с замка) возможно. Выбор метода зависит от ваших сроков и компетенций:

При использовании расширений помните, что вы всегда можете добавить в них Регистры Сведений для хранения связок уникальных идентификаторов (UID) между двумя базами, что значительно упростит сопоставление объектов при повторных обменах.

← На главную