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

Компонента позволяет работать с физическим содержимым таблиц файловых баз данных 1С ( файлы .1CD ).

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

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

— сохранение/загрузка BLOB-полей в файл;

— добавление, удаление записей;

— получение примитивной информации по метаданным;

— поддержка разных целевых платформ — Windows32/64, Linux32.

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

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

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

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

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

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

Аналоги:
Ближайшими аналогами «по смыслу» являются:
— утилита Tool_1CD //infostart.ru/public/19633/
— система восстановления баз 1С http://code.google.com/p/restoration-base-1c8/
Однако компонента не позиционируется ни в настоящем, ни в будущем, как замена данным замечательным утилитам, а является, скорее, дополнением к имеющемуся набору инструментов, и отличается идейно: целью является не предоставление некоего визуального интерфейса, а предоставление программного интерфейса для технических специалистов.

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

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

======================================
Версия 1.3.0.0 от 17.03.2013
======================================
+ возможность получения некоторых данных из метаданных (описаний объектов, GUID)
+ возможность модификации записей из корневого объекта
+ возможность исправления заголовков основного потока и таблиц
+ библиотека сделана кросс-платформенной (собраны версии для win32, win64, lin32)

+ Методы для файлов 1CD: GetNextDelRecordIndex, GetDelBlobDataLength, FixMainStreamHeader, FixTableHeaders, PrintRootEntry, DeleteTableFromRootEntry, SetTableIndexInRootEntry, AddTableToRootEntry
+ Методы для метаданных: OpenMetadata, CloseMetadata, GetGUIDByDBName, GetPresByTabName, GetPresByGUID, GetMetadataDescByGUID

======================================
Версия 1.2.1.0 от 20.02.2013
======================================
* исправлена критическая ошибка при работе с файлами размером > 2Gb
* исправлены некоторые ошибки, новые не добавлены 😉

======================================
Версия 1.2.0.0 от 16.02.2013
======================================
+ возможность управления режимом открытия файла, использованием свободных блоков для их перезаписи, режимом сброса изменённых данных записи на диск
+ поддержка специфичных типов полей (T — ANSI-строка неограниченной длины, и VB — двоичные данные переменной длины), встречающихся во временных файлах cache.1CD и 1Cv8tmp.1CD
* имена таблиц и полей теперь проверяются без учёта регистра
+ добавлена обработка BLOB-полей в ReadSimpleValue
+ добавлен параметр «тип кодирования данных» для двоичных BLOB в ReadRecord, ReadSimpleValue, ReadComplexValue, SaveBlobDataToFile
+ изменение записей таблиц
+ удаление записей, чтение и запись Null-значений
+ загрузка BLOB-данных из файла
* исправлены некоторые ошибки, добавлены новые 😉

+ Свойства: FileOpeningMode, UseFreeBlocks, AutoFlushRecords
+ Методы для файлов 1CD: DeleteRecord, AddRecord, IsNull, WriteSimpleValue, SetNull, GetBlobDataLength, LoadBlobDataFromFile

======================================
Версия 1.1.2.0 от 13.01.2013
======================================
+ навигация по записям таблиц
+ чтение записей таблиц, сохранение BLOB-данных в файл
* исправлены некоторые ошибки, добавлены новые 😉

+ Методы для файлов 1CD: GetTableRecordsCount, MoveFirstRecord, MoveLastRecord, MoveNextRecord, MovePreviousRecord, MoveToRecord, GetTableRecordIndex, IsRecordDeleted, ReadRecord, ReadComplexValue, ReadSimpleValue, SaveBlobDataToFile

Версия 1.0.1.0 от 24.12.2012
======================================
+ создание, удаление таблиц
+ поддержка локализованных имён полей в возвращаемых структурах 1С
+ получение данных буфера, сохранение их в файл, загрузка из файла
* исправлены некоторые ошибки, добавлены новые 😉

