0

История в 1С

1С 8.3 : Как узнать кто изменил документ в 1С (Журнал регистрации действий пользователей)?

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

Очень часто мне задают вопросы:

  • Как в 1С 8.2 посмотреть поменявшего документ?
  • Как в 1с посмотреть изменившего документ?
  • Как в 1С узнать кто и когда изменял документы?
  • Как в 1С узнать кто изменил проводку в документе?
  • Как посмотреть кто изменял документ в 1с?

Журнал регистрации

Содержит информацию о том, какие события происходили в информационной базе в определенный момент времени или какие действия выполнял тот или иной пользователь. Для каждой записи журнала, отражающей изменение данных, отображается статус завершения транзакции (транзакция завершена успешно, или же транзакция отменена).

Журнал регистрации доступен как в режиме 1С:Предприятие, так и в режиме Конфигуратор.

Доступ к журналу регистрации возможен как из режима Конфигуратора (через меню Администрирование — Журнал регистрации), так и из режима Предприятия (меню Сервис — Журнал регистрации). В режиме Такси (Основное меню — Все функции — Стандартные — Журнал регистрации)

Вид журнала регистрации (Обычные формы и Такси):

Отбор в журнале регистрации (Обычные формы и Такси):

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

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

Где хранится журнал регистрации

В Файловой базе: в каталоге базы папка 1Cv8Log — это и есть директория содержащая журнал регистрации.

Если вы планируете перенести файловую базу данных и хотите сохранить историю журнала регистрации & вам обязательно надо скопировать папку 1Cv8Log в категорию новой базы 1С. Если необходимо очистить журнал регистрации 1С в файловой базе просто удалите папку 1Cv8Log.

В Клиент-серверной базе: C:\Program Files\1cv8\srvinfo\<Имя кластера сервера>\<Идентификатор базы на сервере>\1Cv8Log

С версии 8.3.5.1068. Значительно переработали журнал регистрации для того, чтобы увеличить скорость выполнения запросов к журналу и повысить надёжность хранения данных.

Для этого, в том числе, потребовалось изменить формат хранения журнала регистрации. Теперь он хранится в одном файле базы данных SQLite. Этот файл имеет расширение lgd.

Версионирование объектов

В некоторых конфигурациях 1С внедрен специальный механизм «Версионирование объектов».

По умолчанию версионирование выключено, чтобы включить откройте Сервис — Настройки учета — Настройка параметров учета

По кнопке «Настройка версионирования объектов» выбираем, какие справочники и документы нужно версионировать (наблюдать за тем, кто, что и когда изменил).

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

Все, при закрытии окна и нажатии на кнопку «Оk» наблюдение за объектами будет вестись.

Для того чтоб просмотреть все изменения которые кто-то делал в документе или справочнике нужно перейти в меню: Сервис — История изменений объектов

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

Общая информация

Начнем с общей теоретической информации о том, что такое история данных и как она устроена.

Описание и возможности

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

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

Само по себе хранение истории достаточно бесполезная функция, поэтому с историей данных можно выполнять следующие операции:

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

На момент написания статьи (8.3.13) история данных поддерживается для следующих объектов:

  • общие реквизиты;
  • константы;
  • справочники;
  • документы;
  • бизнес-процессы;
  • задачи;
  • регистры сведений;
  • планы обмена;
  • планы счетов;
  • планы видов характеристик;
  • планы видов расчетов;
  • расширения конфигурации.

Работа с историей данных регулируется правами доступа и отражается в журнале регистрации.

Устройство механизма

История данных хранится в специальных таблицах информационной базы. Кроме самих данных в этих таблицах хранятся метаданные прежних версий объектов. Версии метаданных создаются в момент изменения этих самых метаданных у объекта и никак не связаны с изменением данных объекта.

Также следует помнить, что на данный момент система не отличает включение версионирования для реквизита от создания реквизита и отключение версионирования реквизита от удаления реквизита.

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

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

Для управления историей данных объектов в конфигураторе реализовано свойство «История данных», оно присутствует как у основных объектов (у справочников, например) так и у подчиненных — реквизиты, табличные части с их реквизитами, ресурсы регистров сведений.

Свойство «История данных»

По умолчанию свойство «История данных» установлено в значение «Использовать» у:

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

Использование механизма

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

