О важности выбора терминов или удаление/очистка версий объектов в БСП

28.01.26

Разработка - БСП (Библиотека стандартных подсистем)

Про регламент очистки версий объектов в подсистеме БСП.

БСП великолепна. Я ни в коей мере не критикую ни саму БСП, ни ее разработчиков, этой статьей хочу подсветить важность выбора терминов.

 

Три вопроса

Начну с трех вопросов. Вы хорошо знаете подсистему БСП "Версионирование объектов"?

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

А вы знаете, что эта подсистема позволяет настраивать время хранения версий и автоматически удалять устаревшие версии?

Думаю, примерно все видели эту настройку. Есть регистр сведений НастройкиВерсионированияОбъектов, где для измерения ТипОбъекта (тип - идентификатор объектов метаданных) задается ресурс СрокХраненияВерсий. Интересно, что срок хранения версий - это перечисление СрокиХраненияВерсий, где заданы следующие значения: ЗаПоследнююНеделю, ЗаПоследнийМесяц, ЗаПоследниеТриМесяца, ЗаПоследниеШестьМесяцев, ЗаПоследнийГод, Бессрочно. То есть мы не можем задать срок хранения версий, например, один день (хотя это и бессмысленно) или два года.

А вы знаете, что версии на самом деле не удаляются?

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

Не помню уже, когда при изучении кода БСП наткнулся на этот факт, но в моем окружении все удивляются, когда узнают, что версии не удаляются. Все уверены, что история удаляется. Есть же настройка длительности хранения, есть регламент, для чего это все, если не для удаления?

И увы, никто никогда не читает документацию...

 

Путаница в терминах

Кажется, само наличие свойства "Срок хранения версий" подразумевает, что версии хранятся какой-то срок, по истечении которого, они удаляются.

А что такое версия? Тут и начинается неоднозначность. С одной стороны, регистр ВерсииОбъектов подразумевает, что версия - это запись этого регистра, то есть совокупность ссылки на объект, самого объекта в виде двоичных данных, информации об авторе изменения, дате и прочее. С другой стороны, у этого регистра есть реквизит ВерсияОбъекта, где и хранится сжатый объект. Я понимаю "срок хранения версий" как "срок хранения всей записи о конкретной версии в регистре сведений ВерсииОбъектов", а разработчики БСП как "срок хранения реквизита ВерсияОбъекта в записи регистра сведений ВерсииОбъектов".

Далее, даже сам регламент так и называется - ОчисткаУстаревшихВерсийОбъектов. Если вдуматься, ну какое удаление. Очистка - это же когда какой-то предмет никуда не девается, просто очищается от чего-то. Как раз записи регистра остаются, просто очищаются от двоичных данных. А с другой стороны, ну какая собственно разница между словами "очистка" и "удаление"? Это же по сути одно и то же.

 

 

Так и откладывается в головах, что устаревшие версии удаляются.

Не помогает в понимании того, что на самом деле происходит, и типовая форма настройки версий. Посмотрите, группа названа "Очистка устаревших версий", а флажок, управляющий включенностью регламента, называется "Автоматически удалять устаревшие версии".

 

 

Тут же прямо написано - удалять!

 

А что в коде?

В свернутом блоке код одного из первых вариантов регламента очистки версий

 
 ОчиститьУстаревшиеВерсииОбъектов() из БСП 3.1.1.91, 2019 год

 

Ищем записи, в которых еще есть данные версии запросом поиска, текст которого дозаполняется в методе ЗапросПоУстаревшимВерсиям, и в записях регистра просто очищается ВерсияОбъекта (так как это тип ХранилищеЗначений, просто присваиваем ему Неопределено). Возможно кому-то в этом коде будет непонятно, как же так, ищем записи с булевым реквизитом ЕстьДанныеВерсии, а при очистке потом просто затираем ВерсияОбъекта, не трогая ЕстьДанныеВерсии? В следующий запуск поиска устаревших версий мы ведь будем обрабатывать те же самые записи? Нет, дело в том, что при записи версии срабатывает обработчик ПередЗаписью, расположенный в модуле набора записей регистра. Он и устанавливает значение ЕстьДанныеВерсии в Ложь.

 
 ПередЗаписью в модуле набора записей регистра ВерсииОбъектов

 

А вот код из самой последней на сегодня БСП ветки 3.2, предназначенной для платформы 8.5

 
 ОчиститьУстаревшиеВерсииОбъектов() из БСП 3.2.1.306, 2026 год

