И снова распаковщик. Теперь на чистом 1С. YellowPacker

03.09.22

Разработка - Инструментарий разработчика

V8Unpack-подобный распаковщик, который делает практически то же, что и всем известный инструмент. Для работы с файлами cf, cfe, epf, erf. Только на языке 1С, без использования внешних файлов, библиотек и компонент.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
YellowPacker - инструмент для разборки/сборки файлов конфигураций
.epf 23,31Kb
71
71 Скачать (5 SM) Купить за 3 050 руб.

Зачем?!

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

В ходе оптимизаций и автоматизаций процесса разработки и тестирования в нашей команде, сошлись (среди прочих) следующие задачи:

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

1) Разборка cfe;
2) изменение нескольких файлов;
3) сборка нового cfe.

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

2. Еще одна задача - получение расширения из Хранилища в пользовательском режиме, для обновления тестовых баз из интерфейса, без привлечения программистов. При реализации пришлось разбираться с форматом данных в хранилище и 1С-ными методами работы с двоичными данными извлекать из полученных данных файлы конфигурации. И уже из них собирать cfe-файл (опять через v8unpack). В процессе "ковыряния в байтах", подумал что и сборку cfe-файла вполне можно сделать силами 1С.

В итоге, написал с нуля сначала распаковку, руководствуясь описанием формата от Андрея Овсянкина и собственными исследованиями, а затем и сборку. Терминология в коде "блок", "документ", "заголовок" и  т.д. - из описания формата.

Inflate/Deflate реализованы методом, предложенным SerVer1C, с использованием объектов для работы с Zip-файлами.

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

 

Как называется?

По аналогии с референсной программой, несколько сместив акцент на запаковку, решил окрестить свою разработку "YellowPacker". Ни у кого нет патента на это название? Вот и хорошо.

 

 

Что может?

Извлекает файлы из конфигурации/расширения/обработки/отчета (cf, cfe, epf, erf) в указанный каталог:

  • в v8unpack стиле (на каждый файл конфигурации создается пара файлов .header + .data) - режим "Без распаковки (v8unpack style)" - аналог ключа "-U[NPACK]";
  • в сыром виде - режим "Без распаковки" (файлы конфигурации записываются без доп.расширений, как есть; их атрибуты - в свойствах файла) - нет ключа-аналога;
  • с Inflate-ом и распаковкой вложенных контейнеров - режим "С распаковкой" - аналог ключа "-P[ARSE]".

Собирает из файлов в каталоге конфигурацию/расширение/обработку/отчет:

  • из файлов в v8unpack стиле - аналог ключа "-PA[CK]";
  • из файлов в сыром виде - нет ключа-аналога;
  • из файлов распакованных контейнеров - аналог ключа "-B[UILD]".

При выполнении сборки все параметры и версия контейнера определяются автоматически по составу и содержимому файлов в исходном каталоге.

Работает с конфигурациями как в "старом" (до 8.3.16, с 32-битной адресацией), так и в "новом" (с 8.3.16, с 64-битной адресацией) форматах.

Может работать в клиентском или серверном контексте, по выбору. Кроссплатформенно.

Работает на платформе 1С:Предприятие начиная с версии 8.3.10. Протестировано на 8.3.16, 8.3.18, 8.3.19. Конфигурация значения не имеет.

 

Результат сравнения исходной и пересобранной конфигурации расширения

 

Чего не умеет?

Из функций, присущих v8unpack, не реализован следующий функционал:

  • нет отдельно Inflate/Deflate извлеченных файлов из каталога - ключи "-I[NFLATE]" и "-D[EFLATE]"
  • нет вывода списка файлов - ключ "-LISTFILES|-LF"
  • нет работы по списку файлов - ключ "-L[IST]" (UPD 28.08.22 - теперь есть распаковка по списку)

 

А скорость?

Когда я вопрошал "а есть ли готовое решение на 1С-языке?", коллеги в комментариях высказывали сомнение что на 1С может работать с приемлемой скоростью. К моему удивлению, оказалось ничуть не медленнее, чем работает v8unpack. На самом деле, даже чуточку быстрее. Возможно это просто разброс или погрешность в замерах. Проверял на конфигурации "Управление холдингом" (660Мб) в режимах "Без распаковки (v8unpack style)" и "С распаковкой".

