Добавление объекта в подсистему "Версионирование объектов" на расширении в ЗУП

30.01.26

Разработка - Механизмы типовых конфигураций

Описываю мой опыт подключения документа к подсистеме "Версионирование объектов" в ЗУП 3.1.

Здоровья всем страждущим!

Давеча необходимо было добавить документу версионирование.

Нашел статью, но там было много пунктов, показавшихся мне неактуальными, да и вышла она несколько лет назад. Решил обновить информацию отдельной статьей.

1. Начнем с базы, согласно ИТС. Для документов захватываем на расширении только определяемый тип "ВерсионируемыеДанные" (тип ссылка).

Если у вас другой тип объекта, например Справочник, тогда также захватываем "ВерсионируемыеДанныеОбъект" (тип объект).

При этом по умолчанию встает тип "Произвольный", необходимо в расширении оставить только типы объектов расширения.

2. Во всех формах версионируемых объектов и документов в обработчике "ПриСозданииНаСервере" добавить фрагмент кода:

// СтандартныеПодсистемы.ВерсионированиеОбъектов
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

Во всех модулях менеджера объектов (элементов), для которых встраивается версионирование, добавить фрагмент кода:

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

КонецПроцедуры

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

Если необходимо скрыть из отчетов по версиям технические реквизиты и табличные части, необходимо в процедуру определения настроек модуля менеджера добавить:

Настройки.ПриПолученииСлужебныхРеквизитов = Истина;

И в том же модуле менеджера:

// Ограничивает видимость реквизитов объекта в отчете по версии.
//
// Параметры:
//  Реквизиты - Массив - список имен реквизитов объекта.
Процедура ПриПолученииСлужебныхРеквизитов(Реквизиты) Экспорт
    Реквизиты.Добавить("ИмяРеквизита"); // реквизит объекта
    Реквизиты.Добавить("ИмяТабличнойЧасти.*"); // табличная часть объекта
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

Конец базы :)

3. Захватываем подписку на событие "ЗаписатьВерсиюДокументаЗарплатаКадрыБазовая" и в источнике указываем наши объекты.

4. Для корректной работы формы регистра сведений "НастройкиВерсионированияОбъектов" захватываем его форму списка "НастройкиХраненияИстории" на расширении, далее захватываем в расширение реквизит формы "ДеревоОбъектовМетаданных" и расширяем колонку реквизита "ТипОбъекта" типом ИдентификаторыОбъектовРасширений.

5. Захватываем в общем модуле "ОбщегоНазначения" функцию "ИдентификаторОбъектаМетаданных" и дополняем следующим кодом (взято из указанной выше статьи):

&ИзменениеИКонтроль("ИдентификаторОбъектаМетаданных")
Функция РасширениеА_ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных, ВызыватьИсключение)
	
	#Вставка
	Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Строка") Тогда
		ИдентификаторРасширения = Справочники.ИдентификаторыОбъектовРасширений.НайтиПоНаименованию(ОписаниеОбъектаМетаданных, Истина);
		Если ЗначениеЗаполнено(ИдентификаторРасширения) Тогда
			Возврат ИдентификаторРасширения;
		КонецЕсли;
	КонецЕсли;
	#КонецВставки
	
	Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(
	ОписаниеОбъектаМетаданных, ВызыватьИсключение);

КонецФункции

Захватываем общий модуль "ВерсионированиеОбъектов" и скорректируем процедуру:

 
 Общий модуль "ВерсионированиеОбъектов" процедура "ЗаписатьНастройкуВерсионированияПоОбъекту"
&ИзменениеИКонтроль("ЗаписатьНастройкуВерсионированияПоОбъекту")
Процедура РасширениеА_ЗаписатьНастройкуВерсионированияПоОбъекту(Знач ТипОбъекта, Знач ВариантВерсионирования, Знач СрокХраненияВерсий)
    #Вставка
	Если ТипЗнч(ТипОбъекта) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") 
		И ТипЗнч(ТипОбъекта) <> Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда 
	#КонецВставки
	#Удаление
	Если ТипЗнч(ТипОбъекта) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда 
	#КонецУдаления
		ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипОбъекта);
	КонецЕсли;

	НачатьТранзакцию();
	Попытка
		Блокировка = Новый БлокировкаДанных();
		ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиВерсионированияОбъектов");
		ЭлементБлокировки.УстановитьЗначение("ТипОбъекта", ТипОбъекта);
		Блокировка.Заблокировать();

		Настройка = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьМенеджерЗаписи();
		Настройка.ТипОбъекта = ТипОбъекта;

		Если СрокХраненияВерсий = Неопределено Тогда
			Настройка.Прочитать();
			Если Настройка.Выбран() Тогда
				СрокХраненияВерсий = Настройка.СрокХраненияВерсий;
			Иначе
				Настройка.ТипОбъекта = ТипОбъекта;
				СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
			КонецЕсли;
		КонецЕсли;

		Настройка.СрокХраненияВерсий = СрокХраненияВерсий;
		Настройка.Вариант = ВариантВерсионирования;
		Настройка.Записать();
		ЗафиксироватьТранзакцию();

	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;

