Декомпиляция и анализ форм с генерацией кода формы (обычное приложение)
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Данная обработка является попыткой объединения двух замечательных проектов, которые, к сожалению, уже давно не развиваются:
Деструктивный анализ формы: //infostart.ru/projects/2412/
Декомпилятор форм: //infostart.ru/projects/1343/
Теоретическая база проекта: http://www.kb.mista.ru/article.php?id=650&
кроме объединения этих двух разработок в одну я добавил поддержку всех типов метаданных и улучшил "под себя" эргономичность использования.
Данная обработка позволяет декомпилировать как любые формы метаданных конфигурации, так и формы самой обработки (Если вы добавляете свои формы в данную обработку для декомпиляции, удалите или закомментируйте модуль формы, иначе возможны ошибки).
При открытии формируется дерево метаданных. Выбираем нужный тип метаданных, затем нужный объект, затем интересующую нас форму.
Во 2-м окне видим описание всех элементов выбранной формы.
При двойном щелчке мыши на интересующем нас элементе в 3-м окне получим свойства элемента.
При нажатии на кнопку сверху "Декомпилировать форму" получим текстовый документ с кодом, который позволит создать элементы на текущей форме программно.
Сам использую для внесения изменений в типовые формы без визуальной модификации форм.
Решения, созданные при помощи данной обработки:
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13809 124 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83396 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285942 1608 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16933 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44281 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 77093 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3808 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28805 103 46
... комментарий не к теме: "но страна должна знать своих героев" ...
... спасибо за ссылки в описании обработки ...
... удАчи ...
только вот проект затух как бесперспективный, поскольку вышла 8.2. Зачем пытаться делать свою виртальную форму если уже есть управляемые формы. Кроме того, как быть с обработчиками событий у этих форм реализующих прикладную логику? их ведь динамически получить практически невозможно.
С обработчиками событий как раз всё нормально.
В 8.2 у элемента формы есть "Родитель" - могильщик текущего проекта.
По поводу ошибки
СтраницаПанели = ЭлементНастройкиМакета.Страницы[ПеремЦикла-1];
Ошибка в модуле формы.
""ФормаКопия = Форма;"" - нельзя так. Получается две ссылки на один и тот же объект.
Деструктивный анализ формы -
1. В текстовый макет "СвойстваЭлементовФормы" добавил свойства типа
ДействиеПриИзменении (Action_ПриИзменении)
ДействиеНажатие (Action_Нажатие)
ДействиеОбработкаВыбора (Action_ОбработкаВыбора)
2. Далее в цикле обработки строк макета выполняю проверку реквизита на то, что в начале его имени стоит Действие, и через ПолучитьДействие получаю имя обработчика.
// -- Артур -- 05.02.2009 - получим обработчики действий
лИмяДействия = "";
лДлинаСловаДействия = СтрДлина("Действие");
Если Лев(тИмя, лДлинаСловаДействия) = "Действие" Тогда
лИмяДействия = Сред(тИмя, лДлинаСловаДействия+1);
КонецЕсли;
Если лИмяДействия <> "" Тогда
Попытка
лДействие = Вычислить("тЭлемент.ПолучитьДействие("""+лИмяДействия+""")");
тЗнач = Строка(лДействие);
Исключение
Продолжить;
КонецПопытки;
Сообщить("лДействие = <"+?(лДействие = Неопределено, "Неопределено", лДействие)+">");
//Выполнить("тФорма."+лДействие+"(Неопределено)");
Иначе
// --завершение
Попытка
тЗнач=тЭлемент[тИмя];
Исключение
Продолжить;
КонецПопытки;
// -- Артур -- 05.02.2009 - получим обработчики действий
КонецЕсли;
В первом анализе (строка 719 код КоличествоСтраниц = ЭлементНастройкиМакета.Страницы.Количество();) получаем общее количество страниц. Потом идет цикл для 1 по количество страниц. НО! в строке 725 в коде пФормаКопия.ЭлементыФормы[ЭлементНастройкиМакета.Имя].Страницы.Удалить(0); идет удаление сразу 1 страницы с панели
Правда иногда можно увидеть:
| Код |
|---|
{ВнешняяОбработка.ДекомпиляцияИАнализФорм(764)}: Поле объекта не обнаружено (ОсновнаяПанель)
ЭлементНастройкиМакета = пФорма.ЭлементыФормы[ЭлементТаблицы.Имя];Показать полностью |
При формировании панели в режиме прокручиваемых страниц признак "РежимПрокручиваемыхСтраниц" нужно устанавливать после добавления всех элементов, иначе все будет в куче на первой странице.
+
1) при присвоении текущей страницы отсутствует ".Страница"
2) При прочтении свойств странице в дереве выдается ошибка
3) После создания панели 1 страница уже существует, т.ч. добавлять нужно только со второй страницы, первую заполнять.
4) Видимость страницы тоже не генерируется (видимость страницы тоже нужно устанавливать последней).
Все тестировалось в ПередОткрытии формы
1) для страниц добавить макет со свойствами страниц и проверка при при заполнении дерева на страницу.
2) При формировании кода самый простой способ добавить строчку удаления 0-вой страницы после всех строчек добавления страниц + добавить заполнение свойств каждой страницы.
ЗЫ Эта я вечером вчера смотрел. Вроде работало. Только с видимостью и прокручиваемыми страницами не разбирался.
Присоединяюсь к пожеланиям: сделать сравнение двух почти одинаковых форм с выдачей кода расположения отличающихся реквизитов. Указанная по ссылке обработка Декомпилятор форм уже сильно упростила подготовку обновлений, а тут еще можно будет упростить.
(Надпись на транспаранте: Обновление нетиповой конфигурации за ОДИН день! :))
1) необходимо при сортировке ТаблицаЭлементовФормы.Сортировать("Панель,Страница,Тип");
добавить в конце сортировку по оригинальному индексу элемента, который необходимо заполнять при начальном заполнении таблицы элементов
ТаблицаЭлементовФормы.Сортировать("Панель,Страница,Тип,Индекс");
2) вместо вставки колонки в табличное поле необходимо делать обычное добавление, тогда merge не сбивается при вставке колонки
Непонятно только, почему отличается ширина в решиме Конфигуратор и в режиме Предприятие, поэтому я в комментарии ширины вывожу еще ширину * 6,875 чтобы забивать это значение в конфигуратор :)
1) Не отображаются общие формы
2) Метод по которому вы сортируете панели при декомпиляции формы неправильный. На некоторых объектах типовых конфигураций, которые имеют несколько вложенных друг в друга форм вылетает с ошибкой. Вам нужно сортировать панели по вложенности, а не по порядку выборки из коллекции элементов управления
КоманднаяПанель.Ширина = 1 276;
вместо
КоманднаяПанель.Ширина = 1276;
Ругается проверка синтаксиса
Кнопка0 = ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Вставить(5,"Действие4",ТипКнопкиКоманднойПанели.Действие,"Установить интервал дат...",Новый Действие("Установитьинтервалдат..."));
Как вы понимаете, процедуры "Установитьинтервалдат..." не существует
Скажите, а нельзя формы извлекать из хранилища?
Скажем, сравнивать форму текущей конфы и такую же, но из "конфигурации поставщика"?
пока предлагаю копировать нужную форму просто через буфер обмена и вставлять ее в данную обработку. Тогда можно будет сравнить новую форму из обработки со старой - из конфиги.
Да, еще, ошибки вышеуказанные не оследил, так как сам не сильно модифицирую формы, на моих задачах они не возникали.
Если будет время, то протестирую, но если будет указана типовая конфа и форма, на которой они проявляются. Так мне тестировать много быстрее.
ПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"),"КодПоОКПО",Истина,ЭлементыФормы.ПанельЮрФизЛицо);
ПолеВвода.Видимость = Нет;
Т.е. "нет" и "да" вместо истина и ложь
Т.е. генерации строк не вида
ПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"),"КодПоОКПО",Истина,ЭлементыФормы.ПанельЮрФизЛицо);а вот таких:
ПолеВвода = ЭлементыФормы.КодПоОКПО; Из хелпа по 8.2:
Использовать региональные установки текущего сеанса
......
Значение типа Булево отображается в соответствии с используемым языком платформы, если в данных установках не заданы конкретные значения. Значение типа Булево отображаются словами "Да, Нет", "Yes, No" и т.д., если не используется режим совместимости.
Текст.ДобавитьСтроку(Таб + ТекстЭлемент+"."+Свойство+ " = "+?(ТипЗначенияСвойства = Тип("Булево"),?(Элемент[Свойство],"Истина","Ложь"),Элемент[Свойство]) +";");
КоманднаяПанель = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"),"ДействияФормы",Истина);
КоманднаяПанель.Имя = "ДействияФормы";
КоманднаяПанель.Верх = 0;
КоманднаяПанель.Высота = 25;
КоманднаяПанель.Ширина = 1 276;
Там же, чуть ниже(это к слову об автозаполняемых ком. панелях):
Кнопка1 = ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Подменю.Кнопки.Вставить(2,"Действие1",ТипКнопкиКоманднойПанели.Действие,"",Новый Действие("(Историяотборов)"));По поводу разделения триад. Тест на форме списка справочника номенклатуры:
Код
КоманднаяПанель = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"),"ДействияФормы",Истина);
КоманднаяПанель.Имя = "ДействияФормы";
КоманднаяПанель.Верх = 0;
КоманднаяПанель.Высота = 25;
КоманднаяПанель.Ширина = 1 276;
нет у меня таких широких в УПП...
СтрЗаменить(.....," ",""),
не сработает на конфигурациях, которые используют как разделитель что-то отличное от пробела(напр., неразрывный пробел).
и пожелание: в описании написано
Пользователь может в интерактивной форме выбрать любую форму любого документа любой конфигурации платформы 1С 8.1 . Иметь возможность выбрать конфигурацию из файла.
При декомпиляции формы на которой есть панель со страницами выдает такую строку: ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.ВыпускКакРасход);
здесь лишний знак ) и должно быть так
ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.Страницы.ВыпускКакРасход;
Во-вторых, лови багрепорт:
При декомпиляции формы в УПП (то-ли спецификации номенклатуры, толи статей затрат)
{ВнешняяОбработка.ДекомпиляцияИАнализФорм(747)}: Поле объекта не обнаружено (ПанельВыходноеИзделие)
пФормаКопия.ЭлементыФормы[ЭлементНастройкиМакета.Имя].УстановитьДействие("ПриСменеСтраницы", Неопределено);
багрепорт:
запускал на БП 1.6.24, после названий страницы в результате декомпиляции рисует лишнюю закрывающую скобку, например:
ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.СчетФактура);
лементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.СТРАНИЦЫ.СчетФактура;
Зарплата и Управление Персоналом, редакция 2.5 (2.5.25.3)
Ошибка при декомпиляции формы "ФормаДокумента" документ "НачислениеПоБольничномуЛисту"
Очень интересная обработка, спасибо!
Ошибка:
{ВнешняяОбработка.ДекомпиляцияИАнализФорм(747)}: Поле объекта не обнаружено (ПанельПлатежи)
пФормаКопия.ЭлементыФормы[ЭлементНастройкиМакета.Имя].УстановитьДействие("ПриСменеСтраницы", Неопределено);
Конфа: Типовая Бухгалтерия предприятия, редакция 1.6 (1.6.25.5)
Ошибка при декомпиляции формы документа "Приходный кассовый ордер"
Может, если под рукой окажется завалящая конфа типовой бухгалтерии 1.6, вы, все же, намекнете, куда копать?
P.S. Поднял версию БП до последней, на сег. день версии - 1.6.26.3 - та же ошибка в ПКО и в РКО.
P.P.S. А коли окажетесь в Питере - с меня пиво.
Кстати, никто не знает - есть ли подобная штука для сравнения предопределенных данных, например - ПЛАНОВ СЧЕТОВ (а может даже для обновления)?
А то жутко неудобно сии операции вручную делать.
БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО автору за всю реализацию и сборку.
Если принимаются пожелание было бы очень неплохо увидеть в общем дереве общие формы и, если красота и удобство вам не чужды, то иконки - а то я даже не сразу понял что искать.
А увидел ваш коммент что сейчас заняты, ну черкните если не против я доработаю при случае и под собой выложу со ссылкой на вас. Ок?
Крик души, не обижайтесь но весь сайт "велосипедами" так забили (архиваторы, загрузчики из Экселя и т.п.) что нормальных вещей и не видно, обидно. Я бы таких банил, чтобы не сорили. Сколько потрясных идей я нахожу через 1-2 года только из-за того что новички тут выкладывают все свои домашние варианты ковыряния 1С. Хоть бы кто-то взял чужое и доработал, нет же каждый свое лепит толстым слоем.
Заметил, что в новой версии БП 2.0 (Корп) не декомпилируются формы документов ПКО и РКО. Кое-как поправил у себя, но хотелось бы услышать мнение автора, как лучше исправить (по возможности конечно).
Сейчас столкнулись с проблемой обновления. Хочу попробовать изменить объект с помощью этой обработки.
Как думаете, получится такое сделать с помощью нее?
Как скажется на дальнейших обновлениях, если получится?
пФормаКопия.ЭлементыФормы[ЭлементНастройкиМакета.Имя].УстановитьДействие("ПриСменеСтраницы", Неопределено);
ЗУП 8.2, сравниваю две формы документа Табель.
не знаете в чем косяк?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 22147
Создание 04.09.09 09:59
Обновление 19.06.15 09:55
Просмотры 51635
Загрузки 1685
Рейтинг
313
Комментарии 134
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)