Узким местом являются дисковые операции - они и определяют время работы. По замеру производительности в Конфигураторе хорошо видно, что запись на диск занимает 80% всего времени. Разборку можно ускорить примерно вдвое (по отношению к v8unpack-style), если не записывать файлы атрибутов (.header) - это режим "Без распаковки" в моей обработке.

При извлечении файлов в режиме "С распаковкой" (с Inflate-ом) больше всего времени занимает ЧтениеZip.Извлечь() с записью файла на диск.

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

 

Перспективы?

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


Ссылки есть?

По ходу поисков готового решения собрал ссылки на публикации и инструменты схожей тематики:

Описание формата файлов конфигурации (CF, EPF, ERF) - Андрей Овсянкин (Evil Beaver)

Уточнение по формату 8.3.16 - Сергей Рудаков (fishca)

V8Unpack 2.0 - brix8x (github

В8АнПак - onepack - Новый распаковщик конфигураций - SerVer1C

Сжатие/Распаковка данных по алгоритму Deflate встроенными (!) средствами платформы 1С - SerVer1C

Python V8Unpack от Егор Иванов (Infactum)

Уменьшаем трафик: HTTP запрос со сжатием GZIP средствами 1С. На примере выгрузки файлов на Яндекс-диск - Дионисий Милославский (uno-c)

saby v8unpack - Михаил Разговоров (Businka76)

Распаковка CF на Lua - Борис Илов (ilov_boris)

Компонент для чтения CF-формата. Описание CF-формата - Сергей Карташев (Elisy)

Архиваторный плагин Total Commander для работы с файлами cf, epf, erf, cfu, cfe, hbk как с архивами - Валерий Агеев (awa)

Быстрая распаковка CF - Magister

V8Reader (с расширенным анализом форм) Upd. - Андрей Д. (bambr1975)

Распаковщик / упаковщик файлов - ZhokhovM

Плагин TotalCommander-а просмотра файлов 1C v8 - Михаил Усков (MMF)

[x1c.ru] 1CDBin: Работа с файлами *.1CD на низком уровне средствами языка 1С от Николай Гусев (GusevNA)

DT:Менеджер 8.1 (Распаковка/упаковка *.DT файлов. Быстрый экспорт CF) - Сергей Боровик (BorovikSV)

Работа с хранилищем конфигурации из режима 1С: Предприятие минуя конфигуратор - MaxxG

Хотите извращений? Их есть у меня! - прототип реализации распаковки на 1С от Валерия Агеева

 

А еще что-нибудь интересненькое?

Другие публикации:

Водопад из Техжурнала 1С

Автономный сервер. Утилита управления

Автономный сервер. Новый вариант сервера

GitSync 3.0. Шпаргалка по использованию

Массовое изменение режима поддержки объектов конфигурации

Загрузка-выгрузка файлов по RDP с докачкой

 

UPD 23.08.22

Файл в публикации обновлен. Устранена ошибка "Тип контейнера для сборки не определен" при сборке вложенных контейнеров.

 

UPD 28.08.22

Файл в публикации обновлен. Устранены недоработки и найденные ошибки. Добавлено извлечение файлов по списку.

 

UPD 03.09.22

Файл в публикации обновлен. Доработан пересчет хеш-сумм файлов расширений при сборке.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    175209    973    403    

932

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    16748    113    55    

116

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    18117    49    19    

81

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    28269    97    48    

141

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    12406    49    33    

70

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 руб.

29.06.2022    12866    105    4    

138

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18389    7    32    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Артано 797 22.08.22 09:00 Сейчас в теме
Спасибо, товарищ! И за труд и за сбор информации в одно место.
Xershi; akR00b; +2 Ответить
2. Steelvan 307 22.08.22 11:05 Сейчас в теме
На днях скачал "Распаковщик / упаковщик файлов - ZhokhovM" за 6 см.
И сегодня тоже бы скачал ту за 6, а не эту за 5.

Почему ?
Названия на русском больше люблю.
dvsidelnikov; amd1986; +2 5 Ответить
5. VKislitsin 1023 22.08.22 11:31 Сейчас в теме
(2)
Названия на русском больше люблю

Игорь, я ожидал вашего комментария. И меня бы расстроило, если бы вы не отметились здесь. Кроме того, я бы удивился, если бы никто не написал здесь про русский язык. Еще можно найти у меня ошибки в пунктуации, и, полагаю просто опечатки.

Что касается цены... Тут ни коим образом не конкуренция. Я думал какую сумму установить - то ли 10, то ли 5 СМ. Работы тут много, гораздо больше чем на 10СМ. Но делалась она "не корысти ради", а для решения собственных задач. Полагаю, кому нужно, скачает и за 10 и за 20. А кому не надо - и за 1 не скачает. Поставил 5, просто чтобы не жадничать.

На самом деле, моя публикация появилась именно благодаря Максиму (ZhokhovM). Моя разработка лежала "в столе" с прошлогоднего Ноября, когда я похвастался что сделал её. Но довести её до публикабельного состояния всё не было ни сил, ни времени. И Максим меня периодически пинал в ЛС вопросами "когда же?". В итоге, не дождавшись, написал свой вариант. Но сделал только распаковку. Сейчас выдалась пара дней и я довел свою разработку до публикации. Лучше поздно, чем никогда, как говорится. У Максима в его разработке больше разных форматов обрабатывается. Так что, если она вам подходит, не качайте мою. Я не огорчусь.
Xershi; Santa1; dvsidelnikov; LostMicos; ipoluhin; pavlov_dv; ardn; ixijixi; SeiOkami; Somebody1; mrChOP93; +11 Ответить
20. Eremkin 31.08.22 20:48 Сейчас в теме
(5)В конце добавить
- Хейтеры, люблю вас (с)
3. artbear 1566 22.08.22 11:11 Сейчас в теме
(0)
В планах - портировать на OScript в виде библиотеки. Надеюсь что нужные методы поддерживаются движком.


если бы сразу делал на 1скрипте, было бы легче и быстрее ИМХО.
4. nixel 1441 22.08.22 11:22 Сейчас в теме
(3) на оскрипте уже библиотека есть :) правда через dll
6. VKislitsin 1023 22.08.22 11:33 Сейчас в теме
(3)
если бы сразу делал на 1скрипте

