Добавить в "Избранное" Сентябрь ср. 20 2017 г. в 19:29
Навигация
Еще полезняшки (G)

    -
Счетчики
      ОБменник E-POS
      Оплата услуг с помощью WebMoney, RBK Money, Деньги@Mail.Ru, WebCreds и Яндекс.Деньги

      Raznoe


      Openstat-

      Статьи
      Кто ищет тот всегда найдет... Самая правдивая система поиска

      Технология восстановления удаленного элемента

      Автор: Народ
      Добавлено: 2008-03-05 09:01:03


      Технология восстановления удаленного элемента справочника в 1С-Предприятие 7.7




      Введение


         Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
         Заводится новый элемент справочника, аналогичный удаленному элементу, а потом  он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку - все зависит от опыта и квалификации исполнителя.  После чего, необходимо перепровести  все измененные документы. В общем, долгая и нудная работа, не всегда дающая 100% результат правильного восстановления. Есть, правда, один быстрый способ, основанный на формате DBF, точнее методах работы с ним.
         Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы "Гэндальф".


      Часть 1. Нам повезло.


         С начала, собственно, о формате DBF и методах работы с ним. Думаю, рассказывать обо всем формате нет смысла, это тема отдельной статьи, поэтому расскажем о нем вкратце, для понимания тех действий, которые необходимо совершить.
         Итак, что такое DBF формат и с чем его едят. Файл DBF можно разделить на две части: заголовок и, собственно, набор данных. В заголовке находится вся служебная информация, показывающая из каких полей состоит запись, типы этих полей, размер данных в полях, количество записей, размер записи, и откуда в файле начинаются записи, но это сейчас ни к чему. В наборе данных находятся, собственно, записи данных. В начале каждой записи стоит специальный байт - признак удаления. То есть когда вы говорите программе удалить запись, она ее фактический не удаляет, а ставит в первый байт записи метку о том, что данная запись удалена.
         Отсюда следует, что если найти запись соответствующую удаленному элементу и сбросить признак удаления, переиндексировать базу, то можно обнаружить что, правильно удаленный
         элемент будет восстановлен не только в справочнике, но всех документах.



         Для тех, кто не знает что почем, показываю на примере:
         Рабочая конфигурация ТиС, удалили элемент справочника товаров.
         Запускаем winDBFview и выбираем Файл - Открыть. В появившемся окне диалога находим папку, в которую установлена база и открываем там файл. А какой?  Вот ведь вопрос: как узнать? Да просто. Запускаем какую-нибудь оболочку, переходим в папку с базой и находим файл"1Cv7.DD". Открываем  его для просмотра и находим там следующую строчку - "Справочник Номенклатура" - в нашем случае, у вас, вместо "Номенклатура" ставим название порушенного справочника (как он называется в конфигураторе) . И видим приблизительно следующее (см. рис. 1). То, что у меня выделено под надписью "Name" и есть искомое нами имя файла. Открываем его в редакторе DBF файлов, и смотрим. В поле CODE содержится код элемента справочника, а в поле DESCR наименование элемента. Как будете искать - уже дело техники и возможностей редактора. Найдя нужный элемент, сбрасываем байт пометки на удаления и сохраняем сделанные изменения.


      Часть 2. Нам не повезло.


         Но может быть, что вы не смогли быстро приехать к месту событий (всякое в жизни бывает). Приступили к восстановлению элемента. Запустили редактор. И начали искать и не нашли удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. С начала программа  ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. И что делать, неужто опять все в руки?
         Внимательно смотрим листинг файла "1Cv7.DD". Видите перед полем CODE поля ID и PARENTID. Для чего они нужны. Из описания поля (см. рис. 1), следует, что это   какой-то идентификатор объекта. Оказывается 1С все равно, на тот код, что вы указали в справочнике элементов. Сама для себя она каждому объекту присваивает свой код. Значит, если мы узнаем этот код, то сможем создать запись полный аналог удаленной. Хм.... А как узнать этот код?
         Есть много способов. Я, надеюсь, предлагаю вам самый простой. Итак, начнем.
         Запускаем 1С. Лезем в Сервис - Монитор пользователей - Журнал регистрации. В появившемся диалоге делаем отбор: "во всем журнале, отбор по признаку удаление элемента справочника", жмем "ОК".
         И смотрим журнал (см. рис. 2).  Видите, там, где написано "Номенклатура 2258 04 ....", это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует
         строка: "<Объект не найден>(36201/)", 36201 - это и есть ID объекта. Создаем в справочнике новый элемент - полный аналог удаленному элементу. Выходим из 1С. Запускаем редактор, находим созданный нами элемент и поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.



         Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от "0" до "9", и буквы от "A" до "Z". Значит, используется тридцати шестеричная система счисления 10 цифр плюс 26 букв. Приступим:


      • 36201 делим на 36, получаем 1005 в остатке 21;
      • 1005 делим на 36, получаем 27 в остатке 33;
         В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной  ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента.
         Запускаем 1С, индексируем базу и смотрим, что имеем (см. рис. 3)
         Что и требовалось получить. Пользуйтесь.
         Таблица для перевода из десятичной системы счисления в тридцати шестеричную.























































































      0099I18R27
      11A10J19S28
      22B11K20T29
      33C12L21U30
      44D13M22V31
      55E14N23W32
      66F15O24X33
      77G16P25Y34
      88H17Q26Z35

         Помидоры высылать по почте. Ругательства принимаются по аське: 26200252.
         Все спасибо за внимание. Буду рад, если кому-то поможет.
         автор: skunk

         P.S. Народ как говориться пока верстался номер, или недокументированные функции. Номер средствами самой 1С можно получить использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления  _StrToId().

      Оглавление   |  На верх


      Тема страницы:

      1c Технология восстановления удаленного элемента Программы от АМХ Статьи 2017-09-20 19_29_05

      Кредиты

      Статьи
      1c
      Вход
      Логин:

      Пароль:


      Запомнить меня
      На сайте
      Гостей: 1
      Пользователей: 0


      Полезное от Google 2017

      Топ загрузок за неделю
      Грузим...
      Copyright АМХ© 2003-2016Работает под управлением WebCodePortalSystem v. 4.2.2