Как организовать автоматический перенос данных из доработанной 1С:Бухгалтерии в чистую типовую базу

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

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

Рассмотрим, как решить эту проблему, какие механизмы платформы «1С:Предприятие 8» использовать и на какие архитектурные нюансы следует обратить внимание при реализации обмена.

Анализ задачи и ограничений

Проанализируем основные требования и препятствия, возникающие при реализации такого сценария:

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

Оптимальное архитектурное решение: штатный план обмена и XDTO-сериализация

Разберем вариант, который позволяет обойтись минимальным объемом кода и не требует переписывания правил при каждом обновлении. В основе подхода лежит использование механизмов регистрации изменений платформы «1С:Предприятие 8» совместно с сериализацией данных в XML.

Выделим ключевые компоненты этой схемы:

  1. Отслеживание изменений: в базе-источнике используется штатный план обмена (например, Полный) или создается собственный нераспределенный план обмена, в состав которого включаются только типовые объекты. Это позволяет платформе автоматически регистрировать номера сообщений и измененные ссылки в системных таблицах регистрации изменений.
  2. Формирование пакета: регламентное задание в источнике делает выборку изменений с помощью метода ВыбратьИзменения(). В процессе выборки программно проверяется принадлежность объекта к разрешенной организации.
  3. Сериализация данных: объекты типовой структуры преобразуются в XML-пакет с помощью встроенных средств платформы (СериализаторXDTO или ФабрикаXDTO) и передаются в базу-приемник через общую папку, FTP или веб-сервис.
  4. Загрузка и подтверждение: приемник десериализует объекты и записывает их в информационную базу. При успешной загрузке формируется квитанция (подтверждение номера принятого сообщения), на основании которой в источнике автоматически очищаются зарегистрированные изменения.

Реализация программной фильтрации и выгрузки данных

Посмотрим на пример процедуры формирования файла обмена в базе-источнике с фильтрацией по организации и контролем регистрации:


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки);

ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);

ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);

Пока ВыборкаИзменений.Следующий() Цикл
    Данные = ВыборкаИзменений.Получить();
    
    // Проверяем принадлежность объекта к разрешенным организациям
    НужноВыгружать = Истина;
    Если Метаданные.Документы.Содержит(Данные.Метаданные()) ИЛИ Метаданные.Справочники.Содержит(Данные.Метаданные()) Тогда
        Если Данные.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда
            Если Данные.Организация = ФиктивнаяОрганизация Тогда
                НужноВыгружать = Ложь;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Если НужноВыгружать Тогда
        СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные);
    Иначе
        // Пропускаем объект без передачи в сообщение
        ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Данные);
    КонецЕсли;
КонецЦикла;

ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

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

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

  1. Нетиповые реквизиты в типовых объектах: если в базе-источнике в типовые справочники или документы добавлены новые реквизиты непосредственно в дереве метаданных, стандартная ФабрикаXDTO добавит их в XML. При десериализации в чистой типовой базе возникнет ошибка разбора структуры данных. Чтобы избежать этого, нетиповой функционал рекомендуется выносить в расширения конфигурации (CFE) или предварительно очищать XDTO-пакет от расширенных свойств перед записью.
  2. Битые ссылки в реквизитах составного типа: реквизиты типа ЛюбаяСсылка или субконто на счетах бухгалтерского учета могут содержать ссылки на нетиповые справочники. Попадание таких значений в типовую базу приведет к появлению объектов вида «Объект не найден». Рекомендуется выполнять проверку ссылочных типов перед выгрузкой и заменять нетиповые значения на Неопределено или пустые ссылки типовых типов.
  3. Контроль проведения и движений регистров: при переносе документов вместе с движениями возникает риск искажения партионного учета и взаиморасчетов, если часть исходных проводок затрагивала исключенную организацию. Надежнее всего переносить только сами документы без наборов записей и выполнять их перепроведение в базе-приемнике регламентным заданием в хронологическом порядке.

Альтернативные варианты решения

Проанализируем другие доступные способы реализации поставленной задачи:

  1. Синхронизация через универсальный формат (EnterpriseData): типовая «1С:Бухгалтерия предприятия» содержит встроенный план обмена СинхронизацияДанныхЧерезУниверсальныйФормат. Данный механизм поддерживается фирмой «1С» при обновлениях, позволяет штатно наложить фильтр по организациям и обеспечивает совместимость даже при частичном несовпадении версий конфигураций.
  2. Использование стандартного OData / HTTP-сервисов: база-источник может передавать данные напрямую в типовую базу через стандартный REST-интерфейс OData. Это позволяет оставить конфигурацию приемника на 100% типовой поддержке без добавления новых модулей, планов обмена или регламентных заданий.
← На главную