Делалось под решение собственных задач. Здесь - просто выделено в отдельное решение и отброшено всё "лишнее". А решение было на 1С.
7. Infactum 318 22.08.22 11:52 Сейчас в теме
А мое решение, где все нужные алгоритмы элементарно на питоне описаны, не смотрели что ли?)
8. VKislitsin 1023 22.08.22 11:55 Сейчас в теме
(7) Я извиняюсь, если ссылку не добавил. Видимо, просто потерял. Сейчас поправлю дело.
В алгоритмы ни в какие не смотрел. Просто написал сам, по описанию формата от Андрея Овсянкина.

PS. Коллеги, если еще не упомянул чьи-то публикации на тему работы с внутренними файлами 1С, пишите, дополню список.
9. ktb 634 22.08.22 11:59 Сейчас в теме
В оскрипт, кстати, не обязательно использовать ЧтениеZIP, т.к. есть библиотека deflator.
10. VKislitsin 1023 22.08.22 12:01 Сейчас в теме
(9)
не обязательно использовать ЧтениеZIP, т.к. есть библиотека deflato

Спасибо за уточнение. Надеялся что есть нормальный способ, без извращений.
11. JohnyDeath 302 26.08.22 11:40 Сейчас в теме
Я что-то не понял почему нельзя было решить исходную задачу с помощью штатной выгрузки-загрузки в файлы?
12. VKislitsin 1023 26.08.22 12:04 Сейчас в теме
(11) Евгений, наконец-то появился комментарий с посылом что я занимаюсь фигней :)

На самом деле в статье я сильно упростил пример для чего это понадобилось. По крайней мере, 1-й (там, кстати, написано "в общем виде, весьма упрощенно"). На деле, 1-й и 2-й пример - это одна и та же задача у меня. Конфигурация расширения извлекается из хранилища (тоже исключительно кодом 1С) и из неё делается несколько разных cfe-шников.
На базе этого решения есть еще обновление расширений из хранилища в пользовательском режиме. Тоже всё на чистом 1С.


И, давайте я еще 3-ю причину приведу, если требуется более весомое обоснование: мне было просто интересно сделать это.
Прикрепленные файлы:
Vasvas05; JohnyDeath; +2 Ответить
13. JohnyDeath 302 26.08.22 12:11 Сейчас в теме
(12) я не говорил про "фигню" )
Наоборот всегда плюсую энтузиастов-ковыряторов!

Но я так и не понял почему нельзя было выгрузить всё в xml, сделать нужные правки и загрузить обратно с помощью конфигуратора или автономного сервера.
1. "Конфигурация извлекается из хранилища" - ок, это понятно и это уже у вас было. Никак к текущему инструменту не относится.
2. Далее выгружаем cfe в xml
3. Делаем правки
4. Загружаем обратно и получаем новую cfe

так? п.2 и п.4 - это ж штатное.
Или я что-то всё равно не понял в первоначальной задаче?
14. VKislitsin 1023 26.08.22 12:23 Сейчас в теме
(13)
"Конфигурация извлекается из хранилища" - ок, это понятно и это уже у вас было. Никак к текущему инструменту не относится.


Я наверное слишком кратко поясняю...

Конфигурация при извлечении из храна не представляет собой нормальный CF или CFE. Его еще нужно собрать из того, что вытащилось. Это отдельная тема для публикации о формате хранилища, полагаю.

Результатом извлечения из храна, после определенных шаманских действий над двоичными данными, является как раз набор файлов, которые извлекают все распаковщики из конфигурации, без инфлейта. В терминологии v8unpack - это файлы .data. Файлы .header при этом приходилось генерить самостоятельно.

Далее, чтобы выгрузить это в XML, нужно из них сначала собрать конфигурацию. Применяя внешний инструмент (тот же v8unpack). После выгрузки и изменения - еще раз собрать. Теперь из XML-й. Для операций с XML нужно запускать в пакетном режиме конфигуратор, что тоже не очень-то быстро.
Т.е. цепочка такая - 1С вытаскивает нечто из храна - 1С разбирает это нечто на файлы .data и генерит файлы .header - вызываем v8unpack чтобы собрать cfe. Вызываем конфигуратор чтобы разложить его на XML - 1С меняет что-то в XML - вызываем конфигуратор чтобы собрать cfe из XML.

Я пошел более коротким путем. Полученные .data-файлы распаковываю, меняю что нужно и из них сразу собираю нужную конфигурацию. Как я написал, сначала делал это с помощью v8unpack, но потом стало интересно собрать их исключительно 1С-ным кодом, раз уж всё равно мне приходится оперировать с двоичными данными.
15. JohnyDeath 302 26.08.22 12:25 Сейчас в теме
(14) теперь кажется понял. Т.к. вы извлекаете из хранилища своим способом, то на выходе получаете не чистый cf.
Тогда вопрос почему решили извлекать из хранилища не штатными способами? )
16. VKislitsin 1023 26.08.22 12:37 Сейчас в теме
(15)
почему решили извлекать из хранилища не штатными способами?


А что подразумевается под штатным? Конфигуратор в пакетном режиме? Долго. Трудно контролируемо. Не всё возможно. Например, список версий читается только через отчет по версиям - метки не получить.

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

Сейчас я могу не только получать что-то из храна (в том числе список версий с метками и/или любыми доступными отборами), но и помещать туда что-то, создавать пользователей, менять их права, отменять захваты, смотреть из одного окна разные хранилища на разных версиях Платформы и т.д.
17. VKislitsin 1023 26.08.22 13:03 Сейчас в теме
(15)
вы извлекаете из хранилища своим способом, то на выходе получаете не чистый cf

