История изменения объекта в 1с. Кто изменил справочник или документ в базе? Настройка версионирования объектов

Каким образом получить быстрый ответ, какой пользователь мог поменять данные в программе по документу? Что именно он изменил? Чтобы ответ этот был максимально быстрым и этот ответ мог получить любой пользователь без обращения к администратору системы.

В типовой конфигурации управление производственным предприятием 1.3 (УПП) присутствует модуль по работе с версионированием объектов. Он позволяет хранить в текущей базе все изменения, которые производят пользователи со справочниками и документами. Данная подсистема позволяет выборочно указывать, по каким видам справочников и документов это использовать, а по каким нет.

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

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

Сколько потребуется времени для того, чтобы найти причину кто что изменил? Сколько нужно сделать сравнений, когда, допустим, в истории хранится, что изменили документ 30-100 раз? А ведь простая запись при групповом проведении документов сюда добавит версию изменений, а ведь по-сути ничего в документе не изменится при таком перепроведении. В целом из этого количества версий изменений от силы будут действительны 2-3-5. А остальное что же? А это избыточный мусор.

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

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

«Свет мой зеркальце скажи, да всю правду доложи»…

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


Как работает эта система: при записи каждого справочника или документа в регистр сведений записывается история, кто создал документ, кто его провел, удалил. При этом еще и добавлены в документы дополнительные условия: кто документ отгрузил, кто снял с отгрузки в случае использования системы контроля отгрузки. Здесь эту линейку можно расширять и дальше. Допустим для кадрового учета: кто документ отдал на подпись, и когда пришло с подписи. Еще здесь можно при желании даже организовать учет, кто когда документ распечатал и какую печатную форму. Вариантов здесь можно использовать много и хранить историю изменений статусов документов.

Собственно цель данной системы просто быстро сообщить кто менял документ и когда. Подробный ответ, что именно изменил пользователь, не всегда нужен. Другими словами здесь простой аналог «журнала регистрации», который также сообщает, когда и кто произвел действия. Вот только доступ к нему у пользователя происходит гораздо быстрее. С типовым журналом регистрации работать неудобно, а при огромном объеме данных бывает даже не реально получить быстрый ответ. А здесь регистр находится в самой базе и сразу дает ответ. Причем всего по одной кнопке «История» в самом документе (!).

Любой пользователь оперативно может посмотреть: кто с документом работал. И уже, если понадобиться ответ, что конкретно с ним сделал этот пользователь (как доказательную базу), то уже можно использовать полные данные по системе версионирования.

«Если что - то можно доказать делом, то на это незачем тратить слова»
Эзоп


«Чей туфля?»

Также в нашей системе присутствует еще одна возможность – это ведение истории изменения табличной части документов складского и производственных учета, а также документов ценообразования. В частности в большинстве случаев при ведении учета интересует история изменений табличных частей «Товары», «Материалы», «Продукция».


Протоколируются изменения в разрезе каждого документа по дате изменения, ответственному лицу кто внес изменения, номенклатуре, характеристике и серии номенклатуры, типу цен, месту хранения (если используется места хранения), количество, цена, сумма, скидка, единица измерения мест.

Как это работает? Допустим нужно получить ответ: когда какого числа установлена новая цена? Кто удалил строку в документе перемещения? Кто заменил номенклатуру на другую номенклатуру? Кто удалил количество? Кто установил скидку? Кто поменял цену? Можно увидеть, кто поменял тип цен в документе.

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

Отчет по изменениям

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


«Настоящие свойства человека обнаруживаются лишь тогда, когда приходит время доказать их на деле»
Л.Фейербах

Оплата труда операторов

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


Чтобы просчитать тарифы, в отчете заложен механизм предварительной оценки. По галочке «Производить предварительный расчет» можно указать суммы ФОТ и количество участников (операторов, пользователей). После сформированных данных будет предоставлена информации, сколько может в среднем стоить изменение одного справочника или документа. Далее в закладке «Тарифы» можно конкретно заложить и уже выводить отчет-расчет для получения сумм оплаты.

Детально

«Существуют вопросы, на которые нет ответов;, но есть ответы, вызывающие массу вопросов»
Э.Севрус


Для проверки данных кто, что менял существуют в обработке следующие закладки «История изменения справочников». «История изменения документов», «История изменения табличных частей». Это и есть наши протоколы хранения истории изменений. В конце в закладке «Отчет-версии» в случае использования более детального версионирования можно смотреть какие-то спорные моменты. В целом этот АРМ используется именно для анализа объема работы пользователей и расчета оплаты по изменениям данных в базе.

Данная обработка работает в конфигурациях УПП 1.3, УТ10.3. А также может быть интегрирована в любую конфигурацию 1с, где присутствуют складской и производственный учет. Работает на обычных формах.

