Восстановление структуры DBSchema

03.08.20

Задачи пользователя - Корректировка данных

Обработка для анализа ошибок в структуре DBShema, восстановление структуры объектов, перенос данных из выгруженных в XML таблиц базы, при помощи "Tool 1CD".

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Восстановление структуры DBSchema
.epf 105,53Kb
135
135 Скачать (10 SM) Купить за 4 550 руб.

Ситуация

Маленькая файловая база Бух3, учёт ведется 4 года, во время очередного обновления вылетает конфигуратор, при повторной попытке обновления имеем сообщение о невозможности применить изменения конфигурации.

 

 

Стандартный алгоритм действий:

  1. Долго себя ругаем за лень при создании архива перед обновлением;
  2. Откатываем конфигурацию на версию БД. При попытке запустить базу – ошибка, что таблица такая-то не найдена и вылет;
  3. Конфигуратор – тестирование и исправление, опять ошибка, что таблица такая-то отсутствует и невозможность ремонта;
  4. Попытка залить предыдущую типовую конфигурацию – опять критическая ошибка SDBL;
  5. Последняя попытка – выгрузка базы в DT, проходит частично и вылетает. При загрузке DT – получаем базу с 90% пустых таблиц и сохранившейся ошибкой при тестировании и исправлении.
  6. С удивлением узнаем, что у админа нет архивных копий от слова совсем;
  7. Осознание того, что проблема серьезная и требуется помощь. Отправка запроса в 1С и замечательный ответ о том, что ваша база разрушена, поэтому восстановите базу из архивной копии и будет вам хорошо.
  8. Гуглим, находим “Tool 1CD”, с горечью осознаём, что с версией 8.3.8 он работает только на чтение. Вывод – что-то чинить можно в режиме SQL.
  9. Загружаем базу из ранее выгруженного DT. Получаем те же проблемы, но на этот раз можно использовать Profiler и, например, создать недостающие таблицы, поля.
  10. Некоторое время закрываем проблемы по отсутствующим полям на SQL, пока не получаем вот такое сообщение

    При условии работающей базы, мы вполне можем узнать что это за регистр, но работающей базы у нас нет, от слова совсем.
  11. Опять гуглим на предмет: «А что такое схема базы данных», и вот тут информация крайне скудная. Официальная трактовка от 1С:
  12. Открываем эту табличку в SQL, это бинарные данные. Выгружаем их в файлик, открываем его Notepad++ и видим набор массивов с описанием полей базы:

    Попытка найти информацию о том, что же это всё такое – результат нулевой. Ок, значит разбираться придётся самому. Перечитывание нескольких статей на инфостарте даёт понимание необходимости просмотра также данных сопоставление объектов конфигурации в файлике DBNames и самой конфигурации 1С.
  13. Проблема, как найти идентификаторы объектов конфигурации 1С, решилась выгрузкой конфигурации в XML. Предварительно файл cf был выгружен с помощью Tool 1CD и загружен в чистую базу на SQL.
  14. Далее путем поиска таблицы в DBNames получаем её идентификатор, и ищем по нему в каталоге с выгруженной конфигурацией XML. Находим, удаляем объект в конфигураторе, снова попытка сохранения – другая ошибка, на другую таблицу… в общем повторяем итерацию в надежде вылечить базу до тех пор, пока не получаем вот такую ошибку:
  15. И это серьезная засада, потому как непонятно что ещё можно удалить из конфигуратора. Можно конечно запустить Profiler и найти на какую таблицу он ругается. Но в конце концов это всё закончилось такой ошибкой на поле Fld793 (ОбластьДанныхОсновныеДанные), и по профайлеру всё останавливается после проверки таблицы журналов и всё, вылетает.
  16. В итоге приходим к выводу, что «скотчем и соплями» проблему не решить, и придётся подходить к вопросу системно.

