[x1c.ru] 1CDBin: Работа с файлами *.1CD на низком уровне средствами языка 1С с возможностью чтения таблиц (поддерживается формат 8.3.8.0)








Обработка позволяет просматривать файловые базы 1CD на низком уровне средствами встроенного языка. Реализована часть функциональности Tool_1CD, но на языке 1С Предприятия. Показываются таблицы, параметры таблиц, поля таблиц, записи таблиц, значения полей BLOB, есть 16-ричный просмотр страниц базы и консоль кода. Можно использовать для изучения структуры файлов 1CD, просмотра баз 1CD для выявления повреждений, создания своих обработок для выгрузки данных без открытия исследуемой базы в 1С:Предприятии.

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

Сначала благодарности:

В первую очередь выражаю огромную благодарность Валерию Агееву (awa) — автору статей о формате файлов 1CD и утилиты Tool_1CD.

Также выражаю благодарность andrewks за статьи о восстановлении работоспособности файловой базы, которые помогли глубже разобраться со структурой файлов 1CD.

Благодарю Алексея Ермилова (Alex_E) за помощь в создании обработки.

Также благодарю Андрея Лукина за внешнюю компоненту для работы с deflate.

 

Функционал:

  • Просмотр базы 1CD из любой другой конфигурации на управляемых формах (работает в "Такси")
  • Поддержка форматов 8.2.14.0 и 8.3.8.0.
  • Просмотр общей информации о таблицах базы (описание, размер записи, данные, BLOB, индексы и т.д.)
  • Просмотр общей информации о полях таблицы (тип, длина, NULL и т.д.)
  • Просмотр записей таблиц
  • Работа с полями BLOB:
    • просмотр в 16-ричном виде
    • просмотр в виде текста (используется ВК для распаковки deflate)
    • сохранение значения поля BLOB в файл
  • Возможность выгружать файлы таблицы: Файл данных, Файл BLOB, Файл индексов
  • 16-ричный вьюер страниц базы
  • Консоль кода 1С (КК) для вывода любой необходимой информации
  • Для записи в базу можно использовать скрипты на языке 1С в консоли кода. Для этого есть функция постраничной записи База1С_ЗаписатьСтраницыПоНомеру(…)

Для чего можно использовать:

  • Изучение физического представления базы
  • Выгрузка данных на низком уровне
  • Навигация по поврежденным базам (с ограничениями) для выявления повреждений. С помощью этой обработки были выявлены дефекты 3 "битых" баз, 2 из них полностью восстановлены. Для выявления дефектов писались скрипты для консоли кода, исправления вносились через сторонний 16-ричный редактор.
  • Можно рассматривать как пример работы с бинарными данными (функции обработки можно использовать для любых других файлов, например, для графических или звуковых)

Особенности работы:
Само двоичное чтение осуществляет ActiveX "SAPI.spFileStream", установленный практически в любой Windows, дальше идет работа средствами языка 1С через COMSafeArray. Кому интересно, простой пример работы из 1С с этим ActiveX — http://forum330.com/forum/86/all Документация — http://msdn.microsoft.com/en-us/library/ms722561%28v=vs.85%29.aspx

Интерфейс:
Почти весь функционал этой обработки был написан в рамках рабочей задачи, которая не требовала интерфейса. В итоге для этой обработки интерфейс был просто "прикручен" и дописано немного функций, а чтобы не изобретать велосипед, интерфейс был сделан похожим на интерфейс утилиты Tool_1C, автором которой является awa, без поддержки функций записи в базу из интерфейса.

 

Информация о таблице:

Информация о таблицах базы

Информация о полях таблицы:

Информация о полях таблицы

Операции над файлами таблицы:

Операции над файлами таблицы

Просмотр записей таблиц:

 При чтении данных таблицы добавляются поля, начинающиеся с префикса "B1C_". В поле "B1CD_Deleted" записывается признак удаленной записи (для записи, помещенной в таблице на удаление, устанавливается ИСТИНА).

Для полей типа BINARY выводится строка вида #BLOB,<Тип>,<БЛОКНАЧАЛА>,<РАЗМЕР>. Например, #BLOB,I,1,19024.

 

 

Информация о записях таблицы

16-ричный просмотр страниц базы:

16-ричный просмотр базы

Консоль кода (КК):

Консоль кода

Обработка содержит примеры скриптов. Вот, например, простой скрипт для получения DBNames из таблицы PARAMS:


лДатаС = ТекущаяДата();
лИмяТаблицы = "PARAMS";
лТекТаб = КК_ПолучитьСтруктуруТвблицыПоИмени (лИмяТаблицы);

мсЗаписи  = Х1С_Б1СД_ПолучитьЗаписиТаблицы (лИмяТаблицы,,,,,3,Истина);
лСтрокаБлоб = "";
Для Каждого цЗапись Из мсЗаписи Цикл
Если цЗапись["FILENAME"] = "DBNames" Тогда
лСтрокаБлоб = цЗапись["BINARYDATA"];
Прервать;
КонецЕсли;
КонецЦикла;

стрБлоб  = База1С_ПолучитьСтруктуруBLOBИзСтроки (лСтрокаБлоб);
хБуфер   = База1С_ПолучитьДанныеБлоб (лТекТаб.ФайлБлоб, стрБлоб.НомерБлока, стрБлоб.Размер);

лТекст   = База1С_РаспаковатьБуфер (хБуфер);
КонсольКода_ОкноОтладки = лТекст;

лСекунд  = ТекущаяДата() - лДатаС;
Сообщить("Выполнено за (сек): "+лСекунд);

 

 

Ограничения и работоспособность:

Версии до 2.0 тестировались на Windows 8 (32 bit) и на релизе платформы 8.3.5.1119.

Версия 2.0 тестировалась на Windows 10 Home (64 bit) и на релизе платформы 8.3.14.1630.

На данный момент не на все варианты повреждений файла 1CD есть проверка, этот функционал планируется доработать в будущем.

Планы по развитию функционала:

Сделать возможность редактирования страниц базы в 16-ричном режиме;

Для чтения двоичных данных использовать БуферДвоичныхДанных вместо компонент ActiveX;

Автоматическое выявление некоторых повреждений баз;

Работа с базой в "Режиме поврежденной базы";

Запись в базу ранее выгруженных и измененных данных;

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

История версий:

0.0.2.8a от 02.10.2014 Первая публичная версия (альфа)

0.0.3.0a от 24.01.2025

Новое в версии:

  • добавлена возможность вывода записей таблиц (функции чтения таблиц пока находятся в состоянии тестирования)
  • ускорена работа с файлом 1CD (spMemoryStream)                                                                                                  
  • ускорена работа HEX-просмотра
  • ускорено открытие базы примерно в 2 раза (3500 таблиц около 15 секунд)
  • добавлена форма выхода
  • добавлена форма предупреждения при выгрузке файла
  • добавлена обработка типа поля T (text)
  • исправлена ошибка повторного сохранения
  • исправлены другие мелкие ошибки

 2.0.3.20a от 11.04.2025

Новое в версии:

  • Поддержка формата 8.3.8.0
  • Работа с BLOB:
    • просмотр в 16-ричном виде
    • просмотр в виде текста (используется ВК для распаковки deflate)
    • сохранение значения поля BLOB в файл
  • Оптимизирована работа с памятью при работе с полями BLOB
  • Ускорение некоторых операций с файлами и полями BLOB
  • Сохранение и загрузка записей таблиц в MXL-фвйлы для ускорения работы с таблицами с большим количеством записей
  • FIX: исправлена ошибка при просмотре записей и выгрузке больших файлов (DATA и BLOB)
  • FIX: исправлена ошибка при выводе неверной версии формата 1CD
  • FIX: исправлены другие мелкие ошибки

 

 

75 Comments

  1. BigB

    Ух ты! Здорово!

    Reply
  2. ediks

    Интересное решение, но не понял как выгружать — «Выгрузить Файл данных» и «Выгрузить файл BLOB». Нажимаю — ничего не происходит.

    Если два раза нажать на эти кнопки, то выскакивает ошибка.

    Reply
  3. GusevNA

    (2) ediks, файлы появляются в рабочем каталоге. Имена файлов типа:

    _ENUM200_Blob

    _ENUM200_Data

    _ENUM200_Index

    То есть к имени таблицы добавляется суффикс (Data, Blob, Index)

    Насчет повторной выгрузки — действительно баг, спасибо, поправлю.

    Reply
  4. GusevNA

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

    Reply
  5. GusevNA

    Сейчас идет активная доработка функционала для навигации по базе и по выявлению повреждений. Поэтому:

    1) Если кому нужен какой функционал — пишите, может, заодно и его реализуем в первую очередь

    2) Если у кого есть битые базы (только 1CD, не .DT) и есть желание их попробовать восстановить, пишите, быстро не обещаю, но по мере свободного времени могу повосстанавливать.

    Reply
  6. JohnyDeath

    Реально ли выполнять запросы к таблицам этого файла?

    Для чего это надо именно мне. Работаю с хранилищем конфигурации, перегружая исходники в git-репозитарий и пытаюсь прикрутить сервер непрерывной интеграции TeamCity. В связи с чем возникают следующие потребности:

    1) Из хранилища 1С выбрать номер последнего помещения (таблица VERSIONS)

    2) Выбрать из таблицы HISTORY строки по определенному фильтру (например, номер версии )

    Reply
  7. Жолтокнижниг

    Так по моему есть множество аналогов уже написанных(даже у меня) в чем плюсы конкретно вашего решения в сравнении с другими

    Reply
  8. GusevNA

    (6) JohnyDeath, Запросы к таблицам пока не поддерживаются, хотя реализовать несложно — после открытия базы есть структуры и типы данных всех таблиц и всех их полей с размерами. Можно прочитать файл данных любой таблицы (функции в обработке готовые есть), поместить его во временную таблицу и делать выборки из нее.

    Насчет хранилища — сейчас пока поддерживаются только файлы 1Cv8.1CD, детально с файлами хранилища не разбирался, но по-моему, там файлы организованы аналогично 1CD. Если так, то теми же самыми функциями этой обработки можно их разбирать, потом читать нужные таблицы, помещать во временные таблицы ну и запросом дальше.

    Кстати, если будет большой интерес к теме хранилища, могу реализовать чуть попозже.

    Reply
  9. GusevNA

    (7) Жолтокнижниг, (7) Я знаю пока знаю только одну разработку с подобным функционалом на языке 1С — https://code.google.com/p/restoration-base-1c8/

    Во-вторых, это конфигурация, а не обработка. К тому же там последние релизы от 2012 года и непонятно, будет она развиваться дальше или нет. У меня она в начале работы стала выдавать какие-то ошибки еще до открытия базы.

    Если еще где-то нашли аналоги — буду благодарен за ссылки — интересно и мне посмотреть на них.

    Reply
  10. EmpireSer

    Есть аналог в виде компоненты native для 1С (включая линукс):

    http://infostart.ru/public/166557/

    Reply
  11. GusevNA

    (10) EmpireSer, Она написана не на языке 1С. Соответственно, для ее, к примеру, доработки нужно знать соответствующий язык программирования, на котором она написана, иметь эту среду разработки и каждый раз при внесении изменений перекомпилировать А тут открыл Конфигуратор — доработал под свои задачи и, собственно, все — можно пользоваться. Любой 1С-разработчик может это сделать. К тому в этой обработке есть 16-ричный просмотр страниц базы.

    Reply
  12. EmpireSer

    (11)

    Не совсем всё так радужно как вы говорите:

    1. Вы работаете с COM объектами, а специфику их работы тоже нужно знать.

    2. Из-за этих же COM объектов есть ограничение в ОС. Работа же Native компонентов под разными ОС обеспечивается 1С (т.к. в данном случаи есть библиотека компонеты под Linux).

    НО! :-)))

    Ваши изыскания похвальны! Я их только поддерживаю!

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

    Reply
  13. monsta

    Занятная разработка, плюсую. Если бы она еще говорила на что именно «Ошибка формата потока» при работе с конфигурацией жалуется…

    Reply
  14. GusevNA

    (12) EmpireSer, Во-первых, спасибо за поддержку. Что касается изысканий, то, на мой взгляд, здесь они были минимальны — была рабочая задача по чтению данных из файлов 1CD без запуска базы, потом был прикручен интерфейс. А что касается COM-объектов, то это Виндовые COM-ы, входящте в состав Microsoft Speech API (SAPI). На форумах есть информация о том, что эти COM-ы есть практически в любой Винде, так что здесь тоже потенциальные проблемы минимальны. А что касается Linux, то использование обработки под него не планировалось (хотя можно переписать, если нужно будет, все чтение/запись под что-нибудь еще — кода там немного). А вот насчет 1CDLib (сам пользовался неоднократно, очень хорошая разработка, на мой взгляд) — есть ее исходники в публичном доступе?

    Reply
  15. GusevNA

    (13) monsta, Ошибка формата потока — у меня такое было с битыми файлами конфигурации в файле 1CD, а не со структурой файла 1CD (пока ни разу не встречал, чтобы структура 1CD была порушена при такой ошибке, хотя быть может и, наверно, бывает часто). Если интересно, могу Вашу базу посмотреть.

    Reply
  16. andrewks

    а что насчёт производительности?

    сразу скажу: тесты не делал, но что-то мне подсказывает, что подобная реализация на языке 1с не может быть очень быстрой

    Reply
  17. andrewks

    (13) monsta, «Ошибка формата потока» — это одно из самых бесполезных сообщений об ошибке, наряду с «System Error»

    это ошибка при чтении потока (stream) с данными 1с-формата (текстовый файл с фигурными скобками, запятыми и значениями)

    что именно не понравилось — да что угодно, начиная с испорченного содержимого до банального расположения строкового значения там, где 1с ожидает увидеть, например, число

    Reply
  18. GusevNA

    (16) andrewks, Пока не замерял. Для текущих задач пока хватает скорости.

    Tool_1CD, например, даже визуально шустрее. Но в коде есть еще возможности для оптимизации, на которую все времени не хватает ((

    Reply
  19. GusevNA

    (17) andrewks, Согласен, можно написать Global fatal error, смысл бы нисколько не поменялся 🙂

    Reply
  20. buganov

    (7) Жолтокнижниг, где же у вас есть? Я не нашел. И аналогов отнюдь не множество. Их как раз мало. Для чего это нужно? Как минимум посмотреть алгоритмы, как максимум восстановить базу. Просто стягивают такие умники «чем лучше, чем другие?». Скачайте и посмотрите, чай не чайник. А если чайник, то лучше не лезть к базе, а позвать взрослых.

    Reply
  21. EmpireSer

    (14)

    Исходники 1CDLib видимо закрыты 🙁

    P.S. Вот если бы кто-то ещё «V8Unpack» написал бы на 1С… а то у меня это самое узкое место в создании полиморфной конфигурации. Очень не хватает механизмов оттуда «Pack» и «UnPack»…

    Reply
  22. GusevNA

    (21) EmpireSer, Вообще есть мысли попробовать в будущем, только те реализации алгоритмов, которые я пока вижу, будут, скорее всего, медленными, потому что распаковка требуется, которую в v8unpack zlib.dll делает.

    Reply
  23. GusevNA

    (20) buganov, Да, сейчас основные доработки делаются в направлении восстановления баз.

    Так что если у кого есть битые базы, которые не жалко (не содержат больших комм.тайн:-)), просьба присылать для тестов и экспериментов.

    Своих 2 восстановил, 1 в процессе, а больше пока не попадаются.

    Reply
  24. crazydimka

    А сможет ли эта компонента когда-нибудь читать файл 1CD хранилища конфигураций для чтения метаданных ? Или если она это уже умеет подскажите как ?

    Reply
  25. GusevNA

    (24) crazydimka, Это обработка (EPF), а не компонента. На хранилищах особо не тестировалась, но файлы 1cv8ddb.1CD открывает, как обычные 1CD файлы. Таблицы (типа Config и ConfigSave) можно выгрузить в файл. Чтение и разбор метаданных в рамках этой обработки пока не планируется.

    Reply
  26. ololoanonim

    Такой вот вопрос, а можно ли просмотреть содержимое таблиц?

    Reply
  27. GusevNA

    (26) ololoanonim, В этой версии нельзя, сейчас идет разработка новой версии — там чтение и просмотр содержимого таблиц будет реализовано.

    Reply
  28. ololoanonim

    (27) а как долго займет разработка? просто очень надо. Может поделитесь как это лучше сделать?

    Reply
  29. GusevNA

    (28) ololoanonim, В принципе, там все готово, но нужно ее протестировать, а тестировать сейчас нет времени. Если потестируете и отпишетесь по результатам — хотя бы на уровне «работает-не работает», могу выложить в течение 1-2 дней.

    Reply
  30. ololoanonim

    Конечно протестирую. И отписаться не составит труда.

    Reply
  31. ololoanonim

    (29) можете пока подсказать как считывать данные? просто маленько поработал с Вашей обработкой и фиксированные строки стали считываться прям строками. А вот остальное не могу. Вот прошу Вашей помощи.

    Reply
  32. GusevNA

    (31) ololoanonim, Сегодня-завтра выложу обработку, там несложные алгоритмы — нетрудно будет разобраться, и заранее спасибо за тестирование 🙂

    Reply
  33. ololoanonim

    (32) Вам спасибо! Очень жду когда выложите.

    Reply
  34. gerkon1980

    (5)

    У меня горе — прямо горе — рухнула база. Проверяла через внутренний файл 1 C chdbfl — сказал «База данных разрушена. Восстановление не возможно». Последний раз сохранялась 28.04.14. А сейчас год закрывать а у меня база рухнула. Я просто не представляю как ее восстанавливать, если документы заново вводить. Помогите, пожалуйста, восстановить

    Reply
  35. GusevNA

    (34) gerkon1980, Могу попробовать Вам помочь. Емейл для связи указал в ЛС

    Reply
  36. ololoanonim

    (35) Чтение работает, только при чтении больших таблиц вызывается исключение. Причины устанавливаются. 🙂

    Reply
  37. GusevNA

    (36) ololoanonim, Во-первых, еще раз спасибо за тестинг, на который не хватает времени.

    Во-вторых, в принципе, обработка тестировалась на разных таблицах, в том числе и больших. Надо смотреть конкретную базу и конкретную таблицу. Я там в ЛС на всякий случай написал свой емейл.

    Reply
  38. ololoanonim

    (37) Хорошо. Вечером, когда буду дома, я Вам напишу.

    Reply
  39. baton_pk

    Ой, спасибо 🙂 Вытащил данные о продажах из битой базы кассового узла.

    Reply
  40. INed

    Николай, добрый день!

    Можно ли решить с помощью Вашей конфигурации проблему: «Ошибка СУБД: Длина ключа индекса превышает максимально допустимую ‘_Documen831…»?

    Reply
  41. dskull86

    эта обработка считает таблицу IBVERSION?

    Reply
  42. GusevNA

    (41) dskull86, В нескольких базах, которые были под рукой, нормально считывает.

    Reply
  43. GusevNA

    (40) INed, Обработка на данный момент только читает из базы, но ничего не исправляет. Так что Вашу проблему решить вряд ли получится.

    Reply
  44. Alexoniq

    Может у меня база слишком хорошо битая, может ещё что, но при попытке чтения записей по объекту выдает вот такую ошибку (не сразу, а после нескольких минут обработки данных)

    Reply
  45. Alexoniq

    и еще одна ошибочка

    Reply
  46. GusevNA

    (45)Если база битая, ошибки могут вылезать запросто. В этом случае лучше смотреть в HEX-редакторе, что и как, можно писать скрипты для КК. Вообще, сначала была идея сделать кучу проверок, но стала падать скорость работы.

    Reply
  47. spawn_a

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

    Reply
  48. sss999

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

    Reply
  49. GusevNA

    (48)Здравствуйте, выгрузить все таблицы можно скриптом в «Консоли кода», в обработке есть примеры. Загрузки через интерфейс нет, но опять же можно через скрипты. Можно загружать таблицы в SQL-базу, так проще и быстрее.

    Reply
  50. sss999

    (49)обработка очень крутая, мне как чистому 1с нику тяжело конечно понимать весь код на низком уровне, не представляю как такое написать можно было, посоветуйте что почитать по двоичным данным?Я выгрузил блоб а он меньше на 250, 250 это размер страницы или чего, это в чем измеряется, я не понимаю.А можно пример если мне нужно blob загрузить таблицы params для dbname, если можно в личку.

    Reply
  51. vadim1011985

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

    Есть ли возможность удалять таблицы как в формате 8.2.14 так и формате 8.3.8 .

    Reply
  52. sss999

    (50)blob он целиком идет или он может раскидан по базе быть я не понял тоже.

    Reply
  53. vadim1011985

    (52) Читайте описание форматов 8.2.14 и 8.3.8 Например это

    https://infostart.ru/public/536343/

    там же ссылка на старый формат 8.2.14

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

    Reply
  54. sss999

    (53)пытался это читать, ниче не понятно, как понимаю нужно классические книги почитать по строению баз, вот такое я бы почитал, думаю 1с не сами это придумали ведь, и по двоичному представлению данных тоже надо читать что-то..

    Reply
  55. acanta

    Это аналог Sql studio для 1С без возможности делать бэкап.

    Reply
  56. vadim1011985

    (0) И еще вопрос где можно посмотреть какие функции (и их описание ) экспортирует внешняя компонента

    Reply
  57. GusevNA

    (51)Здравствуйте. В ближайшее время выложу пример отдельной обработки, которая будет вызывать функции 1CDBin как функции библиотеки.

    Функций записи в базу 1CD из интерфейса нет, поэтому через обработку удалить таблицы не получится. Удалять таблицы легко в 16-ричном редакторе, я, например, активно использую HxD, Для удаления таблицы нужно всего несколько байтов подправить. В принципе, это можно и без этой обработки сделать.

    Насчет скриптов — в модуле формы есть процедуры «_КК_Тест_Скрипт1 ()» «_КК_Тест_Скрипт2 ()» итд, это и есть примеры скриптов. Открываете базу, копируете код такой процедуры из Конфигуратора в буфер обмена, вставляете в поле на закладке «Консоль кода» и нажимаете «Выполнить код 1С». Все имена функций и процедур, которые имеют отношение к скриптам для КонсолиКода, имеют префикс КК_

    Если, например, скрипт получает данные из какой-то функции, можете в конце скрипта дописать вывод результата в файл, текстовое поле или ОкноСообщений.

    Reply
  58. GusevNA

    (56)А какая именно компонента?

    Reply
  59. vadim1011985

    (57) Сегодня пробовал выгружать файлы таблиц по папкам , немного изменив код обработки

    Процедура ВыгрузитьДанныеТекущейТаблицы (ТипДанныхТаблицы,СтруктураТаблицы = неопределено)
    
    //лСтруктураТаблицы = ПолучитьТекущуюТаблицуБД ();
    
    Если СтруктураТаблицы = Неопределено Тогда
    лСтруктураТаблицы = ПолучитьТекущуюТаблицуБД();
    Иначе
    лСтруктураТаблицы = СтруктураТаблицы;
    КонецЕсли;
    
    Если лСтруктураТаблицы = Неопределено Тогда
    Возврат;
    КонецЕсли;
    
    // получаем имя файла
    
    Если ТипДанныхТаблицы = 1 Тогда
    ЧастьИмениФайла = «data»
    ИначеЕсли ТипДанныхТаблицы = 2 Тогда
    ЧастьИмениФайла = «Blob»
    Иначе
    ЧастьИмениФайла = «Index»;
    КонецЕсли;
    
    
    
    лИмяФайла = лСтруктураТаблицы.Имя+ЧастьИмениФайла; //  ПолучитьИмяФайлаДляДанныхТаблицы (лСтруктураТаблицы, ТипДанныхТаблицы);
    
    
    лРабочийКаталог = ПолучитьРабочийКаталог ();
    
    Если лРабочийКаталог = Неопределено Тогда
    Х1С_СообщитьОбОшибке1 («Неверный рабочий каталог»);
    Возврат;
    КонецЕсли;
    
    СоздатьКаталог(лРабочийКаталог+лСтруктураТаблицы.Имя);
    
    лПолноеИмяФайла = лРабочийКаталог + лИмяФайла;
    
    
    ВыгрузитьДанныеТаблицы (лСтруктураТаблицы, ТипДанныхТаблицы, лПолноеИмяФайла, , Истина);
    // Состояние(«Файл выгружен в рабочий каталог»);
    // Х1С_Предупреждение(«Файл выгружен в рабочий каталог»,,»Выгрузка файла»,»Закрыть»);
    Сообщить («Данные сохранены в файл: «+лПолноеИмяФайла);
    КонецПроцедуры

    Показать

    В самой консольке написал следующий код

    Если База1С_Открыта() Тогда
    
    Для НомерТаблицы = 0 По База1С.МассивТаблиц.Количество () — 1 Цикл
    
    лТекТабИмя = База1С.МассивТаблиц [НомерТаблицы];
    Сообщить(лТекТабИмя.Имя);
    ВыгрузитьДанныеТекущейТаблицы  (1, лТекТабИмя);
    Сообщить(«Таблица Выгружена»);
    
    КонецЦикла;
    
    КонецЕсли;

    Показать

    Выгружает пару таблиц , а потом валится с ошибкой — «преобразование к типу число не может быть выполнено»

    причем если потом отдельно через закладку операции выгрузить эту таблицу , и снова запустить через консоль то таблица выгружается

    Reply
  60. GusevNA

    Посмотрите пример _КК_Тест_Скрипт1 () в модуле формы, там написан правильный обход таблиц.

    У Вас в коде вместо

    База1С.МассивТаблиц [НомерТаблицы];

    Нужно вызывать функцию:

    КК_ПолучитьСтруктуруТвблицыПоИмени ()

    Это связано с постепенным получением данных, для ускорения работы некоторых функций

    Reply
  61. GusevNA

    (59) В итоге код выгрузки таблиц для «Консоли кода» будет выглядеть так:

    // === ВЫГРУЗКА ТАБЛИЦ БАЗЫ 1CD В КАТАЛОГ НА ДИСКЕ
    
    // так оформляются параметры скрипта для наглядности ПРМ_<ИмяПеременной>
    // Если Истина заменить на Ложь, то будут выгружаться все таблицы
    ПРМ_ВСЕ_ТАБЛИЦЫ = Истина;
    
    Если Не База1С_Открыта() Тогда
    ВызватьИсключение(«База не открыта»);
    КонецЕсли;
    лРабочийКаталог = ПолучитьРабочийКаталог();
    Если лРабочийКаталог = Неопределено Тогда
    ВызватьИсключение(«Неверный рабочий каталог»);
    КонецЕсли;
    
    лЗамерСтарт = ТекущаяДата();
    ОчиститьСообщения();
    лСч = 0;
    // все таблицы могут выгружаться долго, поэтому стоит ограничение для тестов
    МаксКолТаблиц = 10;
    Для Каждого цТаблица Из База1С.МассивТаблиц Цикл
    Если Не ПРМ_ВСЕ_ТАБЛИЦЫ Тогда
    лСч = лСч+1;
    КонецЕсли;
    Если лСч > МаксКолТаблиц Тогда
    Прервать;
    КонецЕсли;
    
    лТекТаб = КК_ПолучитьСтруктуруТвблицыПоИмени(цТаблица.Имя);
    Сообщить(«Выгружается таблица: «+лТекТаб.Имя);
    СоздатьКаталог(лРабочийКаталог+лТекТаб.Имя);
    ВыгрузитьДанныеТаблицы  (лТекТаб, 1, лРабочийКаталог+лТекТаб.Имя+»»+лТекТаб.Имя+»_Data»);
    // для таблиц (потоков) Blob убрать комментарий в следующей строке
    // ВыгрузитьДанныеТаблицы  (лТекТаб, 2, лРабочийКаталог+лТекТаб.Имя+»»+лТекТаб.Имя+»_Blob»);
    // для таблиц (потоков) Indexes убрать комментарий в следующей строке
    // ВыгрузитьДанныеТаблицы  (лТекТаб, 3, лРабочийКаталог+лТекТаб.Имя+»»+лТекТаб.Имя+»_Indexes»);
    Сообщить(«Таблица «+лТекТаб.Имя+» выгружена»);
    
    КонецЦикла;
    Сообщить («Выполнео за (с):»+(ТекущаяДата()-лЗамерСтарт));
    
    

    Показать

    Reply
  62. vadim1011985

    (61) у меня так получилось

    Если База1С_Открыта() Тогда
    
    Для НомерТаблицы = 0 По База1С.МассивТаблиц.Количество () — 1 Цикл
    
    таблица  = База1С.МассивТаблиц [НомерТаблицы];
    
    лТекТабИмя=КК_ПолучитьСтруктуруТаблицыПоИмени (Таблица. Имя,Истина)
    
    ВыгрузитьДанныеТекущейТаблицы  (1, лТекТабИмя);
    
    ВыгрузитьДанныеТекущейТаблицы  (1, лТекТабИмя);
    
    ВыгрузитьДанныеТекущейТаблицы  (2, лТекТабИмя);
    
    ВыгрузитьДанныеТекущейТаблицы  (3, лТекТабИмя);
    
    Сообщить(«Таблица Выгружена»);
    
    КонецЦикла;
    
    КонецЕсли;

    Показать

    Reply
  63. prtz

    (0) Добрый день! Подскажите, можно ли обратиться к вам за помощью в восстановлении базы? Ситуация следующая — умер hdd на котором хранилась база. Резервные копии делались ежедневно в Acronis Cloud. Базу восстановили, но она не запускается(( пишет — файл базы данных повреждён. У нас этих резервных копий глубиной в 2 месяца и заработала только самая первая (двух месячной давности), но за эти 2 месяца было проделано очень много работы. Если не вы, то может быть подскажете к кому можно обратиться? Заранее спасибо!

    Reply
  64. vadim1011985

    (63) Пробовали проверять утилитой Chdbfl ?

    Reply
  65. prtz

    (64) Да, выдаёт кучу ошибок. Если поставить галку на исправление найденных ошибок, то утилита тупит несколько секунд и закрывается. Tools_1c также сыпет море ошибок. Чуть попозже выложу скриншоты с ошибками

    Reply
  66. prtz

    (64) вот что показывает chdbfl

    Есть надежды на оживление? Или с этим сразу в морг?

    Reply
  67. vadim1011985

    (66) Надежда всегда есть , пришлите файл гляну как раз и эту обработку опробую

    Reply
  68. prtz

    (67) Почему то не могу вам отправить личное сообщение. Не могли бы написать ваш email? в личные сообщения конечно же

    Reply
  69. vadim1011985
  70. prtz

    (69) Отправил вам ссылку нашу базу в акронисе.

    Reply
  71. AntoShiK86

    Здравтсвуйте,

    был сбой на сервере,

    chdbfl выдал такие ошибки:

    Повреждены данные таблицы ‘FILES’. Восстановлено 30 из 30 записей.. Потеряно 2 значений полей неограниченной длины

    Повреждены данные таблицы ‘_DOCUMENTJOURNAL6806’. Восстановлено 48135 из 48140 записей.

    Повреждены данные таблицы ‘_DOCUMENTJOURNAL6840’. Восстановлено 14348 из 14349 записей.

    Повреждены данные таблицы ‘_DOCUMENT207’. Восстановлено 9725 из 9725 записей.. Потеряно 2 значений полей неограниченной длины

    решили через вашу обработку посмотреть ‘_DOCUMENT207’

    в нерабочей базе при чтении записей выдало сообщение об ошибке.

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

    А так же сообщить номер строки. в таблице. У нас есть бэкап на предыдущий день. Мы можем по нему сверить, какие данные повредились. Но не можем понять какой документ повреждён. Предположительно это банковская выписка.

    Reply
  72. GusevNA

    Судя по картинке, где-то есть повреждение описания таблицы. В новой версии, которая сейчас тестируется, поврежденные описания таблиц будут обрабатываться более гибко.

    Также в новой версии будет более информативный вывод ошибок в записях таблиц, с номером страницы в базе, номером записи в таблице и смещением записи в таблице.

    Reply
  73. vadim1011985

    (72) жду новую версию , очень удобный инструмент. А не рассматривается возможность добавление и удалении таблиц ?

    Reply
  74. GusevNA

    Добавление/удаление таблиц не планируется. Есть вариант через SQL-версию. Перетащить в SQL базу все, что перетащится, а там уже делать все, что нужно.

    В планах есть набор функций для изменения записей и полей, а сами изменения предполагается делать скриптами в КонсолиКода, но это не в ближайшей версии.

    Reply
  75. vadim1011985

    (74) жаль что не планируется , придётся самому думать как это реализовать , так как это необходимый инструмент для починки баз

    Reply

Leave a Comment

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