При консолидации данных из нескольких информационных баз 1С в одну общую базу (например, при слиянии филиалов или ведении управленческого учета на основе бухгалтерских данных) часто возникает задача переноса первичных документов не «как есть», а в виде ручных бухгалтерских операций (ОперацияБух). Основная сложность здесь заключается в предотвращении дублирования справочников (Контрагенты, Номенклатура, Склады) и правильном формировании проводок. В этой статье мы подробно разберем, как реализовать такой перенос, используя регистр ПубличныеИдентификаторы и инструменты конвертации данных.
Рассмотрим ситуацию: данные поступают из пяти различных баз. В каждой базе один и тот же контрагент или склад может называться по-разному. Если просто загрузить документы, мы получим пять дублей одного и того же склада. Нам необходимо настроить механизм, который перед созданием операции будет проверять наличие объекта в базе-приемнике не по наименованию, а по уникальному идентификатору, хранящемуся в специальном регистре.
Разберем основные подходы к синхронизации:
СоответствияОбъектовИнформационныхСистем. Это более современный аналог самописных регистров идентификаторов, встроенный в Библиотеку Стандартных Подсистем.Проанализируем процесс преобразования документа РеализацияТоваровУслуг или ПоступлениеТоваровУслуг в объект ОперацияБух. В отличие от обычного документа, операция не имеет табличных частей «Товары» или «Услуги». Все данные должны быть преобразованы в записи регистра бухгалтерии Хозрасчетный.
Для этого в правилах конвертации объектов (ПКО) необходимо настроить программное сворачивание табличных частей. Рассмотрим пример логики на языке 1С:
// Пример алгоритма в обработчике "Перед выгрузкой" или "При загрузке"
// Допустим, мы сворачиваем табличную часть "Товары" документа Реализация
ТаблицаПроводок = Источник.Товары.Выгрузить();
ТаблицаПроводок.Свернуть("Номенклатура, Склад, СтавкаНДС", "Сумма, СуммаНДС, Количество");
Для Каждого СтрокаТЧ Из ТаблицаПроводок Цикл
НоваяПроводка = РегистрБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
// Заполнение счетов: Дт 62.01 Кт 90.01.1
// Заполнение субконто с поиском через ПубличныеИдентификаторы
// Заполнение сумм и количеств
КонецЦикла;
Выясним, как заставить систему "смотреть" в регистр перед созданием нового элемента справочника. В «Конвертации данных» для этого используется обработчик ПоляПоиска. Однако, если мы используем самописный регистр ПубличныеИдентификаторы, надежнее прописать поиск в обработчике ПриЗагрузке для ПКО справочника.
Рассмотрим алгоритм поиска:
ПубличныеИдентификаторы по ключу (UID + ИмяБазы).ПубличныеИдентификаторы для последующих обменов.Проанализируем ситуацию с заполнением аналитики (субконто) в операции. Поскольку в разных базах типы субконто на одних и тех же счетах могут незначительно отличаться (например, где-то используется справочник ПрочиеДоходыИРасходы, а где-то СтатьиЗатрат), необходимо предусмотреть механизмы приведения типов.
Важный момент: При формировании ОперацииБух программно, необходимо корректно заполнять структуру СубконтоДт и СубконтоКт. Посмотрим на пример кода:
// Программное заполнение субконто в наборе записей Хозрасчетного регистра
Проводка = НаборЗаписей.Добавить();
Проводка.Период = ДатаДокумента;
Проводка.Организация = ОрганизацияПриемник;
// Счет Дебета 62.01
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
// Субконто 1 - Контрагент
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = НайденныйКонтрагент;
// Субконто 2 - Договор
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = НайденныйДоговор;
Проводка.Сумма = СуммаДокумента;
Рассмотрим преимущества каждого инструмента для нашей задачи:
Конвертация данных 2.1:
ДокументСсылка.Реализация -> ДокументСсылка.ОперацияБух.Конвертация данных 3.0 (EnterpriseData):
Для нашей задачи (5 баз, перенос в ОперацииБух) оптимальным будет использование КД 2.1 с кастомным кодом в обработчиках «После загрузки» или «Перед загрузкой», чтобы реализовать логику обращения к Публичным идентификаторам.
При регулярном обмене (1-2 раза в месяц) важно исключить повторную загрузку одних и тех же операций. Посмотрим, как это сделать:
ВыгрузкаЗагрузкаДанныхXML или создайте свое регламентное задание, которое будет опрашивать папки с файлами или подключаться к базам через COM/HTTP-сервисы.Подведем итог. Перенос документов в ручные операции с синхронизацией по идентификаторам — это эффективный способ консолидации учета. Мы рассмотрели, что вместо ручной обработки промежуточных таблиц (деревьев значений), правильнее использовать возможности платформы 1С и «Конвертации данных». Ключевыми факторами успеха являются:
ПубличныеИдентификаторы) для справочников.Такой подход позволит вам избежать хаоса в справочниках и обеспечит прозрачность перенесенных данных в базе-приемнике.