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





Обработка ищет битые ссылки по записям в журнале регистрации, распознает их 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 не будет опубликован. Обязательные поля помечены *