Версионирование своих объектов без проблем при обновлении на примере БП 44.115

19.09.16

Разработка - Инструментарий разработчика

Стандартный механизм версионирования - прекрасен. Для того, чтобы использовать его для "своих" объектов, нужно добавить свои типы к определяемому типу "ВерсионируемыеДанные" и к источникам подписки "ЗаписатьВерсиюДокументаБП". Но эти изменения "слетят" при следующем же обновлении. Как этого избежать?

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Версионирование своих объектов.cfe
.cfe 18,95Kb
23 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Для того, чтобы использовать стандартный режим версинирования для своих объектов, нужно скопировать ОбщуюКоманду "ИсторияИзменений" и переназначить новой команде тип параметра, указав только свои объекты.  То же самое (скопировать и переназначить источник) нужно для подписки ЗаписатьВерсиюДокументаБП.

Затем необходимо создать расширение и включить в него форму "НастройкиХраненияИстории" регистра сведений "НастройкиВерсионированияОбъектов". В этой форме считываются типы с команды ИсторияИзменений в процедуре ЗаполнитьТипыОбъектовВДеревеЗначений. Наша задача дополнить эти типы нашими.

Для этого я ждал выхода 8.3.9, чтобы использовать аннотацию &Перед, но, к сожалению для себя, обнаружил, что в конфигурации поставщика БП 44.115 установлен режим совместимости 8.3.8,  запрещающий использование аннотаций. Платформа скоро выйдет, а режим совместимости БП будет ещё, думаю, несколько релизов. Поэтому придется использовать расширения, привязанные к командам. 

В связи с тем, что скоро можно будет просто воспользоваться аннотацией, я не стал извращаться, а просто продублировал команды формы, в которых вызывается процедура ЗаполнитьТипыОбъектовВДеревеЗначений, и запретил её исполнение в расширяемом объекте. (Что справедливо кто-то может оценить как лень или еретичество, не буду оправдываться - согласен). Обработчики команд в форме расширении необходимо выбрать. Это обработчик "ПриСозданииНаСервере" и команда "ОбновитьПеред". Ну а процедуру дополнения - скопировал из оригинальной ЗаполнитьТипыОбъектовВДеревеЗначений и чуть её изменил.

В итоге - заходя в настройку версионирования - видим возможность сохранять свои объекты. Команда обращения к истории сама встала в форму и работает.

Расширение приходится редакрировать намного реже обновлений. Код расширения прилагаю полностью. Прошу обратить внимание, что копию команды я назвал ITSP_ИсторияИзменений, и это название фигурирует в коде и может отличаться от вашего.


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

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

	УстановитьВыполнениеОбработчиковСобытия("Ложь");
КонецПроцедуры

//&После("ЗаполнитьТипыОбъектовВДеревеЗначений") Когда в свойствах БП по умолчанию будет выключен режим совместимости с 8.3.8 Тогда можно будет оставить только эту процедуру, а остальные убрать
Процедура ВерсионированиеСвоих_ПослеЗаполнитьТипыОбъектовВДеревеЗначений()
	
	НастройкиВерсионирования = ТекущиеНастройкиВерсионирования();

	ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных");
	//ДеревоОМ.Строки.Очистить();
	
	// Тип параметра команды ИсторияИзменений содержит состав объектов для которых 
	// применяется версионирование.
	МассивТипов = Метаданные.ОбщиеКоманды.ITSP_ИсторияИзменений.ТипПараметраКоманды.Типы();
	
	ВсеСправочники = Справочники.ТипВсеСсылки();
	ВсеДокументы = Документы.ТипВсеСсылки();
	УзелСправочники = ДеревоОМ.Строки.Найти("01КлассСправочникиКорень","КлассОбъекта");
	УзелДокументы = ДеревоОМ.Строки.Найти("02КлассДокументыКорень","КлассОбъекта");

	
	Для Каждого Тип Из МассивТипов Цикл
		Если ВсеСправочники.СодержитТип(Тип) Тогда
			НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить();
			НоваяСтрокаТаблицы.КодКартинки = 19;
			НоваяСтрокаТаблицы.КлассОбъекта = "КлассСправочники";
		ИначеЕсли ВсеДокументы.СодержитТип(Тип) Тогда
			НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить();
			НоваяСтрокаТаблицы.КодКартинки = 20;
			НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы";
		КонецЕсли;
		МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип);
		НоваяСтрокаТаблицы.ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип);
		НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним;
		
		НайденныеНастройки = НастройкиВерсионирования.НайтиСтроки(Новый Структура("ТипОбъекта", НоваяСтрокаТаблицы.ТипОбъекта));
		Если НайденныеНастройки.Количество() > 0 Тогда
			НоваяСтрокаТаблицы.ВариантВерсионирования = НайденныеНастройки[0].ВариантВерсионирования;
			НоваяСтрокаТаблицы.СрокХраненияВерсий = НайденныеНастройки[0].СрокХраненияВерсий;
			Если Не ЗначениеЗаполнено(НайденныеНастройки[0].СрокХраненияВерсий) Тогда
				НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
			КонецЕсли;
		Иначе
			НоваяСтрокаТаблицы.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать;
			НоваяСтрокаТаблицы.СрокХраненияВерсий = Перечисления.СрокиХраненияВерсий.Бессрочно;
		КонецЕсли;
		
		Если НоваяСтрокаТаблицы.КлассОбъекта = "КлассДокументы" Тогда
			НоваяСтрокаТаблицы.Проводится = ? (МетаданныеОбъекта.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить, Истина, Ложь);
		КонецЕсли;
	КонецЦикла;
	ДеревоОМ.Строки.Сортировать("КлассОбъекта");
	Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл
		УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта");
	КонецЦикла;
	ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных");
	
КонецПроцедуры

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

Версионирование Новые объекты Расширения

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    213021    1165    413    

1049

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    40513    222    115    

211

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

16000 руб.

10.11.2023    18800    76    39    

92

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    26530    67    30    

96

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    37631    134    55    

176

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.<br/> Далее в публикации:<br/> MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    3985    8    10    

14

Инструментарий разработчика 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    3677    7    0    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ellavs 1064 17.11.17 15:39 Сейчас в теме
Спасибо за совет.
Только ссылка на историю изменений в документе постоянно отображается. В типовой конфигурации она исчезает у тех документов, у которых версионирование не настроено. Не подскажете, как настроить видимость этой команды в зависимости от указания версионирования у документа.
3. niv 28.02.20 23:19 Сейчас в теме
(1) Общая команда ИсторияИзменений подключена к функциональной опции ИспользоватьВерсионированиеОбъектов, а Ваша команда по всей видимости нет.
2. ЕСТЬNULL 208 20.11.17 04:17 Сейчас в теме
Эх, не знаю. И нет времени поизучать.

Надо посмотреть как работают стандартные объекты. Скорее всего какая-то процедура из общего модуля версионирования должна быть в ПриСозданииНаСервере (аналогично подсистеме печать).
4. cheromg 5 31.05.21 06:23 Сейчас в теме
Расширение не работает пишет, "Не является значение объектного типа "Тип объекта"".
6. EvgeTrofi 129 27.05.22 08:39 Сейчас в теме
(4) Если ещё интересно, то вот реализация на подключение к версионированию документов, добавленных в расширение.
https://infostart.ru/public/1665934/
5. ЕСТЬNULL 208 01.06.21 05:22 Сейчас в теме
Уже прошло 5 лет, конечно не работает. Адаптируйте его под новый релиз, принцип тот же.
7. snayper1979 6 26.07.23 11:59 Сейчас в теме
Ерп 2.5. Режим совместимости 8.3.17. Без открытия для редактирования основной конфы как в 6 сделать не получается, весь затык в РегистрСведений.ВерсииОбъектов где реквизит Объект - все ссылки, который не видит объектов расширения. Соответственно при записи выдает "Неверный тип значения: РегистрСведений.ВерсииОбъектов.Объект"
8. EvG32 03.04.24 20:27 Сейчас в теме
никто не настраивал исключение реквизитов из отчетов версионирования? в документации

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

по логике это

ИмяТабличнойЧасти.*
исключает всю ТЧ из отчетов, значит

ИмяТабличнойЧасти.ИмяРеквизита
должно исключать вывод только этого реквизита, но не работает. Либо всю ТЧ исключает, либо ничего. Не было пытов?
Для отправки сообщения требуется регистрация/авторизация