Как выгрузить и загрузить определенные типы документов за период между идентичными базами 1С 7.7 «Торговля и Склад»?

Программист 1С v7.7 Управленческий учет IT и автоматизация бизнеса
← На главную

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

Способ 1. Использование универсальных обработок «Конвертации данных» (V77Exp.ert и V77Imp.ert)

Самым гибким, надежным и стандартным методом является использование конфигурации «1С:Конвертация данных» (КД) версий 2.0 / 2.1 или старых штатных утилит (CDExport.ert / CDImport.ert). Разберем по шагам, как выстроить перенос документов с помощью актуального механизма КД:

  1. Выгрузка метаданных источника и приемника: открываем базу «Торговля и Склад 7.7» и запускаем обработку MD_V77.ert. Сохраняем структуру конфигурации в XML-файл.
  2. Создание правил обмена: загружаем полученный XML-файл в базу «Конвертация данных». Создаем новую конвертацию, где источником и приемником выступает одна и та же конфигурация. Формируем правила конвертации объектов (ПКО) «один в один» для нужных видов документов (например, РасходнаяНакладная, ПоступлениеТМЦ, ПриходныйКассовыйОрдер).
  3. Настройка правил выгрузки данных (ПВД): для каждого выбранного документа создаем правило выгрузки. В правилах конвертации свойств указываем поиск справочников (контрагенты, номенклатура, договоры, склады) по уникальным реквизитам (код, артикул, ИНН). Связанные справочники автоматически подтянутся по ссылкам при выгрузке документов.
  4. Выгрузка данных: в базе-источнике запускаем внешнюю обработку V77Exp.ert, выбираем файл с правилами обмена, указываем период выборки документов, отмечаем нужные виды документов и формируем результирующий XML-файл.
  5. Загрузка данных: в базе-приемнике открываем обработку V77Imp.ert, выбираем файл выгрузки и выполняем загрузку.

Способ 2. Обработки с диска ИТС: Export77.ert и Import77.ert

Если нет возможности настраивать правила в «Конвертации данных», воспользуемся штатными обработками выгрузки и загрузки данных через текстовые файлы, поставляемыми фирмой «1С» на дисках ИТС — Export77.ert и Import77.ert.

Разберем особенности работы с ними:

  1. Обработка Export77.ert позволяет сформировать текстовый файл обмена, содержащий шапку, табличные части документов и сопутствующие справочники.
  2. На форме выгрузки задаем период выборки и выбираем конкретные виды документов.
  3. Приемник с помощью Import77.ert считывает текстовый файл, создает новые документы или обновляет уже существующие (по совпадению номера и даты).

Способ 3. Специализированные внешние обработки сообщества (TransDoc, EXIMDOCS, Универсал)

Для платформы 1С 7.7 сообществом разработчиков создано множество готовых внешних обработок, оптимизированных для переноса документов:

  1. TransDoc.ert / TranRef.ert: популярный тандем обработок. TranRef переносит справочную информацию, а TransDoc выгружает шапки и табличные части документов за указанный интервал с сохранением ссылочной целостности.
  2. EXIMDOCS: специализированный инструмент прямого пакетного экспорта/импорта документов через текстовые файлы или таблицы DBF. Использование DBF-формата существенно ускоряет обмен при миллионных объемах строк табличных частей.
  3. UChoice.ert (Универсальный подбор и обработка): позволяет отобрать документы в журнале по сложным условиям (период, склад, проведенность, контрагент) и выгрузить выделенный пул данных во внешний файл.

Способ 4. Прямой перенос документов через OLE Automation

Когда обе информационные базы находятся на одном сервере или в локальной сети, мы можем организовать перенос без создания промежуточных файлов, подключившись к базе-приемнику напрямую через COM-соединение V77.Application или V77S.Application.

Посмотрим на пример программной реализации такого переноса на встроенном языке 1С 7.7:


