Создано при поддержке проекта Осьминог - решение всех вопросов с 1С
Утилита pfCFTools предназначена для распаковки/упаковки файлов со структурой как у CF. Является аналогом известной V8Unpack. Работает в режиме командной строки. Есть поддержка файлов CFU
Утилита предназначена для технических специалистов, например для целей восстановления поврежденных баз данных, диагностики и исправления целостности конфигураций. При разработке во многом вдохновлялся утилитой V8Unpack, но делал под свои нужды, в первую очередь для диагностики и исправления ошибок. Для компиляции требуется Free Pascal 3.0.2+. Проверено на Win32/Win64/Linux64/macOS64
Данный формат - формат-"контейнер", может содержать в себе несколько файлов без иерархии. При необходимости иерархия может достигаться включением файлов-контейнеров. Файлы конфигураций и расширений CF/CFE и обработок EPF/ERF обычно содержат дополнительно сжатые файлы по алгоритму deflate. Файлы обновлений CFU сами сжаты алгоритмом deflate, после распаковки представляют собой контейнер несжатых объектов. Изначальный формат ограничивал размер контейнера в 2Гб, поэтому некоторое время назад 1С обновила формат, убрав ограничение на общий размер контейнера. Что интересно, в обновленном формате часто (но не обязательно) присутствует "заглушка" в виде почти пустого контейнера в старом формате.
В файлах CFU распространяются обновления для конфигураций 1С. В отличие от файлов CF сжимаются не объекты внутри контейнера, а сам контейнер. Если файл распаковать (например с помощью данной утилиты pf1CTool inflate 1Cv8.cfu 1Cv8.cfu.unp ), на выходе будет корректный файл формата CF.
При запуске без параметров программа показывает краткую справку о возможных параметрах.
-h | --help | help
показать краткую справку о параметрах и выйти
-l | list <file>
показать список файлов в контейнере "file"
-u | unpack <file>
распаковать (извлечь файлы) контейнер "file"
При распаковке сжатых объектов с опцией "-c deflate" разжатые объекты получают расширение .deflate
При распаковке в опцией "-r" вложенные контейнеры распаковываются как подкаталоги
При распаковке контейнера в новом формате "заглушка" сохраняется в файл ".stub"
-p | pack <file>
упаковать контейнер "file".
-t | test <file>
протестировать контейнер "file", аналогично распаковке без сохранения файлов`
compare <file1> <file2>
сравнить контейнеры "file1" и "file2"
Если объект в контейнере отсутствует - выводится <missed>
Одинаковые объекты отмечаются как equal, различные different
Если объекты сжаты - распаковываются и сравниваются
convert <file1> <file2>
конвертировать формат контейнера "file1" и сохранить как "file2". См. опции -cv и -cnv
inflate <file1> <file2>
разжать произвольный файл "file1", сжатый алгоритмом deflate, и сохранить как "file2"
deflate <file1> <file2>
сжать произвольный файл "file1" алгоритмом deflate, и сохранить как "file2"
cfuinfo <file.cfu>
Вывести краткую информацию о файле обновления CFU.
Включает имя и версию конфигурации, и конфигурации к которым применимо обновление
cfupdate <file1.cf> <file2.cfu> <file3.cf>
Применить файл обновления file2.cfu к файлу file1.cf и сохранить результат как file3.cf
-force
применимо для команды cfupdate - отключает проверку применимости файла обновления к конфигурации
-d <dir>
указывает путь для распаковки контейнера/путь к файлам для упаковки в контейнер
-r
рекурсивная обработка, применимо для распаковки контейнера
-c raw|deflate|auto
обработка сжатых файлов в контейнере - использовать как есть (raw), считать сжатыми (deflate), авторежим
-cv 0|auto|1|classic|2|new
использовать формат контейнера входного файла - авто, старый, новый
-cnv 0|auto|1|classic|2|new
использовать формат контейнера выходного файла контейнера - авто, старый, новый.
При конвертации "авто" меняет формат исходного контейнера на противоположный.
При применении обновления "авто" использует формат исходного контейнера
-stub <file>
использовать указанный файл в качестве "заглушки" для контейнера нового формата. По умолчанию используется встроенная заглушка.
Только для отладки
-nostub
не использовать "заглушку" для контейнера нового формата
-M <mask>
Использовать DOS-подобную маску файлов (вида *.*) при распаковке или листинге контейнера
-m <regexp>
Использовать регулярное выражение как маску файлов при распаковке или листинге контейнера
Во время работы при конвертации контейнеров или применении обновления активно используются временные файлы. Операции распаковки, упаковки и применения обновления показывают прогресс выполнения.
pfCFTool -l 1Cv8.cf -M ver*
Вывести список объектов с именами начинающимися на "ver"
pfCFTool -u 1Cv8.cf -m ^.{1,9}$ -c auto -d .\unp
Распаковать с разжатием в каталог unp объекты с именами не длиннее 9 символов
pfCFTool -u 1Cv8.cf -c auto -d .\unp -r
Распаковать контейнер с разжатием в каталог unp с распаковкой вложенных контейнеров
pfCFTool -p 1Cv8.cf -c auto -d .\unp -r
Упаковать обратно контейнер с автоматическим сжатием из каталога unp с упаковкой вложенных контейнеров
pfCFTool -t 1Cv8.cf -c deflate
Протестировать контейнер с разжатием объектов. Утилита сообщит о "битых" объектах
pfCFTool compare 1Cv8.cf 1Cv8-2.cf -c deflate
Сравнить содержимое двух контейнеров с разжатием объектов
pfCFTool convert 1Cv8.cf 1Cv8-2.cf -cv new -cnv 1
Изменить формат контейнера 1Cv8.cf из нового в старый, результат записать как 1Cv8-2.cf
pfCFTool inflate root root.txt
Разжать сжатый алгоритмом deflate файл "root", результат сохранить как root.txt
pfCFTool deflate root.txt root
Сжать алгоритмом deflate файл "root.txt", результат сохранить как "root"
pfCFTool cfupdate 1Cv8.cf 1cv8.cfu 1Cv8-new.cf
Применить файл обновления 1Cv8.cfu к конфигурации 1Cv8.cf, результат сохранить как 1Cv8-new.cf
pfCFTool cfuinfo 1cv8.cfu
Получить информацию об обновлении. Результат выглядит примерно так:
Conf : БухгалтерияПредприятияБазовая
Author : Фирма "1С"
Version: 1.6.21.6
Delete : 91
Insert : 3806
Root : e0666db2-45d6-49b4-a200-061c6ba7d569
ReleaseID : 80095800-cdbf-4398-b132-4771464b119d 1564a6c8-0001-0000-18a3-f400bce61200
Updates for:
1 БухгалтерияПредприятияБазовая 1.6.20.6 07b4cfe0-9b02-424a-8271-60d424a67ef8
BTC 13MfKnF2Db4CVReAhTaCqW6NrFiwwjtH3C ЮMoney (в т.ч. картами)