В практике администратора или программиста 1С часто возникают ситуации, когда необходимо перенести данные из бэкапа в рабочую базу выборочно. Одной из самых трудоемких задач является перенос движений по конкретному бухгалтерскому счету из регистра Хозрасчетный. Стандартная обработка «Выгрузка и загрузка данных XML» по умолчанию предлагает выгрузить весь регистр целиком, что недопустимо при больших объемах данных. Разберем по шагам, как настроить фильтрацию, какие нюансы учесть и как избежать появления «битых ссылок».
Рассмотрим стандартный механизм, который используется в большинстве типовых конфигураций. Нам необходимо ограничить состав выгружаемых записей регистра бухгалтерии. Посмотрим, как это сделать:
РегистрБухгалтерии.Хозрасчетный.Разберем важный момент, который часто упускают новички. В регистре бухгалтерии Хозрасчетный нет одного универсального поля Счет. Проводка всегда состоит из двух сторон. Следовательно, чтобы выгрузить все движения по конкретному счету (например, 60.01), нам нужно установить условие по двум полям:
СчетДт (Счет дебета)СчетКт (Счет кредита)Важное замечание: Стандартный механизм отборов в XML-выгрузке обычно объединяет условия по правилу «И». Если вы установите СчетДт = 60.01 и СчетКт = 60.01, система попытается найти проводки, где и в дебете, и в кредите указан этот счет одновременно. Таких записей может не быть вовсе.
Чтобы выгрузить все движения, правильнее будет сделать две отдельные выгрузки:
СчетДт.СчетКт.Затем оба файла поочередно загружаются в базу-приемник.
Если штатная выгрузка не позволяет гибко настроить условия, воспользуемся более мощным инструментом. Эта обработка позволяет выгружать данные на основе произвольных правил обмена или даже простых запросов. Рассмотрим алгоритм действий:
Счет (если система позволяет обращаться к виртуальным таблицам) или, что надежнее, добавить два условия через группу «ИЛИ», если интерфейс обработки это поддерживает.Выясним причину, по которой после загрузки XML в базе-приемнике вместо документов-регистраторов могут появиться надписи <Объект не найден>. Это происходит из-за того, что проводки в 1С не существуют сами по себе — они жестко привязаны к регистратору (документу).
Проанализируем стратегию выгрузки:
Внимание: Включение этого флага может привести к «эффекту домино». Регистр потянет за собой Документ, Документ потянет Контрагентов и Договоры, Договоры потянут Организации и так далее. В итоге вы можете случайно выгрузить из бэкапа половину базы. Чтобы этого не случилось, перед загрузкой в основную базу проверьте наличие основных справочников (Контрагенты, Номенклатура) — они должны быть синхронизированы по GUID.
Если данных много и XML-файлы получаются слишком тяжелыми, профессионалы используют программный способ. Напишем примерную логику кода, который можно использовать во внешней обработке для прямого переноса записей:
// Пример логики подключения к бэкапу через COM
V83COM = Новый COMОбъект("V83.COMConnector");
Соединение = V83COM.Connect("File=""C:\BackupDB"";Usr=""Admin"";");
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Регистратор,
| Хозрасчетный.Период,
| Хозрасчетный.СчетДт,
| Хозрасчетный.СчетКт,
| Хозрасчетный.Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.СчетДт = &НужныйСчет ИЛИ Хозрасчетный.СчетКт = &НужныйСчет";
Запрос.УстановитьПараметр("НужныйСчет", НужныйСчетСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Здесь описывается логика создания набора записей в текущей базе
// с поиском или созданием документов-регистраторов
КонецЦикла;
После того как вы успешно загрузили данные любым из способов, вы заметите, что отчеты (Оборотно-сальдовая ведомость) могут показывать старые или неверные цифры. Разберем, почему это происходит.
При прямой загрузке записей в регистр через XML или программно, система не всегда инициирует автоматический пересчет итогов бухгалтерского учета. Чтобы актуализировать данные, выполните следующие действия:
Резюме: Перенос данных по счету через XML возможен, но требует внимательности к настройке отборов (учитываем СчетДт и СчетКт) и обязательной проверки целостности ссылок. Всегда делайте резервную копию основной базы перед загрузкой в нее сторонних данных.