Как перенести документы "Поступление товаров" из 1С:Бухгалтерия Предприятия 3 в 1С:Комплексная Автоматизация 2.4?

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

Задача переноса документов, таких как "Поступление товаров" (ПТиУ), из конфигурации 1С:Бухгалтерия Предприятия 3 (БП3) в 1С:Комплексная Автоматизация 2.4 (КА2.4) является одной из наиболее востребованных и одновременно сложных в работе с системами 1С. Мы с вами разберем, почему эта задача непроста, какие подходы существуют для ее решения и какие инструменты можно использовать, чтобы минимизировать трудозатраты и получить корректный результат.

Основные сложности и отсутствие типового решения

Прежде всего, давайте выясним, почему эта задача не решается "одной кнопкой". Фирма "1С" не предлагает стандартную обработку для прямого переноса данных между БП3 и КА2.4 в полном объеме, так как эти конфигурации имеют существенные различия в архитектуре, логике учета и структуре данных. Частично задача синхронизации решается с помощью механизма EnterpriseData, основанного на XDTO пакетах, но для полного мигрирования данных этого часто недостаточно.

Перенос ПТиУ требует предварительной или одновременной синхронизации большого количества связанных справочников. Мы должны быть уверены, что в базе-приемнике (КА2.4) уже существуют или будут созданы такие объекты, как:

  1. Номенклатура и ее характеристики.
  2. Единицы измерения.
  3. Контрагенты и их договоры.
  4. Организации.
  5. Склады.
  6. План счетов (для корректного отражения бухгалтерских проводок, если это требуется).
  7. Настройки отражения номенклатуры (для определения счетов учета).

Без корректной настройки и переноса всей нормативно-справочной информации (НСИ) документы будут переноситься с ошибками или вообще не загружаться. Это означает, что даже если справочники между базами синхронизированы по УИД (уникальным идентификаторам), как в нашем случае, все равно необходимо обеспечить их полное соответствие.

Еще одна сложность — постоянное обновление конфигураций 1С. БП3 и КА2.4 регулярно выпускают новые релизы, что часто влечет за собой изменения в структуре метаданных. Это означает, что правила обмена, написанные для одной версии конфигураций, могут перестать работать или работать некорректно после обновления. Поэтому поддержание актуальности правил — это отдельная задача.

Использование готовых правил и обработок

В отсутствие типового решения многие специалисты ищут готовые обработки или правила обмена, разработанные сторонними разработчиками. Рассмотрим некоторые из них, упомянутые в обсуждении.

Обработка на основе JSON-сериализации (Garykom/JSON)

Один из участников обсуждения предлагает использовать обработку, основанную на JSON-сериализации, которая была специально доработана для выгрузки данных из БП3 в УТ11, КА или ERP. Ее преимущество в том, что она позволяет гибко настраивать выгрузку и загрузку объектов.

Мы посмотрим, как можно адаптировать этот подход для переноса документов "Поступление товаров".

Для выгрузки документа "Поступление товаров" из БП3 нам потребуется настроить соответствующие правила в обработке. Предположим, что структура выгружаемого JSON-файла будет содержать все необходимые реквизиты документа и его табличных частей. Вот пример того, как может выглядеть часть кода для выгрузки:


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

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

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

// Сериализуем данные в JSON
СтрокаJSON = СериализаторJSON.Записать(ДанныеДокумента);

Обратите внимание, что для связанных объектов, таких как контрагенты, номенклатура и договоры, мы передаем УИДы. Это критически важно, если справочники уже синхронизированы между базами по уникальным идентификаторам, как было упомянуто. Если синхронизация по УИД невозможна, придется использовать другие методы сопоставления (по наименованию, коду и т.д.), что усложняет процесс.

Для загрузки данных в КА2.4 на основе полученного JSON-файла, нам нужно будет создать документ "Поступление товаров и услуг" и заполнить его реквизиты. Вот примерный фрагмент кода для загрузки:


// Примерный код для загрузки документа "Поступление товаров и услуг"
// В КА2.4 (Приемник)
ДанныеДокумента = СериализаторJSON.Прочитать(СтрокаJSON); // Десериализуем JSON

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

// Заполняем табличную часть "Товары"
Для Каждого СтрокаТЧJSON Из ДанныеДокумента.Товары Цикл
    НоваяСтрока = ДокПоступление.Товары.Добавить();
    НоваяСтрока.Номенклатура = УИДОбъектаВСсылку(СтрокаТЧJSON.Номенклатура, Метаданные.Справочники.Номенклатура);
    НоваяСтрока.Количество = СтрокаТЧJSON.Количество;
    НоваяСтрока.Цена = СтрокаТЧJSON.Цена;
    НоваяСтрока.Сумма = СтрокаТЧJSON.Сумма;
    // Поиск ставки НДС
    НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС[СтрокаТЧJSON.СтавкаНДС];
    // ...
КонецЦикла;

ДокПоступление.Записать(РежимЗаписиДокумента.Проведение); // Или РежимЗаписиДокумента.Запись

Функция УИДОбъектаВСсылку() должна быть реализована отдельно и предназначена для поиска объекта в базе-приемнике по его УИД и возврата ссылки на него. Если объект не найден, его необходимо будет создать или сообщить об ошибке.


