V8Reader (с расширенным анализом форм) Upd.
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Логическое продолжение публикаций //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С, будь-то анализаторы или подсветка синтаксиса.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13822 124 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83401 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285956 1608 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16938 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44283 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 77102 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3813 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28809 103 46
{Форма.НавигаторПоФайлам.Форма(41)}: Поле объекта не обнаружено (ИндексКартинки)
ОформлениеСтроки.Ячейки.Имя.ИндексКартинки=ДанныеСтроки.ИндексКартинки;
Извините, видно вспышка газа на Венере и в результате преломления лучей солнца, мне ударило в голову и я получил такую ошибку...
Если серьезно, еще несколько раз попробовал все работает четко.
{Форма.ФормаДляРолей.Форма(951)}" Ошибка при вызове метода контекста (Индекс)
ИндексТекущейСтроки=ТабличноеПолеСравненияРЛС.Индекс(ТекущаяСтрока);
по причине:
Несоответствие типов (параметр номер '1')PS: И можно, что нибудь с реквизитным составом сделать, а то СтандартныйРеквизит, тяжело понимается.
Сравнениефайлов.СпособСравнения=СпособСравненияФайлов.ТекстовыйДокумент;
При попытке показать различие в табличном документе, он вызывает исключение - а при вызове исключения там ищется файл text (как для модулей объектов). Просто не предусмотрел потребность в сравнении табличных документов. Макеты-то сами из дерева объектов можно вызвать по-одиночке. Согласен, надо доработать. Вот, по поводу фильтра Вы мне тоже сказали, глюк с привязками показали - отдышусь - и все исправлю.
Сравнение обновлений может быть полезно для принятия решения о перепрыгивании через версию.
Сравнение обработок доступно через стандартный диалог сравнения файлов: Меню "Файл - Сравнить файлы"
Поясните, пожалуйста еще один момент:
На данный момент в стандартном функционале доступны следующие действия:
- открыть старую форму
- открыть новую форму
- вывести различия между формами в табличный документ (немного неудобно, но задачу поэлементного сравнения худо бедно решает)
Какая именно возможность отсутствует в стандартном функционале?
1) Бухгалтер открывает проводки документа любимой кнопкой "ДтКт".
2) Жмакает правой кнопкой по полю с проводками, выбирает "вывести список", получает печатную форму, и сохраняет ее на комп в формате по умолчанию MXL (файл1.mxl).
3) Перепроводит документ, заходит в проводки и также как в пунке 2 создает файл файл2.mxl
4) Меню "Файл - Сравнить файлы", выбирает файл1.mxl и файл2.mxl
5) Видит что изменилось.
То же самое касается "обороток", когда "что-то изменилось, а что не пойму". По крайней мере у меня бухгалтера очень ценят данную возможность сравнивать файлы.
Мне было важно узнать, какое преимущество она имеет, как её можно использовать в работе, вот и все.
Спасибо!
Или же это уже есть в этой обработке?
Дабы не совсем offtop :) Автору МЕГАРеспект! Я давно искал алгоритм + механизм разбора и формирования дерева конфигурации из файлов после V8Unpack.
Есть идея реализовать свой собственный (на базе 1С) SVN-чик с функциями автоматического документирования на основе комментариев. Шаблоны для документирования уже готовы и успешно используются в кодировании, а вот с разбором программного кода сервером при добавлении новой версии в хранилище - затык. Конфигуратор может выгружать только всю конфигурацию в текстовые файлы, и не может выгружать отдельные объекты из конфигурации или внешние обработки или отчеты. А из поставленной задачи это основное.
Еще раз - автору МЕГАРеспект.
Функция ЛксСтрокаВнутрВХМЛТело(вхСтрока, выхХМЛТело = Неопределено) Экспортиз-за этого при попытке анализа формы возникает ошибка
{Форма.РазборФормы.Форма(1904,9)}: Процедура или функция с указанным именем уже определена (ЛксСтрокаВнутрВХМЛТело)
Функция <<?>>ЛксСтрокаВнутрВХМЛТело(вхСтрока) (Проверка: Толстый клиент (обычное приложение))Думается мне, что при заимствовании чужого кода, префиксы все-же лучше менять.
{Форма.Форма.Форма(1512)}: Индекс находится за границами массива
СтрокаСравнения=ДеревоМетаданных.Строки[0];
а перед этим надпись результат распаковки не является результатом распаковки файла конфигурации
Структуру файлов каталога распаковки посмотрите, пожалуйста. Обычно, при сортировке файлов по имени там в самом низу должно быть три файла - root, version, versions
V8Unpack.exe -parse [ПолныйПутьКФайлуРаспаковкиВКавычках] [ПолныйПутьККаталогуРаспаковкиВКавычках]
В каталоге с программой V8Unpack.exe и zlib1.dll
Получится что-нибудь?
<< от имени всей медицины ничего Вам сказать не могу. Но V8Unpack.exe - это не совсем мое. Хотелось бы думать, что выход найдется. Наверное, об этом надо написать в комментариях к соответствующей публикации.
>>
автору спасибо за труд.
НО! архитектура решения жестко завязана на V8Unpack, что не даёт легкого простора для перевода на другие решения (в свободном доступе есть как минимум ещё 2 решения для получения аналогичного результата)
P.S. автору V8Unpack писать бесполезно разработка не поддерживается и передана сообществу.
P.P.S.если у кого не распаковывается V8Unpack-ом приму на изучение другими инструменами.
Скажите, пожалуйста, знакомились ли вы с методом динамического добавления элементов формы от TormozIT?
Как вы думаете, возможно ли в вашей обработке написать функцию, которая по информации о сравнении форм - сгенерирует код для динамического добавления элементов на форму?
При попытке показать различие в табличном документе, он вызывает исключение - а при вызове исключения там ищется файл text (как для модулей объектов). Просто не предусмотрел потребность в сравнении табличных документов. Макеты-то сами из дерева объектов можно вызвать по-одиночке. Согласен, надо доработать. Вот, по поводу фильтра Вы мне тоже сказали, глюк с привязками показали - отдышусь - и все исправлю.
Особенно будет прикольно для клюшечников - посмотреть визуально различия в mxl файле...
Это выдала машина. В чем может быть причина? Пытался просмотреть свою конфигурацию УПП, но измененную
Или хотя бы как-то выделять в комментариях - чтобы ориентироваться, когда было изменение функционала (доработка), а когда - смена описания на главной странице.
(107) alexer, Ваш кропотливый и качественный труд действительно произвел на меня сильное впечатление. Большое Вам спасибо за обозначенные ориентиры.
{Форма.Форма.Форма(1720)}: Значение не является значением объектного типа (Имя)
Поз=Найти(Ячейка.Имя,"C");
Дерево не строится. Если нажать вручную Перестроить, сравнение появляется, но почему то говорит различаются только РС и Документы хотя при типовом сравнении различается вся конфа.
Все очень подробно и с картинками :)
Файлы отчетов и обработок отлично сравнивает типовая "Сравнить файлы"...
А вот за возможность сравнить *.cf и *.cfu ОГРОМНОЕ СПАСИБО!
Раньше приходилось держать одну чистую конфу и на нее накатывать обновление чтобы получить cf нового релиза, а тут опана и сразу сравнивай...
Мог бы еще пару раз плюсанул.
Пробовала сравнивать, но сами правила обмена через данную обработку открываются в неизвестном формате. Или я что-то не так сделала?
Исправлена ошибка в алгоритме сравнения измененных файлов (касается изменений модулей форм).
Доработано сравнение элементов формы - изменения учитываются поэлементно - можно просмотреть значения изменений в свойствах.
Расширены возможности фильтра сравнения.
Опционально добавлен "Hard" режим для вывода в дерево реквизитов, табличных частей и пр. (на хитрых конфигурациях обработка при разборе в "Hard" режиме может зависать - сообщайте название - буду исправлять)
На данный момент - сравнение только текстовое - причем для форм раскраской строк анализируются как изменения в модулях, так и изменения в диалогах - а на сравнение выводятся только файлы модулей. Обращайте внимание.
Но позволяет, насколько я понял, только просматривать/сравнивать метаданные конфигурации. Возможность изменения метаданных вручную/по произвольному алгоритму и последующей запаковки обратно в .cf отсутствует.
Ну вот например:
УТП для Украины, конфигурация поставщика.
V8Unpack: 59 секунд
Мой парсер: 18 секунд.
Как вам?
Файлик прикрепляю.
Программе можно передать параметром файл .cf, она его распакует перед открытием формы.
Скорость распаковки, правда показалось немного нестабильной и есть проблемы при распаковке форм.
Например, при сравнении результатов распаковки V8Reader-а и Вашей программмы, видны такие проблемы:
Причем они далеко не единичны:
На счет
Главное - начать...
По поводу проблем - можете дать тестовый пример?
А на счет
Главное - начать...
Тут мне кажется, что просто не было нормального применения распаковке - соответственно, зачем делать?
Теперь вот есть ваша разработка, уже практический смысл появился :)
Вот поправил распаковку.
Также по кнопке "Analyze" сделал вывод и составных объектов тоже (можно развернуть, например форму - внутри будет form и module).
18 секунд на УТП - это второй запуск, когда сам .cf уже закеширован Windows.
У меня на ноуте сейчас получается, что ограничивающим фактором является скорость дисковой подсистемы, а не процессора.
А про 18 секунд на УТ я не утверждал, т.к. у меня её просто нет. Ну и скорость Вашего компьютера мне тоже неизвестна.
---
Вобщем, сравните с V8Unpack.
"{Форма.ФормаДляРолей.Форма(153)}: Ошибка при вызове метода контекста (НайтиСтроки)
МассивНеопределенныхСтрокВторой = ТаблицаПрав.НайтиСтроки(СтруктураОтбора);
по причине:
Неверное имя колонки"
- после выполнения поцедуры ДостроитьТаблицуДаннымиВторойРоли() в ТаблицаПрав добавлены новые колонки с постфиксом "1", но с пустыми значениями, а после выполнения следующего кода колонки с постфиксом "1" удаляются:
ДостроитьТаблицуДаннымиВторойРоли();
ИндексКолонки = ТаблицаПрав.Колонки.Количество()-1;
Пока ИндексКолонки <> 0 Цикл
Итог = Неопределено;
Для каждого Нр Из ТаблицаПрав Цикл
Если Нр[ИндексКолонки]<>Неопределено Тогда
Итог = Истина;
КонецЕсли;
КонецЦикла;
Если Итог = Неопределено И ТаблицаПрав.Колонки[ИндексКолонки].Имя<>"Родитель" и ТаблицаПрав.Колонки[ИндексКолонки].Имя<>"УИ" Тогда
ТаблицаПрав.Колонки.Удалить(ИндексКолонки);
КонецЕсли;
ИндексКолонки = ИндексКолонки-1;
КонецЦикла; Показатьсоответственно, ошибка потом и вылазит при попытке поиска по несуществующей колонке.
Объект:
{1,
{6,
{0,
{0,36,87090b31-2cd0-4b45-8b24-efdb2383b1a2},"ПолныеПрава",
{1,"ru","Полные права"},""},0,0,1},0}
Права:
{8,
{0},
{0},1,1,1,4294967295}
P.S. Моя обработка имеет крайне отдаленное отношение к задаче декомпиляции форм - так что автоматизированное получение этих строк - это не ко мне...
Задачи анализа и сравнения - это да, мое. А всяческая автоматизация получения кода чего либо... приходится довольствоваться заимствованным...:)
можно попросить вас сделать консольный вариант, хотелось бы на реальных задачах попробовать - встроить в v8Reader 2 варианта распаковки?
Правильно ли я понимаю, что у вас используется in-memory технология, и если вдруг при распаковке большой конфигурации зайдем в своп, то скорость уменьшиться значительно?
Второй раз - ну, это я просто тестировал собвственно распаковку, потому запускал несколько раз. А потом уже проводил сравнение - соответственно, в кэше данные остались.
Сейчас память используется далеко не оптимально. Это ведь черновик :)
На данный момент программа держит в памяти упакованные данные и распакованные данные одновременно, до момента закрытия программы. Для самой распаковки это не нужно - просто так было быстрее сделать.
В нормальном варианте память будет использоваться не сильно - думаю, не более размера .cf, умноженного на два.
Хотелось бы, конечно иметь альтернативу для v8unpack.
Специально для сравнения форм в проекте "Снегопат" - snegopat.ru по инициативе pumbaE добавлен новый режим выбора объекта "Режим ssf" - можно сравнить файлы форм снегопата.
В навигаторе файлов появилась колонка "Размер", с возможностью сортировки по ней (для определения наиболее "массивных" составляющих конфигурации).
Добавлено "кэширование" сформированных деревьев метаданных (при включенном "кэшировании" дерево файла конфигурации, которую уже хотя бы раз разбирали - будет построено из кэша).
Панель "Свойства" отделена от формы "Разбор элементов форм" - вызывается двойным щелчком по дереву элементов формы
В панели "Свойства" выводятся и свойства, и привязки, и обработчики событий элемента, причем в режиме сравнения - щелчок по строке различающихся действий выводит окно сравнения текстов-обработчиков.
На вкладке "Модуль" формы "Разбор элементов формы" - появилось табличное поле структурных различий процедур и функций модуля. Аналогично - двойным щелчком выводится окно сравнения их текстов.
Новая функция - "Декомпиляция изменений" - тестовый вариант.
Значительно увеличилась скорость разбора форм!!!!!
Термин "Декомпиляция форм" был придуман не мной, как и сам алгоритм декомпиляции форм вообще... Источники использованного алгоритма - в описании указаны. Могу, специально для Вас их продублировать (, , ).
Функция непосредственно самой декомпиляции (в виде получения программного кода изменений и в виде визуализации анализируемой формы)используется в обработке только как бонус, - меня, все-таки, больше интересовал именно АНАЛИЗ и СРАВНЕНИЕ элементов, реквизитов и модулей форм - а для анализа и сравнения использовалась идея деструктивного анализа форм ( , ) и идея получения списка реквизитов форм и определения ее основного реквизита ().
Если Вам необходимо ПРОАНАЛИЗИРОВАТЬ изменение состава и свойств элементов двух форм, - то текст, сформированный функцией "Декомпилировать изменения" является неким "отчетом о сравнении", которому, при желании, можно найти практическое применение (как уже предлагалось в (167)).
Визуализация формы действительно получается путем программного добавления проанализированных элементов на форму-пустышку. Но "Декомпиляция изменений" - это программный код только измененных свойств элементов двух форм (сам сформированный текст изменений разбит на четыре блока: "Изменения свойств самой формы" - ширины, высоты и заголовка, "Удаление элементов форм", "Добавление элементов форм", "Изменение элементов форм"). Посмотрите дерево сравнения элементов форм - там видно, какие элементы старой формы в новой не присутствуют (удалены), какие элементы появились в новой форме, но их не было в старой (добавлены), а какие элементы старой формы изменили свои свойства (изменены).
Обработка видит форму такой, какой видит ее конфигуратор (в конфигураторе в режиме просмотра формы никаких "программных элементов" на форме нет). Сравниваются представления форм, такими, какими их видит конфигуратор.
P.S. V8Reader - это обработка для анализа и сравнения, инструмент исследователя, там четко разделены ЭЛЕМЕНТЫ формы, МОДУЛЬ формы и РЕКВИЗИТЫ формы - смешивать все в кучу и искажать смысл, не сделав попытку самому разобраться - все-таки неправильно.
я успешно пользуюсь декомпиляцией форм, но смысл (или построение фразы-термина) "декомпиляция изменений" (декомпиляция - "вытаскивание" в обратку визуальных ЭУ как кода, а "декомпиляция изменений" - вытаскивание визуальных изменений как кода?) как-то не укладывается.
Т.е. вы получаете этой функцией отчет (в виде кода) об изменениях визуальных ЭУ при сравнении двух форм? Теперь правильно?
я думаю, мы с вами не до конца понимаем, о чем речь - поэтому я и прошу прозрачно разъяснить, из каких соображений появилась то-то или то-то - ведь не все думали именно в том же русле, что и автор обработки :)
ну, т.е. все-таки обработка сравнивает две формы по методу "реальная форма + программные элементы" ))
Объясняю, почему пытаюсь прозрачно все уяснить.
Андрей пишет для себя, и понимает, зачем ему нужно то или то-то, но в описании не всегда все есть - а многие даже возможность того или иного действия над формами не обдумывали, поэтому и не ясно, что когда есть некая функция - а для чего она, собственно, реализована в обработке-то? ))
За основу формата вывода взята публикация от
В качестве быстрых отборов при сравнении ролей можно отбирать объекты с измененными правами, объекты с измененными ограничениями доступа. Также обработка позволяет сравнивать изменения в шаблонах ролей и в ограничениях доступа.
1. Форма "Разбор элементов формы". Нажатие на гиперссылку "Открыть диалоговое окно" приводит к ошибке (см. скриншот). Может быть не принципиально, но это основная форма отчета (на обработках, скажем, ошибку не ловлю). Версия платформы 8.2.14.540. Конфигурация "Инструменты разработчика 2.55", отчет "ирКонсольКомпоновокДанных", Форма "Форма".
2. Небольшая недоработка. При первом запуске, ничего не выбирая, нажимаем на кнопку "Открыть навигатор файлов", получаем исключение, надо б перехватить :).
(191) khaoos, исправления внесены. Однако, признаюсь, что проблема, возникшая у Вас в первом пункте, может у кого-нибудь проявится снова. Дело в том, что визуализация форм реализована исключительно для демонстрации факта, что «все-таки, она вертится!», и сделано это с помощью различных бутафорских трюков, которые, конечно, не полностью компенсируют весь набор заложенного в платформу (к примеру, кнопки стандартных действий и автозаполнение панелей в визуализированной форме отображаются далеко не полностью). Но, я надеюсь, большого неудобства это доставлять не должно. Может, позже станет лучше понятно, каким образом было бы правильнее учитывать эту проблему, но на данный момент – так.
Второй способ: В навигаторе файлов найти и запомнить пути к папкам с нужными формами. Выбрать режим ssf. В качестве каталогов распаковки указать эти пути. Нажать на кнопку "Вывести" (в этом случае поле "Файла распаковки" можно не заполнять - оно роли не играет) - будет произведено сравнение именно этих, выбранных Вами форм.
Переключатель.Заголовок = "Банковским переводом";
Переключатель.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Переключатель.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Переключатель.ПоложениеЗаголовка = ПоложениеЗаголовка.ЗаголовокСправа;
Как только будет понятно, что Вы имеете в виду про:
и нужно ли раскомментировать строчку с установкой этого свойства в отчете Декомпиляция изменений - выложу новую версию.
Кнопка.Подсказка = "Подсказка";
Кнопка.Пояснение = "Пояснение";
Кнопка = ЭлементыФормы.ПодменюЗаполнить.Кнопки.Добавить("ДобавляемаяКнопка",ТипКнопкиКоманднойПанели.Действие,"",Новый Действие("ДобавляемыйОбработчик"));
То есть атрибуты кнопки задаются раньше, чем сама кнопка определяется :)
Добавлено: и, кстати, также пропущено название командной панели. Должно быть:
Кнопка = ЭлементыФормы.КоманднаяПанельНапример.Кнопки.ПодменюЗаполнить.Кнопки.Добавить...
Я в том смысле, что по каким-либо причинам это невозможно сделать в принципе. Но из ответа я понял, что возможно :). У меня в анализе формы не заполняется. Во всех элементах формы пусто. Так что и декомпиляции у меня даже закомментированной строчки нет. Повторюсь, именно для внешней обработки. Платформа 8.2.15.319.
Добавлено: сейчас еще конфигурацию развернул - тоже не заполняет "Данные"
Пока только одно: я бы добавил чтобы при сравнении макетов, в том случае, если это не текстовый и не табличный документ выводить сообщение вида "Сравнение файлов не поддерживается!" вместо ошибки выполнения. Исправление не сложное, но в целом добавило бы большее ощущение законченности обработке.
Номер строки не совпадает т.к. на текущий момент я для себя это поправил добавив еще один блок "Попытка..Исключение".
p.s. Идея доделать их сравнение в целом нравится:)
1С:Предприятие 8.2 (8.2.15.318), конфигурация Бухгалтерия предприятия, редакция 2.0 (2.0.37.14)
выполняю сравнение 2-х конф для декомпиляции изменений
для справочника Номенклатура добавил 2 реквизита,
в форме списка справочника Номенклатура добавил эти реквизиты в список
режим сравнения 2-х конфигураций (чистой 1С и своей доработанной)
выбираю оба файла, далее кнопка "Распаковать и вывести", далее нахожу изменения (справа), нахожу форму списка,
дважды щелкаю на форме, открывается окно сравнения форм.
И вот здесь нажимаю "Декомпилировать изменения", 1С сразу же падает :(
Баг повторяется 100%.
что делать?
ЗЫ могу выложить оба cf-файла
Существенно доработан отчет «Декомпиляции изменений». Теперь он представляет собой готовую совокупность процедур, необходимых для программного формирования нужных изменений формы. Основой этого отчета является процедура МодифицироватьФормуПриОткрытии(). В качестве дополнения к основной, для сокращения выводимых строк и лучшей читаемости кода используется процедура "УстановитьПоложениеЭлемента(Элемент,Верх,Высота,Лево,Ширина)" (из от ) – тоже будет выведена в отчет. Также в случае добавления на форму элементов типа «Переключатель» в отчет будет добавлена дополнительная процедура ИзменитьПорядокОбхода() – позволяет назначить для добавляемого переключателя корректный номер порядка обхода.
Теперь для программной модификации нужной формы в ее обработчик открытия нужно будет добавить процедуру МодифицироватьФормуПриОткрытии(). А саму эту процедуру (вместе с дополнительными процедурами, выведенными в отчете «Декомпиляция изменений») разместить в модуле с кодом вывода элементов формы или поместить в общем модуле.
Расширены возможности по корректной обработке свойства «Данные» элементов формы в отчете «Декомпиляция изменений».
Реализовано сравнение произвольно выбранных объектов (в контекстном меню дерева метаданных пункт «Добавить к сравнению»).
Обработка работает теперь только в режиме полного структурного разбора (то, что раньше называлось режимом разбора «Hard»). Оптимизирована работа этого режима. Режим «Light» больше не используется.
Структурное сравнение модулей – используется для сравнения всех модулей (включается в настройках).
В сравнении дерева метаданных теперь дополнительно анализируется изменение внутреннего представления структурных составляющих объектов – можно узнать изменения конкретного реквизита в объекте (пока что только во внутреннем представлении).
Добавлена настройка «Проверять обновления публикации». Использованы рекомендации Жолтокнижниг из комментария.
В отчете по ролям добавлено программное генерирование кнопок для управления уровнями группировки из публикации от mtv:)
(211) artbear, (204) khaoos, (208) SkorikA, - исправлено, (195) pumbaE, (209) (210) babys, - реализовано
Почему, почему такой спагетти-код, переменные с именами "ы" и "ъ", которые нигде к тому же не используются? Почему перебор колонок табличного макета делается так:
ЗначениеЯчейкиСинонима=Лев(Ячейка.Имя,Поз)+Строка(Число(Прав(Ячейка.Имя,СтрДлина(Ячейка.Имя)-Поз))+4);
ЗначениеЯчейкиИндексаКартинки=Лев(Ячейка.Имя,Поз)+Строка(Число(Прав(Ячейка.Имя,СтрДлина(Ячейка.Имя)-Поз))+3);
Зачем это мозго*ство с формулами, почему не:
Область.Лево+1;
Область.Лево+2;Одно и то же ведь, а читать легко и приятно.
С одной стороны, писал человек опытный, с другой - руки бы оторвать за такое качество кода....
В любом случае, оно работает и работает хорошо. Огромный плюс и спасибо за проделанную работу :)
Если посмотреть на описание, то будет понятно, что это компиляция из нескольких разработок в одну. Покажи мне пальцем на такого человека, который будет переписывать код из-за нарушения "его" видения чувства прекрасного, при работаещем коде... (за бесплатно конечно же).
Итого, автору все равно спасибо, т.к. есть инструмент, и есть поле для дальнейшего изучения. Т.е. суммарно - это классная обработка и результат большого труда.
Две новых фунциональности.
Первая функциональность - расширенный анализ управляемых форм. В панель свойств выводится список свойств элемента управляемой формы. Свойства анализируются во внутреннем представлении
Вторая функциональность - возможность вывода отчета по роли в режиме "дополнения" - в отчет выводятся не только заданные в файле роли права, но и права по умолчанию. (возможность пока тестовая)
(229) rasswet, реализовано.(220) yandextesting, исправлено
{Форма.Форма.Форма(1179)}: Ошибка при вызове метода контекста (Прочитать)
ТекстОписания.Прочитать(КаталогМетаданных + "\" + ИмяФайлаОписания);
по причине:
Ошибка доступа к файлу 'D:\KA.cf.und'А это что может быть?
Создал в форме документа «Реализация товаров и услуг» БП 2.0 реквизит «Этап» тип «СправочникСсылка.Этап» в табличной части услуг. После декомпиляции изменений код:
Колонка = ЭлементыФормы.Услуги.Колонки.Вставить(2,"Этап");
Колонка.Ширина = 25;
Колонка.Имя = "Этап";
ЭлементыФормы.Услуги.Значение.Колонки.Добавить("Этап");Последнюю строку необходимо закомментировать
Формирует при декомпиляции изменений не правильно:
Кнопка = ЭлементыФормы.ПодменюЗаполнить.Кнопки.Добавить("ЗаполнитьПоВидамРабот",ТипКнопкиКоманднойПанели.Действие,"",Новый Действие("КоманднаяПанельУслугиЗаполнитьПоВидамРабот"));
Надо
Кнопка = ЭлементыФормы.КоманднаяПанельУслуги.Кнопки.ПодменюЗаполнить.Кнопки.Добавить("ЗаполнитьПоВидамРабот",ТипКнопкиКоманднойПанели.Действие,"Заполнить по видам работ",Новый Действие("КоманднаяПанельУслугиЗаполнитьПоВидамРабот"));
Положим, программный код, который получается в итоге по схемам - тот конвертер тоже не дает :)
Только набор "необработанных" и логически не связанных строк кода.
Народ путает - программное создание СКД и описание схемы СКД. Это настолько разные и несопоставимые вещи, что даже сравнить невозможно.
А автор там и не спешит разъвеять незнание новичков и внести ясность понимания.
Совершенно верно, т.е., по сути, тот "конвертер" лишь дает в удобной (более-менее) форме просмотр схемы СКД по XML, и "сырой" код-представление этой схемы в 1С.
Вашим же ридером - я тоже пользуюсь постольку поскольку: только для сравнения cf и cfu, ну и по другой мелочи сравнений :)
А так - есть и типовые средства сравнения форм, обработок, конфигураций; для программного формирования - больше подходит декомпилятор форм от Истура и т.д. :)
Т.е. как "Отчет о декомпиляции изменений формы" только не для изменений а просто для формы?
Например я сделал форму определенную, и потом хочу получить код который при выполнении будет добавлять группы и элементы (с учетом дерева) на форму.
т.е. есть задача каждый раз при открытии разных форм (в том числе и генерируемых) добавлять в конец группу в которой несколько реквизитов, руками весь этот код добавления прописывать не хочется, а так было бы классно генерировать код.
Еще было бы хорошо если бы код генерировался только для установки тех свойств значения которых отличаются от значений "по умолчанию".
т.е. я вижу примерно так:
В модуле формы в обработчике ПриСозданииНаСервере() я вызываю код сгенерированный обработкой, что то типа: ДобавитьЭлементыНаФорму(ЭтаФорма).
Подобные обработки уже есть:
Но они ограничены возможностью "обработки".
Декомпиляторы только генерируют код, который позволяет программно создавать элементы на форме.
Ни саму форму (как класс), ни код в конфигураторе - сгенрировать нельзя.
Обработка собфтий формы и данных - это все ручками, по месту.
Ни одна обработка не генерирует "рабочий" код обработки данных.
Это и нужно:
(248)
Да он сегодня добавил, еще не смотрел, просто у вас увидел в примерах похожий отчет думал уже реализовано просто не понял как.
(250) совершенно верно про ПриСозданииНаСервере(), не стал писать очевидного.
Просто для УФ все эти генераторы сам бог велел, нет проблем с привязками и координатами элементов, да и на самом деле гораздо чаще есть соблазн гененрировать тот или иной кусок формы программно, потому как все получается быстро, легко и красиво.
У (249) AlexO,
Обработка делает ровно то что я описал, можно выбрать любую форму конфигурации, а на выходе получить код на языке 1С выполнив который мы сможем добавить элементы на любую форму. Есть похожая обработка для СКД которая по схеме генерирует код создания этой схемы.
С той обработкой что по ссылке проблема в том что она написана на скорую руку и множество нюансов там не учитываются, в итоге пришлось руками значительно (на 70%) править получившийся код. В общем сырая она очень ещё.
А тут я посмотрел скриншот "Отчет о декомпиляции изменений формы" думал то же самое уже есть.
Все именно это и делает декомпилятор от Истура. Только в обычном приложении.
то это не создание СКД программно, а всего лишь чтение схемы - настройки, параметры, запросы, etc. Что мало дает для создания СКД - даже не указано, куда полученный код и как вставлять.
ничего "подобного" нет и быть не может - это 1С.
Можно только получить код для создания элементов, и вставить его в Конфигураторе в нужное место.
Чем занимается указанная обработка, и какие отличия её от существующих (зачем она?) - непонятно, и автор скрывает её назначение.
у автора ни слова про "управляемые формы" :)
так чем та чудо-обработка многобещающая? Никто не может тольком сказать, даже автор в затруднеии - чего такого делает его обработка.
Или как 1С - обещает-обещает, и все "ведутся" на обещания вот уже 20 лет? :)
Многообещающая - потому что развивается и то, что сделано - работает. Универсальность, конечно - еще не достигнута, но для управляемых форм это уже достойное решение.
вылезла вот такая ошибка
Возврат НайденныйРезультат.SubMatches(0);
Ещё вопрос как можно увидеть различия в командный интерфейсе - командная панель
как понимаю сейчас это обработка делать не умеет?
На данный момент командный интерфейс не парсится (хотя по сравнению с объемом остальных уже реализованных работ это несложно). Вообще последние изменения судя по всему мало востребованы, поэтому в ближайшее время новую версию пока не планирую.
На самом деле - интересует удобство использования для управляемых форм и ролей. Что скажете? Есть ли какие-то пожелания? Может, если что-то интересное предложите - созрею на доработки...
"{Форма.РазборФормы.Форма(585)}: Поле объекта не обнаружено (ПанельЗакладок)
пФормаКопия.ЭлементыФормы[ИмяПанели].УстановитьДействие("ПриСменеСтраницы", Неопределено);"
типовой отчет в БП 2.0 "ВедомостьАмортизацииОСБухгалтерскийУчет" - изменился только тип реквизита
Логика построения дерева обычных форм отвязана от идеи деструктивного анализа – иерархия элементов строится на основе внутреннего представления.
{Обработка.V8Reader.МодульОбъекта(441,33)}: Тип не определен (СравнениеФайлов)
СравнениеВременныхФайлов=Новый <<?>>СравнениеФайлов; (Проверка: Сервер)
{Обработка.V8Reader.МодульОбъекта(441,33)}: Тип не определен (СравнениеФайлов)
СравнениеВременныхФайлов=Новый <<?>>СравнениеФайлов; (Проверка: Внешнее соединение)
И вот
{Обработка.V8Reader.МодульОбъекта(429,2)}: Процедура или функция с указанным именем не определена (Состояние)
<<?>>Состояние(Строка); (Проверка: Сервер)
{Обработка.V8Reader.МодульОбъекта(429,2)}: Процедура или функция с указанным именем не определена (Состояние)
<<?>>Состояние(Строка); (Проверка: Внешнее соединение)
Обработка.V8Reader.Форма.Форма.Форма Отсутствует обработчик: ДеревоМетаданных "ДеревоМетаданныхИдентификаторОткрытие"
Обработка.V8Reader.Форма.Форма.Форма Отсутствует обработчик: ДеревоМетаданных "Развернуть"
Обработка.V8Reader.Форма.РазборФормы.Форма Отсутствует обработчик: ДеревоЭлементовФормы "ДеревоЭлементовФормыПриВыводеСтроки"
Обработка.V8Reader.Форма.РазборФормы.Форма Отсутствует обработчик: Панель1 "Панель1ПриСменеСтраницы"
Обработка.V8Reader.Форма.ФормаСвойств.Форма Отсутствует обработчик: РазличияПривязок "ТабличноеПолеСвойствПриВыводеСтроки"
Обработка.V8Reader.Форма.ФормаДляРолей.Форма Отсутствует обработчик: Результат "РезультатОбработкаРасшифровки"Реализован программный интерфейс для открытия сравнения файлов из стороннего кода 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 не распаковывает) без ущерба для производительности.
Мелкие доработки эргономики вывода сравнения временных файлов.
(*)функциональность моей мечты. В свое время у нас был GCOMP-decompress.bat, Tortoise SVN, KDIFF, или Tortoise Merge-коммит -Compress.bat
Правильно, ли я понимаю (во всяком случае, в этом объеме я использую обработку), что у нас от (*) в данном случае ,уже есть
Gcomp Decompress, элементы SVN в разрезе сравнения временных файлов, в которые распаковываются конфигурации. В постоянные у меня распаковать не получается, падает распаковка с ошибкой. Соответственно, хранилища внешнего, на уровне SVN, получается, что и нет, как и Commit
Kdiff в общем-то работает, в режиме 3Way, ничего не мешает 2 последних файла конфигурации указать одинаковыми и получить 2 WAY, если не нужен режим 3 конфигураторов.
Compress.BAT у нас нет? Или я недопонял функциональность?
Каковы дальнейшие планы развития проекта, если они есть?
В любом случае, даже в таком, неполном варианте, польза от обработки грандиозная!
Еще раз благодарю авторов за огромную работу, проделанную для появления этого проекта!
Какая именно последовательность действий приводит к ошибке?
Во-вторых - функциональность Вашей мечты реализует проект - у него свои тонкости и свои контрибьютеры - но задачу хранения распакованных данных для возможности просмотра изменений отчетов и обработок на github этот проект решает. Кнопка получения структуры человекопонятных папок с исходными кодами внутри в V8Reader находится на панели дерева метаданных главной формы обработки (кнопка с дискеткой). В принципе, можно ее нажимать и вручную. Также в проекте precommit реализована и упаковка данных средствами V8Unpack.
В-третьих - если все Ваши неудобства пользования моей обработкой упираются в невозможность использования kdiff, то в принципе ничего сложного в том, чтобы сделать настройку использования для сравнения текстовых файлов именно ее.
Хотелось бы понять по всем этим трем пунктам, что конкретно Вам нужно.
, помимо , есть и
Проекты служат немного разным целям:
- precommit1c - разборка/сборка внешних файлов 1С (epf,erf) на текстовые файлы исходников. При работе с Гит разбор на исходники выполняется в режиме git-hook - precommit. В этом проекте активно используется сабж - v8Reader
- v83unpack - разборка/сборка конфигурации 1С (cf) на текстовые файлы исходников. Затем полученные исходники можно положить в Гит.
Проекты довольно давно живут живут в боевых средах.
Любая последовательность действий, когда я распаковывал файл актуальной конфигурации бп 8.2 НЕ в каталог временных файлов, приводила к тому, что процесс распаковки вылетал с ошибкой, не сразу, полагаю, что процентах на 70-80. Суть проблемы мне не понятна, есть лишь догадки. При распаковке во временные файлы, проблем не возникает. Проект PreCommit, как я понимаю, заточен лишь на внешние отчеты-обработки. Моя задача простая - сделать полноценную систему контроля версий, с распаковкой, сравнением изменений, коммитом и упаковкой. Речь идет, как правило, именно о файле конфигурации, а не внешних обработках. Что касается сравнивания объектов, то Kdiff вполне подходящий инструмент, но Tortoise Merge, мне нравился несколько больше. Решаются следующие задачи: поддержка 2 - х конфигураций БП 8.2 на множестве баз (более 50), с существенными дописками, одна из них - с серьезно переписанным блоком ВЭД, с человеческим документом
ГТД Импорт, функциональность которого высосана не из пальца, в отличие от типового функционала. Есть, также, пара баз БП 8.3 с дописанными под нее нашими служебными обработками, сделанными для целей облегчения ведения учета, с элементами обмена данных, но на текстовых файлах, исторически так сложилось, для совместимости со старыми базами. Есть и Базы ЗУП, но там дописка ограничилась только актуализацией отмерших в 1С правил обмена данными ЗУП с бухгалтерией 7.7. Соответственно, особых причин сравнивать обработки и отчеты, у меня нет, но есть большое желание как можно точнее версионифицировать свои изменения и иметь возможность, сравнивать их с изменениями поставщика (1С).
Как я сейчас пользуюсь v8unpack:
Подключаю текущий наш файл конфигурации, в качестве конфигурации 1, подключаю соответствующий по релизу файл конфигурации поставщика, подключаю новый файл конфигурации поставщика. Сравниваю 3 - х анализом объекты между собой. То, что не содержит наших изменений, коммитится целиком средствами 1с в новую конфигурацию поддержки. То, что требует переноса по частям, сравнивается 3-х анализом, делается попытка объединить файлы, последовательно, проходимся по всем противоречям и вдумчиво урегулируем их, независимо от предложенного kdiff варианта. Итоговый файл копируется ctrl+c - ctrl+v в соответствующий модуль конфигуратора и обновляется конфигурация бд. Хотелось-бы иметь возможность коммита изменений из v8unpack в распакованное хранилище, собирать из него новый файл конфигурации. Остальное в принципе есть и так, что уже весьма и весьма недурно, спасибо Вам за мощную проделанную работу. Для создания хранилища, нужно, как минимум, решить проблемы с распаковкой в стационарные файлы.
Попробуйте для отладки сделать распаковку в стационарный каталог в "Режиме анализа" (первый переключатель в группе "Основная настройка") - потом содержимое этой папки можно будет использовать для повторного вывода (если нажимать не "Распаковать и вывести", а просто "Вывести"), более того, можно использовать кеш сформированных деревьев метаданных (включается в настройках)
Моя последовательность действий для распаковки конфигурации в стационарные файлы:
1) Установить "Режим анализа" в группе переключателей "Основная настройка"
2) В группе переключателей "Режим выбора объектов" установить "Режим cf"
3) В поле "Файл cf" выбрать файл конфигурации, который надо распаковать
4) В поле выбора каталога распаковки определиться с каталогом, куда будет производиться распаковка. Если этот каталог не пустой - там автоматически создастся подкаталог (Вас об этом предупредят)
5) Нажать на кнопку "Распаковать и вывести".
Все распаковывается - конфигурация БП2_0_64_27, по крайней мере, распаковалась.
Убедительно Вас прошу - дайте текст или скриншот ошибки и скажите, на каком именно этапе она у Вас возникает.
По поводу использования Tortoise Merge для трехуровневого сравнения - вы пробовали включать его в настройках? Например, здесь
можно увидеть все командные строки запуска всех популярных программ сравнения.
Соответственно, для Tortoise Merge надо в настройках трехуровневого сравнения указать путь к Tortoise Merge, а в поле "Строка запуска diff" (его надо предварительно вызвать на редактирование или нажать F4) указать соответствующую строку запуска. Все надо пробовать)))
- есть обработка для 1С - ВыгрузкаКонфигурации.epf, которая умеет все перечисленные операции выполнять как в интерактивном режиме, так и в режиме командной строки.
- есть набор скриптов unpack.os для проекта 1Script, который фактически является портированной версией ВыгрузкаКонфигурации.epf и работает в режиме консоли из командной строки.
Лично я предпочитаю последний вариант (спец.скрипты для 1Script). Этот вариант уже работает более полугода в боевой эксплуатации для нескольких команд крупного (150 человек) ИТ-отдела разработки 1С (используются кучей команд разработки)
Но зачем для группового инсертера менять v8Reader ?
Это можно сделать обычным скриптом, например, на 1Скрипт.
Я делал подобные скрипты не раз
- на JScript для автогенерации списка тестов по модулю тестов для xUnitFor1C
- на 1С, когда сделал конвертилку тестов для xUnitFor1C из формата 3.Х в формат 4.Х
Функция НайтиСоответствиеВТаблицеПрав :
Если СтрокаПрава <> Неопределено и Узел.ДочерниеУзлы[2].ТекстовоеСодержимое <> "0" и СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных]<>Неопределено Тогда
Если НЕ СоответствиеСтандартныхРеквизитов.Получить(СтрокаПрава.ВидМетаданных) = Неопределено Тогда
Зн1 = СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных];
Ключ1 = СтрЗаменить(Узел.ДочерниеУзлы[3].ДочерниеУзлы[0].ТекстовоеСодержимое,"-","v");
Для Каждого ЭлементСтруктуры ИЗ Зн1 Цикл
Если НЕ ЭлементСтруктуры.Ключ = Ключ1 Тогда
Продолжить;
КонецЕсли;
Если Вр.ОбъектСРеквизитами = СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных][СтрЗаменить(Узел.ДочерниеУзлы[3].ДочерниеУзлы[0].ТекстовоеСодержимое,"-","v")] Тогда
НоваяСтрока = Вр;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИначеЕсли Узел.ДочерниеУзлы[2].ТекстовоеСодержимое <> "0" И Вр.ОбъектСРеквизитами = "СтандартныйРеквизит"+Узел.ДочерниеУзлы[3].ДочерниеУзлы[0].ТекстовоеСодержимое Тогда
Функция ДополнитьОбъектСРеквизитами :
Если СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных] <> Неопределено Тогда
Зн1 = СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных];
Ключ1 = СтрЗаменить(УзелДляАнализа.СледующийСоседний.ДочерниеУзлы[0].ТекстовоеСодержимое,"-","v");
Для Каждого ЭлементСтруктуры ИЗ Зн1 Цикл
Если НЕ ЭлементСтруктуры.Ключ = Ключ1 Тогда
Продолжить;
КонецЕсли;
СтандартныйРеквизит=СоответствиеСтандартныхРеквизитов[СтрокаПрава.ВидМетаданных][СтрЗаменить(УзелДляАнализа.СледующийСоседний.ДочерниеУзлы[0].ТекстовоеСодержимое,"-","v")];
НоваяСтрока.ОбъектСРеквизитами = СтандартныйРеквизит;
КонецЦикла;
Иначе Показатьесли честно - не пойму почему в структуре по методу "Свойство" выдает ошибку если нет такого свойства, поэтому особо не парился и написал проверку в цикле, очень надо было "завести"
1) (304) KVD77, Исправлена ошибка разбора ролей, возникающая при обнаружении неизвестных идентификаторов стандартных реквизитов
2) Исправлен алгоритм построения дерева элементов обычной формы в случае, если у главной панели формы (ЭтаФорма.Панель) есть несколько страниц.
3) Гиперссылка, декомпилирующая обычную форму целиком, теперь формирует полноценный текст декомпиляции (раньше по этой гиперссылке формировался файл в режиме «бутафории»)
4) (292) Gotcha, Добавлена настройка использования внешней программы для сравнения модулей и их методов
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С, будь-то анализаторы или подсветка синтаксиса.
{ВнешняяОбработка.V8Reader.Форма.Форма.Форма(3495)}: Значение не является значением объектного типа (Submatches)
ТипМакета = Match.Submatches(5);
РегулярноеВыражение = Новый COMОбъект("VBScript.Regexp");
РегулярноеВыражение.Multiline = Истина;
РегулярноеВыражение.IgnoreCase = Истина;
РегулярноеВыражение.Pattern = "\{0,0,\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\},""(.*)""[^{]*\{(\d(,""\w\w"",""(.*)"")*)\},""(.*)""(,0,0)?\},(\d)";
Matches = РегулярноеВыражение.Execute(ТекстПараметра);
Для Каждого Match Из Matches Цикл
КонецЦикла;
ТипМакета = Match.Submatches(5);
Возврат ТипМакета;
КонецФункции
Описание='Ошибка при вызове метода контекста (Размер)'
ИмяМодуля='ВнешняяОбработка.V8Reader.Форма.Форма.Форма'
НомерСтроки=2 514
ИсходнаяСтрока=' РазмерПервогоФайла = ПервыйФайл.Размер() + ?(ФайлМодуляПервойФормы <> Неопределено, ФайлМодуляПервойФормы.Размер(), 0);'
Описание='Ошибка при вызове метода контекста (Размер)'
ИмяМодуля='ВнешняяОбработка.V8Reader.Форма.Форма.Форма'
НомерСтроки=2 524
ИсходнаяСтрока=' РазмерВторогоФайла = ВторойФайл.Размер() + ?(ФайлМодуляВторойФормы <> Неопределено, ФайлМодуляВторойФормы.Размер(), 0);'
на файле изображений, файла при этом в каталоге нет. При обвязке в попытку..исключение и присваивание размерам файлов 0 и 1 соот-но, дальше все проходит нормально...
1 - в последнем релизе на последней платформе выходит ошибка при чтении файлов, в каталоге с распакованной конфигурацией присутствуют файлы с расширением ".d" - обработка про них не знает, соответственно вываливается по ошибке.
2 - если даже исключить файлы из п.1 то все равно обработка вываливается с ошибкой как у (313). Поставил заглушку перед проверкой размера:
Если Не ПервыйФайл.Существует() И Не ВторойФайл.Существует() Тогда
Возврат 0;
КонецЕсли;Пытаюсь сравнить две конфы, не разбирает, останавливается на языках дальше все. Пробовал обработки с ними получается. Поясните пожалуйста могу ли я сравнить две формы например из конфигурации? Если да то как? Каким образом я их должен сначала выгрузить если не работает разбор по CF ?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 106310
Создание 27.01.12 17:08
Обновление 22.07.16 18:29
Просмотры 102396
Загрузки 2590
Рейтинг
600
Комментарии 309
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)