+ Свойства: LocalNamesMode
+ Методы для двоичных файлов: GetBufferData, SetBufferData, SaveBufferDataToFile, LoadBufferDataFromFile
+ Методы для файлов 1CD: DeleteTable, AddTable

Версия 1.0.0.0 от 17.12.2012
======================================
+ Первая публичная версия
+ получение массива таблиц БД
+ сохранение данных таблиц в файлы («сырые» данные!)
+ загрузка данных таблиц из файлов («сырые» данные!)
+ переименование таблиц, установка им новых описаний
+ получение массива полей таблицы, подсчёт длины одной записи

99 Comments

  1. andrewks

    забыл прикрепить к файлам pdf-версию описания свойств и методов (для тех, у кого нет возможности открыть файл формата odt). прикрепляю здесь

    Reply
  2. German

    Давненько не было «жарко» посмотрим

    Reply
  3. Abadonna

    Подправь код в обработке:

    МакетКомп=ПолучитьМакетКомпоненты();
    СсылкаКомп=КаталогВременныхФайлов()+»1CDLib.dll»;
    Файл=Новый Файл(СсылкаКомп);
    Если Не Файл.Существует() Тогда
    МакетКомп.Записать(СсылкаКомп);
    КонецЕсли;
    

    Иначе конфликт между захваченным 1С файлом ВК и попыткой его записать про повторном открытии обработки в том же сеансе:


    {Форма.Форма.Форма(164)}: Ошибка при вызове метода контекста (Записать)

    МакетКомп.Записать(СсылкаКомп);

    по причине:

    Ошибка совместного доступа к файлу ‘C:Documents and Set…..
    Reply
  4. r0610201

    (1) при вызове УстановитьВнешнююКомпоненту выскакивает ошибка:

    «Установка внешней компоненты не выполнена. В процессе установки произошла ошибка».

    И все. Попробовал запихнуть это дело в общий макет и вызвать:

    УстановитьВнешнююКомпоненту(«ОбщийМакет._1CDLib»);

    но все равно тоже самое. Как можно это дело исправить?

    Reply
  5. r0610201

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

    Reply
  6. andrewks

    (4) r0610201, Вы не из веб-клиента подключаете?

    Reply
  7. andrewks

    (3) Abadonna, ага, есть такое дело.

    я изначально вообще хотел через временное хранилище подключать, во избежание конфликтов подобного рода, но что-то не взлетело. вот моя ветка, может, подсоветуете что-нибудь http://forum.infostart.ru/forum26/topic76354/

    Reply
  8. andrewks

    (5) r0610201, этот вариант (размещение в общем макете) я рассматривал, но отказался от него, чтобы была возможность полностью автономной работы, без привязки к конфе и без правки самой конф

    Reply
  9. r0610201

    (6)

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

    Reply
  10. andrewks

    (9) r0610201,

    нет, обычный тонкий клиент, управляемое приложение

    очень странно, а какой релиз платформы? у меня в тонком клиенте мой вариант отрабатывает нормально, проверял под 8.2.15 и 8.2.16

    Нужно: спозиционироваться на нужную запись по ее номер и прочитать по имени столбца значение.

    пока нет, данный функционал в настоящее время «under construction». думаю, где-то через недельку неспешно допилю, если никакого срочного форс-мажора не будет

    Reply
  11. r0610201

    Пробовал на 8.2.16.368 и на 8.3.2.163. Впрочем, раз интересующий меня функционал еще не реализован, но ожидается, то я подожду 🙂

    Reply
  12. andrewks

    (11) r0610201,

    Пробовал на 8.2.16.368

    странно, сейчас как раз на этом релизе проверил свой вариант — всё отработало. непонятный какой-то глюк, посмотрим, может, ешё у кого-то вылезет

    Reply
  13. r0610201

    Возможно, это еще от разрядности системы зависит. У меня вроде как 64.

    Reply
  14. andrewks

    (13) r0610201, да не должно, по логике, клиенты-то всё равно 32-х разрядные. но проверю

    Reply
  15. bg38th

    Что-то стабильно вышибает платформу на операции ПодключитьВнешнююКомпоненту…

    Reply
  16. andrewks

    (13) r0610201, так и не получилось воспроизвести ошибку. на х64 сервере под тонким клиентом тоже загрузилось без проблем, ошибок не выдало

    Reply
  17. andrewks

    (15) bg38th, надо бы больше подробностей — какой релиз платформы, какой клиент запускаете, какая ОС, подробности ошибки

    Reply
  18. andrewks

    (3) Abadonna, остановился на таком варианте кода:

    МакетКомп=ПолучитьМакетКомпоненты();
    СсылкаКомп=КаталогВременныхФайлов()+»1CDLib.dll»;
    Попытка
    МакетКомп.Записать(СсылкаКомп);
    Исключение
    КонецПопытки;
    КомпУст=Ложь;
    Попытка
    КомпУст=ПодключитьВнешнююКомпоненту(СсылкаКомп,»T1CDLib»,AddInType.Native);
    Исключение
    Сообщить(«Произошла ошибка при подключении компоненты!»);
    КонецПопытки;
    
    

    Показать

    чтобы не было проблем с обновлением версии самого файла компоненты в будущем

    Reply
  19. r0610201

    (16)

    Судя по всему, у bg38th такая же проблема, у меня тоже вываливалась программа, пока не удалось установить компоненту из общего макета.

    Reply
  20. bg38th

    Windows 7 Prof x64

    8.2.16.368

    И толстый и тонкий (не Web)

    Подробности — висниет долго чем-то шарашит и вываливается с предложением перейти в отладку или остановить приложение.

    Reply
  21. bg38th

    (19) r0610201,

    Из общего пока не пробовал.

    А вот что в макете в итоге должно быть? Чистая DLL или ZIP с dll и манифестом?

    Reply
  22. r0610201

    У меня заработало, когда в общем макете архив zip, содержащий dll и манифест. Этот архив прикреплен к сообщению №5.

    Reply
  23. andrewks

    (21) bg38th, если в общем макете, то ЗИП

    Reply
  24. andrewks

    (22) r0610201, как бы локализовать проблему. у Вас проблема тоже была на Windows 7 x64 ?

    Reply
  25. andrewks

    (22) r0610201, интересно то, что на XP, W2003 x32, W2003 x64 под тонким клиентом спокойно отрабатывает просто ПодключитьВнешнююКомпоненту() безо всяких УстановитьВнешнююКомпоненту,

    несмотря на то, что в СП сказано


    Для режимов запуска «Тонкий клиент» и «Веб-клиент», компонента должна быть предварительно установлена методом УстановитьВнешнююКомпоненту.
    Reply
  26. bg38th

    (17) И вот ещё что забавно. Если выбрать отладку, то в отладчике (VS) выскочит ошибка «Необработанное исключение в «0x773de6c3» в «1cv8.exe»: 0xC0000374: Куча была повреждена.». И если потом в отладчике указать прекратить отладку, то все это хозяйство таки взлетает и работает…

    Reply
  27. andrewks

    (26) bg38th, а с общего макета нормально загружается? что-то засада какая-то у 1Сины с внешними компонентами. на разных версиях Windows разное поведение

    Reply
  28. andrewks

    (26) bg38th, кстати, а релиз платформы 1с какой у Вас?

    Reply
  29. bg38th

    (27) Гружу из общего макета (заменил МакетКомп=ТекОбъект.ПолучитьМакет(«_1CDLib») на МакетКомп=ПолучитьОбщийМакет(«_1CDLib»);) — та ж хрень на том же месте. Толстый клиент, управляемое приложение.

    Reply
  30. bg38th

    (28) Я написал в (20) — 8.2.16.368

    Reply
  31. r0610201

    (24)

    Да, win7 prof 64.

    Но сейчас у меня ошибка уже не выскакивает даже в других базах. Что-то где-то закешировалось, что ли…

    Reply
  32. andrewks

    (29) bg38th, нет, так не пойдёт, у 1Сины ограничения на этот счёт. если ВК загружается из общего макета, то надо прописывать адрес именно общего макета, примерно так: УстановитьВнешнююКомпоненту(«ОбщийМакет._1CDLib»);

    по крайней мере, в СП описано два способа размещения:


    Строка, определяющая местоположение внешней компоненты.

    В качестве строки может использоваться:

    полное имя макета, в котором хранится внешняя компонента в архиве;

    URL к внешней компоненте, упакованной в ZIP-архив, в формате, аналогичном ПолучитьНавигационнуюСсылку().

    но заставить работать второй способ лично у меня пока не получилось

    Reply
  33. r0610201

    (24)

    в журнале вот такая ошибка, не знаю, чем это может помочь:

    Имя сбойного приложения: 1CV8C.exe, версия: 8.2.16.368, отметка времени: 0x505341e8

    Имя сбойного модуля: ntdll.dll, версия: 6.1.7601.17725, отметка времени 0x4ec49b8f

    Код исключения: 0xc0000374

    Смещение ошибки: 0x000ce6c3

    Идентификатор сбойного процесса: 0x161c

    Время запуска сбойного приложения: 0x01cddd1dea13220c

    Путь сбойного приложения: C:Program Files (x86)1cv828.2.16.368in1CV8C.exe

    Путь сбойного модуля: C:WindowsSysWOW64
    tdll.dll

    Код отчета: 4b88f5fc-4911-11e2-8fc1-e8039ade11b9

    Reply
  34. bg38th

    (32) А подключать её такую как?

    Reply
  35. andrewks

    (34) bg38th, ПодключитьВнешнююКомпоненту(«ОбщийМакет._1CDLib»,»T1CDLib»);

    Reply
  36. andrewks

    (34) bg38th, попробуйте ещё эту версию, какие сообщения она выдаст при загрузке. может, проблема именно с записью в темп-папку

    Reply
  37. andrewks

    (33) r0610201, мистика. ВК тут и не пахнет, 1Сина где-то глючит при общении с WinAPI

    Reply
  38. r0610201

    Самое забавное, что раза с третьего перестает вываливаться и начинает работать 🙂 В общем, шайтан.

    Reply
  39. bg38th

    (36) «Необработанное исключение в «0x773de6c3» в «1cv8.exe»: 0xC0000374: Куча была повреждена.» И как и прежде, если указать «Продолжить» то все работает.

    Reply
  40. rеd80

    Значит это не для повседневной работы.

    Reply
  41. andrewks

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

    Reply
  42. bg38th

    (41) Кэш почистил. (оба). Та ж хрень на том же месте. На другом компе попробую чуть погодя.

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

    Reply
  43. bg38th

    (41) Не доходит. Просто GPF платформы и всё.

    Reply
  44. bg38th

    (41) На других компах: Server 2003 R2 x32 — It’s Ok; Server 2008 R2 x64 — такая же ошибка как и на моем компе. Завтра попробую еще на XP x32.

    Reply
  45. Abadonna

    (18)

    чтобы не было проблем с обновлением версии самого файла компоненты в будущем

    IMHO, лучше так:

    Проверяем наличие КаталогВременныхФайлов()+»1CDLib.dll»;, удаляем его без сомнений, и уж потом

    КомпУст=ПодключитьВнешнююКомпоненту(СсылкаКомп,»T1CDLib»,AddInType.Native);

    Reply
  46. andrewks

    (45) Abadonna, дык не даст удалить, если файл уже захвачен 1синой. проще попробовать перезаписать в попытке

    Reply
  47. Abadonna

    (46) Ага, это я лопухнулся 😉

    P.S. Вообще, чую, надо в свои ВК добавить метод по деблокировке файлов, и, в случае загрузки через обработки, деблокировать и удалять в ПриЗакрытии

    Reply
  48. Abadonna

    (46) +/47/

    Есть интересная API MoveFileEx(PAnsiChar(FileName),PAnsiChar(NewFileName), MOVEFILE_REPLACE_EXISTING)- позволяет переименовать залоченный файл.

    СсылкаКомп=КаталогВременныхФайлов()+»1CDLib.dll»;
    СсылкаКомпН=КаталогВременныхФайлов()+»_1CDLib.dll»;
    // -> метод Miracle—
    Файлы.ПереименоватьФайл(СсылкаКомп,СсылкаКомпН);
    // <- метод Miracle—
    МакетКомп.Записать(СсылкаКомп);
    
    

    Показать

    Раз 15 перезапустил в таким кодом — все, как в аптеке 😉

    P.S. «В самой себе», естественно, не поможет — оно ж не загружено еще…

    Reply
  49. hogik

    (48)

    «позволяет переименовать залоченный файл»(с)

    Нет.

    Можно только открытый с GENERIC_READ и FILE_SHARE_DELETE.

    Так открываются DLL, EXE…

    Один из способов удалить гадость из системы — переименовать, перезагрузиться, удалить.

    Reply
  50. Abadonna

    (49) hogik, умный ты, однако, глянь на кратинку

    База открыта, переименовано обработкой с кодом

    &НаКлиенте
    Процедура Команда1(Команда)
    Файлы.ПереименоватьФайл(«d:СервисМ Работа с клиентамиMiracleNative.dll»,»d:СервисМ Работа с клиентами\_MiracleNative.dll»);
    КонецПроцедуры
    

    Давно бы пора привыкнуть, что я не пишу то, чего не проверил. Переименовать даёт,удалить — нет

    Если не въехал, поясняю: MiracleNative.dll — залоченный базой файл ВК, вызывается метод самой же ВК, им же и переименовывается, в процессе работы базы (ВК).

    Reply
  51. hogik

    (50)

    Умный. 🙂

    Я опроверг твое слово «залоченный».

    Т.е. возможность переименовать определяется способом открытия, а не блокировкой.

    Читай внимательнее. Я не опровергаю возможности переименовать. Специально привел пример про удаление «гадости» из системы… 😉

    Reply
  52. Abadonna

    Короче так, чтобы смело грузить ВК из макета в обработке, можно делать в обработке так:

    &НаКлиенте
    Процедура ПриЗакрытии()
    СсылкаКомпН=КаталогВременныхФайлов()+»_1CDLib.dll»;
    Файлы.ПереименоватьФайл(СсылкаКомп,СсылкаКомпН); // тут метод своей же ВК поставить
    КонецПроцедуры
    
    Reply
  53. Abadonna

    (51) hogik, интересно, что ты опроверг во фразе «позволяет переименовать залоченный файл»

    Файл залочен — да. Позволяет переименовать — да, да и да.

    Reply
  54. hogik

    (53)

    Эх. Мало ты разрабатывал программ-гадостей. 🙂

    Я всегда блокирую DLL и EXE, чтобы ты не мог их переименовать. 🙂

    P.S.

    Файл залочен — да.

    НЕТ !!!

    P.P.S.

    Всё.

    Давай не будем грузить тему.

    Разобрались в «терминах»… 😉

    Reply
  55. Abadonna

    (54) hogik, не путай файл, конкретно залоченный API LockFile, и файл, залоченный приложением.

    И почему, собственно, тему не грузить? Тут что, юзверьки на «поздравлялку» собрались? Тут ВК, и проггеры должны быть разрядом чуть повыше, чем «одноэснеги»

    Reply
  56. hogik

    (55)

    Аркадий.

    Давай не будем выяснять смысл слова «залоченный» ? 🙂

    Еще раз. Возможность переименовать открытый файл определяется режимом его открытия.

    Reply
  57. andrewks

    (50)

    Переименовать даёт,удалить — нет

    да, с удалением засада. провёл эксперимент: при запущенном сеансе, удерживающем dll, снимаю блокировку Unlocker’ом, удаляю файл, запускаю повторно обработку — 1сина валится.

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

    Reply
  58. andrewks

    (52) Abadonna, оно, конечно, хорошо, но, опять-таки, есть нюанс…

    а если 1сина упала во время выполнения, файл-то останется. и всё равно придётся это предусмотреть, и опять выходим к попытке перезаписи. а при наличии оной переименовывать при закрытии уже становится необязательно

    Reply
  59. Abadonna

    (58) тогда уж для полного счастья лучше сперва попытку сперва удалить, а уж потом попытку записать.

    тогда в новом сеансе спокойно загрузится ВК последней версии.

    Хотя… при перезаписи оно и так обновится..

    Reply
  60. DoctorRoza

    Складывается ощущение, что сие творение может попасть в разряд «для хакера». Безопасность бд резко падает!

    Reply
  61. Abadonna

    (60) Чушь! Как будто более простыми способами ее поломать нельзя

    Reply
  62. bg38th

    (60) DoctorRoza, Нехай сделают управление хранилищем (программное) через платформу — интерес к таким утилям поуменьшится…

    Reply
  63. andrewks

    (60) DoctorRoza, о какой безопасности файловых БД можно вообще говорить? не было её, нет, и, думаю, не будет

    Reply
  64. TitanLuchs

    Замечательно, давно хотелось поковыраться в нутре снеговика )))))))

    Reply
  65. OldthiefXXX

    Что за проблема?

    {Форма.Форма1.Форма(125)}: Значение не является значением объектного типа (SaveTableDataToFile)

    FileDB.SaveTableDataToFile(TableName,FileNameDescription,FileNameRecords,FileNameBLOB,FileNameIndexes);

    Reply
  66. andrewks

    (65) OldthiefXXX, у Вас при открытии обработки какие-нибудь сообщения об ошибках возникали?

    Reply
  67. andrewks

    (44) bg38th, глюк с подключением ВК на Win7/Win2008 не исчез? также стабильно проявляется?

    ещё прошу отписаться тех, у кого на Win7/Win2008 загрузка компоненты проходит нормально, без ошибок

    Reply
  68. bg38th

    (67) С чего бы ему исчезать? Вышибает как миленькая. С прежней ошибкой Повреждение кучи (heap corruption 0xC0000374)

    На XP, кстати, проверил. Работает без ошибок. Похоже проблема возникает именно при инициализации dll и лолко под Win7/Server2008R2 (за висту и server2008 не подпишусь — не пробовал)

    Reply
  69. andrewks

    (68) bg38th,

    С чего бы ему исчезать?

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

    а запуск сеансов 1с на Win7/Server2008R2 делаете под учётками с админскими правами винды, или под юзерскими?

    Reply
  70. bg38th

    (69) Если платформу не закрывать, то после первого прохода ошибки она уже не возникает. Потому я и сказал что ошибка — на этапе инициализации ВК. Если платформу закрыть — ошибка возникает опять.

    Под админскими, но без выключения UAC. Это, кстати, мысль. Сейчас попробую с выключением UAC стартануть…

    Reply
  71. bg38th

    (69) Попробовал. «Запуск от имени администратора» не влюёт. Ошибка возникает.

    Reply
  72. OldthiefXXX

    нет ни каких ошибок небыло!

    Reply
  73. andrewks

    (72) OldthiefXXX, приведите, пожалуйста, точную последовательность действий, которые приводят к такому эффекту. у Вас список таблиц заполняется? какой релиз платформы, версия ОС?

    Reply
  74. hogik

    (57)(59)

    Аркадий и andrewks.

    Вот, чего не понимаю. 😉

    Извините, расскажу на примере «семерки».

    Запускаю сессию 1С-а (локально). Запускаю Unlocker. Делаю выбор каталога BIN. Вижу только «залоченные» файлы. Среди этих файлов только ВК. Но не все, что я загрузил в конфигурации. Половина. 😉 Никаких других файлов в списке нетУ. Естественно, переименовать «залоченные» файлы не удается. Все/любые остальные — легко.

    Дык, чего не могу понять. Почему в списке именно эти файлы? Загружаю все ВК одинаковыми операторами. Лежат они только в каталоге BIN.

    Чего/как/где можно подумать/почитать/посмотреть для осознания эТТого явления? 😉

    Reply
  75. Abadonna

    (68) bg38th,

    Windows Server ® 2008 Standard Service Pack 2, х64 — без базаров, сейчас спецом проверил.

    В скобках замечу, что прав у меня на том сервере (как, впрочем, и на любых других) — немеряно.

    Reply
  76. andrewks

    (74) hogik, я Вам больше скажу. у меня в один день сабжевая длл-ка компилилась без закрытия сенса и обработки, из которых она подгружалась с фиксированного места на диске, без макетов и прочего. и, главное, после закрытия и открытия обработки, но без закрытия сеанса у меня подгружалась новая версия компоненты.

    на след.день с этой же обработкой с открытым сеансом компилятор уже не мог записать длл-ку — выдавал ошибку.

    вот как это можно объяснить?

    Reply
  77. Kopman

    Великолепная штука, вот бы еще функционал получения хотя бы части информации из *.dt. Например версии.

    Reply
  78. OldthiefXXX

    Форма обычная, последовательно список. а потом сохранить!

    Reply
  79. andrewks

    (78) OldthiefXXX, как это «Форма обычная»? т.е. вы не обработку-пример запускаете, а свою обработку сделали? тогда прикрепите ей сюда, посмотрю

    Reply
  80. andrewks

    Обновил версию

    Reply
  81. bg38th

    (80) Вобщем, те же яйца, вид сбоку. Платформа падает на подключении компоненты с комментарием отладчика «Куча повреждена»

    Reply
  82. andrewks

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

    Reply
  83. bg38th

    (82) Пуркуа бы и не па. Давайте. Только не тяните с этим. У меня может пропасть возможность запускать это на компе с отладчиком.

    Reply
  84. andrewks

    (83) bg38th, сделал тестовый комплект. внутри архива — обработка на УФ и dll-ка. в обработке нужно будет указать тестовую длл-ку (из папки test), также у Win-юзера должны быть права на запись в папку C:TEMP (в неё будет записываться лог-файл 1CDLib.log)

    интересует содержимое этого лог-файла на момент сразу после краха, на момент после продолжения работы через отладчик, и на момент после закрытия сеанса 1С, в котором осуществлялась загрузка длл-ки

    Reply
  85. kj6370

    страшная вещь

    Reply
  86. bg38th

    (84)

    1)2012-12-25 16:49:55.446: Initialization

    2012-12-25 16:49:55.446: GetClassObject() enter

    2012-12-25 16:49:55.446: GetClassObject() leave

    2) ничего

    3) 2012-12-25 16:52:30.659: DestroyObject() enter

    2012-12-25 16:52:30.659: DestroyObject() leave

    2012-12-25 16:52:30.659: Finalization

    Reply
  87. andrewks

    (86) bg38th, есть над чем подумать. пересобрал с более расширенным логированием, если не сложно, проделайте то же самое

    Reply
  88. bg38th

    (87)

    1)2012-12-25 17:48:37.531: Initialization

    2012-12-25 17:48:37.531: GetClassObject() enter

    2012-12-25 17:48:37.531: GetClassObject() leave

    2012-12-25 17:48:37.531: _Init() enter

    2012-12-25 17:48:37.531: _Init() leave

    2012-12-25 17:48:37.531: _setMemManager() enter

    2012-12-25 17:48:37.531: _setMemManager() leave

    2012-12-25 17:48:37.531: _SetLocale() enter

    2012-12-25 17:48:37.531: _SetLocale() leave

    2012-12-25 17:48:37.531: _GetInfo() enter

    2012-12-25 17:48:37.532: _GetInfo() leave

    2012-12-25 17:48:37.532: _RegisterExtensionAs() enter

    2012-12-25 17:48:37.532: _RegisterExtensionAs() leave

    2) ничего

    3) 2012-12-25 17:50:42.963: _Done() enter

    2012-12-25 17:50:42.963: _Done() leave

    2012-12-25 17:50:42.963: DestroyObject() enter

    2012-12-25 17:50:42.963: DestroyObject() leave

    2012-12-25 17:50:42.963: Finalization

    Reply
  89. andrewks

    (88) bg38th, вылет происходит вне кода компоненты, т.е. все функции компоненты отрабатывают, и управление возвращается назад к коду 1С, а далее происходит вылет.

    но вот причины падения так и остаются непонятными.

    спасибо за содействие. если что придумаю, отпишусь

    Reply
  90. bg38th

    (89) Да. Но причиной вылета является работа кода компоненты так или иначе.

    Повторю декрипшн ошибки, возвращаемый отладчиком:

    ========================================

    Необработанное исключение в «0x776fe6c3» в «1cv8.exe»: 0xC0000374: Куча была повреждена.

    ========================================

    Погугли про 0xC0000374 «heap corruption». Там забавно.

    Reply
  91. andrewks

    (90) bg38th, нашёл в интерфейсном модуле пару мест, где не совсем корректное общение с памятью. проверьте, пожалуйста. если и этот вариант не прокатит, то больше мыслей нет.

    Reply
  92. bg38th

    (91) Увы! :((( Всё то же самое… :((

    Reply
  93. andrewks

    (92) bg38th, жаль…

    вот мне подумалось тут, а может мы ищем чёрную кошку в тёмной комнате в то время, когда её там нет?

    конкретно: может, дело не в компоненте (или не только в компоненте).

    какие есть мысли:

    1. попробовать на релизах 1С, отличных от 8.2.16 (на 8.2.15, 8.2.17)

    2. попробовать на Win2008 x64 без установленного отладчика (кто знает, может, это он накладывает такой отпечаток?)

    3. попробовать запустить при отключенном DEP

    также прошу других участников, имеющих доступ к Win7 x64 и Win2008R2 x64, проверить комплект из (91), статистика не повредит, ибо как минимум двое участников в этой ветке уже высказывались, что у них на обозначенных системах компонента загружается без сбоев

    Reply
  94. 1cyku

    8.2.15.310 Падает

    Имя сбойного приложения: 1CV8C.exe, версия: 8.2.15.310, отметка времени: 0x4f838bea

    Имя сбойного модуля: 1CDLib.dll, версия: 1.0.2.0, отметка времени 0x00000000

    Код исключения: 0xc0000005

    Смещение ошибки: 0x0001aff6

    Путь сбойного модуля: C: est1CDLib.dll

    Reply
  95. andrewks

    (94) 1cyku, просьба:

    1. озвучить версию и разрядность ОС

    2. привести содержимое C:TEMP1CDLib.log на момент сразу после падения

    Reply
  96. 1cyku

    w2k8 R2 standard x64

    1CDLib.log — нет такого файла.

    Компоненту брал в (91).

    Reply
  97. andrewks

    (94) 1cyku,

    Путь сбойного модуля: C: est1CDLib.dll

    внутри архива — обработка на УФ и dll-ка. в обработке нужно будет указать тестовую длл-ку (из папки test), также у Win-юзера должны быть права на запись в папку C:TEMP (в неё будет записываться лог-файл 1CDLib.log)

    у Вас либо нет папки C:TEMP, либо у текущего пользователя нет прав на запись в эту папку

    Reply
  98. andrewks

    кстати, за это время тестил компоненту на двух разных компах с Win7 x64 и 1С 8.2.17 — ни одного падения

    Reply
  99. andrewks

    (9) r0610201, интересующий Вас функционал реализован в новой версии

    Reply

Leave a Comment

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