Инструментарий

  1. Загрузка/выгрузка данных из DBSchema и DBNames(используя алгоритм Deflate);
  2. Загрузка схемы объекта из чистой эталонной базы, автозамена реквизитов объекта на наши. Добавление/замена схем объектов в DBSchema;
  3. Проверка и автоматическое(не все) создание недостающих схем объектов, проверка реквизитов в таблице DBNames;
  4. Реструктуризация таблиц SQL, добавление/замена полей(не все);
  5. Загрузка в таблицы SQL, выгруженные из файловой базы с помощью Tool 1CD

 

upd. 2019.07.13 - Добавлена интеграция с обработкой //infostart.ru/public/275315/. Подключаемся к "убитой" базе, читаем список таблиц и загружаем напрямую нужные таблицы в SQL

upd. 2020.08.03 - Добавлена возможность прямой выгрузки из списка DBNames в базу. Добавлена возможность генерации перечня DBNames для случаев когда в схеме базы объекты есть, а в DBNames нехватает. Автоматически генерируется для констант, перечислений и документов, остальные объекты можно доработать по желанию.

обработка DBSchema DBNames Tool_1CD восстановление

См. также

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32700    106    152    

73

SALE! 20%

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

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

3600 2880 руб.

10.02.2017    110541    662    174    

702

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    4037    35    17    

44

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

4800 руб.

27.10.2021    23930    241    35    

78

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для корректировки входящего НДС при смене системы налогообложения индивидуального предпринимателя с УСН на ОСНО в 1С:Бухгалтерия предприятия 3.0

4000 руб.

18.07.2024    690    1    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Timur.V 80 11.03.19 14:59 Сейчас в теме
Долго себя ругаем за лень при создании архива перед обновлением;

))
Должен быть чек-лист по обновлению!
2. Константин С. 672 11.03.19 15:32 Сейчас в теме
(1)
Должен быть чек-лист по обновлению!


Да ее на SQL, где это займет не более 10-20 минут.
3. acanta 11.03.19 15:36 Сейчас в теме
В 7ке DBF при обновлении и реструктуризации бакап формировался платформой на каждый файл отдельно.
Неужели сложно было встроить в платформе бакап базы при реструктуризации куда нибудь во временную папку?

"Если звезды зажигают значит это кому нибудь нужно" (с)
4. fishca 1259 11.03.19 16:05 Сейчас в теме
Загрузка/выгрузка данных из DBSchema и DBNames(используя алгоритм Deflate);

