Для того, чтобы использовать стандартный режим версинирования для своих объектов, нужно скопировать ОбщуюКоманду «ИсторияИзменений» и переназначить новой команде тип параметра, указав только свои объекты. То же самое (скопировать и переназначить источник) нужно для подписки ЗаписатьВерсиюДокументаБП.
Затем необходимо создать расширение и включить в него форму «НастройкиХраненияИстории» регистра сведений «НастройкиВерсионированияОбъектов». В этой форме считываются типы с команды ИсторияИзменений в процедуре ЗаполнитьТипыОбъектовВДеревеЗначений. Наша задача дополнить эти типы нашими.
Для этого я ждал выхода 8.3.9, чтобы использовать аннотацию &Перед, но, к сожалению для себя, обнаружил, что в конфигурации поставщика БП 44.115 установлен режим совместимости 8.3.8, запрещающий использование аннотаций. Платформа скоро выйдет, а режим совместимости БП будет ещё, думаю, несколько релизов. Поэтому придется использовать расширения, привязанные к командам.
В связи с тем, что скоро можно будет просто воспользоваться аннотацией, я не стал извращаться, а просто продублировал команды формы, в которых вызывается процедура ЗаполнитьТипыОбъектовВДеревеЗначений, и запретил её исполнение в расширяемом объекте. (Что справедливо кто-то может оценить как лень или еретичество, не буду оправдываться — согласен). Обработчики команд в форме расширении необходимо выбрать. Это обработчик «ПриСозданииНаСервере» и команда «ОбновитьПеред». Ну а процедуру дополнения — скопировал из оригинальной ЗаполнитьТипыОбъектовВДеревеЗначений и чуть её изменил.
В итоге — заходя в настройку версионирования — видим возможность сохранять свои объекты. Команда обращения к истории сама встала в форму и работает.
Расширение приходится редакрировать намного реже обновлений. Код расширения прилагаю полностью. Прошу обратить внимание, что копию команды я назвал ITSP_ИсторияИзменений, и это название фигурирует в коде и может отличаться от вашего.
&НаКлиенте
Процедура ВерсионированиеСвоих_ОбновитьПеред(Команда)
ЗаполнитьТипыОбъектовВДеревеЗначений();
ОбновитьИнформациюОбУстаревшихВерсиях();
ВерсионированиеСвоих_ПослеЗаполнитьТипыОбъектовВДеревеЗначений();
Для Каждого Элемент Из ДеревоОбъектовМетаданных.ПолучитьЭлементы() Цикл
Элементы.ДеревоОбъектовМетаданных.Развернуть(Элемент.ПолучитьИдентификатор(), Истина);
КонецЦикла;
УстановитьВыполнениеОбработчиковСобытия("Ложь");
КонецПроцедуры
&НаСервере
Процедура ВерсионированиеСвоих_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
Возврат;
КонецЕсли;
ЗаполнитьТипыОбъектовВДеревеЗначений();
ВерсионированиеСвоих_ПослеЗаполнитьТипыОбъектовВДеревеЗначений();
ЗаполнитьСпискиВыбора();
Элементы.Очистить.Видимость = Ложь;
Элементы.Расписание.Заголовок = ТекущееРасписание();
АвтоматическиУдалятьУстаревшиеВерсии = АвтоматическаяОчисткаВключена();
Элементы.Расписание.Доступность = АвтоматическиУдалятьУстаревшиеВерсии;
Элементы.НастроитьРасписание.Доступность = АвтоматическиУдалятьУстаревшиеВерсии;
Элементы.ИнформацияОбУстаревшихВерсиях.Заголовок = ТекстСостоянияПодсчет();
УстановитьВыполнениеОбработчиковСобытия("Ложь");
КонецПроцедуры
//&После("ЗаполнитьТипыОбъектовВДеревеЗначений") Когда в свойствах БП по умолчанию будет выключен режим совместимости с 8.3.8 Тогда можно будет оставить только эту процедуру, а остальные убрать
Процедура ВерсионированиеСвоих_ПослеЗаполнитьТипыОбъектовВДеревеЗначений()
НастройкиВерсионирования = ТекущиеНастройкиВерсионирования();
ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных");
//ДеревоОМ.Строки.Очистить();
// Тип параметра команды ИсторияИзменений содержит состав объектов для которых
// применяется версионирование.
МассивТипов = Метаданные.ОбщиеКоманды.ITSP_ИсторияИзменений.ТипПараметраКоманды.Типы();
ВсеСправочники = Справочники.ТипВсеСсылки();
ВсеДокументы = Документы.ТипВсеСсылки();
УзелСправочники = ДеревоОМ.Строки.Найти("01КлассСправочникиКорень","КлассОбъекта");
УзелДокументы = ДеревоОМ.Строки.Найти("02КлассДокументыКорень","КлассОбъекта");
Для Каждого Тип Из МассивТипов Цикл
Если ВсеСправочники.СодержитТип(Тип) Тогда
НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить();
НоваяСтрокаТаблицы.КодКартинки = 19;
НоваяСтрокаТаблицы.КлассОбъекта = "КлассСправочники";
ИначеЕсли ВсеДокументы.СодержитТип(Тип) Тогда
НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить();
НоваяСтрокаТаблицы.КодКартинки = 20;
НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы";
КонецЕсли;
МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип);
НоваяСтрокаТаблицы.ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип);
НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним;
НайденныеНастройки = НастройкиВерсионирования.НайтиСтроки(Новый Структура("ТипОбъекта", НоваяСтрокаТаблицы.ТипОбъекта));
Если НайденныеНастройки.Количество() > 0 Тогда
НоваяСтрокаТаблицы.ВариантВерсионирования = НайденныеНастройки[0].ВариантВерсионирования;
НоваяСтрокаТаблицы.СрокХраненияВерсий = НайденныеНастройки[0].СрокХраненияВерсий;
Если Не ЗначениеЗаполнено(НайденныеНастройки[0].СрокХраненияВерсий) Тогда
НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
КонецЕсли;
Иначе
НоваяСтрокаТаблицы.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать;
НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
КонецЕсли;
Если НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы" Тогда
НоваяСтрокаТаблицы.Проводится = ? (МетаданныеОбъекта.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить, Истина, Ложь);
КонецЕсли;
КонецЦикла;
ДеревоОМ.Строки.Сортировать("КлассОбъекта");
Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл
УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта");
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных");
КонецПроцедуры
Спасибо за совет.
Только ссылка на историю изменений в документе постоянно отображается. В типовой конфигурации она исчезает у тех документов, у которых версионирование не настроено. Не подскажете, как настроить видимость этой команды в зависимости от указания версионирования у документа.
Эх, не знаю. И нет времени поизучать.
Надо посмотреть как работают стандартные объекты. Скорее всего какая-то процедура из общего модуля версионирования должна быть в ПриСозданииНаСервере (аналогично подсистеме печать).