Перенос данных в среде 1С:Предприятие 7.7 между идентичными конфигурациями — это классическая задача, которая, несмотря на возраст платформы, имеет свои тонкости. Часто использование мощных инструментов вроде «Конвертации данных 2.1» избыточно для разового переноса документов за короткий период (например, за две недели). В данной статье мы разберем наиболее эффективные и простые способы решения этой задачи, проанализируем использование специализированных обработок и рассмотрим «хакерский» метод через механизм УРБД.
Для платформы 7.7 было создано множество универсальных инструментов. Если конфигурации баз абсолютно одинаковы, нам не нужно описывать правила сопоставления полей — достаточно перенести значения реквизитов. Рассмотрим основные обработки, которые зарекомендовали себя годами:
Проанализируем алгоритм работы с такими обработками. В базе-источнике мы выбираем период, нужную фирму и виды документов. Важный нюанс: при выгрузке обратите внимание на способ идентификации объектов. Если база-приемник когда-то была создана как копия базы-источника, лучше всего использовать поиск по Internal ID (внутреннему идентификатору). Это гарантирует отсутствие дублей справочников. Если базы создавались независимо, используйте поиск по Коду для справочников и по Номеру и Дате для документов.
Если в базах установлена компонента «Управление распределенными ИБ», мы можем использовать встроенный механизм миграции данных, даже если базы не связаны в официальную топологию «Центр-Периферия». Рассмотрим этот метод по шагам, так как он позволяет максимально корректно перенести не только сами документы, но и их движения.
Шаг 1: Подготовка. Нам необходимо временно превратить одну из баз в «псевдо-периферийную» или использовать существующий механизм обмена. Главная хитрость заключается в управлении таблицей регистрации изменений.
Шаг 2: Очистка таблицы регистрации. Чтобы не выгружать лишние данные, мы можем очистить таблицу 1supdts (в SQL-версии) или программно удалить регистрацию. Однако проще «объяснить» системе, что именно нам нужно выгрузить.
Шаг 3: Программная регистрация нужных документов. Мы напишем небольшой скрипт, который переберет документы за нужный период по конкретной фирме и пометит их как «измененные». Для системы 1С 7.7 метод Записать() автоматически ставит объект в очередь на выгрузку в рамках УРБД. Проанализируем пример кода:
Процедура ЗарегистрироватьДокументы()
Док = СоздатьОбъект("Документ");
ВыбФирма = ...; // Укажите нужную фирму
ДатаНач = '01.10.2023';
ДатаКон = '15.10.2023';
// Перебираем все виды документов, представленные в метаданных
Для и = 1 По Метаданные.Документ() Цикл
ВидДока = Метаданные.Документ(и).Идентификатор;
Док.ВыбратьДокументы(ДатаНач, ДатаКон);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Вид() = ВидДока Тогда
Если Док.Фирма = ВыбФирма Тогда
// Метод Записать() регистрирует изменения для УРБД
// Даже если мы ничего не меняем в реквизитах
Док.Записать();
Сообщить("Зарегистрирован: " + Док);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
После выполнения этого кода достаточно запустить стандартный обмен данными. В файл выгрузки попадут только те объекты, которые мы «тронули» программно.
Хотя автор вопроса столкнулся с трудностями в КД 2.1, стоит вспомнить, что для 7.7 существовала родная версия — Конвертация данных 1.0. Она работает значительно быстрее с объектами старой платформы и генерирует текстовые файлы правил, которые легче отлаживать непосредственно в коде V77Exp.ert.
Разберем преимущество этого метода: в КД 1.0 проще настроить поиск объектов по полям. Если базы идентичны, создание правил займет не более 5 минут через «Мастер создания правил». Вы просто указываете соответствие видов документов, и система автоматически связывает реквизиты с одинаковыми именами.
Проанализируем ситуацию со статусом документов. В 1С 7.7 существует реквизит Approve (Проведен). Часто при обычном переносе через текстовые файлы документы загружаются в базу-приемник как «записанные», но не «проведенные». Это происходит потому, что запись объекта в базу и формирование движений по регистрам — это два разных процесса.
Чтобы документы в приемнике стали проведенными, у вас есть два пути:
Провести(). Убедитесь, что в базе-приемнике установлена корректная Точка Актуальности (ТА) и период открыт для редактирования.RG* и RA*). Однако это рискованный путь для идентичных конфигураций, лучше позволить системе самой пересчитать итоги при проведении документа в новой базе.Если вы столкнулись с ошибкой при переносе реквизита «Проведен», попробуйте в обработке выгрузки просто исключить его из списка переносимых данных, а в обработке загрузки добавить принудительное проведение. Для последующего контроля правильности сформированных движений в новой базе можно автоматически сравнить бухгалтерские и налоговые проводки между базами 1С с помощью специальной утилиты.
// Фрагмент кода в обработке загрузки
Если СтатусДокументаИзФайла = "Проведен" Тогда
Попытка
Док.Записать();
Док.Провести();
Исключение
Сообщить("Не удалось провести документ " + Док.НомерДок + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Для быстрого переноса документов между одинаковыми базами 1С 7.7 мы рекомендуем начать с использования UNIVERSAM.ert или U_Doc.ert. Это наиболее «человекочитаемые» способы, не требующие глубоких знаний механизмов обмена. Если же объем данных велик и требуется гарантированная синхронность — воспользуйтесь методом программной регистрации в УРБД. Помните, что залог успешного переноса — предварительная проверка идентичности справочников, на которые ссылаются документы.