Версионирование объектов. Отсеивание дублирующихся версий в процессе возникновения (УПП 1.3). Часть 2.

13.04.15

Разработка - Универсальные функции

  В данной статье описан механизм, позволяющий не сохранять дублирующиеся версии объектов в процессе их возникновения, что избавит от постоянного их удаления различными обработками.

  Большинство решений данного вопроса на Инфостарте представлены в виде различных обработок, удаляющих записи регистра сведений «Версии объектов», в том числе и дублирующиеся.

  В данной статье остановимся подробнее на создании механизма, позволяющего не сохранять дублирующиеся версии в процессе их возникновения.

  В общем модуле «ВерсионированиеОбъектов» в экспортной процедуре МеханизмВерсионированияОбъектов_ПриЗаписиОбъекта(Источник, Отказ) необходимо добавить проверку на изменение объектов:

  В функции ПроверкаИзмененияОбъекта(Источник, ИмяВременногоФайла, ЧислоВерсийОбъекта)  выполняется определение номера последней хранящейся версии объекта и ее получение из регистра «ВерсииОбъектов» по номеру. Здесь же происходит вызов функции для  сравнения двух версий – текущей и последней хранящейся в регистре «ВерсииОбъектов».  Если версии совпадают, то запись новой версии в регистр не требуется.

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

  Функция ПолучитьXMLПредставлениеВерсии( Знач Версия) выполняет получение представления версии в виде XML-строки. В функцию может быть передан как путь к файлу,  содержащему версию, так и версия в виде двоичных данных.  Возвращаемое значение: строка - представление версии в виде XML-строки.

 

Версионирование объектов. Механизм временной блокировки версионирования (УПП 1.3). Часть 1:

//infostart.ru/public/326075/

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

версионирование версии объектов УПП дублирующиеся версии

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3397    Abysswalker    8    

45

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

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

14.05.2025    6320    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    48646    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7288    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    60820    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    9078    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. spetzpozh 12.02.15 10:10 Сейчас в теме
Буквально позавчера занимался этим вопросом - у нас до сих пор БП 2.0, из КА перенес туда механизм версионирования, он 1 в 1 как в УПП, думаю. Огромное Вам спасибо!
P.S. а код текстом можно? Перебивать с картинки не хочется :)
2. theshadowco 268 12.02.15 10:13 Сейчас в теме
У себя мы реализовали несколько иначе - храним хэш данных объекта в РС с версиями и перед записью версии просто сравниваем хэш текущий с последним зафиксированным.
Это работает в разы быстрее предложенного ТС варианта
ojiojiowka; +1 Ответить
5. spetzpozh 12.02.15 10:48 Сейчас в теме
(2) theshadowco, http://infostart.ru/public/96713/ - 23 комментарий ваш с нужной функцией?
ojiojiowka; +1 Ответить
6. theshadowco 268 12.02.15 11:23 Сейчас в теме
(5) до 8.3 использую его, в 8.3 использую платформенные возможности.
3. scompany 42 12.02.15 10:29 Сейчас в теме
Извлечение в файлы и сравнение больших текстовых полей, не самое производительное решение.
В добавок данное действие происходит в транзакции, что для систем с количеством пользователей от 100 пользователей и более, должно приводить к блокировкам.
Для сравнения версий предпочтительней использовать HASH ключи:
1. В регистр добавить реквизит: Ключ = HASH ключ версии
2. Перед записью вычислять данный ключ для версии и записывать в регистр
3. При последующией записи получать предыдущий ключ и сравнивать с новым.
Да кстати, в последних релизах платформы появилась встроенная поддержка работы с HASH ключами:
Объект: Хеширование

nihfalck; ojiojiowka; w-divin; +3 Ответить
4. spetzpozh 12.02.15 10:42 Сейчас в теме
Коллеги, можете привести код вычесление хэш? Речь не о встроенном языке?
7. spetzpozh 12.02.15 12:10 Сейчас в теме
В итоге добавил строковый реквизит в регистр с версиями, в общий модуль добавил код подсчета хэша и в в проедуре МеханизмВерсионированияОбъекта_ПриЗаписи - проверка

////////////////////////////////////////////////////////////­////////////////////
// Механизм подсчета хэша представления объекта и сравнения с предыдущим записанным значением

ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8);
СтрокаXML = ТекстовыйДокумент.ПолучитьТекст();
ХэшНовойВерсии = оп_ВерсионированиеОбъектовПривилегированный.Хэширование(СтрокаXML);

// Получим хэш предыдущей версии объекта
Если ЧислоВерсийОбъекта > 0 Тогда
ХэшПредыдущей = оп_ВерсионированиеОбъектовПривилегированный.ПолучитьХэшПоВерсии(Источник.Ссылка, ЧислоВерсийОбъекта);
Если ХэшНовойВерсии = ХэшПредыдущей Тогда
Возврат;
КонецЕсли;
КонецЕсли;
8. maxx 1000 12.02.15 14:24 Сейчас в теме
Освещал подобную проблему в БСП больше года наза http://infostart.ru/public/237921/
Через полгода моей статье разработчики БСП внедрили подобный механизм по сравнению версий.
ojiojiowka; +1 Ответить
9. spetzpozh 12.02.15 15:05 Сейчас в теме
В БСП эта проверка есть, я ее видел. Но у нас отраслевка на поддержке, в ней функции БСП переписаны авторами конфы, ломать их желания нет, а внедрять подсистему из БСП свою и параллельно той что уже есть - желания еще меньше. Оказалось проще взять несколько объектов из КА и добавить контроль версий.
10. friend0 16.02.15 17:52 Сейчас в теме
Странно, что в БСП все никак не сделают опцию хранения версий не в базе, а в файлах на диске (точнее слив из базы в файлы по ночам). Делается элементарно ж, зато и база не пухнет и бэкапы базы не пухнут. А файлы бэкапить тоже много места не надо - старые не меняются, только новые знай добавляй.
А читать версии ИМХО нужно весьма редко и быстродействие не критично.

Я так свою базу на 3/4 "сократил" - удалять жалко, да и пользователи такие, что обязательно ткнуть носом надо кто именно и когда накосячил.
Drivingblind; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация