Компонента для прямого чтения/записи данных из файлов баз данных .1CD

База знаний
  1. 10 г. назад
    09.06.2020 21:07:46 отредактировано andrewks

    Компонента для прямого чтения/записи данных из файлов баз данных .1CD v.1.4.1 от 08.06.2020 (Windows/Linux).

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

    Возможности:
    - получение массива таблиц БД;
    - сохранение данных таблиц в файлы ("сырые" данные!);
    - загрузка данных таблиц из файлов ("сырые" данные!);
    - переименование таблиц, установка им новых описаний;
    - создание, удаление таблиц;
    - получение массива полей таблицы, подсчёт длины одной записи;
    - навигация по записям таблицы, чтение/запись полей и BLOB-полей;
    - сохранение/загрузка BLOB-полей в файл;
    - добавление, удаление записей;
    - получение примитивной информации по метаданным;
    - поддержка разных целевых платформ - Windows32/64, Linux64.

    Также возможна работа с базой данных (и, также, с произвольными двоичными файлами блочной структуры) на "низком" уровне: реализованы методы по чтению/записи числовых и строковых данных из блоков файла.

    Примечание по функциям изменения записей таблиц:

    Текущая версия не поддерживает перестроение индексов при добавлении новых записей, удалении записей или изменении индексируемых полей у существующих записей. Решение - принудительная переиндексация со стороны платформы 1С (из конфигуратора, или при помощи chdbfl.exe с установленной галкой "Исправлять обнаруженные ошибки")

    В архиве содержатся: непосредственно сам файл компоненты, описание свойств и методов, и пример обработки (УФ) для 1С 8.2-8.3, демонстрирующий возможность чтения списка таблиц БД, сохранения их содержимого в файлы в папку "Objects{timestamp}", удаление таблиц, восстановление их содержимого из файлов. Внимание! Используйте данную обработку только на тестовых копиях баз, не подвергайте рабочие базы риску разрушения.

    Предупреждения, отказ от ответственности:
    Автор не может нести ответственность за любой нанесённый ущерб при применении данного программного обеспечения. Используйте его исключительно на тестовых копиях баз данных! Своевременно производите резервное копирование баз данных во избежание потери информации!

    Условия использования и распространения: см. файл readme.txt

    Аналоги:
    Ближайшим аналогом является:
    - утилита Tool_1CD http://infostart.ru/public/19633/
    Однако компонента не позиционируется ни в настоящем, ни в будущем, как замена данной утилите, а является, скорее, дополнением к имеющемуся набору инструментов, и отличается идейно: целью является не предоставление некоего визуального интерфейса, а предоставление программного интерфейса для технических специалистов.

    Благодарности:
    Выражаю особые благодарности участнику awa, который провёл неоценимую работу по исследованию структуры файловой БД, и изложил результаты в своих статьях
    http://infostart.ru/public/19734
    http://code.google.com/p/restoration-base-1c8/wiki/1CD_format_brief
    участнику Pasha1st за статью https://infostart.ru/public/536343/
    участнику vde69 за создание проекта системы восстановления файловых баз 1С http://code.google.com/p/restoration-base-1c8/
    а также участнику v77 за публикацию http://infostart.ru/public/81644/ , которая позволила сэкономить немного времени при разработке компоненты.

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

    Файлы:
    files 1.4.1.0.zip

    Ответы: (32) (40) (48) (53) (54)
  2. Я как понимаю компонента нарушает лицензионное соглашение 1С?

    Ответы: (2) (3)
  3. (1) ничё, если само это лиц.соглашение ущемляет права легальных пользователей, прописанные в ГК?

    Ответы: (7)
  4. (1) Я так понимаю, что не совсем. Или совсем не. В силу ст. 1280 ГК РФ. 1С сильно "засекретилась", IMHO - чем и дала возможность применения той самой ст. 1280.
    ПолучитьСтруктуруХраненияБазыДанных - гнилая отмазка. База хранится в едином файле. А предусмотренных ст. 1280 "других источников" - кто-то подзабыл предоставить.

    Ответы: (7)
  5. Андрюх, ты б ODBC драйвер запилил - цены б ему не было.

    Ответы: (5)
  6. (4) в сутках только 24 часа...

    Ответы: (6)
  7. (5) да.. это факт.

  8. (2)(3) Так это понятно. Но я про текст непосредственного лиц. соглашения )))

    Ответы: (10) (12) (13)
  9. Нужно запилить отдельную секцию куда подобные статьи можно кидать.... А то потеряется скоро.

    Ответы: (9)
  10. (8) для этого служит маркер "База знаний"

    Ответы: (11)
  11. (7) ну, мало ли чего они там понаписали.
    если при приёме на работу в условиях трудового договора прописать кабалу и рабство - это же не означает, что всё это нужно исполнять ;)

  12. (9) Ну неудобно это же , не удобно...

  13. (7) Чихать. Они нарушают права пользователя на использование собственных данных.

  14. (7) Текст лицензионного соглашения должен соответствовать закону.
    И тут 1С попадает в собственную ловушку - отказываясь предоставить API, тем самым даёт право на "лево". Для сравнения - VBA. Или Visual Studio. Microsoft дал возможность программно создавать/редактировать и т.д. Ну и получил право говорить "кто не спрятался - я не виноват". Ну а с C# - да хоть что вытворяй с кодом. Возможности даны - ст. 1280 идёт лесом.
    Насчёт Java - уж даже говорить не буду.
    А 1С начинает финтить. У меня стоит легальный MS SQL. Легальный сервер 1С:Предприятие (ну, тут не у меня - мне проще работать с файлами; но в некоей конторе, честно его купившей). Проблем нет. Теперь я при помощи этого легального софта создаю свою приблуду. Легально. Имея на неё все авторские права. И вот рядом у меня (чтобы было ещё смешнее - в той же конторе, которая легально купила тот самый сервер 1С) - другой комп. На котором стоит легальный
    SQLExpress (в отличие от Developer - есть, пусть и ограниченное, право коммерческого использования). А вот сервер 1С:Предприятия - как-то слегка отсутствует. Моё кунфу - против ихнего кунфу. Мои авторские права - ничуть не хуже их авторских прав. Декомпиляция? Была нужна для организации обмена (интеграции с третьим софтом). См. ст. 1280. (Кстати, реально нужна была - а ставить клиента по ряду причин было низзя).
    Ну вот что стоило 1С выложить чуток API? Пусть даже платно. orefkov ведь предлагал. И выгода была бы всем. Но - "нет". Но тут как раз на "нет" - суд есть.

    Ответы: (14)
  15. (13) Хаха. Тоже декомпиляцией занимался?
    Мои коллеги пошли в сторону интерпретации кода 1С на лету. Т.е. полный парсинг конфы и структуры.

    Ответы: (15)
  16. (14) В 8-ке - нет. А в 7-ке - там текст, его компилировать, а не декомпилировать нужно. Вот этим и занимался :-) Переводя 7-й код в вызовы SQL-запросов (фактически - оптимизируя 1Сик до сколь-нибудь приемлемого уровня). Парсинг конфы и структуры - тут как раз проблем не было, они уже известны были. Поковыряться пришлось как раз с оптимизацией.

    Ответы: (16)
  17. (15) Ну с клюшками-то как раз все намного проще.

    Ответы: (17)
  18. (16) В этом плане - да. Но вот сам 1Сик - язык противный. Задача-то не просто его скомпилировать, а по долбанному тексту, написанному долбанным дятлом, сгенерить нечто вменяемое. А при этом в текст встроен "чёрный" запрос - чтобы веселее было.

    Ответы: (18)
  19. (17) Ну, мы практически все, кроме ЗиКов переписывали под себя. Давно это было :)

    Ответы: (19)
  20. (18) Фикус в структуре 1Сика. Очень уж он примитивен - поэтому графы и управления, и данных получаются весьма нехилыми. Поэтому ограничились частной задачей обмена - где общую задачу можно подсократить.

    Ответы: (20)
  21. (19) да ну, там обмен примитивен до безобразия средствами СУБД.

    Ответы: (21)
  22. (20) Когда уже всё готово - то да. Но в типовой у тебя процедура, которая и т.д. И внутри процедуры - хрен знает что хрен знает чему присваивается. Не, конечно, можно дёргать каждый раз скуль по каждому мелкому поводу. Вот только обмен тогда будет годами идти (не, вру... не годами - всего лишь неделями; а нужен - ежедневный).

    Ответы: (22)
  23. (21) Мдя... Странное отношение к скулю...

    Ответы: (23)
  24. (22) Как раз к SQL - прекрасное отношение. Вот к тому, как с ним 7-ка работает - отношение несколько иное.
    Там либо безбашенные курсоры (ну, понятно, зачем они... хотя можно было бы и получше). Либо тонкие тычки хранимками - а это в любом случае пачка блокировок, не говоря уже о самой хранимке. Да и сами "чёрные" запросы - не всегда, прямо скажем, идеальны.

    Ответы: (24) (25)
  25. (23)... И? поправь bkend.dll, ну и "учетную" как тебе надоть и всё.

    Ответы: (28)
  26. (23) Переходите на v8 с упр блокировками, там это реализовано )))

    Ответы: (26) (27)
  27. (25) смысл с 77 слезать, если на ней и быстрее и проще?

  28. (25) Интерфейс , да быстрее.

    Но все остальное не соглашусь .
    А вообще если устраивает, то дергаться конечно не стоит.

  29. (24) Несколько не о том речь. Грубо говоря,

    спр = СоздатьОбъект("Спрравочник.КакойТо");
    спр.ВыбратьЭлементы();
    Пока спр.ПолучитьЭлемент()=1 Цикл
        Если спр.А = "Абабуа" Тогда
            спр.А = спр.Б;
            спр.Записать();
        КонецЦикла;
    КонецЦикла;

    Всё это можно аккуратно собрать и не мучить базу постоянными обращениями. (А 7-ка каждое такое "получитьэлемент" и "записать" превращает в маленький танец с неявной транзакцией). Вот для этого и потребовалось распарсить 1Сик (не переписывая соответствующих процедур) и собрать по новой.

    Ответы: (30)
  30. Восмерка при получении объекта тоже все из таблиц тянет

    Ответы: (31)
  31. (28)для таких целей choice идеален. Чертов т9

  32. (29) тянет, но блокировки не вешает. Точнее вешает но только S и только на время выполнения запроса.

  33. (0) Привет! Подскажи, можно ли будет с помощью этой компоненты поменять не лету один модуль конфигурации базы и потом вернуть обратно?
    Хочу приделать конструктор запрос со стероидами от tormozit . Примерно что-бы так работало пример конструктора запросов понимающего комментарии, типизацию и инетленс в выражениях и все это напрямую из конфигуратора

    Ответы: (33)
  34. (32) что ты вкладываешь в понятие "поменять модуль"?

    т.е. подать на вход текст модуля? если так, то нет, такого функционала нет.

    если же имеется в виду бинарный объект конфигурации - то без проблем

    Ответы: (34)
  35. (33) мне надо по факту подменить процедуру "ПриНачалеРаботы" , а по факту можно и бинарный объект конфигурации, т.е. подменить, запустить приложение и потом обратно вернуть.

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

    Просто получается, база будет открыта то конфигуратором...

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

  37. pumbaEO а по факту можно и бинарный объект

    бинарный объект - без проблем

    pumbaEO Просто получается, база будет открыта то конфигуратором...

    а вот это уже пикантно. по идее, запуск клиента должен подцепить объект из БД.
    в описании есть опция, которая позволяет компоненте работать даже с открытым файлом.

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

    Ответы: (37)
  38. (36) по идее, да. Но надо еще проверить кэш, вдруг общий модуль закэшировала платформа и будет фигню отдавать.

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

    Ответы: (38)
  39. (37) в случае серверной БД финт с кэшем, конечно, возможен. надо проверять

    Ответы: (39)
  40. (38) я так и не понял инсертер то можно сделать?

    Ответы: (44)
  41. (0) Доброго дня всем. Подскажите, а с помощью этой компоненты возможно восстановить пароль к базе?

    Ответы: (41) (43)
  42. (40) Судя по описанию - ответ "да"

    Ответы: (42)
  43. (41) ...еще бы инструкцию по применению - вообще б цены не было.

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

  45. (39) если только в перспективе. пока для этого не весь функционал реализован

  46. ясно,

    мне он очень нужен!

    Ответы: (46)
  47. (45) Зачем! ЗАЧЕМ!

    Ответы: (47)
  48. (46) Инсертер??

    чтобы вставлять свои наработки после обновлений.

  49. 9 г. назад

    (0) СПАСИБО тебе, дружище за компоненту!!!

  50. 4 г. назад
    06.06.2020 20:03:38 отредактировано andrewks
    ======================================
    Версия 1.4.0.0 от 25.05.2020 !!!beta!!!
    ======================================
    + поддержка формата БД версии 8.3.8
    + поддержка платформы linux64
    * исправлены некоторые ошибки
    
  51. Благодарствуем-с.
    А что значит 8.3.6? Это же 15-й год вроде бы.

    Ответы: (51)
  52. jsmith82 А что значит 8.3.6?

    опечатался. 8.3.8, конечно

  53. Формат баз 1CD - классические и 8.3.8
    https://infostart.ru/public/536343/

  54. (0) золотой ты человек :)

  55. ======================================
    Версия 1.4.0.1 от 06.06.2020
    ======================================
    + поддержка формата БД версии 8.3.8
    + поддержка платформы linux64
    * исправлены некоторые ошибки
    
    

    ссылка для скачивания в (0)

или зарегистрируйтесь чтобы ответить!