КонецПроцедуры

 

6. Включаем сохранение версий для ваших объектов: Администрирование - Общие настройки - История изменений - Настроить

В конечном итоге, не считая ваших объектов, состав расширения следующий (в скриншоте я работаю с хранилищем):

 

 

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

Вступайте в нашу телеграмм-группу Инфостарт

БСП Версионирование ЗУП Расширение

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Механизмы типовых конфигураций Разработчик 1С 8.5 1С:Управление нашей фирмой 3.0 Абонемент ($m)

Кто ссылается на этот справочник, на что ссылается документ и какие регистры он двигает — обработка показывает это схемой прямо в базе. Выбранный объект — в центре, слева — кто ссылается на него, справа — на что ссылается он, под схемой — через какой реквизит; щелчок по соседу делает центром его. Много соседей — группы по видам, связи через составные типы — пунктиром и отключаются флажком. Для документации схему можно взять текстом PlantUML или сохранить файлом HTML вместе с таблицей связей. В статье я разбираю код: связи по типам реквизитов, движениям и владельцам, временное хранилище формы, схему в поле HTML и щелчок по узлу.

2 стартмани

30.09.2026    802    17    Petr_32    2    

6

Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 Абонемент ($m)

Использование переопределяемых процедур в 1С на управляемых формах.

1 стартмани

01.09.2026    4236    waider    3    

15

Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 1С:Управление торговлей 11 Россия Бесплатно (free)

С 1 сентября компании с выручкой от 120 миллионов обязаны принимать цифровой рубль, за отказ — штраф до 50 тысяч за каждый случай. Я снял выгрузку с актуального релиза «Управления торговлей» и пошёл смотреть, где это включается. Оказалось, что казначейский контур в типовой сделан подробно, а кассового нет вообще — и это не забывчивость, а решение, записанное в конфигурации прямым текстом.

31.08.2026    2352    G_100802897175107255412    6    

5

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данное расширение — это механизм, сделанный при помощи двух модулей из БСП (3.1.11.415), который позволяет динамически добавлять команды (кнопки и не только при желании) на формы управляемого приложения без изменения конфигурации. На примере данного механизма удобно рассмотреть некоторые возможности для расширения функционала объектов, которые подключены к механизму библиотеки стандартных подсистем.

1 стартмани

20.03.2026    5313    InFlach    0    

6

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    7136    AlexeyPROSTO_1C    5    

21

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    4556    YA_1100893639    1    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Komanda1C 02.02.26 12:25 Сейчас в теме
Проще включить платформенную настройку сохранения версий
2. britchenko 8 04.03.26 16:01 Сейчас в теме
Этот код, с большой вероятностью, будет избыточным:

&ИзменениеИКонтроль("ИдентификаторОбъектаМетаданных")
Функция РасширениеА_ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных, ВызыватьИсключение)
	
	#Вставка
	Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Строка") Тогда
		ИдентификаторРасширения = Справочники.ИдентификаторыОбъектовРасширений.НайтиПоНаименованию(ОписаниеОбъектаМетаданных, Истина);
		Если ЗначениеЗаполнено(ИдентификаторРасширения) Тогда
			Возврат ИдентификаторРасширения;
		КонецЕсли;
	КонецЕсли;
	#КонецВставки
	
	Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(
	ОписаниеОбъектаМетаданных, ВызыватьИсключение);

КонецФункции
Показать


Поскольку ранее был выполнен пункт 4:
расширяем колонку реквизита "ТипОбъекта" типом ИдентификаторыОбъектовРасширений.

Проверено на ЗУП КОРП версии 3.1.34.177
Для отправки сообщения требуется регистрация/авторизация