Извлечение из храна "своим методом" + сборка (либо с помощь v8unpack, либо инструментом из этой публикации) как раз дает чистый cf/cfe.
28. ktb 634 13.09.24 07:47 Сейчас в теме
(14) А можно где-то увидеть ваш "нештатный" способ извлечения из хранилища?
29. VKislitsin 1023 13.09.24 12:45 Сейчас в теме
(28) я уже и забыл что обещал что-то опубликовать. Мне всегда интересно ковырять что-то, а доводить до публикабельного вида и описывать неинтересно и напряжно :)
Постараюсь в ближайшее время расширение для обновления расширений из храна в пользовательском режиме опубликовать (скриншот выше приводил).
18. German 413 30.08.22 12:25 Сейчас в теме
19. VKislitsin 1023 30.08.22 12:27 Сейчас в теме
(18)
Вроде все это было вот тут

Герман, я в (5) расписывал историю что где было.
На самом деле, моя публикация появилась именно благодаря Максиму (ZhokhovM). Моя разработка лежала "в столе" с прошлогоднего Ноября, когда я похвастался что сделал её. Но довести её до публикабельного состояния всё не было ни сил, ни времени. И Максим меня периодически пинал в ЛС вопросами "когда же?". В итоге, не дождавшись, написал свой вариант. Но сделал только распаковку. Сейчас выдалась пара дней и я довел свою разработку до публикации. Лучше поздно, чем никогда, как говорится. У Максима в его разработке больше разных форматов обрабатывается.

Да и приведенная вами ссылка на вариант Максима есть в моей публикации.
21. AlexWhite 194 03.11.22 15:26 Сейчас в теме
Если я правильно понимаю, распаковщик распаковывает cf во множество папок и файлов с наименованиями из GUID объектов вместо мнемоничной структуры папок и файлов, похожих на дерево конфигурации в конфигураторе?
https://infostart.ru/public/1691321/ из вашей была сделана?

Если это так, могу ли я обратиться за коммерческой версией обработки, которая:
1) Разбирает cf на папки и файлы в мнемоничную структуру папок и файлов, вида:
\Документы\АвансовыйОтчет\МодульОбъекта.bsl
\Документы\АвансовыйОтчет\ФормаЭлемента\МодульФормы.bsl
...
2) При разборке разбирает отдельно на двоичные файлы (таблицы, картинки, схемы компановки данных и пр.) и текстовые объекты (модули - txt или bsl)?
22. VKislitsin 1023 03.11.22 19:39 Сейчас в теме
(21)
Если я правильно понимаю, распаковщик распаковывает cf во множество папок и файлов с наименованиями из GUID объектов вместо мнемоничной структуры папок и файлов, похожих на дерево конфигурации в конфигураторе?

Да, имена файлов и каталогов имеют вид GUID-ов, а не человекочитаемых имен.

https://infostart.ru/public/1691321/ из вашей была сделана?

Не совсем. Автор этой публикации делал свою разработку самостоятельно, не дождавшись от меня анонсированной публикации. Позже, возможно, какие-то решения/алгоритмы были пересмотрены/доработаны по образцу моей.

Если это так, могу ли я обратиться за коммерческой версией обработки

С этим лучше в личку.

1) Разбирает cf на папки и файлы в мнемоничную структуру папок и файлов, вида:
\Документы\АвансовыйОтчет\МодульОбъекта.bsl
\Документы\АвансовыйОтчет\ФормаЭлемента\МодульФормы.bsl

Частично этот функционал уже есть (но не опубликован): чтение в оглавление имен объектов и определение их типов объектов (т.е. имена каталогов и файлов для файловой структуры). Построение дерева я не делал.

2) При разборке разбирает отдельно на двоичные файлы (таблицы, картинки, схемы компановки данных и пр.) и текстовые объекты (модули - txt или bsl)?

На самом деле, все файлы - текстовые. Просто это либо формат "скобкофайлов", либо программный код. В файлах управляемых форм описание формы в скобочном формате и программный код находятся в одном файле. Но в принципе, разделить его на отдельные - вполне возможно.
ZhokhovM; +1 Ответить
23. AlexWhite 194 03.11.22 19:48 Сейчас в теме
(22) сомневаюсь, что все файлы текстовые. Картинки? Схемы данных? Табличные документы? Запароленные модули?
В общем, я готов поучаствовать в финансировании доработок.
24. VKislitsin 1023 03.11.22 19:57 Сейчас в теме
(23)
Картинки? Схемы данных? Табличные документы? Запароленные модули?

