В практике сопровождения 1С нередко возникает ситуация, когда в рабочей базе данные за прошлый период (например, за целый год) оказываются повреждены или некорректно изменены пользователями. В таких случаях возникает необходимость «откатить» информацию за конкретный интервал времени, используя данные из «правильной» архивной копии, не затрагивая при этом текущую работу в системе. Рассмотрим подробно, как реализовать перенос данных в конфигурации «1С:Бухгалтерия 3.0», проанализируем доступные инструменты и разберем критические нюансы процесса.
Это наиболее распространенный и гибкий способ. Если обе базы (копия и рабочая) имеют идентичные релизы конфигурации, мы можем использовать стандартные инструменты платформы. Разберем этот процесс по шагам.
Для начала нам понадобится обработка ВыгрузкаЗагрузкаДанныхXML.epf (она входит в состав состава БСП или поставляется на диске ИТС). Важно понимать разницу между простой выгрузкой и универсальным обменом. Простая обработка Выгрузка и загрузка данных XML переносит объекты «как есть» вместе с их внутренними идентификаторами (GUID).
Проанализируем алгоритм действий при использовании этого метода:
Важный нюанс: Если в рабочей базе документы за этот период уже существуют, но они неверны, простая загрузка обновит только те объекты, GUID которых совпал. Если бухгалтер удалил документ и создал его заново с тем же номером, GUID будет другим, и при загрузке возникнет дубль. Поэтому перед загрузкой рекомендуется удалить или пометить на удаление все документы за восстанавливаемый период в рабочей базе.
Рассмотрим ситуацию, предложенную в обсуждении: использование механизма РИБ для «подтягивания» данных. Этот метод сложнее в настройке, но эффективнее, если нужно обеспечить строгую идентичность структур.
Выясним, как это работает в контексте нашей задачи. Мы можем создать временный узел РИБ, настроив его таким образом, чтобы в него попадали данные только за определенный период. В современных версиях 1С:Бухгалтерия 3.0 для этого используется механизм «Синхронизация данных».
Разберем по шагам создание «РИБ с фильтром»:
Этот метод хорош тем, что платформа берет на себя контроль за ссылочной целостностью, однако он требует высокой квалификации специалиста 1С.
Проанализируем ситуацию, которая чаще всего становится причиной ошибок при переносе — уникальные идентификаторы объектов (GUID). В 1С каждый объект (справочник, документ) имеет скрытый уникальный код. Если мы просто создадим в двух базах документ с номером «001» от «01.01.2018», для системы это будут разные объекты.
При переносе данных через XML объекты сопоставляются именно по GUID. Посмотрим, к чему это приводит:
Для решения этой проблемы при масштабных переносах профессионалы используют обработку Универсальный обмен данными в формате XML совместно с правилами, созданными в «1С:Конвертация данных 2.1». Это позволяет настроить поиск объектов по полям (например, по номеру и дате), а не по GUID.
Посмотрим на структуру данных глубже. В 1С:Бухгалтерии документы — это лишь «регистраторы». Основная информация для отчетов хранится в регистрах:
РегистрБухгалтерии.Хозрасчетный (проводки).РегистрыНакопления (НДС, расчеты с контрагентами).РегистрыСведений (учетные политики, курсы валют).При использовании обработки ВыгрузкаЗагрузкаДанныхXML обязательно проверяйте, включена ли выгрузка движений. Если вы переносите только документы, вам придется выполнить групповое перепроведение за весь год, что может привести к изменению итогов из-за отличий в настройках программы или учетной политики на текущий момент.
Перенос данных за целый год в активной базе — это огромная нагрузка на СУБД. Проанализируем способ ускорения этого процесса. Перед началом загрузки большого объема данных рекомендуется программно или через консоль администратора отключить использование итогов.
Рассмотрим пример кода для управления итогами (для использования во внешней обработке):
// Отключение итогов для ускорения загрузки
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Ложь);
РегистрыНакопления.НДСПродажи.УстановитьИспользованиеИтогов(Ложь);
// После завершения загрузки
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Истина);
РегистрыБухгалтерии.Хозрасчетный.ПересчитатьИтоги();
Это позволит сократить время загрузки в несколько раз, так как системе не придется пересчитывать остатки после каждой записи документа.
Если в рабочей базе данные за 2018 год представляют собой «хаос» из ручных правок, лучше всего применить стратегию полной замены. Разберем этот алгоритм:
Групповое изменение реквизитов для пометки на удаление, а затем стандартное удаление помеченных объектов.Внимание: Перед любыми действиями обязательно создавайте полную резервную копию рабочей базы. Манипуляции с GUID и массовым удалением документов необратимы.
Выясним еще одну скрытую опасность. Если ваша «Бухгалтерия 3.0» синхронизирована, например, с «ЗУП» или «Управлением торговлей», то загрузка данных за год приведет к тому, что тысячи объектов зарегистрируются в плане обмена. При следующей синхронизации они попытаются «улететь» в соседние базы.
Чтобы этого избежать, после загрузки данных воспользуйтесь обработкой Регистрация изменений для обмена и очистите все зарегистрированные изменения для всех узлов, если вы не планируете транслировать эти восстановления в другие системы.
Подводя итог, можно сказать, что перенос данных за год — задача трудоемкая, требующая контроля GUID и движений регистров. Наиболее безопасным инструментом остается Универсальный обмен данными XML при условии идентичности релизов конфигураций.