Обрезание базы 1С
Для оптимизации базы 1С применяют операцию обрезания. Это позволяет экономить место на диске, экономить время архивирования базы и скрыть архивные данные.
Обрезание базы происходит следующим образом. Выбирается дата среза, с которой в базе ведется учет по документам. До даты среза удаляются все документы. Вместо этих документов переносятся все остатки и данные периодических регистров сведений на дату среза.
Таким образом из базы можно вырезать блок данных, например, все документы до начала текущего года. Перенесенные остатки на дату среза позволят продолжить работу в штатном режиме. Теоретически, база должна работать как раньше, до обрезания. На практике возникает много ньюансов, связанных с заменой движений документов на итоговые данные на дату среза.
В данной статье рассмотрены проблемы, с которыми столкнулся автор при обрезании рабочей базы 1С. Также представлена обработка, с помощью которой переносились данные.
Технические требования
Обработка тестировалась на платформе 8.3.9.2170, обработка универсальна, поэтому будет работать и на более поздних версиях платформы.
Перенос данных в исходной базе работает только на толстом клиенте на обычных формах. Для управляемых форм необходимо установить режим совместимости и запустить обработку в толстом клиенте. Это временное решение, после выгрузки можно вернуть режим совместимости обратно.
Есть ограничение по регистрам. Реализована выгрузка только регистров сведений и регистров накопления. Регистры бухгалтерии и регистры расчета не доступны для отправки, т.к. на практике не было необходимости их переносить. Они имеют свои особенности, например, в регистре бухгалтерии несколько счетов, каждый из них имеет свой набор субконто, соответственно, перенос остатков надо разделять по счетам, пока это не реализовано. Поэтому текущий функционал по переносу регистров бухгалтерии и расчета необходимо дописывать и тестировать.
Поэтапный перенос данных в новую базу
В начале был вопрос как делать обрезание базы. Рассматривались такие варианты
1. остановить рабочую базу (выгнать всех пользователей), в рабочей базе перенести остатки на дату среза и удалить все документы до даты среза с движениями.
2. остановить рабочую базу и перенести данные в новую базу.
3. создать узел обмена в рабочей базе для ведения списка измененных объектов, перенести данные в новую базу, по узлу обмена перенести объекты, которые были изменены/созданы во время переноса данных.
Рабочую базу надо было обрезать на 3 месяца назад. В базе накопились документы за 6 лет работы. Удаление документов с движениями заняло бы неделю. Останавливать на такое долгое время рабочую базу, естественно, нельзя. Поэтому первый вариант был отвергнут сразу. Также и 2 вариант был не пригоден, т.к. в момент переноса вылезло много ошибок и ньюансов, которые приходилось решать. Да и сам перенос занял сутки, что тоже критично для крупного предприятия.
Поэтапный перенос без остановки рабочей базы по 3 варианту позволил решить все проблемы по созданию обрезанной копии рабочей базы с актуальными данными не отключая пользователей.
Подготовка конфигурации
Конфигурацию новой базы берем из рабочей базы, т.к. все алгоритмы должны также работать и метаданные должны полностью соответствовать для копирования объектов.
Для переноса остатков в конфигурации новой базы должен быть документ КорректировкаЗаписейРегистров. Это стандартный документ для типовых конфигураций. В самописных или нетиповых конфигурациях этот документ необходимо добавить.
Ссылки на документы до среза
На практике был добавлен регистр сведений _ОбъектыДоСреза в новую конфигурацию. Этот регистр нужен для учета документов, которые заведены до даты среза и на которые будут ссылки при переносе данных. Например, документы-партии в регистре «Товары на складах» при партионном учете. При переносе данных, если склад не пустой, то очень вероятно, что остатки будут на документах-партиях, заведенных до даты среза. Соответственно, в отчетах по складу вместо этих документов будут ссылки без объектов, многих пользователей это пугает. Также может быть большая проблема при проведении документов по партиям, т.к. в этих алгоритмах документы-партии сортируются по дате. Ссылка без объекта выдаст ошибку.
При переносе данных анализируются все ссылочные объекты. Если встречается документ до даты среза, то записываем ссылку на него в регистр _ОбъектыДоСреза. После переноса всех объектов в новую базу переносим все документы из регистра без движений. Естественно, делаем запрет в новой базе на проведение документов до даты среза во избежание дублирования движений.
Документы со смещенными движениями
В 1С версии 8 появилась возможность у документов делать движения на произвольную дату, не только на дату самого документа. В базе могут быть документы до даты среза, имеющие движения после даты среза. Такие документы не перенесутся вообще либо перенесутся без движений. На практике такие документы искусственно корректируются так, чтобы все движения были за одну дату, которая равна дате документа.
Удаление предопределенных документов
При отправке ссылочных объектов (справочники, документы и др.) в новую базу внутренние идентификаторы этих объектов копируются. Это самый надежный способ соответствия объектов старой и новой базы. Связь по реквизитам не так удобна, т.к. все поля можно изменить (можно завести несколько элементов справочников с одним кодом и наименованием) и все ссылки можно стандартизировать (они задаются видом объекта и идентификатором).
Проблема возникает с предопределенными элементами. При создании новой базы во время первого обновления базы данных предопределенные элементы создаются с новыми идентификаторами, отличными от идентификаторов из старой базы. Решается эта проблема просто: удалением всех предопределенных элементов до начала переноса. При переносе эти объекты создадутся, как и непредопределенные, с нужными внутренними идентификаторами.
Непосредственны перенос данных
Порядок переноса данных можно менять. Но можно выделить первичные и вторичные объекты. Вторичные объекты ссылаются на первичные, м.б. за небольшим исключением.
К первичным объектам можно отнести: Константы, Пользователи, Справочники, Планы видов характеристик.
К вторичным объектам можно отнести: Документы и Регистры.
Примерный план переноса данных
1.Перенести ДКорректировкаЗаписейРегистров
Перенести s_ОбъектыДоСреза
Сдвинуть документы где Дата среза между Датой движений и Датой документа
Удалить Предопределенные в базе 2
2.Отправка констант
Отправка пользователей ИБ
Отправка ссылочных объектов
Отправка независимых регистров сведений (*s_ИсторияОбъектов)
4.Отправка среза подчиненных регистров
5.Загрузка документов из регистра Объекты до среза
6.Отправка измененных объектов через узел обмена
7.Запрет проведения после среза
Обработка переноса данных
Для создания обрезанной копии исходной базы необходимо подготовить конфигурацию как было описано ранее. В исходной базе запускается обработка «Процессор». На вкладке прочее задаем параметры подключения к новой базе. Допускается файловый и серверный варианты подключения.
При успешном подключении появится зеленая надпись «Подключено…».
Далее закладка «Метаданные», нажимаем кнопку Заполнить. Флаг «Итоги» позволит увидеть общее количество объектов по видам метаданных. Можно наложить условие вывода, например, выводить только те метаданные, в которых заведен хотя бы 1 объект.
Далее поэтапно выбираем виды метаданных флажками. Выбираем действие "Выгрузить обрезанную базу", задаем дату среза в поле «Дата». Для некоторых видов метаданных можно указать отбор по любым полям объекта, если не всё нужно переносить (либо доотправить необходимо небольшую часть объектов).
После настройки всех параметров запускаем обмен по кнопке «Выполнить».
После выполнения выгрузки появится сообщение о результате выполнения операций.