В современном мире 1С есть два способа версионировать объекты при записи, просматривать их историю, восстанавливать прошлые состояния объектов.
- Версионирование объектов в БСП появилось давно и используется повсеменстно.
- История данных в платформе появилась не так давно и пока не получила масштабного распространения.
Плюсы и минусы каждого из механизмов пусть останутся за рамками данной статьи, эта статья посвящена шагам, которые нужно проделать чтобы перейти с версионирования объектов БСП на историю данных в платформе.
Условно можно все действия по переходу определить следующими шагами:
- Настроить версионирование платформы.
- Выполнить миграцию истории объектов из БСП в платформу.
- Настроить регламентное задание обновления истории (читайте 26.2. Устройство механизма, документации разработчика к платформе).
- Удалить историю версий БСП.
- Отключить версионирование объектов БСП.
Шаг 1 и 2: Настройка версионирования платформы и выполнение миграции
Ничего особенного в этом плане придумывать не нужно. На ИТС есть статья: Настройка и перенос истории данных, к которой приложена обработка по лицензии CC BY 4.0 и которая доступна без авторизации.
Обработка позволяет как выполнить первоначальную настройку версионирования платформы, так и выполнить миграцию файлов с историей из подсистемы БСП в формат хранения платформы.
- Запускаем НастройкаИПереносИсторииДанных.epf.
Скриншот обработки НастройкаИПереносИсторииДанных.epf,
выполнен на БСП 3.1.2
- Выбираем объекты для версионирования.
- Нажимаем Записать версии.
Версии объектов успешно перенесены!
Скриншот результата переноса,
слева версионирование БСП, справа версионирование платформы,
выполнен на БСП 3.1.2
Шаг 3. Настройка регламентного задания обновления истории
Необходимо выполнять перенос данных из очереди версий в таблицы базы данных. Т.е. периодически выполнять ИсторияДанных.ОбновитьИсторию().
Есть два варианта решения:
- Снять конфигурацию с поддержки и создать регламентное задание, которое будет выполнять описанный выше вызов.
- Добавить в БСП дополнительную обработку, реализующую эту же команду, и настроить для нее расписание регламентного запуска.
Обработка приложена к этой статье. Ее реализация открыта и понятна.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки
// Возвращает сведения о внешней обработке.
//
// Возвращаемое значение:
// Структура - Подробнее см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке().
//
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Информация = НСтр("ru = 'Обработка сервисных функций истории данных.'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0.1.1";
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Обновить историю данных'");
Команда.Идентификатор = "ОбновитьИсторию";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Истина;
Описание = НСтр("ru = 'Для выполнения обновления истории данных требуется установка привилегированного режима.'");
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(Описание);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Возврат ПараметрыРегистрации;
КонецФункции
// Обработчик серверных команд.
//
// Параметры:
// ИмяКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке().
// ПараметрыВыполнения - Структура - Контекст выполнения команды.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки.
// Может использоваться для чтения параметров обработки.
// Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы().
//
Процедура ВыполнитьКоманду(Знач ИмяКоманды, Знач ПараметрыВыполнения) Экспорт
// Общие действия перед началом выполнения команд.
УстановитьПривилегированныйРежим(Истина);
// Диспетчеризация обработчиков команд.
Если ИмяКоманды = "ОбновитьИсторию" Тогда
ИсторияДанных.ОбновитьИсторию();
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Команда ""%1"" не поддерживается обработкой ""%2""'"), ИмяКоманды, Метаданные().Представление());
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки
#КонецОбласти
#КонецОбласти
#КонецЕсли
Код модуля объекта внешней обработки
Для того, чтобы ее добавить в конфигурацию необходимо
- Открыть Администрирование / Печатные формы отчеты и обработки
- Включить флажок Дополнительные отчеты и обработки, если он отключен
- Нажать на гиперссылку Дополнительные отчеты и обработки
- Нажать на кнопку Добавить из файла... и выбрать обработку ОбновлениеИсторииДанных.epf
- Установить расписание запуска (рекомендуется каждые 2-5 минут, по аналогии с регламентным заданием обновления полнотекстового поиска)
Скриншот демонстрации установки расписания для доп. обработки обновления истории данных,
выполнен на БСП 3.1.2
Шаг 4. Удалить версии истории из БСП.
- Перейдите в Администрирование / Общие настройки / История изменений
- Нажмите на гиперссылку Настроить
- Установите срок хранения версий За последнюю неделю
- Нажмите Очистить
Скриншот демонстрации удаления устаревших версий,
выполнен на БСП 3.1.2
Шаг 5. Отключить подсистему БСП.
- Перейдите в Администрирование / Общие настройки / История изменений
- Снимите флажок Хранить историю изменений
На этом все, спасибо за внимание.