с помощью GameWithFire ( http://main.1c-ei.ru/Articles/gamewithfire#TOC--7 ) ?
5. spawn_a 55 11.03.19 21:59 Сейчас в теме
(4) Спасибо за ссылку! К сожалению, сам найти не смог подобного решения.
16. SV6 13.01.20 18:06 Сейчас в теме
(4)Огромное спасибо, шикарное решение, куда практичнее всех описанных
18. ZloyGenii 11.03.20 12:57 Сейчас в теме
(4)
Deflate


Не подскажите примерный код. Запросом получаю данные из таблицы DBSchema но вот привести их к виду в файл не получается чего то... каким методом преобразовываете данные из поля "serializeddata" ? то ли я проглядел что-то, то ли не так делаю гно любой из методов дает ошибку :(
19. spawn_a 55 11.03.20 13:00 Сейчас в теме
(18) Вроде бы вот этот метод использовал: https://infostart.ru/public/618906/
20. ZloyGenii 11.03.20 15:23 Сейчас в теме
(19)
метод


Блин все на поверхности... Спасибо будем мудрить дальше, а вообще получить бы часть обработки вашей только для получения схемы корректировки и закачки обратно :( так сказать для нищенствующих...

За ссылку большое спасибо будем проверять.
6. SerVer1C 815 29.03.19 00:15 Сейчас в теме
Ничего не понял. Вы базу восстановили? Если есть CF такой же точно конфы, то почему бы просто не подменить одно значение из DBSchema ?
7. spawn_a 55 29.03.19 08:39 Сейчас в теме
(6) Базу конечно же восстановил. В каждой базе DBSchema генерируется свой, т.е. даже если выгрузить CF из таблицы Config и залить в новую чистую базу - имена таблиц и полей будут каждый раз разными. Поэтому приходится брать из чистой базы из DBSchema схему объекта, и выполнять в ней замену имён полей на имена "убитой" базы. Особую сложность в этом процессе представляют индексы.
8. SerVer1C 815 29.03.19 11:44 Сейчас в теме
На что тогда вы опирались, при лечении DBSchema, если CF и в битой базе, и в любой другой, созданной на основе оригинального CF, будет таким же (т.е. таблица Config) ?
9. spawn_a 55 29.03.19 12:19 Сейчас в теме
Из CF нам нужны идентификаторы объектов и реквизитов метаданных. По ид получаем из DBNames имена полей. Т.е. получив схему объекта из чистой базы, мы можем через DBNames чистой базы получить имена реквизитов. Далее обратная процедура, берем DBNames "убитой" базы и определяем её имена полей.
10. Дмитрий74Чел 239 19.09.19 14:26 Сейчас в теме
Напишите пожалуйста документацию к обработке. Кнопок много. Какова правильная последовательность действий? И назначение кнопок не всегда ясно.
11. spawn_a 55 22.09.19 12:57 Сейчас в теме
Собственно я уже отметил, что обработка является "инструментом" программиста, по аналогии например с 1cadmin. Весь функционал заточен на понимание проблемы, и методики её решения самим разработчиком. В каждом конкретном случае приходится что-то в ней допиливать или менять. Сейчас у меня есть несколько восстановленных баз с её помощью, и каждый раз что-то я допиливаю или переделываю. Если есть конкретные вопросы - велком в личку, с удовольствием подскажу/объясню.
12. Дмитрий74Чел 239 24.09.19 18:24 Сейчас в теме
Использовал Вашу обработку в своей статье. Полагаю, что для Вас основная ценность обработки именно в автоматическом поиске и исправлении ошибок. Полагаю, коллегам пригодилась бы урезанная версия, с функционалом только в части выгрузки DBSchema и DBNames из sql в файл и обратно, за меньшую цену sm.
13. spawn_a 55 24.09.19 22:50 Сейчас в теме
Выгрузку/загрузку можно сделать отдельной обработкой, я в своей использовал наработки также других товарищей с инфостарта. Постараюсь сделать упрощенный вариант и выложу за "мзду маленькую".
Насчет вашей методики восстановления, мне кажется, что можно было сделать проще. В обработке есть функционал генерирования объектов DBShema по данным копии конфигурации базы. Просто нужно реальную ситуацию смотреть, а не готовый вариант решения проблемы.
14. k9260130000 27 17.10.19 00:33 Сейчас в теме
Благодарю. Обработка помогла. Статья https://infostart.ru/public/1126277/ пояснила как ей пользоваться, дав решение проблемы в "ручном" режиме . Из обработки видно что её функционал могуч и позволил бы сделать всё быстрей, но без мануала овладеть им явно сложнее чем ручками записи поправить. Если бы Вы автоматизировали то что проделал автор статьи могли бы поднять стоимость и повысить привлекательность для широких масс Вашей обработки.
15. rokhin 147 24.12.19 15:57 Сейчас в теме
Прочитал с первого до 16-го пункта. Ничего не понятно. Плюнул на статью.
Стал сам разбираться. Процесс шел, результат вот-вот будет получен. Дальше тупик.
Вернулся к этой статье.
Прочитал с первого до 16-го пункта. Ну все понятно, так я и делал.
Скачал обработку.
17. rokhin 147 23.01.20 09:40 Сейчас в теме
Лечить схему вручную в редакторе не удалось, появились непонятные несоответствие типа поля. Трудно сделать все аккуратно, повторять было лень, пришлось писать обработку.
https://infostart.ru/public/1183875/
Никаких замечаний по несоответствию поля уже не было. Видимо когда ручками, то что-то сделал криво.
А с обработкой прошло все гладко. Даже не сбрасывал кэш, не производил "тестирование и исправление" базы.
21. veselon 08.10.20 11:17 Сейчас в теме
Добрый день, прописалось поле в таблицу криво. Можно ли данной обработкой удалить этой поле из dbshema? ругается что оно NULL , поле точно лишнее. Смотрел сравнивал структура с чистой базой с ИТС с этого же релиза.
Прикрепленные файлы:
22. spawn_a 55 08.10.20 11:27 Сейчас в теме
Да, без проблем читаете схему, находите объект, прям в тексте редактируете и записываете схему обратно. Велком в личку, если что-то не получается ;)
23. veselon 08.10.20 11:42 Сейчас в теме
Можете написать мне первым? мне пишет "отложенная группа"
24. ivdic 31 20.01.21 17:03 Сейчас в теме
25. spawn_a 55 20.01.21 17:10 Сейчас в теме
(24) Здравствуйте, теоретически при небольших доработках запросов в части типизации должно заработать... но вопрос, как понимаете, требует проработки
26. ivdic 31 23.04.21 13:20 Сейчас в теме
Добрый день! случился такой казус см. скриншот. sql postgres база работает но при выгрузке в dt или тестировании выдает такую ошибку.
ссылается на несуществующую таблицу констант... думается что проблема в записях sql и DBSchema и DBNames. Данная обработка поможет решить проблему? инструкцию к программе так и не выложили не понятно как пользоваться
Прикрепленные файлы:
27. spawn_a 55 23.04.21 13:26 Сейчас в теме
(26) Обработка не является универсальным средством, это скорей набор инструментов, чтобы попробовать решить конкретную проблему на конкретной базе. На постгресе мне базы на восстановление не давали, поэтому уверенно что-то сказать не могу. Возможно кто-то из наших коллег экспериментировал.
28. ivdic 31 23.04.21 14:26 Сейчас в теме
(27) Надеялся что вы мне хоть направление поиска проблемы дадите.. обратился в тех поддержку ...прикинулись дурачками
29. spawn_a 55 23.04.21 14:33 Сейчас в теме
33. mag1ka 22.01.24 21:43 Сейчас в теме
(29) Андрей, доброго времени суток!

Подскажите, как с Вами связаться, не могу разобраться с местным функционалом личных сообщений.
34. Дмитрий74Чел 239 23.01.24 08:17 Сейчас в теме
(33) сначала на картинку пользователя, потом "написать"
Прикрепленные файлы:
30. copybases 68 07.02.22 16:46 Сейчас в теме
Есть такое замечание: валится при чтении конфигурации, если в ней нет ни одного объекта какого-либо из считываемых типов. У меня, например, нет ни одной последовательности!
Для программиста, конечно, не проблема закомментить соответствующую строку, тем более, что обработка вообще не предназначена для конечного пользователя. Так что это просто для информации, чтоб (как я!) сходу не пугались те, кто с подобным столкнётся.
31. redscrest 22.01.23 22:30 Сейчас в теме
Автор, добрый день !, как вам в личку написать?
32. user2040419 21.01.24 08:07 Сейчас в теме
Хорошая статья, будем брать на вооружение
35. user2086074 16.07.24 14:32 Сейчас в теме
При попытке прочитать конфигурацию
Поле объекта не обнаружено (Configuration)
{ВнешняяОбработка.ВосстановлениеБазыSQL.Форма.Форма.Форма(834)}: Для Каждого Док из ОбъектXDTO.Configuration.ChildObjects.DefinedType Цикл
36. spawn_a 55 16.07.24 14:40 Сейчас в теме
(35) Напомню обработка предназначена в первую очередь для разработчиков. Тут нет никакой "защиты от дурака". В данном случае у Вас явно XML какой-то не такой, в нём нет корневого объекта "Configuration".
Оставьте свое сообщение