Вывод

На рынке существует множество вариантов хранения историй информации. Есть где даже реализовано хранение в отдельной базе. Возможно, что и реализовано гораздо лучше и универсальней. Дать быстрый ответ – вот главное для нас было условие. Так чтобы любой пользователь (кладовщик, оператор, бухгалтер) не тратил время на ответ, а получал его мгновенно. И еще одно условие – это дальнейшее использование данных в расчете оплаты труда пользователей.


Ключевые слова: Регистрация, история, изменение.

Эта статья является описанием озвученного в третьего алгоритма.

Речь о том, чтобы хранить в базе историю изменения реквизитов объектов.

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

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

Общая идею проста, как четыре рубля одной монетой.
А вот при ближайшем рассмотрении выяснилось пара нюансов.
А при превращении мыслей в статью и вовсе все поменялось.

Начнем по-порядку.

Для начала, делаем периодический регистр сведений "История реквизитов" без привязки к регистратору.

Затем, очень хочется иметь в этом регистре сведений измерение "Объект" типа "Любая ссылка", но этого делать нельзя.
Причина та, что тогда мы теряем возможность удалять помеченные на удаление объекты, поскольку на них будут ссылки в регистре.
Если же это измерение делать ведущим, то при удалении мы потеряем всю историю по этому объекту, которая удалится вместе с самим объектом.
А с другой стороны и без этого реквизита совсем уж никуда, ни отчета сформировать, ни просто даже объект найти.
Поэтому, в каждый объект, для которого требуется регистрация изменений реквизитов, добавляем реквизит "GUID" типа "Строка (32)".
Кроме того, в регистр сведений "История реквизитов" добавляем измерение "GUID объекта" типа "Строка (32)".

Так я хотел написать сначала.

А потом хорошо подумал.

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

Во-вторых, журнал регистрации фирмой 1С реализован таким образом, что в нем в реквизите "Данные" хранится именно ссылка на объект, а никакой не GUID.
Просто при удалении объектов журнал регистрации не участвует в проверке ссылочной целостности и после удаления объекта в нем в реквизите "Данные" показывается знакомая многим надпись "<Объект не найден> ...".

В-третьих, GUID вместо ссылок придется тогда вставлять и в остальных полях, то есть в пользователе, старом значении и новом значении.

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

Правда, в рамках данной статьи описывать альтернативный алгоритм удаления помеченных объектов я не буду, ограничусь лишь тем, что скажу, что этот алгоритм должен при удалении помеченных объектов в регистре сведений "История реквизитов" все ссылки на удаляемые объекты заменять пустыми ссылками.
Почему пустыми?
Да все просто, чтобы ссылочная целостность базы не нарушалась.

Поэтому добавляем измерение "Объект" типа "Любая ссылка".
Вместо типа "Любая ссылка" можно проставить галочки у конкретных объектов, без разницы.

Продолжаем.

Помимо объекта нужно иметь информацию о реквизите, который меняется.
Поэтому добавляем измерение "Реквизит" типа "Строка (25)" или "Справочник.РеквизитыОбъектов", кому как больше нравится.
Я для примера сделал строкой.

Затем добавляем информацию о пользователе, сделавшем изменения.
Для этого добавляем ресурс "Пользователь" типа "Справочник.Пользователи".
Кроме того, добавляем ресурс "Имя компьютера" типа "Строка (25)".
Кому 25 символов мало, может изменить на нужное количество.

Для того, чтобы знать, в какой распределенной базе меняли реквизит, в случае использования распределенных баз, нужно добавить ресурс "Распределенная база" типа план обмена "Распределенные базы".

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

Теперь по поводу настроек в объектах.
Во всех объектах, для которых будет регистрироваться история, требуется прописать следующий код.
Переменная "НаборЗаписейИсторияОбъектов" вынесена в переменные модуля по той причине, что для нового объекта проверку реквизитов нужно делать в процедуре "ПередЗаписью", а заполнять реквизит "Объект" значением "Ссылка" в процедуре "ПриЗаписи", поскольку в процедуре "ПередЗаписью" еще нет ссылки для нового объекта.
Перем НаборЗаписейИсторияОбъектов; Процедура ПередЗаписью(Отказ) НаборЗаписейИсторияОбъектов = РегистрыСведений.ИсторияОбъектов.СоздатьНаборЗаписей(); ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, "Код "); ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, "Наименование "); ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, "Родитель "); ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, "Владелец "); Для А = 0 По ЭтотОбъект.Метаданные().Реквизиты.Количество() - 1 Цикл ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, ЭтотОбъект.Метаданные().Реквизиты[А].Имя); КонецЦикла; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если НаборЗаписейИсторияОбъектов.Количество() <> 0 Тогда Для Каждого Запись Из НаборЗаписейИсторияОбъектов Цикл Запись.Объект = Ссылка; КонецЦикла; НаборЗаписейИсторияОбъектов.Записать(Ложь); КонецЕсли; КонецПроцедуры Процедура ОбработатьИзменениеРеквизита(НаборЗаписейИсторияОбъектов, ИмяРеквизита) Если ЭтотОбъект[ИмяРеквизита] <> Ссылка[ИмяРеквизита] Тогда НоваяЗапись = НаборЗаписейИсторияОбъектов.Добавить(); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Реквизит = ИмяРеквизита; НоваяЗапись.ИмяКомпьютера = ИмяКомпьютера(); НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь; НоваяЗапись.РаспределеннаяБаза = ПараметрыСеанса.ТекущаяРаспределеннаяБаза; НоваяЗапись.СтароеЗначение = Ссылка[ИмяРеквизита]; НоваяЗапись.НовоеЗначение = ЭтотОбъект[ИмяРеквизита]; КонецЕсли; КонецПроцедуры

