Краткое описание формата файлов *.1CD (файловых баз 1Сv8)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

82 Comments

  1. Abadonna

    Вот за это не плюс, а ПЛЮСИЩЕ.

    Рано или поздно придется копаться 😉

    Reply
  2. kadr

    Да…

    Проделана огромная работа.

    Reply
  3. Душелов

    Так-так-так!..

    Reply
  4. Evg-Lylyk

    (0) А описания формата внешних обработок нет?

    Reply
  5. z-alexey

    Ничег не понимаю, но плюс 🙂

    Reply
  6. СергейКа

    (4) Ничего особо сложного. В основном проще чем CD. Но думаю, выкладывать на всеобщий обзор будет неразумно. Кто захочет — разберется. Сам начинал разбираться со структурами с обработки автора. И не очень давно.

    Reply
  7. support

    Предлагаю создать статью на http://wiki.infostart.ru

    Там скоро я все переделаю под общую базу знаний.

    Reply
  8. artbear

    (6) А в чем проблема-то при выкладывании в общий доступ ?

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

    ЗЫ все равно уже существует V8Unpack и аналогичные инструменты 🙂

    Reply
  9. СергейКа

    (8) Существует, не спорю. Но именно тоже не как готовая программа 🙂 С ней еще покопаться надо.

    Но в конце-концов это ИМХО. Желающий да разберется (ищущий да обрящет).

    Reply
  10. sound

    Прикольно. Дерзайте парни. Отомстим за гоу ту (Ц)

    Reply
  11. newbas

    Откуда дровишки

    Reply
  12. awa

    (11) Из леса, вестимо!

    Reply
  13. MRAK

    эх… реализовать бы на базе этого открытый народный конфигуратор…

    Reply
  14. MRAK

    :)))

    Reply
  15. tormozit

    Как получить модуль основной формы из EPF? Точнее где ее GUID лежит?

    Reply
  16. Stety

    Хм… А куда делся http://infostart.ru/projects/3851/ ???

    Reply
  17. awa

    (16) Мне тоже это интересно. Задал этот вопрос Доржи, ответа пока не получил…

    Reply
  18. Stety

    (18) Ну, туда меня вряд ли пропустят. 🙂

    Reply
  19. totskysergey

    (18) А что надо чтоб пустили в эту ветку?

    Reply
  20. das

    + спасибки!

    Reply
  21. gudun_ku

    а на sql написать описание? Вообще хотелось бы функцию, которая без внешних компонент вернула средствами 1С уникальный идентификатор объекта конфигурации (что указывается в файле DBNames в таблице Params).Хочется обработки как у Германа (Enterprise Integrator),только без внешних компонент и трассировки.

    Reply
  22. awa

    (23) Описание на sql чего?

    Здесь описан формат файла 1CD — а это в общем случае произвольная база данных. Например, хранилище конфигураций — это тоже файловая база данных (файл 1cv8ddb.1CD), однако в этой базе нет таблиц CONFIG, PARAMS, FILES и т.д. Или, например, временная БД 1Cv8tmp.1CD, создаваемая 1С при работе в файловом режиме.

    Reply
  23. sky_flower

    (20) так что всё-таки надо чтоб впустили?

    неужели такая СЕКРЕТНАЯ информация?? и куда делся 21 пост?

    Reply
  24. awa

    (25) Это закрытый форум Советников Администрации, чтобы туда пустили, надо быть человеком, заинтересованным в судьбе Инфостарта, активно участвовать в его жизни.

    В той ветке было обсуждение, почему убрали с Инфостарта программу Tool_1CD, самой программы там нет.

    Сейчас программу Tool_1CD можно найти в других местах, но публично такие ссылки на инфостарте давать неприлично))

    Reply
  25. mishaProgr

    вышлите пожалуста на 122062@mail.ru программу Tool_1CD.

    Нигде в Инете не найду, а очень надо

    плиз!

    Reply
  26. Monolit

    С тех пор как Вы выложили ,там уже кто -то ночевал

    http://infostart.ru/projects/3851/

    Reply
  27. harmit

    awa респект… ждем продолжения..

    Reply
  28. denisdwh

    +1

    Респект автору!

    Хотелось бы увидеть продолжение развития 1С Tool.

    Лично мне бы хотелось бы, что бы в программе появился бы следующий функционал:

    Возможность подсоединения к sql серверу.

    Возможность внесения

    Reply
  29. arhu-dima

    БЫЛО БЫ ПРИКОЛЬНО ЕСЛИ ПРОГРАММА ПОЗВОЛЯЛА РЕДАКТИРОВАТЬ ТАБЛИЦЫ. ЭТО ДАСТ ВОЗМОЖНОСТЬ НАПРЯМУЮ ВОССТАНАВЛИВАТЬ БАЗУ ДАННЫХ.

    Reply
  30. natarezn

    класс! а еще что есть?

    Reply
  31. SiAl

    Добрый день. У меня ошибка в файле БД. С помощью 1CD utils я нашел, что поле SERIALIZEDDATA в таблице DBSCHEMA пустое, хочу его скопировать из файла БД типовой конфигурации, потому что конфигурация не снималась с поддержки. Но вот не погу разобраться, как правильно в HEX редакторе скопировать часть из файла пустой БД типовой конфигурации, так как конфигурация БД не отличается от типовой. Начало таблицы DBSCHEMA я могу найти, а как найти ее конец в файле?

    Reply
  32. awa

    (33) Даже если конфигурации полностью совпадают, содержимое DBSCHEMA может быть разным и SERIALIZEDDATA от одной базы может не подходить к другой.

    Если есть возможность, выложите на файлообменник файл 1CD, может быть удастся что-то сделать…

    Reply
  33. MichaelT

    Спасибо за пост! Программка очень пригодилась 🙂

    Reply
  34. alexcne

    Программа ОЧЕНЬ сильно помогла. Смог разобраться, какой из регистров накопления заполнен «до упора». Проанализировал структуру регистра и сократил длину одного из реквизитов, что помогло «отсрочить» переход на SQL-вариант еще как минимум на полгода.

    Reply
  35. alexcne

    Из пожеланий по развитию проекта:

    1) сортировка по степени заполненности внутренних файлов таблиц

    2) или хотя бы 3 колонки рядом с идентификатором таблицы: размер data, blob, index

    3) ОБЯЗАТЕЛЬНО разделители триад в числах. Прочитать, например, число 1’234’567’890 гораздо легче чем 1234567890

    4) Хотелось бы видеть не только идентификаторы таблиц, но и по возможности имена объектов, как они описаны в конфигураторе

    Reply
  36. ivanoa

    Ситуация такая: в конфигуратор зайти не можем:»Файл базы данных поврежден».

    chdbfl.exe при проверке выдает: «Поврежден заголовок файла базы данных

    Повреждено содержимое внутреннего файла <Описание базы данных>».

    Tool_cd — стурктуру не показывает, пишет «длина файла в блоках и количество блоковв заголовке не равны»

    Что можно сделать?

    Reply
  37. ivanoa

    (38) Базу удалось открыть! 🙂 Документы все получилось вытащить. Был битым только конец файла, видимо, проблема возникла в конце построения индексов.

    Было сделано два важных шага:

    1) Сообщение «Поврежден заголовок файла базы данных» было вылечено тем, что изменена в блоке 0 длина файла, т.к. размер файла в байтах не совпадал числом-длиной в блоке 0(шестнадцатиричное число).

    2) С помощью обработки Tool_CD http://infostart.ru/public/19633/ открыли файлы битый и нормальной копии:

    в конце в битой копии нет таблиц. Вычислили количество небитых. Данное количество таблиц поставили в количество элементов в массиве tableblocks = количеству таблиц в базе.

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

    Reply
  38. Fox_65

    Безусловно статья полезная. Большой плюс. В версии 77 использовались форматы хранения данных уже известные (dbf,sql) и под них была куча уже готовых инструментов.(Даже при потери части dbf базу удавалось спасти). Формат хранения данных 8 — абсолютно новая область. И инструментов для работы с ней очень мало. В случае поломки базы — инструмента кроме Hex-редактора вообще нет. Стандартная chdbfl творит непонятно что(иногда файлы укорачивает). И в 1С ответ один «Восстанавливайте из резервной копии».(Они бы сразу об этом предупреждали при установке 1с8 — «Наша программа глючная -делайте резервные копии»).

    Хотелось бы побольше информации (например об индексах). Tool_1cd их использует (в моем случае предупреждает

    «Ошибка чтения индексов. Индекс первого свободного блока за пределами файла индексов»). Где-нибудь можно узнать побольше информации о формате 1CD?

    Reply
  39. VVVP

    Что бы посоветовал к описанию структуры: добавить уточнение по формату параметров. Например:

    — int length; // длина содержимого объекта

    и т.п.: не совсем ясно, сколько значащих байт к нему относится.

    В остальном — очень полезные вещи! И большая работа проделана! Респект автору!

    Reply
  40. ateymurlu

    Dobriy den kollegi

    Pomagite pls reshat etoto problemu

    Продолжить прерванное ранее тестирование

    Ошибка SQL: Таблица не найдена ‘_document 133’

    Vo vremya testirovaniye i isparavleniye prizashlo takoy oshika

    Reply
  41. pmtvv

    прикольная штука, спасибо

    Reply
  42. Dragonva

    Класс начало это уже нужное дело! Вот описанее внещних форм то же бы выложить!

    Reply
  43. PLG

    Не удается открыть базу (типовая бухгалтерия 2.0.29.10 платф. 8.2.13.219) «Ошибка формата потока», все возможные манипуляции сделала, ничего не помогло. Открыла с помощью Tool_1CD, написано База данных 1CD открыта, похоже мне прислали открытую базу, как вернуть работоспособность.

    Reply
  44. Hadgehogs

    Я думаю, что всеже

    int length; // длина содержимого объекта

    надо исправить на

    unsigned int length; // длина содержимого объекта

    Reply
  45. awa

    (46) Да, совершенно верно, там беззнаковое целое, unsigned int.

    Reply
  46. Ice-Stas

    Подскажите, пожалуйста, возможно ли восстановить базу 1с 8, если проверка физической целостности пишет — База полностью разрушена восстановление невозможно? Ближайшей копии полгода. Подскажите, что можно сделать, спасибо.

    Reply
  47. Ice-Stas

    Если возможно, ответьте на Ice-stas@mail.ru

    Reply
  48. Ice-Stas

    Если есть кто, сколько это стоит и кто возьмется?

    Reply
  49. sasha_r

    Программой Tool_1CD просто восхищен!

    Скажите, кому-то удавалось заменить таблицу CONFIG в одном файле 1CD на версию из другого?

    а то у меня проблема с битой базой файловой — никак не могу корректной замены добиться 🙁

    Reply
  50. arifulina

    Очень интересно! надо будет попробовать попользоваться

    Reply
  51. BAC51

    Ребята, я написал статью с картинками о том, как я успешно пересадил таблицу CONFIG из целой базы в битую.

    Вот она — по этой ссылке.

    Огромный привет юзеру AWA, он крутой.

    Reply
  52. awa

    (53) Что сказать, тебе повезло. У тебя файлы data, index и blob таблицы CONFIG были не фрагментированы и располагались друг за другом и в битой базе, и в бэкапе. К сожалению, так бывает не всегда.

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

    Reply
  53. BAC51

    Ну да,

    Tool_1CD выводит где-нибудь блоки, которые занимает таблица? Я не нашёл, а судя по всему это полезная информация.

    Публикации не умею делать, разрешаю скопировать мою статью с указанием ссылки на ЖЖ, чтобы люди могли задать мне вопросы в моём ЖЖ (на инфостарте я не планирую зависать, т.к. не занимаюсь 1С профильно)

    Reply
  54. quares

    Было бы здорово если утилита позволяла бы изменять таблицы (хоты бы структуру).

    Reply
  55. lexx_brz

    Здравствуйте, Валерий (awa)! Очень прошу помочь мне в нелегком деле) Проблема заезженная, но актуальная для меня. При обновлении конфигурации «Зарплата и Управление Персоналом (базовая)» редакцию к сожалению не помню…возникла проблема описаная ниже

    Ошибка СУБД:

    Файл базы данных поврежден ‘C:UsersМаринаDesktopHRMBase1/1Cv8.1CD’

    по причине:

    Файл базы данных поврежден ‘C:UsersМаринаDesktopHRMBase1/1Cv8.1CD’

    При проверке и исправлении утилитой chdbfl.exe база частично восстанавливается но все равно не читается… Отвечает

    Ошибка SDBL

    Разрушена структура базы данных 1С:Предприятия

    Что посоветуете? Заранее благодарен.

    email: all-leukhin@yandex.ru

    Reply
  56. zigomodo

    Автор молодец.

    Reply
  57. AlexStar

    Добрый день!

    Помогите, плиз, в решении проблемки с базой.

    Бухгалтерия предприятия 2.0 (Базовая), релиз 2.0.35.9

    Платформа 8.2.13.219, также запускал и в 8.2.15.289 и в 8.2.16.352, результат один и тотже:

    При попытке в конфигураторе открыть конфигурацию выходит «Ошибка формата потока».

    chdbfl.exe ошибок не находит

    При тестировани ТиИ выходит следуещее:

    Тестирование начато

    Проверка таблицы Document196.VT5018: удалено 1 записей

    Проверка таблицы SeqB8257: удалено 1 записей

    Обработка структуры базы данных…

    Тестирование закончено

    В процессе обновления информационной базы произошла критическая ошибка.

    по причине:

    Ошибка SDBL:

    Тип поля CAST(Document8846.Number AS STRING(11)) AS Number несовместим с типом поля Number

    При запуске в пользовательском режиме выдает следующее:

    {Обработка.ДокументооборотСКонтролирующимиОрганами.МодульОбъекта(40725)}: Поле объекта не обнаружено (ПервичноеСообщениеСодержащееОтчетность)

    по причине:

    {Обработка.ДокументооборотСКонтролирующимиОрганами.МодульОбъекта(40725)}: Поле объекта не обнаружено (ПервичноеСообщениеСодержащееОтчетность)

    Выгрузка и загрузка в новую базу через dt не помогла.

    Также не помогает удаление Кэша, логов и Журнала регистрации.

    Утилита Tool_1CD считывает структуру базы без ошибок, в таблице _Document8846 с полем _Number вроде все впорядке — длина 11, тип — fixed string.

    Кто сталкивался, подскажите пожалуйста порядок лечения. Архивов к сожалению нет.

    Reply
  58. AlexStar

    (59) Проблему решил с помощью http://forum.ruboard.ru/archive/index.php/t-66612.html

    Установил пустую конфу того же релиза из шаблона. После запуска конфигуратора пустой конфы открыл конфигурацию. Оставив в таком виде, скопировал файл битой базы вместо живого в каталоге пустой конфы. Закрыл конфигуратор, при этом он сказал, что база повреждена. Затем открыл снова, конфигурация стала открываться. Но это еще не все, ошибка сидит внутри, что бы от нее избавиться полностью, пока конфигурация открыта, сделал обновление следующим релизом. Обновление и реструктуризация прошли успешно, в пользовательском режиме так же все нормально запустилось. Проверил данные, на месте. Далее уже экпериментировал. ТиИ ошибок не показала, последующие обновление также прошли на УРА!!!

    Reply
  59. AlexanderKai

    Круто. Может пригодится, но все-таки надеюсь не резервные копии у клиентов 🙂

    Reply
  60. Jen1978

    круть, хорошая тема. надо записать

    Reply
  61. Lukich66

    (55) BAC51, добрый день. Попытка оставить комментарий на ЖЖ-не удалась.

    Не так страшен 1с,как его распространенность. Если в 1с.проф2.0,1sbw6,1sv7- файлы *.dbf за 30мин. простым Fox ремонтировались, то теперь опять HxD-подавай? 20 лет назад написал cbd.prg(копи бух документ) на Fox21 с интерфейсом NC- c помощью которой легко любой док из одной конф. в другую делал- похоже сейчас опять возникает та же ситуация.

    Reply
  62. KliMich

    Отличний ликбез. Спасибо!

    Reply
  63. hanio

    Помогите с такой проблемой: у нас база на SQL 2008R2 УТ 10.3.18.3 до 21.08.13 отлично проходил автоматический обмен с БП 2.0, собственно после этого больше ни разу не сработал вылетал на 10% по ошибке «Ошибка при вызове метода контекста (ЗагрузитьПравилаОбмена): Произошла исключительная ситуация (1C:Enterprise 8.2.16.368): {Обработка.ОбменДаннымиXML.МодульОбъекта(2117)}: Тип не определен (ПеречислениеСсылка.ОтветственныеЛицаОрганизации)». Понятное дело что с перечислением данным мы ничего не делали.

    Попытки сделать выгрузку данных из SQL в SQL в попытке что новая база сама создаст правильную структуру ни к чему не привели, ошибка повторилась. Выгрузка в DT аналогично ни к чему не привела. Попытки сделать ТиИ тоже не помогли.

    Правила обмена брались различные и от старых релизов и типовые и скачивал отсюда, редактировали их в КД убирали записи по данному перечисление, толку никакого все равно одна и та же ошибка, как будто она где-то прописалась. Темпы 1С различным чистилками с инфостарта очищал, серваки перегружал. Перечисление переименовывал, возвращал ну и массу всяких вариантов — все в пустую.

    В SQL пытались полностью убрать таблицу потом заливали ее из рабочей копии, результат неизменный.

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

    Подскажите что можно еще попробовать а также кто-то определил в какой таблице мне поискать и подменить указание типа данных таблицы. В файловую выливать не предлагайте сразу 200гигов база это нереально.

    Reply
  64. tango
    Следующие 4 байта — это версия базы.

    что-то какую базу ни посмотрю у себя — везде 8.2.14.0

    Reply
  65. tango

    ага, поднял старенькую бухию 1.6, она — 8.1.0.0

    похоже, во флагмане на это дело слегка забили

    Reply
  66. tango

    кратность четырём К подтверждается

    Reply
  67. tango

    (0)

    unsigned int length;
    4 байт – длина базы (файла) в блоках

    unsigned long ? не могу соотнести эти байты с вычисленным количеством страниц 🙁

    Reply
  68. awa

    (69) А я могу)))

    Ты приведи конкретные цифры длины и байты, которые не можешь соотнести. А то так вообще не понятно, что тебе не понятно!

    Reply
  69. tango

    (70) ха! если бы я понял, что мне не понятно, то все бы понял!

    Reply
  70. tango

    1. из стрима получаю 4 байта в 10-ном представлении (могу перевести в 16, в 2)

    2. длину файла делю на 4096

    как получить число из данных по п.1, чтоб было равно частному из п.2

    Reply
  71. awa

    (72) Ну так тебе надо просто понять, как хранятся числа размерностью более одного байта.

    Порядок от младшего к старшему

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

    Байт1 + Байт2 * 256 + Байт3 * 256 * 256 + Байт4 * 256 * 256 * 256

    Reply
  72. tango

    (73) да. спасибо.

    таки есть недостатки в классическом образовании на основе фортрана, перфокарт и БОЛЬШИХ эвм 🙂

    основной — очень давно это было 🙁

    Reply
  73. tango

    (73)

    Раз ты читаешь байтами, а не более длинными блоками

    стриму я задал буфер 4096 — по страничке

    а уж из комсафэрея — массив по-байтно

    но можно по случаю натравливать стрим и поточнее

    Reply
  74. tango

    (73) все-таки обошелся без вычислений, вытащил из стрима

    погорячился

    Reply
  75. DrZombi

    Респект и Уважуха 🙂

    Reply
  76. artyo
    Reply
  77. awa

    (78) В Вашем блоке просто лежат поля друг за другом. Надо вычислить, сколько байт занимает каждое поле, чтобы определить, где начинается и заканчивается каждое поле. Сумма длин всех полей + 1 байт признака удаленности — это длина одной записи.

    Все описано в разделе «Объект таблицы».

    Или может проблема с тем, как хранятся и отображаются GUID’ы? Нажмите в Tool_1CD Ctrl-G (или пункт меню Настройки->Отображать Bynary(16) как GUID). Вы сразу увидите соответствие Вашего блока данных и отображаемых данных в Tool_1CD. Дело в том, что почему-то GUID’ы придуманы так, что порядок хранения байт и отображаемое значение не совпадают. Байты как-бы перемешаны. Прочитать про это можно, например, тут https://ru.wikipedia.org/wiki/GUID.

    Положение еще усугубляется тем, что, формат хранения (порядок байт) разный в информационной базе (1Cv8.1CD) и в базе хранилища конфигураций (1cv8ddb.1CD). В 1cv8ddb.1CD он соответствует стандартному формату хранения Microsoft. А вот в 1Cv8.1CD 1С изобрела свой собственный формат. Хотя я думаю, что это просто ошибка, хотели сделать как в Microsoft, но, как всегда, все перепутали. А теперь, в целях совместимости, эта ошибка «узаконена». Типичный пример перевода бага в фичу.

    Reply
  78. unichkin

    Здравствуйте. А не подскажете, в какой таблице хранятся данные о ролях? Т.е. сам список ролей и флаги, определяющие доступ по объектам?

    Reply
  79. valoks

    Доброго времени суток!

    Программа Tool_1CD не смогла открыть файл 1Cv8.1CD, выдав сообщение: «Файл не является базой 1С (сигнатура не равна 1CDBMSV8)».

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

    Reply
  80. alex0402

    (81) valoks, hex редактором в самом начале файла

    Reply
  81. alex0402

    Длина данных такого объекта равна (length * 4) байт.

    что такое length, где взять?

    Reply

Leave a Comment

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