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

13.04.15

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

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

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

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

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

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

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

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

 

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

//infostart.ru/public/326075/

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

См. также

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

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

21.05.2024    25165    dimanich70    82    

149

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

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

1 стартмани

18.03.2024    4506    3    John_d    11    

57

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

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

12.02.2024    25514    atdonya    25    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    6077    ke.92@mail.ru    17    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    16565    YA_418728146    8    

170

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    4273    73    progmaster    10    

4

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    19142    180    sapervodichka    112    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. spetzpozh 12.02.15 10:10 Сейчас в теме
Буквально позавчера занимался этим вопросом - у нас до сих пор БП 2.0, из КА перенес туда механизм версионирования, он 1 в 1 как в УПП, думаю. Огромное Вам спасибо!
P.S. а код текстом можно? Перебивать с картинки не хочется :)
2. theshadowco 256 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 256 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 996 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 Ответить
Оставьте свое сообщение