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

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

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

Добавим в последний документ по начислению еще одного работника. Рассчитаем и проведем документ.

Казалось бы, все. Умышленное добавление к выплате незаметно насчитано, остается только дождаться формирования ответственным бухгалтером документа выплат, получить «доплату» и можно идти в магазин за обновками… Однако злоумышленнику спешить не стоит.

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

Для этого открываем пункт главного меню «Сервис», и далее выбираем «Журнал регистрации». Замечу что, по умолчанию опция журнала регистрации включена. Однако, иногда, ошибочно полагая, что регистрация приведет к понижению производительности, некоторые администраторы ее отключают. Тем самым лишаясь полезной функциональности.

Итак открываем журнал.

Установив фильтр по документу видим все произведенные с ним действия.

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

Таким образом, от всевидящего ока 1С, при изменении документов никуда не деться.

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

Похожие темы

В поле «Ответственный» мы видим неизменное значение человека, создавшего документ, а в поле «Изменивший» — ник пользователя 1С, внесшего последние изменения.

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

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

11/03/2016

журнал регистраций , ускорение , платформа 1С

Переключение журнала регистрации в старый формат

Введение

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

  • Для файлового варианта информационной базы – в подкаталоге 1Cv8Log каталога информационной базы.
  • Для клиент-серверного варианта информационной базы – в подкаталоге 1Cv8Log каталога информационной базы в каталоге служебных файлов кластера. Имя каталога можно определить по файлу реестра данных кластера.

Целью переработки журнала регистрации и перевода его в новый формат было увеличение скорости выполнения запросов к нему и повышение надежности хранения данных. Новость об этом была размещена на официальном ресурсе фирмы 1С. Обновление платформы до версии 8.3.5.1068 и выше не приводит к автоматическому переводу журнала регистрации в новый формат у уже созданных информационных баз. Но при этом имеется возможность смены формата на новый штатными средствами платформы. Для этого следует открыть диалог настройки журнала регистрации (Главное меню –> Администрирование –> Настройка журнала регистрации) и нажать кнопку «Новый формат».

Проблемы при работе с новым форматом журнала регистрации

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

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

sqlite3_step failed: database disk image is malformed

Также иногда можно заметить проявление следующей ошибки при попытке в конфигураторе открыть файл журнала регистрации нового формата:

sqlite3_exec failed: attempt to write a readonly database

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

0,EXCP,1,process=rmngr,p:processName=RegMngrCntxt,p:processName=ServerJobExecutorContext,Exception=81029657-3fe6-4cd6-80c0-36de78fe6657,Descr=’src\RemoteInterfaceImpl.cpp(963):

81029657-3fe6-4cd6-80c0-36de78fe6657: Передача данных прервана по инициативе принимающей стороны.’

Данная строка ТЖ говорит о том, что процесс rmngr центрального сервера не отвечает, так как занят работой с журналом регистрации. И далее в технологическом журнале можно видеть следующие записи:

0,EXCP,0,process=rmngr,p:processName=RegMngrCntxt,p:processName=ServerJobExecutorContext,Exception=81029657-3fe6-4cd6-80c0-36de78fe6657, Descr=’src\RMngrCalls.cpp(549):
81029657-3fe6-4cd6-80c0-36de78fe6657:server_addr=tcp://: descr=Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением) line=1073 file=src\DataExchangeTcpClientImpl.cpp’

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

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

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

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

Перевод журнала регистрации в старый формат

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

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

…\1cv8\\reg_ + \

Уникальный идентификатор информационной базы (UUID) можно получить из файла «1CV8Clst.lst», который располагается в каталоге реестра кластера. Для быстрого получения идентификаторов баз и их имен из файла реестра кластера можно воспользоваться следующим регулярным выражением:

\{(\w{8}\-.*\w{12})\,\"(.*?)\"\,.**\n+.*\"\,\d+\}

Далее в каталоге файлов информационной базы ищем папку «1Cv8Log» и переносим оттуда все файлы в отдельный каталог. Затем в папке «1Cv8Log» создаем пустой файл журнала регистрации в старом формате «1Cv8.lgf».

После того как все этапы данной процедуры выполнены, запускаем службу 1С. Готово, теперь журнал регистрации переведен в старый формат. Чтобы обратно вернуться к новому формату ЖР воспользуйтесь инструкцией, описанной во введении данной статьи.

Заключение

В статье мы постарались описать возможные проблемы при работе с новым форматом журнала регистрации.

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

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

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

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

Доступ к журналу регистрации можно получить как в режиме предприятия (меню Все функции ⇒ Стандартные ⇒ Журнал регистрации), так и в режиме конфигуратора (Администрирование ⇒ Журнал регистрации):


Если в режиме предприятия отсутствует пункт меню «Все функции«, то необходимо включить его отображение:

Внимание!

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

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

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

Теперь рассмотрим пример как можно определить кто редактировал интересующий нас объект.
1. Заходим в режим предприятия и открываем журнал регистрации, как описано выше;
2. Накладываем отбор на нужный объект:

3. Анализируем информацию:

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

Данные журнала регистрации хранятся не в самой базе данных, а в отдельном каталоге:

  • Для файловых баз — \1Cv8Log;
  • Для серверных баз — \\1Cv8Log.

Хранение может осуществляться в двух форматах:

  • Файлы формата .lgd — база данных формата SQLite;
  • Файлы формата .lgf и .lgp — обычные текстовые файлы.

Формат .lgd является более современным, все новые базы, начиная с релиза 8.3.5, хранят данные журнала в этом формате.

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

Журнал регистрации 1с 8.2 — 8.3 просмотр истории изменений

Настройки выполняются в конфигураторе: Администрирование ⇒ Настройка журнала регистрации:

В прикладных решениях с встроенной библиотекой стандартных подсистем кроме платформенных механизмов просмотра журнала регистрации можно воспользоваться обработкой «Журнал регистрации». Обработка обычно располагается в меню НСИ и администрирование ⇒ Поддержка и обслуживание.

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

Смотри также:

Основные способы обмена 1С с другими системами
Поиск битых ссылок
Как посмотреть список активных пользователей 1С

26.05.2017

История данных

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.11.2867.

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

В каких сценариях нужна работа с историей данных

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

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

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

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

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

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

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

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

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

Какие возможности для анализа истории уже существуют в платформе

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

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

И уж тем более нельзя с помощью журнала регистрации восстановить предыдущее состояние реквизита или всего объекта.

Другой инструмент, который существует довольно давно и есть во всех тиражных решениях, это БСП – библиотека стандартных подсистем. В её составе есть подсистема версионирования объектов. Эта подсистема содержит все перечисленные функции, однако она имеет некоторые практические ограничения.

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

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

Преимущества решения, встроенного в платформу

Когда мы проанализировали имеющуюся ситуацию, имеющийся опыт использования БСП, взвесили все «за» и «против», мы пришли к выводу, что наиболее эффективным решением будет реализовать историю данных в составе самой технологической платформы. Это позволит достичь следующих преимуществ:

  • Чтобы воспользоваться этим механизмом администратору или пользователю не придётся изменять конфигурацию, всё необходимое уже есть в платформе. Нужно только включить.
  • Этот механизм будет работать быстрее, чем аналоги, реализованные в составе конфигурации, т.к. он будет использовать возможности, недоступные из встроенного языка.
  • Сама история данных будет занимать меньше места, так как будет храниться не копия данных, а только их разница с предыдущей версией. Кроме этого само версионирование можно применять не ко всем реквизитам, а только к тем, которые интересуют. Это также даст дополнительную экономию.
  • Можно будет поддержать версионирование не только тех объектов, которые обладают уникальной ссылкой (справочники, документы и т.п.), но и необъектных сущностей, таких как записи регистров сведений, например.

Основные сведения о механизме

Механизм истории данных полностью реализован внутри платформы, не требует какой-либо установки дополнительных программных средств, в любой момент готов к работе, но, по умолчанию, не включён.

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

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

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

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

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

Обработка изменения данных

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

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

Для того чтобы таким образом обработать очередь, у менеджера истории данных (МенеджерИсторииДанных) есть метод ОбновитьИсторию(). Мы предполагаем, что вы будете использовать его так же, как похожий метод, предназначенный для обновления индекса полнотекстового поиска. То есть обновлять историю вы будете в некотором регламентном задании, которое выполняется с определённой периодичностью.

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

Пользовательский интерфейс

В пользовательском интерфейсе 1С:Предприятия новый механизм называется История изменений. Он включает в себя несколько форм, которые позволяют выполнять те действия, которые были перечислены в начале этой статьи.

Список версий по конкретному объекту

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

Она позволяет увидеть список всех изменений (версий) объекта.

В колонке Источникизменений может быть указан также узел плана обмена, если изменение было выполнено в узле, и «приехало» в эту базу в результате обмена данными.

В этом списке, в колонке Комментарий, вы можете указать произвольный комментарий, который поможет вам в расследовании каких-то ситуаций.

Отбор версий

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

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

Отчёт о данных версии

Вы можете открыть любую версию объекта, чтобы посмотреть её данные.

Данные будут представлены специальным отчётом, в котором подсвечиваются значения, изменённые по отношению к предыдущей версии.

Отчёт о разнице между версиями

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

Результат сравнения версий будет также показан с помощью отчёта. Этот отчёт напоминает тот, который используется в БСП. Добавленные, изменённые и удалённые значения подсвечиваются.

Программный интерфейс

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

Прежде всего, из встроенного языка вы можете включить/настроить ведение истории. Например, вы можете включить ведение истории для двух реквизитов документа Заказ: реквизита Комментарий самого документа, и реквизита Цена его табличной части, которая называется Товары:

Настройки = Новый НастройкиИсторииДанных; Настройки.Использование = Истина; Настройки.ИспользованиеПолей.Вставить("Комментарий", Истина); Настройки.ИспользованиеПолей.Вставить("Товары.Цена", Истина); ИсторияДанных.УстановитьНастройки(Метаданные.Документы.Заказ, Настройки);

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

Например, вас интересуют все версии документа Заказ с номером 0000001, в которых менялось значение реквизита Количество табличной части, которая называется ПозицииЗаказа. Получить их можно следующим образом:

Отбор = Новый Структура("Данные, ИзменениеЗначенийПолей"); Отбор.Данные = Документы.Заказ.НайтиПоНомеру("0000001"); Отбор.ИзменениеЗначенийПолей = Новый Массив; Отбор.ИзменениеЗначенийПолей.Вставить("ПозицииЗаказа.Количество"); Версии = ИсторияДанных.ВыбратьВерсии(Отбор, "НомерВерсии, Дата, ТипИзменения, ИмяПользователя, Комментарий");

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