При работе с платформой 1С:Предприятие 7.7 часто возникает задача частичного переноса данных. Стандартные механизмы импорта и экспорта данных (загрузка/выгрузка через текстовые форматы) обычно не позволяют накладывать гибкие фильтры по бухгалтерским счетам или конкретной аналитике (субконто). Рассмотрим подробнее, как решить эту задачу профессиональными методами, сохранив целостность базы данных.
Это один из самых безопасных и простых способов, если объем нужных данных сопоставим с общим объемом базы. Разберем этот алгоритм по шагам:
.dbf или SQL-базы).Преимущество этого метода в том, что в базе-приемнике сохраняются все настройки, константы и справочники, а ссылочная целостность проверяется самой системой при удалении.
Если задача заключается в переносе только остатков по конкретным счетам, проанализируем возможности стандартной обработки WRAP.ert. Она предназначена для свертки базы на определенную дату.
Рассмотрим, как адаптировать этот процесс:
WRAP.ert в копии базы. В результате программа создаст документы Операция (ввод остатков), где каждая проводка соответствует остатку по конкретному счету.Для платформы 7.7 существуют мощные инструменты, такие как universal.ert или universam.ert. Эти обработки позволяют выгружать объекты (справочники, документы) в файл формата XML или текстовый файл с применением произвольных фильтров.
Выясним причину популярности этого метода: он позволяет выбрать конкретные типы документов за период. Чтобы отобрать документы только по нужным счетам, в таких обработках часто можно прописать условие на языке 1С. Пример логики фильтрации может выглядеть так:
// Пример логики для фильтрации в цикле обработки
Операция = СоздатьОбъект("Операция");
Если Операция.НайтиОперацию(ДокументОбъект) = 1 Тогда
Операция.ВыбратьПроводки();
Пока Операция.ПолучитьПроводку() = 1 Цикл
Если (Операция.Дебет.Счет = НужныйСчет) Или (Операция.Кредит.Счет = НужныйСчет) Тогда
// Помечаем документ для выгрузки
ФлагВыгружать = 1;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если конфигурации абсолютно идентичны, мы можем использовать прямое подключение из одной базы в другую. Это позволяет не создавать промежуточных файлов.
Разберем пример создания такого подключения:
V7 = СоздатьОбъект("V77.Application");
Открыта = V7.Initialize(V7.RMTrade, "/d""C:\Bases\SourceBase"" /nAdmin /pPassword", "NO_SPLASH_SHOW");
Если Открыта = 0 Тогда
Предупреждение("Не удалось подключиться к базе-источнику!");
Возврат;
КонецЕсли;
// Теперь можно перебирать объекты в источнике и создавать их в текущей базе
ДокИсточник = V7.CreateObject("Документ.ПриходнаяНакладная");
// ... логика фильтрации по счетам и копирования данных ...
При использовании OLE важно помнить о сопоставлении объектов. В идентичных конфигурациях лучше всего проводить поиск по внутреннему идентификатору ЗначениеВСтрокуВнутр(), чтобы избежать дублирования справочников.
Это самый профессиональный подход. Несмотря на то, что «Конвертация данных» чаще ассоциируется с версией 8, она прекрасно работает с 7.7. Мы создаем правила обмена (ПВД), где в ПВД «Перед выгрузкой» пишем алгоритм, проверяющий проводки документа. Если документ не содержит нужного счета, мы устанавливаем Отказ = 1.
Преимущества данного способа:
Проанализируем ключевые моменты, которые нельзя упускать из виду:
Объект не найден. Всегда настраивайте перенос связанных данных.1SENTRY (проводки) и 1SJOURN (журнал документов) для быстрой очистки ненужной информации. Однако это требует отличного знания структуры таблиц и не рекомендуется начинающим специалистам.Таким образом, для разового переноса небольшого объема данных лучше всего подойдет метод копирования и очистки. Если же требуется регулярный или сложный выборочный перенос, стоит потратить время на настройку правил в Конвертации данных или использование обработки universal.ert.