// Пример функции для поиска объекта по УИД
Функция УИДОбъектаВСсылку(УИДСтрока, МетаданныеОбъекта)
    Если ПустаяСтрока(УИДСтрока) Тогда
        Возврат Неопределено;
    КонецЕсли;

    Попытка
        УИД = Новый УникальныйИдентификатор(УИДСтрока);
    Исключение
        Возврат Неопределено; // Некорректный УИД
    КонецПопытки;

    Возврат МетаданныеОбъекта.ПолучитьСсылку(УИД);
КонецФункции

Правила обмена на Конвертации Данных 2.0 (КД2)

Традиционный подход к переносу данных в 1С — это использование конфигурации "Конвертация Данных 2.0". Создание правил на КД2 требует определенного времени и навыков, но при этом дает полный контроль над процессом. Если у нас уже есть старые правила для похожих баз, их правка всегда проще, чем создание с нуля, даже с использованием помощника КД2. Мы можем загрузить старые правила, проанализировать их структуру и адаптировать под текущие версии конфигураций БП3 и КА2.4.

Для создания правил обмена для ПТиУ на КД2 нам потребуется определить:

  1. Правила выгрузки для документа "Поступление товаров" из БП3.
  2. Правила загрузки для документа "Поступление товаров и услуг" в КА2.4.
  3. Правила конвертации для всех связанных справочников: номенклатура, контрагенты, организации, договоры, склады и т.д.
  4. Правила конвертации для всех реквизитов документа и его табличных частей.

Особое внимание следует уделить обработчикам "Перед выгрузкой", "При выгрузке", "После выгрузки", "Перед загрузкой", "При загрузке", "После загрузки" для тонкой настройки логики. Например, для определения счетов учета при загрузке документа в КА2.4, нам, возможно, потребуется использовать настройки отражения номенклатуры в КА2.4 или выполнить программный расчет на основе данных из БП3.

Важный аспект: производительность. Если объемы документов для переноса очень велики, КД2 может работать медленно. В таких случаях стоит рассмотреть альтернативные, более производительные обработки, которые оптимизированы для больших объемов данных.

Обработки с Infostart для больших объемов данных

Для ускорения переноса больших объемов данных один из участников обсуждения предлагает использовать обработку, основанную на статье с Infostart, например, "Быстрый обмен данными по COM-соединению между конфигурациями 1С:Предприятия 8". Такие обработки могут быть доработаны для целевого переноса документов. Использование COM-соединения позволяет напрямую взаимодействовать с базой-приемником, что часто обеспечивает более высокую скорость по сравнению с выгрузкой/загрузкой через XML-файлы КД2.

При использовании COM-соединения мы будем создавать и записывать документы непосредственно в целевой базе, минуя промежуточный файл. Это требует доступа к обеим базам одновременно (чаще всего, с файловым подключением к одной из них или через сервер). Мы можем использовать методы создания документов и заполнения их реквизитов, аналогичные тем, что были описаны для JSON-загрузки, но выполнять их напрямую в контексте целевой базы через COM-объект.

Альтернативные технологии и подходы

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

Фирма "1С" активно развивает новую технологию обмена данными — "Конвертация Данных 3.0", основанную на универсальном формате EnterpriseData. Эта технология призвана упростить создание и поддержку правил обмена между типовыми конфигурациями, поскольку она стандартизирует метаобъекты и уменьшает необходимость в написании правил для каждой пары "Источник-Получатель" с нуля. Если ваша задача — настроить регулярный обмен или вы планируете долгосрочное решение, изучение КД3 может быть перспективным направлением.

Поэтапный перенос и проверка данных

Независимо от выбранного подхода, мы всегда рекомендуем придерживаться поэтапного переноса:

  1. Подготовка баз: Убедитесь, что обе базы (БП3 и КА2.4) обновлены до актуальных релизов. Обязательно создайте резервные копии перед началом любых операций.
  2. Перенос НСИ: Сначала перенесите все необходимые справочники (номенклатура, контрагенты, организации, склады и т.д.).
  3. Перенос остатков: После НСИ перенесите начальные остатки на начало периода (например, на 01 января).
  4. Перенос документов: Затем приступайте к переносу документов за требуемый период.

После переноса данных критически важно провести тщательную проверку и сверку информации. Мы можем использовать стандартные отчеты 1С, такие как оборотно-сальдовая ведомость (ОСВ), для сравнения итоговых данных между исходной и целевой базами. Обратите внимание на отсутствие отрицательных остатков или расхождений в суммах. Также рекомендуется выполнить тестовый перенос и дать бухгалтеру поработать в тестовой базе КА для проверки сдачи отчетности.

Заключение

Перенос документов "Поступление товаров" из БП3 в КА2.4 — это нетривиальная задача, требующая внимательного подхода и, зачастую, индивидуальной доработки правил или обработок. Мы рассмотрели несколько основных способов: использование готовых обработок на основе JSON, создание или адаптация правил на КД2 и применение более производительных решений через COM-соединение. Выбор конкретного метода будет зависеть от объема данных, сроков, имеющихся ресурсов и квалификации специалистов. Помните, что инвестиции во время и тестирование на этом этапе окупятся стабильной работой системы в будущем.

← На главную