Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0 . Выпуск 44


Информационный Канал Subscribe.Ru

Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 44 / 30.01.2004

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


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

Введение

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

Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы "Гэндальф".

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

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

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

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

Для тех, кто не знает, где все и почем, показываю на примере. Рабочая конфигурация "Торговля и Склад" (v7.7), допустим, удалили элемент справочника товаров.

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

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

Но может быть, что вы не смогли быстро приехать к месту событий, всякое в жизни бывает. Допустим, мы приступили к восстановлению элемента. Запустили DBF-редактор, начали искать и НЕ НАШЛИ удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. Сначала программа ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. Что же делать? Неужто опять все восстанавливать руками?

Внимательно смотрим листинг файла "1Cv7.DD" (с помощью текстового редактора). Заметьте, что перед полем CODE есть поля ID и PARENTID. Для чего они нужны? Из описания поля в файле DD, следует, что это какой-то идентификатор объекта (не путать с полем Код, которое может быть изменено пользователем). Система 1С:Предприятие, можно сказать, сама для себя каждому элементу присваивает свой внутренний код или идентификатор. Значит, если мы узнаем этот код, то сможем создать запись, которая будет полным аналогом удаленной записи. Хм.… А как узнать этот код? Есть много способов. Я надеюсь, предлагаю вам самый простой. Итак, начнем.

Запускаем 1С. Лезем в Сервис – Монитор пользователей – Журнал регистрации. В появившемся диалоге делаем отбор: "во всем журнале, отбор по признаку удаление элемента справочника", жмем "ОК".

И смотрим журнал документов. Допустим, там, где написано "Номенклатура 2258 04 ….", это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует строка: "<Объект не найден>(36201/)", где 36201 - это и есть ID объекта. Создаем в справочнике новый элемент, который чуть позже сделаем полным аналогом удаленного элемента. Выходим из 1С. Запускаем DBF-редактор, находим созданный нами элемент и в поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.

Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от "0" до "9", и буквы от "A" до "Z". Значит, используется тридцатишестеричная система счисления, содержащая 10 цифр плюс 26 букв. Приступим:
- 36201 делим на 36, получаем 1005 в остатке 21;
- 1005 делим на 36, получаем 27 в остатке 33;
В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента.

Запускаем 1С, индексируем базу и смотрим, что имеем: на месте "<Объект не найден>" теперь красуется "Восстановленный элемент".

Что и требовалось получить. Пользуйтесь.

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

36-ричное 10-чное
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
36-ричное 10-чное
9
9
A
10
B
11
C
12
D
13
E
14
F
15
G
16
H
17
36-ричное 10-чное
I
18
J
19
K
20
L
21
M
22
N
23
O
24
P
25
Q
26
36-ричное 10-чное
R
27
S
28
T
29
U
30
V
31
W
32
X
33
Y
34
Z
35


Всем спасибо за внимание. Буду рад, если кому-то поможет.
Автор статьи - skunk.
Помидоры высылать по адресу skunk_@mail.ru

Примечание Волшебника: Эта статья со скриншотами будет опубликована на сайте www.mista.ru в разделе "Статьи про 1С".


Волшебный форум - www.forum.mista.ru

Статистика по форуму
Показатель
На сегодня
На 24.01.2004
Увеличение
Темы (ветки):
1190
1089
+101
Сообщения (посты):
11243
10033
+1210
Зарегистрированные пользователи:
364
336
+28

Обратите внимание, что раздел форума по 1С имеет собственный адрес: http://www.forum.mista.ru/index.php?forum=1c
Вы можете взять его в Избранное и увидите только сообщения, посвященные 1С.

На этом форуме можно пообщатьсясо мной и с трехзведочным экспертом skunk'ом. Если у вас есть что сказать, предложить или спросить, заходите и оставьте свое сообщение. Можно также написать мне лично на e-mail - stasmit@mail.ru


Приглашаются программисты 1С на серьезные проекты

Фирма "1-й Архитектор бизнеса" (Москва) приглашает программистов 1С для работы на крупных проектах по автоматизации предприятий на платформе 1С:Предприятие 7.7 и по новой версии 8.0. Зарплата $1000-2000 (в зависимости от Вашей квалификации и самоорганизованности).

Обязательные требования - умение оценивать срок выполнения работ и четко его соблюдать, умение проектировать и программировать систему по техническому заданию или эскизному проекту, системное мышление, опыт работы на проектах, возраст от 23 до 45 лет, самодисциплина, представительный вид, готовность к командировкам по регионам России и СНГ (не часто), умение вести переговоры. Крайне желательно наличие сертификатов от 1С.

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

Резюме присылайте по адресу VorVa@1ab.ru (без прикрепленных файлов).
Тел. 937-66-35, Воробьев В.Г. (корпоративный отдел).
1-й Архитектор бизнеса, м. Белорусская (Москва), www.1ab.ru


См. также:
1С:Предприятие 7.7: учебник, курс лекций, статьи, ссылки
Книга "Разработка в системе 1С:Предприятие 8.0" - http://www.v8.1c.ru/book/v8develop.htm

Официальный сайт рассылки - www.mista.ru
Волшебный форум -
www.forum.mista.ru,
Форум по 1С - http://www.forum.mista.ru/index.php?forum=1c
Архив выпусков этой рассылки - http://www.mista.ru/subscribe

С уважением,
Станислав Митичкин (или Волшебник Станислав)

stasmit@mail.ru
, www.mista.ru




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное