Логическое продолжение публикаций //infostart.ru/public/97194/ и //infostart.ru/public/69976/
вызванное обсуждением в комментариях (в частности, этим комментарием), с попыткой объединить в себя параллельное направление разработки, обозначенное в публикациях:
Декомпиляция и анализ форм с генерацией кода формы от MRAK
Сравнение объектов и форм метаданных (очередная декомпиляция и анализ форм) от alexer
Деструктивный анализ формы от asady
Декомпилятор форм от Sverkalov
И, наконец, их обобщенным и логичноструктурированным продолжением -
Декомпиляция элементов формы для 8.2 для обычных форм (не управляемых) от Istur - всем рекомендую (только ошибки исправить надо - письмо о них было написано - никакой реакции)
Для более тщательного анализа форм был использован материал, предложенный brix8x в этом комментарии, а также развитие этой идеи, предложенное tormozit в публикации //infostart.ru/public/57431/
Для придания "рюшечек" использовалась идея, предложенная Шепотом теней в публикации //infostart.ru/public/59581/
Ну, и, как обычно... использовалась программа V8Unpack от disa_da
Update от 15.02.2012:
Добавлена возможность анализа и сравнения внешних отчетов.
Измененные файлы выводятся в дерево сравнения окрашенными строками в зависимости от изменения размера сравниваемых файлов.
Учтены изменения в количестве видов метаданных, появившихся в конфигурации с версии платформы 8.2.14
Update от 04.03.2012:
Исправлена ошибка в алгоритме сравнения измененных файлов (касается изменений модулей форм)
Доработано сравнение элементов формы - изменения учитываются поэлементно - можно просмотреть значения изменений в свойствах.
Опционально добавлен "Hard" режим для вывода в дерево реквизитов, табличных частей и пр. (на хитрых конфигурациях обработка при разборе в "Hard" режиме может зависать - сообщайте название - буду исправлять)
Фильтр сравнения работает!!!
Update от 10.03.2012:
По просьбе pumbaE добавлен режим 3-way diff. Работает, вызывая внешнюю программу сравнения файлов, поддерживающую 3-х уровневое сравнение (из бесплатных - KDiff3 и SourceGear DiffMerge). Для корректной работы с кирилицей в именах файлов качайте последние версии.
На данный момент - сравнение только текстовое - причем для форм раскраской строк анализируются как изменения в модулях, так и изменения в диалогах - а на сравнение выводятся только файлы модулей. Обращайте внимание.
Update от 27.04.2012:
Исправлены ошибки
Специально для сравнения форм в проекте "Снегопат" - snegopat.ru по инициативе pumbaE добавлен новый режим выбора объекта "Режим ssf" - можно сравнить файлы форм снегопата.
В навигаторе файлов появилась колонка "Размер", с возможностью сортировки по ней (для определения наиболее "массивных" составляющих конфигурации).
Добавлено "кэширование" сформированных деревьев метаданных (при включенном "кэшировании" дерево файла конфигурации, которую уже хотя бы раз разбирали - будет построено из кэша).
Панель "Свойства" отделена от формы разбора форм - вызывается двойным щелчком по дереву элементов формы
В панели "Свойства" выводятся и свойства, и привязки, и обработчики событий элемента, причем в режиме сравнения - щелчок по строке различающихся действий выводит окно сравнения текстов-обработчиков.
На вкладке "Модуль" формы "Разбор элементов формы" - появилось табличное поле структурных различий процедур и функций модуля. Аналогично - двойным щелчком выводится окно сравнения их текстов.
Новая функция - "Декомпиляция изменений" - тестовый вариант.
Значительно увеличилась скорость разбора форм!!!!!
Кстати - для желающих сравнить и декомпилировать изменения двух произвольно выбранных форм можно воспользоваться режимом ssf, указав в качестве каталогов распаковки каталоги распакованных форм...
Update от 29.06.2012:
Добавлена новая функциональность - анализ и сравнение ролей и ограничений доступа
За основу формата вывода взята обработка Отчет по системе прав для 8.2 на СКД от Zigfridish
В качестве быстрых отборов при сравнении ролей можно отбирать объекты с измененными правами, объекты с измененными ограничениями доступа. Также обработка позволяет сравнивать изменения в шаблонах ролей и в ограничениях доступа.
Update от 19.08.2012:
Исправлены ошибки. Учтены некоторые пожелания пользователей.
В частности, при перемещении по дереву метаданных при открытом навигаторе файлов по умолчанию происходит позиционирование на файл выделенной строки. Также для возможности использовать режим ssf для анализа выгруженных платформой 8.3 бинарных файлов форм в процедуру выбора файла формы добавлен фильтр .form.
Update от 01.11.2012:
Исправлены ошибки.
Существенно доработан отчет «Декомпиляции изменений». Теперь он представляет собой готовую совокупность процедур, необходимых для программного формирования нужных изменений формы. Основой этого отчета является процедура МодифицироватьФормуПриОткрытии(). В качестве дополнения к основной, для сокращения выводимых строк и лучшей читаемости кода используется процедура "УстановитьПоложениеЭлемента(Элемент,Верх,Высота,Лево,Ширина)" (из обработки от Istur) – тоже будет выведена в отчет. Также в случае добавления на форму элементов типа «Переключатель» в отчет будет добавлена дополнительная процедура ИзменитьПорядокОбхода() – позволяет назначить для добавляемого переключателя корректный номер порядка обхода.
Теперь для программной модификации нужной формы в ее обработчик открытия нужно будет добавить процедуру МодифицироватьФормуПриОткрытии(). А саму эту процедуру (вместе с дополнительными процедурами, выведенными в отчете «Декомпиляция изменений») разместить в модуле с кодом вывода элементов формы или поместить в общем модуле.
Расширены возможности по корректной обработке свойства «Данные» элементов формы в отчете «Декомпиляция изменений».
Реализовано сравнение произвольно выбранных объектов (в контекстном меню дерева метаданных пункт «Добавить к сравнению»).
Обработка работает теперь только в режиме полного структурного разбора (то, что раньше называлось режимом разбора «Hard»). Оптимизирована работа этого режима. Режим «Light» больше не используется.
Структурное сравнение модулей – используется для сравнения всех модулей (включается в настройках).
В сравнении дерева метаданных теперь дополнительно анализируется изменение внутреннего представления структурных составляющих объектов – можно узнать изменения конкретного реквизита в объекте (пока что только во внутреннем представлении).
Добавлена настройка «Проверять обновления публикации». Использованы рекомендации Жолтокнижниг из этого комментария.
В отчете по ролям добавлено программное генерирование кнопок для управления уровнями группировки из публикации //infostart.ru/public/83915/ от mtv:)
Update от 21.11.2012:
Исправлена критичная ошибка произвольного сравнения ролей.
Update от 13.02.2013:
Исправлены ошибки.
Две новых фунциональности.
Первая функциональность - расширенный анализ управляемых форм. В панель свойств выводится список свойств элемента управляемой формы. Свойства анализируются во внутреннем представлении
Вторая функциональность - возможность вывода отчета по роли в режиме "дополнения" - в отчет выводятся не только заданные в файле роли права, но и права по умолчанию. (возможность пока тестовая)
Update от 25.01.2015
Долгожданное обновление)))))
Исправлены ошибки. Реализованы пожелания. Добавлена возможность корректной обработки объектов платформы 8.3.
В управляемых формах реализован разбор командного интерфейса.
Логика построения дерева обычных форм отвязана от идеи деструктивного анализа – иерархия элементов строится на основе внутреннего представления.
На этом этапе большой вклад в развитие был сделан pumbaE. В частности, его силами в V8Reader была добавлена возможность разбора обработок в структуру папок с исходниками, имеющими человекопонятные имена. Эта автоматизация была реализована в рамках проекта precommit, представляющего собой скрипт, который запускает этот разбор при каждом коммите в систему контроля версий Git. Также в рамках проекта diff1C он реализовал скрипт, запускающий V8Reader для сравнения выгруженных с помощью стандартной выгрузки 8.3 обычных форм и табличных документов в формате xml. Попробуйте, это очень удобно!
Еще хочется поблагодарить уважаемого awa за его бесценные исследования и artbear за тестирование функционала и конструктивные предложения.
Update от 29.01.2015
В макет V8Unpack помещена новая версия, собранная Сергеем Батановым aka baton_pk (ссылка на релиз https://build.batanov.me/job/v8unpack-win/label=mingw32/lastSuccessfulBuild/artifact/bin/Release/v8unpack.exe) Новая версия не требует дополнительных библиотек + прирост скорости распаковки по сравнению с версией V8Unpack2.0 порядка 20%.
Update от 18.02.2015
Исправлены ошибки.
В таблице структурного сравнения модулей изменена сортировка по изменениям - неизмененные строки выводятся в самом низу.
Реализована совместимость регулярок реквизитов и табличных частей с внутренним представлением 8.3.6 (в первом приближении - возможно, позже потребуются правки). В управляемой форме в число допустимых видов поля формы добавлен новый вид - Поле планировщика.
Update от 10.06.2015
Доработана совместимость регулярок с внутренним представлением 8.3.6.
Реализован программный интерфейс для открытия сравнения файлов из стороннего кода 1С – в модуле обработки экспортная процедура ОткрытьСравнение(ПутьФайла1,ПутьФайла2). Этот интерфейс позволяет использовать весь функционал проекта v8diff – можно сравнивать обработки, отчеты, конфигурации, файлы mxl, файлы форм и сериализованные в XML табличные документы, выгруженные платформой 8.3. Для всего остального будет открываться произвольное текстовое сравнение.
Добавлена обработка ключа запуска convert-mxl2txt для скрипта precommit.
// Пример строки запуска для precommit - "decompile;pathtocf;E:\ПутьКФайлуКоторыйНадоРазобратьНаИсходники;pathout;E:\ПутьКПапкеИсходников;convert-mxl2txt;shutdown"
В случае запуска скрипта precommit с ключом convert-mxl2txt для файлов табличных документов дополнительно создаются текстовые аналоги с постфиксом *_mxl.txt.
Используется новая версия V8Unpack (by baton_pk) – исправлены ошибки распаковки файлов form, ssf и cfu. Главное преимущество новой версии – возможность распаковки конфигураций большого объема (например ERP2.0, которую V8Unpack2.0 не распаковывает) без ущерба для производительности.
Мелкие доработки эргономики вывода сравнения временных файлов.
Update от 22.07.2016
1) Исправлена ошибка разбора ролей, возникающая при обнаружении неизвестных идентификаторов стандартных реквизитов
2) Исправлен алгоритм построения дерева элементов обычной формы в случае, если у главной панели формы (ЭтаФорма.Панель) есть несколько страниц.
3) Гиперссылка, декомпилирующая обычную форму целиком, теперь формирует полноценный текст декомпиляции (раньше по этой гиперссылке формировался файл в режиме «бутафории»)
4) Добавлена настройка использования внешней программы для сравнения модулей и их методов
5) В режиме анализа файла конфигурации, содержащего конфигурацию поставщика, появилась возможность по нажатию отдельной кнопки распаковать файл конфигурации поставщика и запустить сравнение с исходной конфигурацией
6) В рамках проекта precommit1c исправлены ошибки формирования соответствия распакованных файлов для их последующей сборки в полноценный 1С-файл силами скрипта precommit.
7) Также в рамках проекта precommit1c для распакованных файлов формируется отдельный файл maps.txt, позволяющий найти в исходниках управляемых форм номера строк, которые соответствуют началу и концу модуля управляемой формы
8) Кроме этого, в рамках проекта precommit1c при распаковке макетов теперь для каждого из них создаются файлы с соответствующим расширением:
- Компоновка – xml,
- Табличный документ – mxl,
- Текстовый документ – txt,
- Макет оформления компоновки данных – xml,
- Графическая схема – grs,
- Географическая схема – geo,
- ActiveDocument – bin,
- ДвоичныеДанные – bin (исключение составляют макеты с префиксом ПФ_, для которых создаются файлы с расширением, соответствующим второй части префикса – например, ПФ_DOC_* - будет создан файл с расширение doc и т.д) ,
- HTMLДокумент – html (вложения html будут распакованы в папку ИмяМакета_files рядом с html – естественно, сам html при этом их видеть не будет, но главное, что вложения тоже распаковываются).
9) Ну и самая главная доработка в рамках проекта precommit1c – это добавление ко всем модулям отчетов и обработок расширения bsl, наличие которого позволит эффективнее осваивать 1С-разработчикам инфраструктуру веб-сервисов GitHub и проще применять инструменты, заточенные под формат исходных кодов 1С, будь-то анализаторы или подсветка синтаксиса.