Бросается в глаза, что усложнили получение текста запроса для поиска устаревших версий. Вы обратили внимание, что теперь в шаблоне запроса выборки записей получаем только первые 1000 строк? Стало оптимальнее. Представьте, у нас миллион устаревших записей. В старых версиях БСП и запрос дольше выполняется и в выборку попадают все записи, затем долго и мучительно очищаются. Сейчас мы получаем ограниченное количество записей, обрабатываем их, затем делаем следующий запрос. Если он что-то вернул - продолжаем очистку, нет - выходим из регламента. 

 

Почему плохо оставлять записи о версиях?

У меня два возражения против очищенных версий.

Версионирование объектов - это сервисная подсистема. В наличии или отсутствии версий нет большой ценности для бизнеса. Версии нужны техподдержке, аналитикам, продвинутым пользователям, но они нужны полные, с возможностью посмотреть изменение реквизитов и восстановления объекта. А из очищенных записей мы видим, кто и когда изменил объект, посмотреть, какие именно реквизиты были изменены, не получится. Но в журнале регистрации и так есть информация о том, кто и когда изменил объект! Получается, мы дублируем журнал регистрации. Поэтому нет никакого смысла оставлять пустые записи о версиях.

Подумаем еще о производительности приложения. Регистр ВерсииОбъектов очень коварен из-за того, что измерение Объект имеет тип ВсеСсылки. Это нужно для универсальности. Но обратная сторона универсальности - падение производительности. При добавлении или удаление справочника или документа в конфигурацию будет происходить реструктуризация регистра. Когда регистр маленький, реструктуризация быстрая. Когда большой - ну все зависит от железа, вида реструктуризации (вы пользуетесь второй версией?) и погоды за окном (а это уже шутка). Обидно, если значительная часть записей регистра - это пустышки.

 

 

 

Хорошо, версии не удаляются, принято. А как же удалить версии?

Изначально я хотел выложить свое расширение, которое в регламенте вместо очистки хранилища из записи позволяет удалить саму запись.

Но все-таки прорекламирую уже существующее на инфостарте решение Владимира Чанова Удаление записей версий объектов для типовых конфигураций. Он реализовал еще и настройку, с помощью которой можно управлять поведением - удалять версии или же просто очищать.

 

Что дальше?

Говорят, на "партнерке" есть форум с обсуждением БСП, куда можно отправить предложения разработчикам. К сожалению, у меня нет туда доступа.

Очень помогло бы, если бы на форме настройки версий появилась бы декорация с пояснением работы механизма очистки. Что-то типа текста из документации.

Ну и призываю всех тщательнее относиться к выбору терминов. Кто знает, как их будут трактовать пользователи?

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

БСП версии объектов

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

3254 руб.

21.11.2024    11357    44    24    

50

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

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

23.09.2025    8342    AlexeyPROSTO_1C    1    

17

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Уже заезженная тема с выводом в Word макетов при помощи БСП, но некоторые коллеги все равно спрашивают. Поэтому размещаю тут материал, как это сделать за три простых шага. Решение, которым я успешно пользуюсь в случаях, когда не нужна универсальность подключаемых внешних печатных форм.

16.09.2025    4864    _seerco2002    0    

34

Нейросети БСП (Библиотека стандартных подсистем) Инструментарий разработчика Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Telegram-бот для разработчиков 1С, работающих с БСП. Если не знаете нужный под задачу метод или не помните название, то опишите боту задачу и получите список подходящих экспортных методов из общих модулей БСП.

02.09.2025    6322    krasnov322    22    

42

Анализ учета БСП (Библиотека стандартных подсистем) 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Расширение для конфигураций на базе БСП 3.х. Позволяет создавать новые отчеты путем соединения или объединения других отчетов.

22.05.2025    4931    197    seperblunt    9    

26

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

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок). Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а также в мобильном приложении.

12.05.2025    5912    AlexeyPROSTO_1C    3    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. drkon 28.01.26 10:12 Сейчас в теме
Спасибо за статью!

Информативно и очень познавательно!
2. dsdred 4188 28.01.26 11:48 Сейчас в теме
Дак БСП версионирование это старый механизм. Зачем его дорабатывать когда есть платфррменный?
3. ardn 735 28.01.26 11:55 Сейчас в теме
(2) Я согласен с тем, что платформенная История данных хороша и ее надо использовать. Но до сих пор активно используется версионирование из БСП.
4. dsdred 4188 28.01.26 12:04 Сейчас в теме
(3)
Но до сих пор активно используется версионирование из БСП.


Я могу ошибаться, но платформу 7.7 же не дорабатывают? Ее просто тоже в некоторых местах активно используют.


Мне кажется надо развивать новые механизмы, а не дорабатывать старые.
А то получается есть БСП подсистема по версионированию, но до сих пор нет такойже по Истории данных.
Мне лично пришлось нарисовать для Истории данных самому и выложить в опенсорс.
Для отправки сообщения требуется регистрация/авторизация