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

Тестировал на 1С:Предприятие 8.3 (8.3.26.1656), Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.36.39) .
Вступайте в нашу телеграмм-группу Инфостарт
