В базе Розница в течении двух лет использовалось типовое версионирование. Постепенно версии стали занимать очень много место. Последней каплей терпения стала невозможность проведения реструктуризации при переходе с 8.1 на 8.3. Решено было вынести регистр версий в отдельную базу.
По замерам в SQL-сервере при общем объеме базы 286 Гб размер таблицы регистра версий стал 129, т.е. 45%.
Сначала я хотел перенести в отдельную SQL-базу через «чистый SQL», но потом решил, что написание примитивного кода переноса будет быстрее и сопровождать легче.
В итоге за 2 часа рабочего времени написал структуру базы и обработку, которая переносит регистр из рабочей базы в отдельную. Обработка и база в формате 8.2
В конфигурации всего несколько справочников:
Регистр версий имеет структуру:
Я добавил только ресурс «Дата добавления», чтобы отслеживать, когда версия была перенесена в базу версий.
Объект – это значение типа «Уникальный идентификатор», является ссылкой на объект в исходной базе.
От замысла хранить версии из нескольки баз в одной базе версий отказался – отдельные базы проще в обслуживании.
Заполненный данными регистр версий в базе версий выглядит так:
Заполненный список типов выглядит так:
Заполненный список авторов выглядит так:
Обработка имеет простую форму:
Используется обычно по расписанию для запуска из регламентного задания:
О = САП.ДатьВнешнююОбработку("Перекачка версий в базу версий");
О.ВыбСервер = "server";
О.ВыбБаза = "VersRT";
О.ВыбПользователь = "robot";
О.ВыбПароль = "1111111111111";
О.Работа();
Перенесенные версии удаляются из базы данных.
Версии использовались только в отчете по показу версий объекта. Вместо обращения к рабочей базе нужно переписать код для обращения к базе версий по COM-соединению. Остальное не меняется. Это просто.