// Пример переноса проведенных расходных накладных за период через OLE
Процедура ПеренестиДокументыЧерезOLE()
    БазаПриемник = СоздатьОбъект("V77.Application");
    КаталогБазы = "C:\1C_Bases\Trade_Dest\";
    ПараметрыПодключения = "/D" + СокрЛП(КаталогБазы) + " /NПеренос /P123";
    
    Если БазаПриемник.Initialize(БазаПриемник.RMTrade, ПараметрыПодключения, "NO_SPLASH_SHOW") = 0 Тогда
        Предупреждение("Не удалось подключиться к базе-приемнику!");
        Возврат;
    КонецЕсли;
    
    ДокИсточник = СоздатьОбъект("Документ.РасходнаяНакладная");
    ДокИсточник.ВыбратьДокументы(ДатаНачала, ДатаОкончания);
    
    Пока ДокИсточник.ПолучитьДокумент() = 1 Цикл
        // Пропускаем помеченные на удаление документы
        Если ДокИсточник.ПометкаУдаления() = 1 Тогда
            Продолжить;
        КонецЕсли;
        
        ДокПриемник = БазаПриемник.СоздатьОбъект("Документ.РасходнаяНакладная");
        
        // Проверяем наличие документа в приемнике по номеру и дате
        Если ДокПриемник.НайтиПоНомеру(ДокИсточник.НомерДок, ДокИсточник.ДатаДок) = 0 Тогда
            ДокПриемник.Новый();
            ДокПриемник.НомерДок = ДокИсточник.НомерДок;
            ДокПриемник.ДатаДок  = ДокИсточник.ДатаДок;
        КонецЕсли;
        
        // Заполняем реквизиты шапки через сопоставление по коду
        СпрКонтрПриемник = БазаПриемник.СоздатьОбъект("Справочник.Контрагенты");
        Если СпрКонтрПриемник.НайтиПоКоду(ДокИсточник.Клиент.Код, 2) = 1 Тогда
            ДокПриемник.Клиент = СпрКонтрПриемник.ТекущийЭлемент();
        КонецЕсли;
        
        СпрСкладПриемник = БазаПриемник.СоздатьОбъект("Справочник.Склады");
        Если СпрСкладПриемник.НайтиПоКоду(ДокИсточник.Склад.Код, 2) = 1 Тогда
            ДокПриемник.Склад = СпрСкладПриемник.ТекущийЭлемент();
        КонецЕсли;
        
        // Очищаем и переносим строки табличной части
        ДокПриемник.УдалитьСтроки();
        
        ДокИсточник.ВыбратьСтроки();
        Пока ДокИсточник.ПолучитьСтроку() = 1 Цикл
            ДокПриемник.НоваяСтрока();
            
            СпрТМЦПриемник = БазаПриемник.СоздатьОбъект("Справочник.Номенклатура");
            Если СпрТМЦПриемник.НайтиПоКоду(ДокИсточник.Товар.Код, 2) = 1 Тогда
                ДокПриемник.Товар = СпрТМЦПриемник.ТекущийЭлемент();
            КонецЕсли;
            
            ДокПриемник.Количество = ДокИсточник.Количество;
            ДокПриемник.Цена       = ДокИсточник.Цена;
            ДокПриемник.Сумма      = ДокИсточник.Сумма;
        КонецЦикла;
        
        ДокПриемник.Записать();
        Сообщить("Перенесен документ: " + ДокИсточник.НомерДок + " от " + ДокИсточник.ДатаДок);
    КонецЦикла;
    
    Сообщить("Перенос успешно завершен!");
КонецПроцедуры

Важное ограничение OLE: при обработке десятков тысяч документов платформа 7.7 может накапливать утечки памяти. При больших объемах данных разбиваем интервал выгрузки на несколько частей (по дням или неделям).

Критические правила переноса в конфигурации «Торговля и Склад 7.7»

Конфигурация «Торговля и Склад 7.7» использует регистры оперативного учета (партии, остатки, взаиморасчеты). Чтобы избежать повреждения учетных данных и ошибок расчета себестоимости, соблюдаем следующие правила:

  1. Загрузка без автоматического проведения: при массовом импорте безопаснее записывать документы непроведенными. Это ускорит загрузку в несколько раз и предотвратит ошибки блокировок.
  2. Синхронизация справочников: перед переносом убеждаемся, что в обеих базах идентичны базовые справочники (единицы измерения, валюты, ставки НДС). В противном случае сопоставление выполняем строго по кодам или ИНН/КПП, а не по внутреннему ID.
  3. Актуальность курсов валют: если переносятся валютные документы, в базе-приемнике обязательно должна быть заполнена таблица курсов валют на каждый день переносимого периода.
  4. Перепроведение документов и сдвиг ТА: после завершения загрузки запускаем обработку ПоследовательностьДокументов или групповое перепроведение в хронологическом порядке от даты самого раннего загруженного документа для корректного списания партий (FIFO/LIFO) и восстановления точки актуальности (ТА).
  5. Префиксы номеров: чтобы новые документы не перезаписали существующие документы приемника со схожими номерами, настраиваем префиксы нумерации документов для базы-источника.
← На главную