Управление использованием истории данных

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 &НаСервере Процедура УправлениеИспользованиемИсторииДанных() //Получения значения свойства «История данных» //установленного в конфигураторе у объекта ОбъектВключен = Метаданные.Справочники.Справочник1.ИсторияДанных; //у реквизита объекта РеквизитВключен = Метаданные.Справочники.Справочник1.Реквизиты.Найти(«Реквизит1»).ИсторияДанных; //у реквизита табличной части объекта РеквизитТЧВключен = Метаданные.Справочники.Справочник1.ТабличныеЧасти.ТабличнаяЧасть1.Реквизиты.Найти(«Реквизит1»).ИсторияДанных; //у стандартного реквизита объекта СтандартныйРеквизитВключен = Метаданные.Справочники.Справочник1.СтандартныеРеквизиты.Наименование.ИсторияДанных; //Получение информации об изменениях настроек истории данных Настройки = ИсторияДанных.ПолучитьНастройки(Метаданные.Справочники.Справочник1); //Изменение настройки истории данных средствами встроеннго языка Насторойки = Новый НастройкиИсторииДанных; //Настройка для самого объекта Насторойки.Использование = Истина; //Для реквизитов объекта Насторойки.ИспользованиеПолей.Вставить(«Реквизит1», Ложь); Насторойки.ИспользованиеПолей.Вставить(«ТабличнаяЧасть1.Реквизит1», Ложь); ИсторияДанных.УстановитьНастройки(Метаданные.Справочники.Справочник1, Насторойки); //Возвращаем настройки истории данных из конфигуратора ИсторияДанных.УстановитьНастройки(Метаданные.Справочники.Справочник1, Неопределено); КонецПроцедуры

Запись версии

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

1 2 3 4 5 6 7 8 9 10 11 &НаСервере Процедура ЗаписьВерсииДанных() Данные = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»).ПолучитьОбъект(); ДатаСоздания = ‘20180101’; Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(«Администратор»); ИсторияДанных.ЗаписатьВерсию(Данные, ДатаСоздания, Пользователь.УникальныйИдентификатор, Пользователь.Имя, Пользователь.ПолноеИмя, ВидИзмененияДанных.Добавление, «Тестируем запись версий»); КонецПроцедуры

Получение списка версий

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

При заполнении этих критериев следует учитывать некоторые особенности:

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

Полную информацию о доступных параметрах отбора можно найти в синтаксис помощнике.

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

Теперь получим список версий конкретного объекта в которых значение реквизита «Реквизит1» равняется «123» или «321».

Получение данных версии

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

1 2 3 4 5 6 7 8 9 10 11 12 &НаСервере Процедура ПолучениеДанныхВерсии() СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); //определим номер версии как в примере выше НомерВерсии = ОпределитьНомерВерсии(); //получаем объект нужной версии и записываем его СпрОбъект = ИсторияДанных.СформироватьПоВерсии(СсылкаНаОбъект, НомерВерсии); //данные версии будут записаны в текущий объект СпрОбъект.Записать(); КонецПроцедуры

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

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

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

1 2 3 4 5 6 7 8 9 10 &НаСервере Процедура ПолучениеДанныхВерсии() СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); НомерВерсии = ОпределитьНомерВерсии(); //получаем данные версии в виде структуры СтруктураДанных = ИсторияДанных.ПолучитьДанныеВерсии(СсылкаНаОбъект, НомерВерсии); Сообщить(СтруктураДанных.Реквизит1) КонецПроцедуры

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

1 2 3 4 5 6 7 8 9 10 11 &НаСервере Процедура ПолучениеДанныхВерсии() СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); НомерВерсии = ОпределитьНомерВерсии(); //получаем метаданные версии в виде структуры СтруктураДанных = ИсторияДанных.ПолучитьМетаданные(СсылкаНаОбъект, НомерВерсии); Сообщить(СтруктураДанных.Представление); Сообщить(СтруктураДанных.Поля.Реквизит1) КонецПроцедуры

Сравнение версий

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

1 2 3 4 5 6 7 8 9 10 &НаСервере Процедура СравнениеВерсий(НомерВерсииПослеИзменений, НомерВерсииДоИзменений) СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); //сначала указываем номер версии после изменений //затем номер версии до изменений //это важно РазличияВерсий = ИсторияДанных.ПолучитьРазличияВерсий(СсылкаНаОбъект, НомерВерсииПослеИзменений, НомерВерсииДоИзменений); КонецПроцедуры

