При работе с несколькими базами конфигурации 1С (например, с рабочей базой и её копией) часто возникает необходимость переноса данных, созданных или отредактированных за последние несколько дней. Стандартный вариант выгрузки за конкретный период дат не всегда подходит: часть документов могла быть введена пользователями «задним числом» за прошлые месяцы (например, за июль или август при текущем сентябре).
Проанализируем доступные способы решения этой задачи, от стандартных сервисных обработок до программных методов сбора данных.
Если база-приемник создавалась путем копирования базы-источника, объекты в обеих системах имеют одинаковые уникальные идентификаторы (GUID). Это существенно упрощает синхронизацию, так как при повторной загрузке или обновлении объекты сопоставляются автоматически без дублирования.
Основная сложность заключается в том, чтобы точно определить список документов, которые были фактически созданы или изменены операторами за последние 3 дня, независимо от даты самих документов.
Журнал регистрации фиксирует все действия пользователей с объектами информационной базы. Именно в нем сохраняются записи о создании, изменении и проведении документов с указанием реальной даты и времени совершения операции.
Разберем порядок действий при использовании Журнала регистрации:
Для программного получения списка измененных объектов воспользуемся встроенным методом платформы ПолучитьЗаписиЖурналаРегистрации(). Посмотрим на пример кода:
Отбор = Новый Структура;
Отбор.Вставить("ДатаНачала", ТекущаяДата() - 3 * 86400); // за последние 3 суток
Отбор.Вставить("ДатаОкончания", ТекущаяДата());
МассивСобытий = Новый Массив;
МассивСобытий.Добавить("_$Data$_.New");
МассивСобытий.Добавить("_$Data$_.Update");
Отбор.Вставить("Событие", МассивСобытий);
ТаблицаЖурнала = Новый ТаблицаЗначений;
ПолучитьЗаписиЖурналаРегистрации(ТаблицаЖурнала, Отбор, "Данные, ДанныеПредставление");
МассивСсылок = Новый Массив;
Для Каждого Стр Из ТаблицаЖурнала Цикл
Если ЗначениеЗаполнено(Стр.Данные) И Найти(ТипЗнч(Стр.Данные), "ДокументСсылка") > 0 Тогда
Если МассивСсылок.Найти(Стр.Данные) = Неопределено Тогда
МассивСсылок.Добавить(Стр.Данные);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Полученный МассивСсылок можно передать в универсальную обработку обмена или использовать в условии фильтрации Ссылка В Списке при формировании выгрузки XML.
Если документы вводились задним числом, но с определенной нижней границы (например, с начала открытого периода), можно воспользоваться штатной обработкой «Выгрузка и загрузка данных XML».
Выясним порядок действий при таком подходе:
ДокументСсылка.ТребованиеНакладная и ДокументСсылка.ПоступлениеТоваровУслуг).Так как базы идентичны по GUID, уже существовавшие документы обновятся без создания дублей, а новые объекты создадутся. Для исключения перезаписи лишних данных рекомендуется обязательно проверять настройки выгрузки связанных объектов нормативно-справочной информации (НСИ).
Если к обеим базам есть прямой технический доступ, перенос измененных документов легко реализовать через прямое подключение посредством объекта V83.COMConnector.
Рассмотрим пример алгоритма:
При выборочном переносе документов задним числом обязательно учитываем следующие факторы:
1С:Бухгалтерия предприятия (в рассматриваемом случае — 3.0.51.27).