Как сопоставить документы между 1С:УНФ и 1С:Бухгалтерией во Фреше без COM-соединения

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

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

Метод 1. Сверка через промежуточные файлы с универсальным сопоставлением

Если мы не можем подключиться к базе напрямую, мы всегда можем обмениваться данными через файлы (например, XML, JSON или обычные таблицы Excel). Разберем по шагам алгоритм создания такой системы сверки:

  1. В обеих базах (УНФ и БП) создается внешняя обработка или расширение, которое умеет выгружать реестр документов в файл.
  2. Для сопоставления используется УИД (уникальный идентификатор ссылки), если данные синхронизируются штатными средствами. Если же документы вводились вручную, сопоставление выполняется по составному ключу: Дата + Номер + Сумма + Контрагент.
  3. В базе-приемнике создается интерфейс, где пользователь выбирает файл из второй базы, а программа автоматически выполняет «маппинг» полей.

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


ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("УИД", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(36)));
ТаблицаДанных.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанных.Колонки.Добавить("Номер", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(20)));
ТаблицаДанных.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));

Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
    НоваяСтрока = ТаблицаДанных.Добавить();
    НоваяСтрока.УИД = Строка(Выборка.Ссылка.УникальныйИдентификатор());
    НоваяСтрока.Дата = Выборка.Дата;
    НоваяСтрока.Номер = Выборка.Номер;
    НоваяСтрока.Сумма = Выборка.СуммаДокумента;
КонецЦикла;

Основная идея этого подхода — использование правил сопоставления в табличном документе. Выясним причину, почему это удобно: программисту не нужно переписывать код при изменении структуры метаданных. Достаточно в пользовательском режиме указать, что поле СуммаДокумента в УНФ соответствует полю Сумма в БП.

Метод 2. Использование протокола OData (REST API)

В 1С:Фреш стандартно поддерживается протокол OData. Это позволяет одной базе «постучаться» в другую через HTTP-запрос и получить данные в формате JSON или XML без использования COM. Посмотрим на пример реализации HTTP-запроса к облачной базе:


Соединение = Новый HTTPСоединение("1cfresh.com", 443, Логин, Пароль, , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/a/pb/12345/odata/standard.odata/Document_РеализацияТоваровУслуг?$format=json&$select=Date,Number,Amount");

Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    ДанныеБП = ПрочитатьJSON(ЧтениеJSON);
    // Далее выполняем сопоставление с локальной таблицей
КонецЕсли;

Важный момент при работе с OData: в облаке должен быть создан пользователь с правами Удаленный доступ (OData). Этот метод позволяет выполнять сверку «на лету» без промежуточных файлов, что значительно ускоряет процесс, если объем документов составляет около 1000 в месяц.

Метод 3. Сверка через реестры документов в Excel (Power Query)

Если бюджет на разработку ограничен, проанализируем ситуацию использования внешних инструментов. В обеих базах формируются стандартные отчеты Реестр документов. Далее эти реестры загружаются в Excel.

Использование инструмента Power Query позволяет автоматизировать процесс:

Метод 4. Внешняя база данных (SQL) как буфер

Рассмотрим более сложный, но производительный вариант. Данные из локальной УНФ и облачной БП выгружаются во внешнюю базу данных (например, PostgreSQL или MS SQL). Выясним преимущества этого подхода:

Во-первых, это позволяет хранить историю изменений и отслеживать, когда именно возникло расхождение. Во-вторых, SQL-запросы позволяют мгновенно сопоставлять миллионы записей. Однако для 1000 документов в месяц этот метод может быть избыточным («стрельба из пушки по воробьям»).

Технические нюансы идентификации документов

При сверке данных мы часто сталкиваемся с проблемой «разных» номеров (префиксы баз, ведущие нули). Чтобы сверка была точной, рекомендуем придерживаться следующих правил:

  1. Синхронизация по УИД: Это самый надежный способ. Если документ был перенесен из УНФ в БП штатным обменом, его UUID остается неизменным.
  2. Очистка номеров: При сопоставлении по номеру используйте функцию ОбщегоНазначенияКлиентСервер.ПолучитьНомерНаПечать(Номер) или собственные алгоритмы удаления префиксов.
  3. Допуски по времени: Иногда время документа в разных базах может отличаться на несколько секунд. При сопоставлении по дате лучше использовать сравнение по НачалоДня(Дата).

В завершение разберем, как реализовать простейший алгоритм сравнения двух таблиц значений (ТЗ_УНФ и ТЗ_БП) непосредственно в коде 1С:


Для Каждого СтрокаУНФ Из ТЗ_УНФ Цикл
    ПараметрыОтбора = Новый Структура("Номер, Дата, Сумма", СтрокаУНФ.Номер, СтрокаУНФ.Дата, СтрокаУНФ.Сумма);
    НайденныеСтроки = ТЗ_БП.НайтиСтроки(ПараметрыОтбора);
    
    Если НайденныеСтроки.Количество() = 0 Тогда
        Сообщить("Документ " + СтрокаУНФ.Номер + " не найден в БП или суммы различаются!");
    КонецЕсли;
КонецЦикла;

Резюмируя: наиболее перспективным и современным методом для работы с облаком 1С:Фреш является использование OData в сочетании с JSON. Если же требуется максимально простое решение, которое может поддерживать сам пользователь, — выбирайте вариант с загрузкой данных из файлов реестров с гибкой настройкой правил сопоставления в табличном документе.

← На главную