Они в Base64 внутри текстовых скобкофайлов все лежат. Что-то из этого раскодируется в обычный XML, например схемы компоновки данных. Что-то в бинарники. Табличные документы - это чистый скобкофайл. Запароленные модули не ковырял.
25. Serg2000mr 769 03.05.23 07:50 Сейчас в теме
(0) Подскажите, что делать с распакованными скобко-файлами? ЗначениеИзСтрокиВнутр их не берет
26. VKislitsin 1023 03.05.23 12:35 Сейчас в теме
(25) Я тут даже затрудняюсь ответить.
У каждого могут быть свои цели и задачи для этой распаковки. Обычно, коллеги, которым нужна распаковка, знают что такое V8Unpack, какие результаты он выдает и для чего их можно применить.
Полагаю, когда кто-нибудь полностью разберется с внутренним 1С-ным форматом "скобкофайлов", опишет его и/или создаст транслятор в привычные XML, сообщество поставит ему памятник :)
27. Serg2000mr 769 03.05.23 12:57 Сейчас в теме
(26) Ну, когда-то и эти коллеги не знали, какие результаты выдает V8Unpack..🤔
Памятник - звучит заманчиво ))
30. Serg2000mr 769 28.12.24 13:47 Сейчас в теме
Отмечу, что особо оптимизацией скорости не занимался. Не исключаю, что-то можно еще что-то отыграть.


Ключи = "ИмяФайла, АдресАтрибутов, АдресСодержимого, РазмерАтрибутов, РазмерСодержимого, 
							|ВремяСоздания, ВремяИзменения, ХешСумма, ИмяОбъекта, ТипОбъекта, ПолноеИмяФайла";

Для каждого ЭлементОглавления Из МассивЭлементов Цикл
    <...>
    //СтрокаОглавления = НовыйСтруктураОглавления();
    СтрокаОглавления = Новый Структура(Ключи);


Для ERP дает оптимизацию 1 сек, что для общей длины процесса 5-10 сек довольно неплохо
31. VKislitsin 1023 28.12.24 14:00 Сейчас в теме
(30)
Для ERP дает оптимизацию 1 сек

Возможно. Хотя мне не очень понятно за счет чего - создание структуры "на месте" vs то же создание структуры внутри функции (в том же контексте клиент/сервер). Я бы отнес эту секунду на погрешность.
32. Serg2000mr 769 28.12.24 14:33 Сейчас в теме
(31) Там 100 тыс итераций в цикле и каждый раз инициализируется заполняется строка с ключами. Это не погрешность, попробуйте сами:

Ключи = "ИмяФайла, АдресАтрибутов, АдресСодержимого, РазмерАтрибутов, РазмерСодержимого, 
							|ВремяСоздания, ВремяИзменения, ХешСумма, ИмяОбъекта, ТипОбъекта, ПолноеИмяФайла";
	
ЗамерВремениНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для Cч = 1 По 100000 Цикл
	СтрокаОглавления = НовыйСтруктураОглавления();
КонецЦикла;
Сообщить("Время выполнения: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - ЗамерВремениНачало) /1000);
	
ЗамерВремениНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для Cч = 1 По 100000 Цикл
	СтрокаОглавления = Новый Структура(Ключи);
КонецЦикла;
Сообщить("Время выполнения: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - ЗамерВремениНачало) /1000);
	
ЗамерВремениНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для Cч = 1 По 100000 Цикл
	СтрокаОглавления = НовыйСтруктураОглавленияКлючи(Ключи);
КонецЦикла;
Сообщить("Время выполнения: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - ЗамерВремениНачало) /1000);
Показать


С отключенной отладкой разница меньше
VKislitsin; +1 Ответить
33. VKislitsin 1023 28.12.24 15:04 Сейчас в теме
(32)
Это не погрешность, попробуйте сами:

Я верю :)
У меня сомнения в другом - имеет ли смысл тут за секунду бороться. Но если для вас эта секунда важна - значит такой вариант вполне жизнеспособен. Вполне допускаю что еще на чём-нибудь можно отыграть немного.
36. Serg2000mr 769 28.12.24 15:12 Сейчас в теме
(33) Копейка рубль бережет :) Плюс еще немного знаний в копилку знаний.
39. Serg2000mr 769 29.12.24 17:00 Сейчас в теме
(33) А, понял почему вам секунда не важна. Общая "стоимость" распаковки - несколько минут. Мне важна была только часть чтения оглавления. А так - УстановитьФайлуВремяИзменения() 30% времени отнимает и из cf всем файлам одинаковое время устанавливает. Не уверен, что она вообще нужна.
34. Serg2000mr 769 28.12.24 15:06 Сейчас в теме
(31) Варианты
Для Cч = 1 По 100000 Цикл
		СтрокаОглавления = Новый Структура("ИмяФайла, АдресАтрибутов, АдресСодержимого, РазмерАтрибутов, РазмерСодержимого, ВремяСоздания, ВремяИзменения, ХешСумма, ИмяОбъекта, ТипОбъекта, ПолноеИмяФайла");
КонецЦикла;

Ключи = "ИмяФайла, АдресАтрибутов, АдресСодержимого, РазмерАтрибутов, РазмерСодержимого, ВремяСоздания, ВремяИзменения, ХешСумма, ИмяОбъекта, ТипОбъекта, ПолноеИмяФайла";
Для Cч = 1 По 100000 Цикл
	СтрокаОглавления = Новый Структура(Ключи);
КонецЦикла;
Показать


(самые быстрые) показали одинаковый результат, так что это для меня тоже открытие в оптимизации. Получается высокочастотное обращение к процедурам отъедает время. Ключи в одну строку быстрее, чем ключи в две строки.
35. VKislitsin 1023 28.12.24 15:11 Сейчас в теме
(34) Циклы, написанные в одну строку тоже быстрее работают.
Для сч = 1 По 100000 Цикл СтрокаОглавления = Новый Структура(Ключи) КонецЦикла;
37. Serg2000mr 769 28.12.24 15:13 Сейчас в теме
38. Serg2000mr 769 28.12.24 23:52 Сейчас в теме
В итоге ускорил в два раза при включенной отладке.

&НаКлиентеНаСервереБезКонтекста
Функция РазобратьОглавление(БуферОглавление, ПараметрыВерсии)
	
	Оглавление = Новый Массив;
	
	МассивЭлементов = БуферОглавление.Разделить(ПараметрыВерсии.РазделительОглавления);
	
	Ключи = "АдресАтрибутов, АдресСодержимого, ИмяФайла, РазмерАтрибутов, РазмерСодержимого, ВремяСоздания, ВремяИзменения, ХешСумма, ИмяОбъекта, ТипОбъекта, ПолноеИмяФайла";
	Смещение = ПараметрыВерсии.Смещение;
	
	Массив = Новый Массив;
	Для каждого Эл Из МассивЭлементов Цикл Если Эл.Размер > 0 Тогда Массив.Добавить(Эл); КонецЕсли; КонецЦикла;
	
	Если ПараметрыВерсии.РазмерПоляАдресации = 4 Тогда
		Для каждого ЭлементОглавления Из Массив Цикл
			АдресАтрибутов   = ЭлементОглавления.ПрочитатьЦелое32(0);
			АдресСодержимого = ЭлементОглавления.ПрочитатьЦелое32(8);
			
			СтрокаОглавления = Новый Структура(Ключи, АдресАтрибутов, АдресСодержимого);
			Оглавление.Добавить(СтрокаОглавления);
		КонецЦикла;
	ИначеЕсли ПараметрыВерсии.РазмерПоляАдресации = 8 Тогда
		Для каждого ЭлементОглавления Из Массив Цикл
			АдресАтрибутов   = ЭлементОглавления.ПрочитатьЦелое64(0) + Смещение;
			АдресСодержимого = ЭлементОглавления.ПрочитатьЦелое64(8) + Смещение;
			
			СтрокаОглавления = Новый Структура(Ключи, АдресАтрибутов, АдресСодержимого);
			Оглавление.Добавить(СтрокаОглавления);
		КонецЦикла;
	КонецЕсли;
	
	Возврат Оглавление;
	
КонецФункции
Показать


Ваша обработка крутая, просто мне нужен этот кусок кода быстрым, ну и спортивный интерес )
Оставьте свое сообщение