Битые ссылки, объект не найден, поиск удаленного объекта





Обработка ищет битые ссылки по записям в журнале регистрации, распознает их GUID и получает по нему ссылку (последнее можно использовать для распознания объекта в резервной копии базы). Протестировано на конфигурации ЗУП 3.1.5 — 3.1.8, но будет работать практически на любой конфигурации на УФ.

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

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

Не смотря на то, что поиск элемента в журнале регистрации результата не выдает, в нем могут записи вида <Объект не найден>. Данная обработка выводит все подобные записи за указанный период:

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

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

С помощью материалов сайта https://helpf.pro/faq/view/483/html (огромное спасибо автору) с переделкой под управляемый формы была создана обработка для получения GUID из строки вида " <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)". Далее, в копии информационной базы с помощью той же обработки по этому GUID были получены ссылки этих объектов и таким образом удалось отследить всю историю событий:

Отпуск под номером 42-кд был создан и проведен одним пользователем, снят с проведения и помечен другим и удален из базы данных фоновым заданием, т.е. обработкой "УдалениеПомеченныхОбъектов", вот это поворот.  

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

 

15 Comments

  1. dsdred

    Подобных решений на инфостарте очень много… А почему заранее не быть готовым к такому?

    Нестандартная подсистема: Живая вода

    Reply
  2. Bene_Valete

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

    Конечно, есть много подобных обработок, но в основном они направлены на получение GUID объекта. Данная же предназначена для получения конкретной информации о факте удаления объекта. Зачастую необходимо конкретно знать, кто из пользователей «косячит», делает он это со злым умыслом или нет. Можно сколько угодно восстанавливать объекты из версий, а можно один раз поговорить с человеком и это решит проблему (или нет, но он осознает, что за ним следят:) ) Превентивные меры это конечно хорошо, но решения пост-фактум тоже должны быть. Никому не навязываю свое мнение, мне данная разработка не раз пригождалась, поэтому решила ей поделиться)

    Reply
  3. dsdred

    (2)

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

    Никто не мешает перед удалением записывать автора. Я же выдрал из БСП Версионирование, там как раз делается версия, автор, дата.

    Reply
  4. Bene_Valete

    (3) Это все замечательно, но это также превентивные меры. Если ситуация уже произошла, к примеру кто-то удалил большой объем документов и это повлекло негативные последствия, руководство требует найти виновника. Если базы достаются по наследству, либо программист работает во франчайзи/фрилансе, не важно как было все организовано раньше, и как можно это сделать в будущем — нужен результат. А потом уже все что угодно, любые мероприятия по предотвращению.

    Reply
  5. dsdred

    (4)Хорошо вот стандартная ситуация.

    Фирма без администратора и программиста в штате. Обслуживает ее кто то (не обязательно франч) с мелким ценником и таким же качеством обслуживания.

    Бекапов нет(это всплыло когда уже что-то плохое произошло).

    Журнал регистрации не ведется(экономия места).

    У всех в базе полные права.

    Ситуация произошла но тут и вы не поможете.

    П.С. А фирм таких очень много…

    Reply
  6. Bene_Valete

    (5) У описанной фирмы все очень плохо, я думаю ей кто-то в ней захочет навредить, то тут не поможете и Вы) Ну а если серьезно, я вроде как не отрицаю, что предусмотрительный контроль это хорошо или даже необходимо, но если есть возможность, то почему бы не разобраться в произошедшем, используя доступные на данный момент средства?

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

    Reply
  7. dsdred

    (6)

    это не ирония, я действительно хочу знать что оптимальнее

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

    Вот что я считаю оптимальным. Но до этого хочу дорисовть другую подсистему.

    Reply
  8. Bene_Valete

    (7) Получается, это что-то вроде резервной копии отдельных данных базы на внешнем источнике?

    Reply
  9. dsdred

    (8)Да. Копия удаленных объектов.

    Пока только в текущей базе, потом будет некое центральное хранилище(отдельная конфигурация с http-сервисами, а потом и возможно некий скрипт для разворачивания на голой СУБД).

    Reply
  10. V.Nikonov

    (2) А разве объекты не удаляются «по делу»? Например, зачем в базе дубликаты Контрагентов, Номенклатуры и т.п. Их вроде как можно и нужно удалять…

    Reply
  11. V.Nikonov

    А если вместо рукоприкладства «Вредного Юзера» рухнет винт компьютера? И рабочая база «улетит в небытие»?

    ПЕРВОЕ правило — делай резервную копию, что бы потом не было «Мучительно больно» восстанавливать данные!

    Reply
  12. Bene_Valete

    (10) Вы читали описание публикации? Как это связано с объектами, который удаляются «по делу»?)

    Reply
  13. Bene_Valete

    (11) Спасибо за проявленный интерес, но вы ничего не перепутали? Данная обработка позволяет исправить ситуацию де-факто, когда все уже свершилось. Где вы увидели, что я советую не делать резервные копии?) В публикации указано, что GUID удаленного неопознанного объекта мы распознаем как раз в резервной копии.

    Reply
  14. V.Nikonov

    (13) Данное примечание не Вам, а прочим читателям. Просто акцентирую внимание на то, что восстановить можно из достаточно свежей резервной копии…

    Reply
  15. V.Nikonov

    (12) Так в Журнале регистрации нет пометок о причине удаления… По делу или злонамеренно — не вычислишь!

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

    Есть не совсем криминальный сценарий: Пользователь с целью внесения исправлений, делает копию документа, правит с проведением. А заодно удаляет неправильный источник.

    P.S. Предпочтительнее перед загрузкой из копии, иметь возможность посмотреть реквизиты документа…

    Кстати, а связанные документы как подгружаются (например, связка Реализация + СчетФактура)? Индивидуальным указанием каждого из них?

    Reply

Leave a Comment

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