В результате получим структуру описывающую различия между версиями, например такую:

Различия между версиями

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

Удаление версий

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

1 2 3 4 5 6 7 8 9 10 11 &НаСервере Процедура УдалениеВерсий() СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); //удаляем версии с номера 1 по номер 3 ИсторияДанных.УдалитьВерсии(СсылкаНаОбъект, 1, 3); //удаляем все версии с начала года ИсторияДанных.УдалитьВерсии(СсылкаНаОбъект, НачалоГода(ТекущаяДата()), ТекущаяДата()); //удаляем все историю указанного справочника ИсторияДанных.УдалитьВерсии(Метаданные.Справочники.Справочник1); КонецПроцедуры

Прочие операции

В числе прочих операций рассмотрим упоминавшееся уже неоднократно обновление истории, а также комментирование версий.

1 2 3 4 5 6 7 8 9 10 11 &НаСервере Процедура ПрочиеОперации() СсылкаНаОбъект = Справочники.Справочник1.НайтиПоНаименованию(«Элемент1»); //обновляем историю по конкретному объекту ИсторияДанных.ОбновитьИсторию(СсылкаНаОбъект); //обновляем историю во всей базе ИсторияДанных.ОбновитьИсторию(); //записываем коментарий для версии объекта с номером 1 ИсторияДанных.ЗаписатьКомментарий(СсылкаНаОбъект, 1, «комментарий»); КонецПроцедуры

Кроме этого имеется возможность указать комментарий версии непосредственно во время записи объекта. Для этого в модуле объекта или в модуле набора записей регистра сведений реализован метод УстановитьКомментарийВерсииИсторииДанных().

На этом все, надеюсь, что эта статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Динамический список. Состояние просмотра #811468

  • Неизвестная графа «принято» в акте сверки
  • 1С8 СКД При типовом сохранении отчета в XLS пропадает фиксация шапки
  • Получить цены номенклатуры на каждый день периода СКД
  • Конфликт блокировок при выполнении транзакции
  • Графическое представление текста запроса
  • 1с ЗУП 3.1 Почему новым сотрудникам не начисляется Районный коэффициент?
  • Перенос из 8.3 в 7.7
  • ‘1С:Сканеры штрихкода (NativeApi)’ — проблем с залипанием shift не наблюдаете?
  • Ошибка СУБД Interface 0c733a7c-2a1c-11ce-ade5-00aa0044773d
  • Замена кодов 2-НДФЛ в ЗУП. Менять руками или ждать обновления?
  • Обновление типовой через хранилище конфигурации
  • Разница амортизации в БУ и НУ
  • ЗУП 3.1 Стандартные вычеты на детей
  • Настройка платежного терминала + ККМ + 1С Розница
  • ЗУП 3.1 отступы в ячейках таблицы формы
  • Слетает роль, при обновлении
  • Не удалось сформировать внешнюю печатную форму! Недостаточно фактических параметров
  • не загружаются документы через сервис ЭДО, Конфигурация 1С УТ 10.3.45.4
  • БП 3. Не видно ведомостей на выплату ЗП в банк

Как в 1С посмотреть историю изменения документа

В 1С можно посмотреть историю изменения по ключевым документам и справочникам, и увидеть, кто, что и когда изменил.

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

В современных программах 1С эта функция называется Версионирование объектов.

Чтобы воспользоваться ей, необходимо:

  1. Указать в программе настройки сохранения версий,
  2. Сформировать отчет, который покажет изменения.

Чтобы настроить хранение истории изменений, необходимо зайти в раздел НСИ и администрирование, Общие настройки:

И поставить флажок напротив опции Хранить историю изменений. Далее необходимо нажать Настроить, чтобы указать, что именно и как долго нужно хранить:

Настройки хранения истории позволяют указать:

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

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

Рекомендуем сразу же настроить расписание удаления устаревших версий.

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

Если в справочник или документ были внесены изменения, версий будет 2 и более.

Пользователь может выбрать интересующие его версии и нажать кнопку Сравнить. Система покажет, что было изменено, когда и кем:

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *