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

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

При консолидации данных из нескольких информационных баз 1С в одну общую базу (например, при слиянии филиалов или ведении управленческого учета на основе бухгалтерских данных) часто возникает задача переноса первичных документов не «как есть», а в виде ручных бухгалтерских операций (ОперацияБух). Основная сложность здесь заключается в предотвращении дублирования справочников (Контрагенты, Номенклатура, Склады) и правильном формировании проводок. В этой статье мы подробно разберем, как реализовать такой перенос, используя регистр ПубличныеИдентификаторы и инструменты конвертации данных.

Постановка задачи и выбор стратегии синхронизации

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

Разберем основные подходы к синхронизации:

  1. Синхронизация по ИНН/КПП для контрагентов: Это базовый уровень, но он не решает проблему со складами, номенклатурными группами и статьями затрат.
  2. Использование регистра Публичные идентификаторы: Это профессиональный подход. При загрузке система обращается к регистру, где хранится связь: "ID источника + Имя базы-источника -> Ссылка в текущей базе".
  3. Стандартный механизм БСП: Использование регистра СоответствияОбъектовИнформационныхСистем. Это более современный аналог самописных регистров идентификаторов, встроенный в Библиотеку Стандартных Подсистем.

Трансформация Документа в Операцию: Логика формирования проводок

Проанализируем процесс преобразования документа РеализацияТоваровУслуг или ПоступлениеТоваровУслуг в объект ОперацияБух. В отличие от обычного документа, операция не имеет табличных частей «Товары» или «Услуги». Все данные должны быть преобразованы в записи регистра бухгалтерии Хозрасчетный.

Для этого в правилах конвертации объектов (ПКО) необходимо настроить программное сворачивание табличных частей. Рассмотрим пример логики на языке 1С:


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

Для Каждого СтрокаТЧ Из ТаблицаПроводок Цикл
    НоваяПроводка = РегистрБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    // Заполнение счетов: Дт 62.01 Кт 90.01.1
    // Заполнение субконто с поиском через ПубличныеИдентификаторы
    // Заполнение сумм и количеств
КонецЦикла;

Реализация поиска через Публичные идентификаторы

Выясним, как заставить систему "смотреть" в регистр перед созданием нового элемента справочника. В «Конвертации данных» для этого используется обработчик ПоляПоиска. Однако, если мы используем самописный регистр ПубличныеИдентификаторы, надежнее прописать поиск в обработчике ПриЗагрузке для ПКО справочника.

Рассмотрим алгоритм поиска:

  1. Получаем из входящего XML уникальный идентификатор (UID) объекта базы-источника.
  2. Делаем запрос к регистру ПубличныеИдентификаторы по ключу (UID + ИмяБазы).
  3. Если запись найдена — возвращаем ссылку на существующий объект.
  4. Если не найдена — создаем новый объект, записываем его и создаем запись в регистре ПубличныеИдентификаторы для последующих обменов.

Технические нюансы заполнения субконто

Проанализируем ситуацию с заполнением аналитики (субконто) в операции. Поскольку в разных базах типы субконто на одних и тех же счетах могут незначительно отличаться (например, где-то используется справочник ПрочиеДоходыИРасходы, а где-то СтатьиЗатрат), необходимо предусмотреть механизмы приведения типов.

Важный момент: При формировании ОперацииБух программно, необходимо корректно заполнять структуру СубконтоДт и СубконтоКт. Посмотрим на пример кода:


// Программное заполнение субконто в наборе записей Хозрасчетного регистра
Проводка = НаборЗаписей.Добавить();
Проводка.Период = ДатаДокумента;
Проводка.Организация = ОрганизацияПриемник;

// Счет Дебета 62.01
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
// Субконто 1 - Контрагент
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = НайденныйКонтрагент;
// Субконто 2 - Договор
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = НайденныйДоговор;

Проводка.Сумма = СуммаДокумента;

Использование «Конвертации данных 2.1» vs «Конвертации данных 3.0»

Рассмотрим преимущества каждого инструмента для нашей задачи:

Конвертация данных 2.1:

Конвертация данных 3.0 (EnterpriseData):

Для нашей задачи (5 баз, перенос в ОперацииБух) оптимальным будет использование КД 2.1 с кастомным кодом в обработчиках «После загрузки» или «Перед загрузкой», чтобы реализовать логику обращения к Публичным идентификаторам.

Автоматизация и предотвращение дублей

При регулярном обмене (1-2 раза в месяц) важно исключить повторную загрузку одних и тех же операций. Посмотрим, как это сделать:

  1. Хеширование данных: При первой загрузке операции рассчитывайте хеш-сумму от ключевых реквизитов (Дата + Номер в базе источнике + Сумма + ИмяБазы) и записывайте её в дополнительный реквизит или комментарий операции. При следующей загрузке проверяйте наличие операции с таким хешем.
  2. Планы обмена: Настройте регистрацию изменений в базах-источниках. Это позволит выгружать только новые или измененные документы, а не весь массив данных за период.
  3. Регламентные задания: После того как правила обмена отлажены, процесс можно автоматизировать. Используйте стандартную обработку ВыгрузкаЗагрузкаДанныхXML или создайте свое регламентное задание, которое будет опрашивать папки с файлами или подключаться к базам через COM/HTTP-сервисы.

Заключение

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

Такой подход позволит вам избежать хаоса в справочниках и обеспечит прозрачность перенесенных данных в базе-приемнике.

← На главную