Файл не обнаружен v8res
В этой статье я буду писать про недокументированное использование стандартных форм.
Первичная цель: Как перенести данные из стандартной управляемой формы в форму внешней обработки с модулями?
Порядок выполнения действий "Преобразование стандартных форм":
- Открыть обработку, нажать на кнопку "Получить список ресурсов", отметить необходимые ресурсы, выбрать каталог и нажать "Распаковать и упаковать".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
- Открыть форму внешней обработки, восстановить в ней связи между элементами и реквизитами, записать и закрыть.
- Открыть записанную обработку в режиме предприятия.
Что делает обработка "Преобразование стандартных форм":
- Получает встроенную в виде отдельного файла LF.
- Получает готовый шаблон внешней обработки из макета обработки и сохраняет его во временный файл.
- Распаковывает временный файл внешней обработки во временный каталог.
- Заменяет файл "" на содержимое файла LF.
- Упаковывает в обработку обратно в обычный каталог.
Чтобы сделать самому себе обработку "AllFunction.lf", имея на руках V8Unpack, нужно выполнить следующее действие:
- Создать в конфигураторе новую обработку.
- Создать в ней новую управляемую форму.
- Сохранить обработку.
- Распаковать получившуюся обработку с помощью V8Unpack.
- Там должен быть один файл с именем вида .0 - поменять его содержимое на содержимое файла "AllFunctions.lf".
- После этого обратно собрать обработку с помощью V8Unpack.
Чтобы получить встроенную в виде отдельного файла "AllFunctions.lf", нужно выполнить код:
Информация обо всех файлах в формате LF лежит в файлах:
C:\Program Files (x86)\1cv8\хх.хх.хх.хх\bin\mngbase_root.res
C:\Program Files (x86)\1cv8\хх.хх.хх.хх\bin\mngbase_ru.res
Помимо этого была сделана внешняя обработка для тестирования для конфигураций 1С: Предприятия 8 . Все изменения касательно внешней обработки "Все функции":
- Восстановлена связь между элементами и реквизитами.
- Закомментирован код закрытия формы обработки после выбора формы.
- Изменено поведение Enter в форме обработки выбора.
- Изменено поведение Esc (запрашивает подтверждение при закрытии приложения).
Выражаю благодарность awa за оказанную помощь. Мир его праху.
Второисточник: Просмотр ресурсов 1С методами встроенного языка (8.3.9) .
Автор r0610201 любезно разрешил опубликовать расширенный анализ ресурсов 1С со ссылкой на второисточник. За что ему большое спасибо!
Отличие:
- Добавлено преобразование стандартных форм (*.clf, *.lf, *.f).
- Сохранение всех файлов с ресурсами одним нажатием кнопки.
В последнее время авторы жалуются на отсутствие информации о стандартных обычных формах.
Вторичная цель: Как вытащить обычные формы?
В файле mngbase*.res лежат управляемые формы (*.lf), а обычные формы (*.f) в basicui*.res.
F - это стандартная компилированная обычная форма, вызываемая платформой.
Была проблема с извлечением ресурсов *.f через 'КопироватьФайл("v8res://. ")'. Порыскал в интернете и нашёл инфу о том, что можно распаковать ресурсы непосредственным чтением двоичных данных res-файла, которые другими способами извлечь не получается.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".f (. )", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Третичная цель: Есть ли возможность вытащить формы, вызываемые методами ПоказатьПредупреждение и ПоказатьВопрос? Вопрос TMV.
Эти формы нет ни в mngbase*.res (*.lf) ни в basicui*.res (*.f), оказывается что есть еще форма CLF в mngcore*.res.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".clf (. )", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Идеи для разработки:
Получить системную папку bin 1С, прочитать файл mngbase_root.res, найти в нём позицию первого ".lf" и нулевой байт и читать пока идут печатаемые символы или нулевой байт.Уметь сравнивать ресурсы: какие ресурсы добавлены, а какие удалены. Например, сравнить 2 файла mngbase_root.res разных версий платформы.Анализировать ресурсы всех файлов.Преобразовать стандартные обычные формы (*.f).
Не стоит забывать, что такое использование стандартных форм является недокументированным.
Специальные предложения
(1) klinval, конечно, есть стандартная форма "UniversalListSettings.lf". В ней нужно восстанавливать связи между элементами и реквизитами непосредственно в обработке, такие как: Filter, Order, Group и т.д.
Ой, ой, ой. На фоне шумихи с вирусом для 1С. Т.е. теперь можно подложить файлы в каталог бин и пользователь сам когда-нибудь да откроет обработку.
А также можно обойти ограничение на открытие внешних обработок.
Большая-большая дыра в безопасности каждой компании, где у пользователей есть доступ на запись в каталог bin
TreeDogNight; frkbvfnjh; Danil.Potapov; uncle_Vasya; kiv1c; Sergey-MX; ZhokhovM; AnryMc; the1; + 9 – Ответить
(5) Все намного интереснее.
Если вы заходите в 1С с рабочей машины (с личного компьютера, а не с терминала) то скорее всего вы там админ и можете делать в каталоге bin все что угодно.
Если вы заходите в 1С с терминала, то вам никто не мешает скопировать папку с установленной 1С и запустить 1С-клиент оттуда. А в вашей копии 1С конечно в папке bin вы можете делать что угодно.
Но вообще хранение в ресурсных файлах открытого кода, который можно не только прочитать, но и модифицировать - это редчайшая дырявая дыра. И это скорее всего дыра не для вирусов, а для продвинутых пользователей, которые хотят получить расширенный доступ к вашей базе (имея при этом достаточно ограниченные права даже без запуска обработок через Файл-Открыть).
Если глянуть повнимательнее файлы типа mngbase_*.res, то можно увидеть что в них в обработках описан также и серверный код. Т.е. внеся изменения в серверный код, мы получаем "свой" программный код выполняемый уже на сервере. А кто нам мешает там установить привелигированный режим или, зная код типовой конфигурации, вызвать серверную функцию которая нам установит необходимый уровень прав в системе?
По правильному, такие ресурсы (всевдовстроенные обработки и формы) надо не хранить на клиенте, а получать от сервера где эти ресурсные файлы должны лежать и ждать когда их запросят. Когда-нибудь это пофиксят, но наверное ждут пока гром грянет.
В этой статье я буду писать про недокументированное использование стандартных форм.
Первичная цель: Как перенести данные из стандартной управляемой формы в форму внешней обработки с модулями?
Порядок выполнения действий "Преобразование стандартных форм":
- Открыть обработку, нажать на кнопку "Получить список ресурсов", отметить необходимые ресурсы, выбрать каталог и нажать "Распаковать и упаковать".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
- Открыть форму внешней обработки, восстановить в ней связи между элементами и реквизитами, записать и закрыть.
- Открыть записанную обработку в режиме предприятия.
Что делает обработка "Преобразование стандартных форм":
- Получает встроенную в виде отдельного файла LF.
- Получает готовый шаблон внешней обработки из макета обработки и сохраняет его во временный файл.
- Распаковывает временный файл внешней обработки во временный каталог.
- Заменяет файл "" на содержимое файла LF.
- Упаковывает в обработку обратно в обычный каталог.
Чтобы сделать самому себе обработку "AllFunction.lf", имея на руках V8Unpack, нужно выполнить следующее действие:
- Создать в конфигураторе новую обработку.
- Создать в ней новую управляемую форму.
- Сохранить обработку.
- Распаковать получившуюся обработку с помощью V8Unpack.
- Там должен быть один файл с именем вида .0 - поменять его содержимое на содержимое файла "AllFunctions.lf".
- После этого обратно собрать обработку с помощью V8Unpack.
Чтобы получить встроенную в виде отдельного файла "AllFunctions.lf", нужно выполнить код:
Информация обо всех файлах в формате LF лежит в файлах:
C:\Program Files (x86)\1cv8\хх.хх.хх.хх\bin\mngbase_root.res
C:\Program Files (x86)\1cv8\хх.хх.хх.хх\bin\mngbase_ru.res
Помимо этого была сделана внешняя обработка для тестирования для конфигураций 1С: Предприятия 8 . Все изменения касательно внешней обработки "Все функции":
- Восстановлена связь между элементами и реквизитами.
- Закомментирован код закрытия формы обработки после выбора формы.
- Изменено поведение Enter в форме обработки выбора.
- Изменено поведение Esc (запрашивает подтверждение при закрытии приложения).
Выражаю благодарность awa за оказанную помощь. Мир его праху.
Второисточник: Просмотр ресурсов 1С методами встроенного языка (8.3.9) .
Автор r0610201 любезно разрешил опубликовать расширенный анализ ресурсов 1С со ссылкой на второисточник. За что ему большое спасибо!
Отличие:
- Добавлено преобразование стандартных форм (*.clf, *.lf, *.f).
- Сохранение всех файлов с ресурсами одним нажатием кнопки.
В последнее время авторы жалуются на отсутствие информации о стандартных обычных формах.
Вторичная цель: Как вытащить обычные формы?
В файле mngbase*.res лежат управляемые формы (*.lf), а обычные формы (*.f) в basicui*.res.
F - это стандартная компилированная обычная форма, вызываемая платформой.
Была проблема с извлечением ресурсов *.f через 'КопироватьФайл("v8res://. ")'. Порыскал в интернете и нашёл инфу о том, что можно распаковать ресурсы непосредственным чтением двоичных данных res-файла, которые другими способами извлечь не получается.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".f (. )", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Третичная цель: Есть ли возможность вытащить формы, вызываемые методами ПоказатьПредупреждение и ПоказатьВопрос? Вопрос TMV.
Эти формы нет ни в mngbase*.res (*.lf) ни в basicui*.res (*.f), оказывается что есть еще форма CLF в mngcore*.res.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".clf (. )", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Идеи для разработки:
Получить системную папку bin 1С, прочитать файл mngbase_root.res, найти в нём позицию первого ".lf" и нулевой байт и читать пока идут печатаемые символы или нулевой байт.Уметь сравнивать ресурсы: какие ресурсы добавлены, а какие удалены. Например, сравнить 2 файла mngbase_root.res разных версий платформы.Анализировать ресурсы всех файлов.Преобразовать стандартные обычные формы (*.f).
Не стоит забывать, что такое использование стандартных форм является недокументированным.
Специальные предложения
(1) klinval, конечно, есть стандартная форма "UniversalListSettings.lf". В ней нужно восстанавливать связи между элементами и реквизитами непосредственно в обработке, такие как: Filter, Order, Group и т.д.
Ой, ой, ой. На фоне шумихи с вирусом для 1С. Т.е. теперь можно подложить файлы в каталог бин и пользователь сам когда-нибудь да откроет обработку.
А также можно обойти ограничение на открытие внешних обработок.
Большая-большая дыра в безопасности каждой компании, где у пользователей есть доступ на запись в каталог bin
TreeDogNight; frkbvfnjh; Danil.Potapov; uncle_Vasya; kiv1c; Sergey-MX; ZhokhovM; AnryMc; the1; + 9 – Ответить
(5) Все намного интереснее.
Если вы заходите в 1С с рабочей машины (с личного компьютера, а не с терминала) то скорее всего вы там админ и можете делать в каталоге bin все что угодно.
Если вы заходите в 1С с терминала, то вам никто не мешает скопировать папку с установленной 1С и запустить 1С-клиент оттуда. А в вашей копии 1С конечно в папке bin вы можете делать что угодно.
Но вообще хранение в ресурсных файлах открытого кода, который можно не только прочитать, но и модифицировать - это редчайшая дырявая дыра. И это скорее всего дыра не для вирусов, а для продвинутых пользователей, которые хотят получить расширенный доступ к вашей базе (имея при этом достаточно ограниченные права даже без запуска обработок через Файл-Открыть).
Если глянуть повнимательнее файлы типа mngbase_*.res, то можно увидеть что в них в обработках описан также и серверный код. Т.е. внеся изменения в серверный код, мы получаем "свой" программный код выполняемый уже на сервере. А кто нам мешает там установить привелигированный режим или, зная код типовой конфигурации, вызвать серверную функцию которая нам установит необходимый уровень прав в системе?
По правильному, такие ресурсы (всевдовстроенные обработки и формы) надо не хранить на клиенте, а получать от сервера где эти ресурсные файлы должны лежать и ждать когда их запросят. Когда-нибудь это пофиксят, но наверное ждут пока гром грянет.
Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов . ).
Неожиданно. Если не секрет, то где подобную информацию можно раскопать? И можно ли еще что-то стандартное сделать нестаднартным? "Изменить форму", например.
Scaramuccia; pavlo; chebser; IvanovAV; ikekoval; Spacer; alevnev; CyberCerber; sashocq; sergpogo; Dementor; + 11 – Ответить
(1) friend0, (4) Dementor, В официальном описании ничего этого нет.
Поэтому и "недокументированное использование".
Вытянуто из ресурсных файлов .res в поставке платформы.
Случайно наткнулась при разборе ошибок платформы.
KAS1979; Somebody1; simuljakr; m_aster; wunderland; Scaramuccia; lioness3148; Gang031; IvanovAV; vitaliy1911; + 10 – Ответить
(1) Реализовать такую функциональность через документированную объектную модель управляемой формы невозможно. В частности невозможно снаружи формы получить результирующие заголовки ее полей. Поэтому такой обработки скорее всего не существует. А если она и существует, то она должна использовать какие то недокументированные возможности в объектной модели управляемой формы, которые я очень хотел бы познать.
Круто, спасибо. В обработке "StandardDocumentsPosting" можно вернуть закладку "Восстановление последовательностей", заменив код:
"Items.RestoreSequence.Enabled" на "True", далее изучить код для заполнения списка восстановления последовательностей.
Автор, действительно, поделитесь методом поиска информации!
О ресурсах v8res:// в официальной документации я ничего не находил. Единственные упоминания появляются в описаниях ошибок. Но с типовыми пунктами меню сгенерировать ошибку нереально.
Не там искал. Оказывается это тема годичной давности с партнерского форума. Там и полный состав стандартных обработок и код для сохранения/переопределения. А так же официальная позиция компании 1С по этому поводу:
Вполне очевидно, что данная возможность не является лицензионной.
Тот факт, что стандартные обработки не предоставляются в пользовательский интерфейс - это осознанное решение. Конкретное прикладное решение опирается на некоторый конкретный и прогнозируемый (прикладным разработчиком) список функциональных возможностей. Стандартные функции развиваются синхронно с платформой, а не с прикладным решением. Поэтому пользователю, кажется, будет совершенно непонятно, почему (после обновления платформы и без обновления прикладного решения) какая-то функция внезапно поменяла свой внешний вид и предоставляемые возможности.
Кроме того, переопределение системных форм ведет к тому, что теряется некоторый пользовательский опыт, когда пользователь, переходя от одного прикладного решения к другому, внезапно для него получает совершенно другую форму с (в пределе) совершенно другим поведением и возможностями.
Также стоит отметить, что любое использование недокументированных возможностей в любой момент времени может перестать работать (описываемая возможность не является исключением).
(6) трабл в том, что любая документированная фича в любой момент может перестать работать
в вообще, доступно и всерьез, знаете ли
(84) не нужно путать отмену документированных и недокументированных фич. Согласен, что документированные возможности тоже отменяют и изменяют, но при этом такие изменения явно документируют и о них извещают пользователей платформы (а далее это уже ваше право не читать файл V8Update.htm). Стоит отметить, что отмененные фичи в новых платформах могут продолжить работать, если для конфигурации выбрать режим совместимости с предыдущими версиями.
Недокументированные возможности могут появляться и исчезать хаотично, про их жизненный цикл никто не отчитывается и если они пропадут, то никакой режим совместимости уже не поможет.
, конечно тут элементарный копипаст с изменением пары фраз и выдача за свой титанический труд ( цитата "Случайно наткнулась при разборе ошибок платформы. " - ха .. ха)
Супер. Автору зачёт. Вот уж не знал. Сколько встречал вопросов, а можно ли вызвать что-то стандартное, и везде ответ - нельзя.
(8) Поручик, Официально это делать действительно нельзя.
Позиция 1С по поводу таких переопределений описана в (6). И в принципе я с ней согласна. Их подход правильный. Есть стандартные функции, которые зависят от релиза платформы и развиваются параллельно с ней.
Но в некоторых случаях все-таки пользоваться под свою ответственность можно.
Автор, а кроме стандартных обработок есть еще другие стандартные встроенные объекты? Например, по списку внутренних идентификаторов платформы: "v8res://mngbase/" или "v8res://. ".
(11) ZhokhovM, По обработкам вроде это все.
Есть много вшитых в ресурсы форм, но как их правильно вытащить я пока не разбиралась.
А такую штуку можно провернуть со всеми обработками или только из тех, что скрываются в пункте "Стандартные"?
(13) mburkin, А с какими это "со всеми"?
Насколько я знаю, других обработок в платформе нет.
На самом деле в данном случае для подключения используется стандартный метод менеджера внешних обработок ВнешниеОбработки.Подключить()
Смысл этой статьи только в определении внутренних адресов, по которым можно взять стандартные обработки.
(17) w.r., Всегда есть платформенная в меню "Все функции".
Плюс дополнительно в конфигурации может быть включена обработка, адаптированная под особенности конкретной конфигурации.
Например, в УТ11, есть отдельные обработки "Удаление помеченных объектов", "Управление итогами и агрегатами", "Управление полнотекстовым поиском".
Но это именно отдельные независимые обработки.
В общем случае при наличии обработок в конфигурации лучше использовать их, а не встроенные в платформу.
(18) Fragster, Насколько я понимаю, это не платформенная, а стандартная встроенная в конфигурацию обработка.
С ней можно делать все, что угодно, стандартными средствами из конфигуратора.
Автор, и еще в примере 1 ошибка ПодключитьВнешнююОбработкуНаСервере() это процедура, иначе нужно что-нибудь возвращать в функции и лучше вызывать без контекста
(21) w.r., Да, действительно. с точки зрения идеологии работы правильнее Процедура.
Поправила.
Хотя, как ни странно, вариант с функцией тоже работает и ошибок не выдает.
По поводу контекста, это пример для модуля команды.
В нем нет варианта директивы &НаСервереБезКонтекста.
Но при вызове из формы логичнее использовать без контекста.
(22) функция без явного указания возвращаемого значения возвращает Неопределено, вот когда вызывают процедуру, как функцию, тогда будет ошибка выполнения. Если общая команда, то логично, что всегда есть контекст, извиняюсь. Но я бы конфигурацию менять не стал без особой крайней надобности. Лучше внешняя обработка
(22) стало интересно, тут с точки зрения идеологии нужна все-таки функция, тк метод ВнешниеОбработки.Подключить возвращает имя подключенной обработки, значит можно контролировать этот процесс :
(0) поясню минус - ИМХО, от таких возможностей больше вреда, чем пользы. По этим соображениям и не публиковал тут подобную информацию когда раскопал эту фичу.
(24) Aleksey.Bochkov, У меня были сомнения о том, стоит ли описывать такие вещи о работе платформы. Думаю, то что они не описаны в официальной документации от 1С это правильно.
Однако я также считаю что для правильной работы с платформой программист должен понимать, как она работает, из чего состоит программный продукт, как взаимосвязаны его части (платформа, конфигурация, информационная база), какой функционал выполняется на каком уровне, какие настройки на каком уровне настраиваются.
При возникновении проблем со стандартными механизмами, нужно иметь возможность разобраться, в чем именно проблема. Программист должен уметь понять как работает нужный функционал. Именно для того, чтобы понять, в чем именно проблема в данных в конкретнй базе. А для этого нужно иметь возможность взять эту же обработку из текущей версии платформы в виде файла и пройтись отладчиком по непонятным вещам.
Также я считаю полезной возможность делать свои обработки на базе стандартных встроенных, а не изобретать каждый раз велосипеды, которые работают каждый по-разному.
И на мой взгляд, Инфостарт именно тот ресурс, на котором должна быть подобная информация. Также как информация о внутреннней структуре .cf и .dt файлов, структуре хранения системных данных базы в SQL. Да, неправильное использование такой информации может навредить, но понимание этих вещей необходимо для правильной работы и возможности оперативно решать возникающие задачи.
Greysvandir; Elvira_Saydasheva; m_aster; Anna_arbuz; Jeka44; bulpi; Somebody1; Korolev; KolyNCo; Hobbit_Jedi; bark.722688; AllexSoft; sergathome; tgr123; ayuplotnikov; Wdivine; jif; vvp117; zuza; EVKash; IvanovAV; purgin; TeMochkiN; Maruska77; slavapil; корум; alexgt; AliceLight; Vovan58; tormozit; Sergey-MX; antonov_i; wildwilduser; chmv; alex-l19041; kinazarov; sytkosa; viking(j); [AdepT]; kentavr27; Craig; anchovy; marat_n; EduardSpb; Alexsur; Sgeor; frkbvfnjh; flexornail; Enot; v.l.; Nuobu; andrey1508; rzabolotin; invertercant; AndrewVVS; mrXoxot; sergo_722; CratosX; cefew; AlexAuto; RomaM; FullMoon; Зеленоград; 1cprogr_nsk; Corablove; FSerg; MRAK; begemot; worker1c; unichkin; + 70 – Ответить
(25) Не согласен. Работа программиста прежде всего разработка. Порнимать механизмы нужно, но только касаемо части разработки. Если возникли проблемы с платформой, то лучше и правильней все-таки откатиться на предыдущую версию, где нет проблемы, и сообщить о ней разработчику, чем пытаться ее устранить самостоятельно, используя недокументируемые функции
Итак, перед нами "мёртвая" файловая база. Задача, которая стоит перед нами на текущий момент - всесторонне обследовать базу, составить максимально полный перечень проблемных мест (ошибок). Одной из распространённых ошибок у начинающих специалистов является следующая: они либо сразу и надолго "ныряют" в содержимое файла базы в hex-редакторе, пытаясь вручную разобраться в тоннах байт, что, естественно, через некоторое время вызывает эффект отторжения, либо, попробовав один какой-нибудь инструмент, и получив неудачу, выдают заключение: "База не подлежит ремонту". Лично я считаю, что к услугам hex-редактора нужно прибегать только в исключительных случаях, либо изредка, на минутку, например, чтобы своими глазами посмотреть содержимое, находящееся по определённому смещению.
А перечень инструментов и приёмов для получения информации о проблемных местах вообще довольно широк, причём даже сама платформа 1С предоставляет, как минимум, два штатных способа. Рассмотрим их поподробнее.
1. Утилита chdbfl.exe из поставки 1С:Предприятие. Запускаем её с установленной галкой "Исправлять обнаруженные ошибки".
Сразу хочу оговориться, что на данном этапе эта утилита будет использоваться нами исключительно для диагностики, поэтому, даже если она и выдаст нам какой-то изменённый, якобы отремонтированный файл базы, мы не имеем на него каких-то видов, и просто "выкидываем". Однако, внимательно изучаем протокол работы и фиксируем перечень ошибок, найденных этой утилитой.
Например, "Поврежден заголовок файла базы данных" чаще всего означает просто некорректно записанную в нём длину файла в блоках, а не полное его разрушение (чтобы в этом убедиться, достаточно на пару секунд обратиться к hex-просмотрщику или редактору, если в начале файла сигнатура 1CDBMSV8 на месте, значит, проблема только в поле длины). "Повреждено содержимое внутреннего файла " означает, что в корневом объекте существуют "битые записи", с некорректными номерами блоков заголовков, либо с испорченными блоками заголовков. И так далее.
1С:Предприятие начинает загрузку базы с чтения содержимого системных таблиц. Системными таблицами являются:
V8USERS - таблица с данными пользователей (для баз версий 8.2 и выше)
DBSCHEMA - схема (структура) БД
_USERSWORKHISTORY - история работы пользователей
_COMMONSETTINGS, _FRMDTSETTINGS, _REPSETTINGS, _REPVARSETTINGS, _SYSTEMSETTINGS - хранилища различных настроек
а также системные таблицы-каталоги:
PARAMS - содержит файлы с параметрами БД
FILES - содержит прочие системные (служебные) файлы
CONFIG - содержит файлы конфигурации БД. Здесь же, в файлах с названиями вида GUID.GUID хранятся конфигурации поставщика (отсутствие таковых является нормальной ситуацией, означающей, что либо конфигурация полностью совпадает с типовой (не включен режим изменения), либо она снята с поддержки, либо является самописной).
CONFIGSAVE - содержит файлы основной конфигурации. Отсутствие записей в ней является нормальной ситуацией, означающей, что основная конфигурация полностью совпадает с конфигурацией БД. Стоит отметить, что здесь могут содержаться не все файлы конфигурации, а только изменённые (отличающиеся от файлов конфигурации БД).
Системные таблицы-каталоги являются, по сути, аналогами каталога в обычной файловой системе, т.е. являются хранилищем некоторого набора файлов, и имеют следующие поля:
FILENAME - имя файла
CREATION/MODIFIED - дата создания/изменения
ATTRIBUTES - атрибуты
DATASIZE - размер файла
BINARYDATA - содержимое файла (двоичные данные)
Теперь мы понимаем, что записи в ТЖ типа
22:42.0169-1,DBV8DBEng,2,process=1cv8,Trans=0,Func=selectFileName,FileName=ibparams.inf
22:42.0170-3,DBV8DBEng,1,process=1cv8,Trans=0,Func=readFile,CatName=Params,FileName=ibparams.inf
означают чтение файла "ibparams.inf" из таблицы PARAMS.
3. Открываем нашу базу при помощи утилиты Tool_1CD. Здесь мы можем просмотреть таблицы, а также их содержимое (данные записей), причём для системных таблиц (DBSCHEMA, PARAMS и т.д.) поддерживается автоматическая распаковка содержимого BLOB-полей, вплоть до показа содержимого упакованных контейнеров (в таблицах CONFIG и CONFIGSAVE). Наиболее пристальное внимание уделяем тем проблемным объектам, которые были нами найдены по результатам действий из пунктов 1 и 2, а также системным таблицам (хотя, зачастую список проблемных объектов, составленный по п. 1 и 2, ограничивается именно системными таблицами).
При просмотре перечня таблиц смотрим, есть ли таблицы с окончаниями "OG" - их наличие означает, что крах базы произошёл при ТиИ или реструктуризации (в процессе выполнения этих операций 1С создаёт новые таблицы с такими окончаниями, куда пишутся данные реструктуризованных таблиц, затем исходная таблица удаляется, а новой назначается исходное имя). Также бывает полезно сравнить перечень таблиц с содержимым старого бэкапа (при его наличии, и при условии, что конфигурация не обновлялась, иначе состав таблиц, связанных с метаданными, конечно, будет различаться), это поможет выявить отсутствующие таблицы.
При просмотре таблицы CONFIG обращаем внимание, есть ли в ней файлы с окончаниями ".new" - их наличие означает, что крах базы произошёл при обновлении конфигурации БД.
Также утилита позволяет сохранить конфигурацию БД в cf-файл, что и рекомендуется сделать. Загружаем далее эту конфигурацию из файла в пустую базу, и пробуем запустить. Если всё запустилось успешно, значит, проблема нашей базы не в конфигурации.
5. Загрузка базы в систему восстановления баз 1С restoration-base-1c8. По состоянию дел на текущий момент, в данном продукте многие функции не реализованы, а некоторые, на мой взгляд, реализованы не совсем прозрачно. Кроме того, практически вся смысловая обработка данных происходит на стороне 1С, что далеко не лучшим образом сказывается на быстродействии. Например, у меня полная загрузка файла размером 230 Мб длилась около часа, за это время я уже всесторонне обследовал базу другими инструментами, и приступил к непосредственному ремонту. Окончания же загрузки файла размером 1,5 Гб я вообще не дождался - закончилось терпение. Ещё один нюанс: поскольку система является конфигурацией для 1С, то все данные исходной базы загружаются также в базу 1С, но оказываются они в табличной части одного справочника. Следовательно, даже не принимая во внимание скорость загрузки, в случае файловой базы не получится загрузить файл с исходной базой размером более 4 Гб (из-за ограничений формата). Тем не менее, проект является свободным, с открытым кодом, доступным для изменения и доработки, поэтому не могу не упомянуть про него.
Загрузив нашу базу в систему restoration-base-1c8, мы можем иследовать список таблиц:
а также просмотреть и отредактировать данные любого блока во встроенном hex-редакторе:
Просмотр записей таблиц, к сожалению, не реализован.
На этом наш список, а также сам этап обследования заканчивается. Аккуратно фиксируем и систематизируем всю собранную информацию, которую мы будем использовать далее, в процессе "лечения". Конкретные, наиболее типичные проблемные ситуации и способы их устранения будут рассмотрены в следующих статьях.
В этой статье я буду писать про недокументированное использование стандартных форм.
Первичная цель: Как из компилированной управляемой формы перенести данные в форму с модулями из внешней обработки?
Порядок выполнения действий "Преобразование стандартных форм":
- Открыть обработку, нажать на кнопку "Получить список ресурсов", отметить необходимые ресурсы, выбрать каталог и нажать "Распаковать и упаковать".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
- Открыть форму внешней обработки, восстановить в ней связи между элементами и реквизитами, записать и закрыть.
- Открыть записанную обработку в режиме предприятия.
Что делает обработка "Преобразование стандартных форм":
- Получает встроенную в виде отдельного файла LF.
- Получает готовый шаблон внешней обработки из макета обработки и сохраняет его во временный файл.
- Распаковывает временный файл внешней обработки во временный каталог.
- Заменяет файл "" на содержимое файла LF.
- Упаковывает в обработку обратно в обычный каталог.
Чтобы сделать самому себе обработку "AllFunction.lf", имея на руках V8Unpack, нужно выполнить следующее действие:
- Создать в конфигураторе новую обработку.
- Создать в ней новую управляемую форму.
- Сохранить обработку.
- Распаковать получившуюся обработку с помощью V8Unpack.
- Там должен быть один файл с именем вида .0 — поменять его содержимое на содержимое файла "AllFunctions.lf".
- После этого обратно собрать обработку с помощью V8Unpack.
Чтобы получить встроенную в виде отдельного файла "AllFunctions.lf", нужно выполнить код:
Информация обо всех файлах в формате LF лежит в файлах:
C:Program Files (x86)1cv8хх.хх.хх.ххinmngbase_root.res
C:Program Files (x86)1cv8хх.хх.хх.ххinmngbase_ru.res
Помимо этого была сделана внешняя обработка для тестирования для конфигураций 1С: Предприятия 8 . Все изменения касательно внешней обработки "Все функции":
- Восстановлена связь между элементами и реквизитами.
- Закомментирован код закрытия формы обработки после выбора формы.
- Изменено поведение Enter в форме обработки выбора.
- Изменено поведение Esc (запрашивает подтверждение при закрытии приложения).
Второисточник: Просмотр ресурсов 1С методами встроенного языка (8.3.9) .
Автор r0610201 любезно разрешил опубликовать расширенный анализ ресурсов 1С со ссылкой на второисточник. За что ему большое спасибо!
Отличие:
- Добавлено преобразование стандартных форм (*.lf, *.f).
- Сохранение всех файлов с ресурсами одним нажатием кнопки.
В последнее время авторы жалуются на отсутствие информации о стандартных обычных формах.
Вторичная цель: Как вытащить стандартные обычные формы?
В файле mngbase_ru.res или mngbase_root.res лежат управляемые формы (*.lf), а обычные формы (*.f) в basicui_ru.res и других файлах.
F — это стандартная компилированная обычная форма, вызываемая платформой.
Была проблема с извлечением ресурсов *.f через ‘КопироватьФайл("v8res://….")’. Порыскал в интернете и нашёл инфу о том, что можно распаковать ресурсы непосредственным чтением двоичных данных res-файла, которые другими способами извлечь не получается.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".f (…)" или ".lf (…)", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Идеи для разработки:
Получить системную папку bin 1С, прочитать файл mngbase_root.res, найти в нём позицию первого ".lf" и нулевой байт и читать пока идут печатаемые символы или нулевой байт.Уметь сравнивать ресурсы: какие ресурсы добавлены, а какие удалены. Например, сравнить 2 файла mngbase_root.res разных версий платформы.Анализировать ресурсы всех файлов.Преобразовать стандартные обычные формы (*.f).
Не стоит забывать, что такое использование стандартных форм является недокументированным.
Читайте также: