В предыдущей статье мы рассмотрели настройки механизма версионирования объектов в УПП 1.3, их реализацию и использование. Сегодня мы рассмотрим способ хранения версий объектов в базе данных, а также примеры работы с версиями.
Хранение в базе данных
Ранее мы рассматривали алгоритм обработчика подписки «ВерсионированиеОбъектов_ПриЗаписиОбъекта», в которой, в зависимости от настроек версионирования, выполняется запись версии объекта в базу данных. Еще раз проведем листинг процедуры обработчика:
Процедура МеханизмВерсионированияОбъектов_ПриЗаписиОбъекта(Источник, Отказ) Экспорт Перем ЧислоВерсийОбъекта; // Переменная хранит число версий объекта // Проверяем настройки объекта — необходимо ли записать его версию // в базу данных Если ОбъектВерсионируется(Источник, ЧислоВерсийОбъекта) Тогда ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); // Серилизуем объект в XML ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное); ЗаписьXML.Закрыть(); // Двоичные данные Файла с результатом серилизации преобразуем в значение типа // «Хранилище данных» ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); УдалитьФайлы(ИмяВременногоФайла); // . Записываем версию объекта в базу данных ВерсионированиеОбъектовПривилегированный.ЗаписатьВерсиюОбъекта(Источник.Ссылка, ЧислоВерсийОбъекта, ХранилищеДанных); КонецЕсли; КонецПроцедуры
Теперь в обработчике нас интересует процедура «ЗаписатьВерсиюОбъекта» общего модуля «ВерсионированиеОбъектовПривилегированный». Но перед этим рассмотрим пример генерируемого XML для объекта документа «Поступление товаров и услуг». Вот так выглядит пример содержимого XML (некоторые поля убрал, чтобы уменьшить размер изображения):
Этот Мужчина Работал в Зоне 51 и Рассказал о Том что Там Происходило
Прежде чем перейдем к рассмотрению записи версии объекта в базу, рассмотрим функцию подсчета версий объекта. Там все довольно просто: запросом определяем количество версий объектов, которые содержатся в базе. Запрос выполняется к регистру сведений «ВерсииОбъектов»:
// Возвращает количество версий объекта переданного по ссылке Функция ПолучитьКоличествоВерсийОбъекта(Ссылка) Экспорт Запрос = Новый Запрос; Запрос.Текст = » | ВЫБРАТЬ ЕСТЬNULL(МАКСИМУМ(НомерВерсии), 0) КАК НомерВерсии | ИЗ РегистрСведений.ВерсииОбъектов | ГДЕ Объект = ; Запрос.УстановитьПараметр(«Ссылка», Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); НомерВерсии = Выборка.НомерВерсии; Возврат НомерВерсии; КонецФункции
Структура метаданных регистра имеет следующий вид:
Измерение «Объект» содержит ссылку на объект базы данных, которому принадлежит версия объекта. «НомерВерсии» — это число, в котором определен номер версии объекта на момент записи. В ресурсе «Версия Объекта» с типом «ХранилищеЗначений» сохранены двоичные данные файла XML с содержимым сериализуемого объекта. Реквизиты «АвторВерсии» и «ДатаВерсии» содержат информацию о пользователе и дате записи версии объекта.
Как открыть проект Adobe Premiere Pro в более старой версии программы — Копилка 037
На следующем листинге мы видим процедуру записи версии объекта в регистр сведений «ВерсииОбъектов»:
// Записывает версию объекта в регистр сведений Процедура ЗаписатьВерсиюОбъекта(знач Ссылка, знач ЧислоВерсийОбъекта, знач ХранилищеДанных) Экспорт МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписиВерсииОбъектов.Объект = Ссылка; МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДата(); МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; МенеджерЗаписиВерсииОбъектов.НомерВерсии = ЧислоВерсийОбъекта + 1; МенеджерЗаписиВерсииОбъектов.АвторВерсии = ПараметрыСеанса.ТекущийПользователь; МенеджерЗаписиВерсииОбъектов.Записать(); КонецПроцедуры
Как мы видим, создается запись регистра сведений «ВерсииОбъектов». В качестве даты версии устанавливается текущая дата, а автора версии — текущий пользователь. В ресурс «ВерсияОбъекта» записываются двоичные данные файла XML-описания объекта, сформированные в обработчике подписки, которую мы рассмотрели в начале статьи.
Перейдем к рассмотрению способов работы с сохраненными в базе версиями объектов.
Просмотр и сравнение версий
Для просмотра и сравнения версий объектов в типовой конфигурации содержится отчет «История изменений объектов», который позволяет просматривать отдельные версии или сравнивать две различные версии объекта.
Рассмотрим общий принцип работы отчета. Вывод осуществляется в соответствии с макетом:
Получив XML-описание сохраненного объекта отдельно получаются коллекция реквизитов и коллекция табличных частей (процедура модуля объекта отчета «РазборПредставленияОбъектаXML») с соответствующими их значениями. На основе этих данных и заполняется отчет.
Полностью рассматривать алгоритм сравнения версий не будем, отмечу лишь основные моменты. Для сравнения выбираются две версии.
На скриншоте выше показано сравнение версии №1 и версии №5. Принцип работы алгоритма сравнения достаточно прост:
- Получаем значения реквизитов и табличные части сравниваемых версий объектов.
- Выполняем сравнения каждого из реквизитов версий (включая реквизиты таб. частей).
- Найденные изменения выводим в отчет.
Используя отчет можно получить историю изменения объекта и ответственных за эти изменения.
Вместо заключения
Механизм версионирования дает большие возможности для контроля изменения документов и элементов справочников. Единственный минус — это значительно влияние на производительность прикладного решения, причем не в лучшую сторону.
Источник: 1clancer.ru
Программирование 1С 8.х для начинающих
- Вы здесь:
- Главная
- Статьи
- Конфигурация
- Типовые конфигурации
- Просмотр версий удаленного объекта
Поделитесь в соцсетях
Конфигурация
Просмотр версий удаленного объекта
Подробности Создано: 02 апреля 2020 Категория: Типовые конфигурации
В конфигурациях 1с существует механизм версионирования объектов, этот механизм может помочь понять какой объект был удален и восстановить его. Нюанс в том, что в регистре объект показан как «» и поэтому типовыми средствами версии не посмотреть, а в справочнике этого элемента нет в списке, чтобы можно было перейти к его версиям.
Для получения всех версий удаленных объектов используется запрос
ВЫБРАТЬ ВерсииОбъектов.Объект КАК ОбъектСсылка, ВерсииОбъектов.Объект.Код КАК ОбъектКод, ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии ИЗ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов ГДЕ ВерсииОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ВерсииОбъектов.Объект.Код ЕСТЬ NULL упорядочить по ДатаВерсии
Далее обрабатывая каждую строку можно получить текст в формате XML
Отбор = Новый Структура; Отбор.Вставить(«Объект», ОбъектСсылка); Выборка = РегистрыСведений.ВерсииОбъектов.Выбрать(Отбор); Рез = Новый Массив; Пока Выборка.Следующий() Цикл СтруктураХранилища = Выборка.ВерсияОбъекта.Получить(); Если СтруктураХранилища = Неопределено Тогда Продолжить; КонецЕсли; ДД = СтруктураХранилища.Объект; ЧтениеXML = Новый ЧтениеFastInfoSet; ЧтениеXML.УстановитьДвоичныеДанные(ДД); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); Пока ЧтениеXML.Прочитать() Цикл ЗаписьXML.ЗаписатьТекущий(ЧтениеXML); КонецЦикла; СтрокаXML = ЗаписьXML.Закрыть(); Рез.Добавить(СтрокаXML); КонецЦикла;
В итоге получаем массив «Рез» со списком версий объектов в формате XML
Источник: 1s-portal.ru
Версионирование объектов в 1С 8.3
Случаются ситуации, когда пользователь 1С по ошибке меняет в документе, например, скидку, цену товара или значение какого-либо реквизита, что приводит к неверным расчетам и другим проблемам. При выявлении нежелательных изменений возникает желание их исправить, вернуть удаленные данные и прежнее состояние документа. Особенно актуален этот вопрос на начальном этапе работы с программой, когда пользователи совершают много ошибок, при этом объем информации небольшой.
В программах «1С» реализованы механизмы, позволяющие отслеживать изменения в базах различными способами:
- С помощью журнала регистрации. Платформенный механизм, позволяющий узнать кто и когда менял объект, без возможности детально отследить изменившиеся значения объектов;
- Через платформенный механизм ИсторияДанных. Отметим, что данный механизм появился в платформе 8.3.11 и позволяет работать с версионированием через встроенные механизмы платформы, что является несомненным плюсом.
- Через версионирование объектов (активируется самостоятельно). Данный механизм обеспечивается наличием в конфигурации подсистемы БСП «Версионирование объектов». Соответственно присутствует во всех современных типовых конфигурациях, разработанных на основе БСП (Библиотека стандартных подсистем).
Приглашаем на
бесплатный вебинар!
18 июля в 11:00 мск
Версионирование – это хранение истории изменений объектов. В отличие от журнала регистрации, в котором может храниться история изменения объектов, механизм версионирования позволяет пользователю:
- Увидеть изменения, внесенные пользователями;
- Просматривать любые версии объектов;
- Сравнивать версии объектов между собой;
- Восстановить предыдущую версию объекта.
Рассмотрим настройку подсистемы БСП «Версионирования объектов» в 1С 8.3 Бухгалтерия.
Как включить или отключить версионирование объектов
Настройку можно включать не только для всего объекта целиком, но и выборочно – для его отдельных составных частей, включая реквизиты табличных частей, и тем самым экономить место.
Чтобы механизм компактно хранил историю изменения данных пользователя, и не вышло так, что история изменения объектов занимает больше места, чем сами объекты, и в результате функционал приводит к замедлению работы программы, необходимо правильно выполнить настройку этого механизма.
Включить механизм может разработчик в конфигураторе (его лучше использовать в случаях, когда история данных потребуется во всех режимах работы программы), а также и сам пользователь: в пользовательском интерфейсе в режиме «1С:Предприятие» включить версионирование объектов можно в пункте меню «Администрирование-Общие настройки-История изменений».
«Включение» версионирования заключается в настройке объектов конфигурации, для которых будет вестись учет изменений. При этом ведение истории можно включать не только для всего объекта, но и для его отдельных составных частей. Установив галочку «Хранить историю изменений», переходим по гиперссылке «Настройки хранения».
С помощью кнопки «Установить когда сохранять версии» мы можем установить когда сохранять версию – «Никогда», «При записи», «При проведении» или «По умолчанию». Настройка «По умолчанию» предполагает рекомендуемые настройки: для справочников – «Никогда» не создавать версии, для документов – «Создавать версии при проведении», для бизнес-процессов – «Создавать версии при старте». Настройка выполняется для всех объектов, но целесообразнее выполнить настройку отдельно для каждого объекта в списке.
Следующий параметр – «Установить срок хранения версий».
После активации данной настройки у объекта появляется дополнительный пункт в меню – «История изменений» (кнопка «Еще» в журнале документов), а также кнопка на панели инструментов «Перейти к отчету по версиям объектов».
Эти же пункты будут доступны и из самого документа.
История изменений выглядит следующим образом: в открывшейся форме выводится список всех изменений объекта. Версию можно открыть или сравнить с любой из списка. Выбрать несколько строк можно с помощью кнопок «Shift» и «Ctrl».
И в случае необходимости через кнопку «Перейти на версию» мы попадаем на выделенную (нужную) версию документа. Изменения, внесенные после этой версии, будут отменены.
Рассмотренный нами механизм может быть очень полезен. С его помощью можно следить за историей изменения документов и справочников. Он хранит не только данные о пользователе, изменившем объект, но и позволяет увидеть, какие были произведены изменения, сравнить версии и при необходимости восстановить один из вариантов.
Источник: wiseadvice-it.ru