Пример приведен для иерархического подчиненного справочника.
Если брать другой объект, например, документ, то состав служебных реквизитов будет другой, не "Код", "Наименование", "Родитель" и "Владелец", а "Дата" и "Номер".

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

Замаялся.

От Гения 1С : Смотрите

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

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

История версий легко может быть интегрирована в любую конфигурацию на базе "1С:Предприятие 8.x". При объединении не требуется вносить изменения в объекты исходной конфигурации.

Что дает система:

РУКОВОДИТЕЛЮ - ПОВЫШЕНИЕ КОНТРОЛЯ ЗА РАБОТОЙ ПОЛЬЗОВАТЕЛЕЙ:

    простота и удобство мониторинга изменений вносимых в систему;

    возможность просмотра, какие именно изменения были внесены в документы «задним числом»;

    возможность отслеживать объем вносимой информации в систему каждым из пользователей;

ПОЛЬЗОВАТЕЛЯМ - ПОВЫШЕНИЕ УДОБСТВА РАБОТЫ С СИСТЕМОЙ:

    возможность просмотра истории изменений по интересующему объекту;

    возможность работы с предыдущими версиями объектов;

    возможность восстановления («отката») объекта до выбранной версии;

Основные возможности:

    хранение истории значений любого документа или справочника (реквизиты шапки, табличных частей, автор изменений, дата и время изменений);

    наглядный просмотр изменений, каждой версии в графическом виде;

    возможность отката до любой версии объекта;

    возможность удаления ненужных версий объектов (ограничена правами доступа);

    возможность просмотра изменений объектов с отборами: по автору, виду объекта, времени внесения изменений;

    возможность настройки списка объектов требующих регистрации в системе без изменения конфигурации;

    быстрый переход к просмотру истории изменений из любого объекта системы;

    сервисные функции по работе с данными об изменениях: архивирование изменений за выбранный период и очистка изменений за выбранный период по указанным видам объектов;

Технические особенности:

    возможность быстрой интеграции с любой конфигурацией на базе "1С:Предприятие 8.x" (до 8.3.6.x), без внесения изменений в объекты основной конфигурации; (интеграция занимает не более 5-ти минут)

    при использовании «Автоматизация бизнеса:История версий» в базе данных хранится информация только об изменениях реквизитов объектов, что НЕ приводит к значительному росту базы данных и замедлению работы пользователей;

    хранение изменений в системе производится в сжатом виде, что незначительно сказывается на времени формирования отчетов, но существенно сокращает требуемый объем памяти;

    система поддерживает работу с распределенными базами данных;

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

«Автоматизация Бизнеса: История версий» является дополнением к любым типовым конфигурациям 8.x: «Управление торговлей ред. 10.3», «Управление торговлей ред. 11» и «Управление производственным предприятием ред. 1.3», и т.д. Данный продукт не содержит скрытых участков кода.

Системные требования:

Дополнительные сведения:

  • Если программа не работает на вашем релизе типовой конфигарации, то мы ее доработаем для вас бесплатно.
  • Для программы выпускаются регулярные бесплатные обновления.
  • Код программы АБ:История версий открытый
  • Модуль предоставляется под одну заявленную вами конфигурацию (платформу). Цена модуля от количества рабочих мест не зависит.
  • При покупке программы предоставляется бесплатная техподдержка на 12 мес.
  • Успановка программы производится либо самостоятельно пользователем, либо специалистами компании Автоматизация бизнеса за дополнительную плату. При покупке программы необходимо заполнить и отправить регистрационную анкету, которую пришлют с дистрибутивом программы.

Версионирование представляет собой опцию, с помощью которой пользователь может легко установить, кто и когда изменил находящийся в базе документ, а также какие именно изменения имели место. Платформа 1С:Предприятие 8 имеет сходную опцию – журнал регистрации, однако эта опция не позволяет выяснить характер изменений, журнал регистраций позволяет только узнать, когда был изменен документ и какой пользователь внес изменения.
Механизм версионирования позволяет хранить не только даты и автора изменений, но и историю изменений документа, опция позволяет просматривать различные версии состояния одного и того же документа. Чтобы использовать данную опцию, необходимо предварительно провести настройку версионирования объектов. Как настройку, так и просмотр всех состояний документа может проводить администратор системы.
В программе "Управление торговлей 11" присутствует отличная возможность для просмотра истории изменений справочников и документов под названием "Версионирование объектов". Давайте же рассмотрим как она работает.
Для включения использования этого функционала перейдем на закладку программы "Администрирование" пункт "Поддержка и обслуживание" и установим галочку "Версионирование объектов".


В данном окне мы можем установить различные настройки версионирования объектов нашей базы - "Установить вариант версионирования". Их есть три вида:
1) Не версионировать - версии объекта не сохраняются.
2) Версионировать при записи - версии объекта сохраняются при любом изменении.
3) Версионировать при проведении - версии сохраняются только при проведении; настройка применяется только для документов, для которых разрешено проведение.
В этом же окне также можно установить срок хранения версий - "Установить срок хранения версий". Здесь стоит отметить, что если установить флажок "Автоматически удалять устаревшие версии" (расположен внизу списка), то будет выполняться удаление старых версий по расписанию на основании установленных сроков хранения.

Для документа "Списание недостач товаров" установлено вид версионирования "Версионировать при проведении". Давайте перейдем в список списания недостач товаров. В окне нашего документа "Списание недостач товаров" на панели навигации формы нажмем на пункт "История изменений". Перед нами появится окно со списком пользователей, которые редактировали данный документ, а также дата редактирования с точностью до секунды.
Чтобы просмотреть различия в версиях нужно выделить несколько позиций и нажать кнопку "Сравнить версии". Откроется отчет по изменениям версий объекта. В этом отчете можно посмотреть различия выбранных версий объекта.
Функционал УТ 11 позволяет при необходимости даже перейти на нужную (прошлую) версию объекта. Для этого нужно выделить необходимую версию объекта и нажать кнопку "Перейти на версию".

После перехода на новую версию в окне "История изменений" появится третья строчка с комментарием "Выполнен переход к версии №<Номер> <ДатаВремя>», а также сообщение об успешном восстановления объекта.
Функционал по версионированию является очень полезной особенностью УТ 11. Таким образом, используя данный механизм, мы всегда можем быть в курсе того, какие изменения происходили с объектом, а случае необходимо отменить их, откатившись на необходимую версию.

Начиная с версии 3.0.35 в программе 1С Бухгалтерия 8 ред. 3.0 стало доступно версионирование объектов. Данный механизм позволяет отслеживать историю изменения справочников и документов. В отличие от журнала регистрации, который просто сохраняет данные об истории изменений, версионирование дает возможность пользователю с правами администратора посмотреть изменения, которые были внесены, увидеть любую версию объекта, сравнить версии между собой, сделать возврат к предыдущей версии.

Настройка версионирования объектов в 1С Бухгалтерия 8 ред. 3.0

Для включения механизма версионирования объектов в 1С Бухгалтерия 8 ред. 3.0 переходим на закладку «Администрирование», выбираем раздел «Поддержка и обслуживание» и в разделе «Версионирование объектов» устанавливаем флажок.

Можно установить следующие варианты:

Не версионировать - история версий объекта не ведется;

Версионировать при записи - новая запись заносится в историю версий в случае изменения или создания нового справочника или документа;

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

Версионировать при старте - этот вариант можно использовать только для бизнес-процессов. Первая версия бизнес-процесса будет записана только после его старта.

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

Для каждого элемента справочника и вида документа можно установить свой вариант версионирования и срок хранения.

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

Просмотр изменений объектов в 1С Бухгалтерия 8 ред. 3.0

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

При нажатии на нее мы попадаем в список версий объекта. Здесь мы можем увидеть, кто изменил объект, когда это произошло, и что именно было изменено.

В верхней части доступны следующие кнопки:

  • Открыть версию, с ее помощью можно просмотреть отчет о состоянии объекта на нужный момент времени;
  • Сравнить версии, дает возможность просмотреть отчет по изменению состояния двух или более версий в списке, выделенных предварительно (в отчете будет указано, какие именно реквизиты отличаются);
  • Перейти на версию, сделает возврат к одной из предыдущих версий объекта, которая должна быть предварительно выделена (изменения, которые внесены после сохранения этой версии, будут отменены).

Обратите внимание, что если объект был удален, его история также удаляется, поэтому в этом случае версионирование не поможет.

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



Просмотров