Скрипт оценил 4849 форм УТ 11.5 за минуту: три формы «Нано-УТ» выросли с 86 до 100 баллов
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Form.xml выгрузки и за минуту оценивает все 4849 форм УТ 11.5.22.77: оценку A получили 4221 форма (87,0 %), B 457 форм, C 125, D 46; ниже 44 баллов нет ни одной. Худшая форма: документ «Списание безналичных денежных средств» с 80 элементами на первом экране (44,5 балла). Лучшая из больших: общая форма «Предупреждение безопасности», у неё 45 элементов и 4 на первом экране (100 баллов)./LoadConfigFromFiles, /CheckModules, /CheckConfig), выгрузка обратно и повторная оценка.Form.xml; опечатки в заголовках, порядок полей и смысл подсказок не оцениваются; связь с ценой не проверялась; расширения, обычные формы и платформы кроме 8.3.27 не проверялись.Оформление формы можно измерить по файлу выгрузки: сколько элементов видно сразу, насколько глубоко вложены группы, лежат ли поля россыпью, есть ли подсказки и ручные цвета. Скрипт превращает эти признаки в оценку и в список правок, отсортированный по выигрышу баллов. Оценка пригодна для приёмки и для сравнения «до и после»; как мера красоты или цены она не годится.
- Типовая УТ 11.5 в основном аккуратна: 87,0 % форм получили A, и 1701 форма теряет баллы только за отсутствие подсказок.
- Первая версия правил давала на УТ лишние находки. После разбора случайных выборок D05 упал с 275 до 4 находок, D07 с 986 до 228, D08 с 641 до 23: пустые группы, кнопки без текста у команды и группы без записанной раскладки скрипт больше не считает.
- Размер формы определяет оценку: чем больше элементов, тем ниже балл, поэтому абсолютные числа разных форм сравнивать нельзя.
- Правка «Нано-УТ» по отчёту подняла три формы до 100 баллов, а то, что в оценку не входит (опечатка «Инн», многострочные контакты), я исправила отдельно.
Оценка оформления полезна как приёмочный ориентир и как способ найти, с какой формы начинать правку; доказательством красоты или рыночной цены она не служит.
Для кого: 1С-разработчики и руководители проектов, которые сдают формы заказчику и хотят увидеть слабые места формы числом до показа, а также те, кто правит формы после ИИ-агента и хочет проверить результат без ручного обхода дерева элементов.
В статьях про дизайн форм 1С часто встречается тезис, что красивые формы продаются дороже. Данных о продажах у меня нет, поэтому я проверила то, что можно измерить: насколько форма перегружена, как сгруппированы поля, есть ли подсказки, ручные цвета и шрифты. Я написала скрипт form_design_audit.py, который оценивает каждую форму числом от 0 до 100, прогнала его на 4849 формах УТ 11.5 и поправила по отчёту три формы «Нано-УТ 2.0».
Что я проверяла и чего не проверяла
В черновике этой темы сказано, что аккуратный интерфейс повышает цену продукта. Для такого вывода нужны данные: цены двух версий одного продукта, число сделок, отзывы заказчиков. Ничего этого у меня нет, поэтому я оставила измеримую часть: что в форме можно сосчитать и как эти числа меняются после правки.
Стенд: Windows 11 Pro, Intel Core i5-2400, 7,9 ГБ ОЗУ, SATA SSD; платформа 1С:Предприятие 8.3.27.2130 x86; Python 3.12.10. Первая конфигурация - УТ 11.5.22.77: выгрузка в файлы, 4849 форм, я её только читала. Вторая - «Нано-УТ 2.0», учебная конфигурация из 68 форм (коммит 8a41e51); в ней я правила формы и загружала их в платформу в своей копии файловой базы.
Что считает скрипт
Скрипт читает Form.xml и ничего не пишет в выгрузку. Для каждой формы он считает одиннадцать признаков. Каждое нарушение стоит баллов, у каждого кода есть потолок потерь, форма начинает со 100 баллов.
| Код | Что считается | Порог | Потолок потерь |
|---|---|---|---|
| D01 | Видимые элементы на экране сразу (форма без вкладок и первая вкладка) и на каждой другой вкладке | 25 | 20 |
| D02 | Глубина вложенности групп (вкладка - тоже уровень) | 4 | 15 |
| D03 | Цвет значением (#RRGGBB, web:, win:) вместо элемента стиля |
0 | 10 |
| D04 | Шрифт значением (kind="Absolute") вместо элемента стиля |
0 | 10 |
| D05 | Непустая группа или вкладка показывает заголовок, а текста в нём нет | 0 | 15 |
| D06 | Поле ввода вне таблицы без подсказки: ни у поля, ни в расширенной подсказке, ни в реквизите объекта | все | 10 |
| D07 | Вертикальная группа: у полей разная ширина или ширина задана не у всех | 1 значение | 9 |
| D08 | Вертикальная группа: заголовки полей расположены по-разному | 1 значение | 6 |
| D09 | Полей лежит россыпью прямо в корне формы или вкладки | 5 | 10 |
| D10 | Кнопок рядом в командной панели формы | 7 | 6 |
| D11 | Колонок в таблице | 12 | 5 |
Оценки: A (90-100), B (75-89), C (60-74), D (40-59), E (0-39). К отчёту прилагается блок «Что поправить первым»: правки отсортированы по выигрышу баллов на единицу усилия, где усилие - моя оценка (минуты для подсказки и цвета, полчаса для перегруппировки формы).
Скрипт отличается от линтера правил расширения из соседней статьи. Линтер проверяет соответствие правилам (префикс, картинки команд) и отвечает «нарушено или нет». Здесь результат - число и порядок правок.
Откуда взяты пороги
Пороги я сняла с УТ 11.5: распределение каждого показателя по 4849 формам.
| Показатель | Медиана | 75-й | 90-й | 95-й | 99-й | Максимум |
|---|---|---|---|---|---|---|
| Элементов на экране сразу | 4 | 9 | 18 | 26 | 51 | 173 |
| Глубина групп | 1 | 3 | 4 | 5 | 7 | 14 |
| Полей россыпью в корне или на вкладке | 0 | 1 | 3 | 4 | 9 | 32 |
| Кнопок в командной панели | 0 | 2 | 3 | 4 | 10 | 26 |
| Колонок в самой широкой таблице | 2 | 6 | 11 | 14 | 24 | 89 |
Порог 25 элементов на экране превышают 246 форм (5,1 %), глубину 4 - 354 формы (7,3 %), пять полей россыпью - 132 формы (2,7 %). Пороги можно менять ключом --set, например --set screen_max=30: у конфигурации другого типа распределение будет другим.
Прогон на УТ 11.5
Полный прогон занял около минуты на 4849 формах.

| Оценка | Форм | Доля |
|---|---|---|
| A (90-100) | 4221 | 87,0 % |
| B (75-89) | 457 | 9,4 % |
| C (60-74) | 125 | 2,6 % |
| D (40-59) | 46 | 0,9 % |
| E (0-39) | 0 | 0,0 % |
Средняя оценка 94,8, медиана 98,0, худшая 44,5. Без единого замечания 2024 формы. Замечания по кодам:
| Код | Форм с замечанием | Замечаний |
|---|---|---|
| D06 подсказки | 2604 | 13 892 |
| D11 широкая таблица | 356 | 397 |
| D02 глубина групп | 354 | 3592 |
| D01 плотность | 264 | 288 |
| D03 ручные цвета | 260 | 786 |
| D07 ширины | 181 | 228 |
| D09 нет группировки | 132 | 136 |
| D10 командная панель | 68 | 68 |
| D04 ручные шрифты | 30 | 89 |
| D08 заголовки полей | 19 | 23 |
| D05 пустые заголовки | 4 | 4 |
Подсказок нет у 13 892 полей в 2604 формах; у 1701 формы это единственная причина потери баллов. Для формы из одного поля потолок D06 не набирается: доля считается от большего из числа полей и пяти, иначе форма из одного фильтра теряла бы сразу 10 баллов.
По видам форм средняя оценка такая: формы выбора (334) 99,4, списки (846) 98,1, формы элемента (292) 91,3, формы документов (260) 85,4.
Как я проверяла находки
Скрипт, который на типовой конфигурации даёт сотни сомнительных находок, пользы не приносит, поэтому я разбирала результат в два приёма.
Первый - независимый пересчёт. Второй код на xml.etree заново считает число видимых элементов, групп, глубину групп и колонок самой широкой таблицы. На всех 4849 формах расхождений нет. Подсказки пересчитаны отдельно на 3798 формах, где у полей нет путей вида Объект.Реквизит (там подсказка может прийти из метаданных): расхождений нет. Ручные шрифты: kind="Absolute" встречается в формах 89 раз, и D04 нашёл 89. Ручные цвета: по тексту 792 значения, D03 нашёл 786; разницу в шесть значений дают три формы, где у параметров условного оформления стоит use=false: скрипт выключенные параметры пропускает (в ОчередьЧековККТ я проверила два таких цвета).
Второй приём - ручной разбор случайных находок каждого кода с фрагментом XML. Он заставил меня уточнить правила.
| Код | Первая версия | Итоговая | Что уточнено |
|---|---|---|---|
| D02 | 7180 (порог 3) | 3592 (порог 4) | Порог поднят до 90-го процентиля глубины |
| D05 | 275 | 4 | Не считаются пустые группы без ChildItems; проверка кнопок убрана, потому что кнопка с картинкой может обходиться без текста |
| D07 | 986 | 228 | Сравниваются только вертикальные группы; частично заданная ширина стоит 1 балл, а не 3; флажки и переключатели не считаются |
| D08 | 641 | 23 | Значение «Авто» у поля ввода считается как «Слева»; переключатели и флажки не считаются; группа без записанной раскладки не оценивается |
| D09 | 28 (порог 10) | 136 (порог 5) | Порог опущен до 97-го процентиля числа полей россыпью |
| D04 | 81 | 89 | Добавлены TitleFont, HeaderFont, FooterFont: сверка по тексту нашла 8 пропущенных |
Отдельно пришлось выяснять, что значит группа без элемента Group. В выгрузке УТ из 24 843 обычных групп у 4575 Group не записан, у 9730 записан Vertical, у остальных Horizontal или AlwaysHorizontal. Я проверила на платформе: взяла форму «Контрагенты» после правки, убрала Group у двух групп (одна была Vertical, другая Horizontal), загрузила и выгрузила обратно. В выгрузке у обеих групп элемента Group нет, у третьей группы осталось Horizontal. Платформа записывает Vertical явно, значит, значение по умолчанию у группы другое, и раскладку такой группы из выгрузки не узнать. Поэтому для групп без Group скрипт ширины и положение заголовков не сравнивает. У вкладок Vertical в выгрузке не записан ни разу (из 6663 вкладок у 5550 Group нет, у остальных горизонтальная раскладка), поэтому вкладка без Group вертикальная; в корне формы поля тоже стоят столбцом, и там сравнение работает.
Худшая и лучшая формы
Худшая форма УТ 11.5 - документ «Списание безналичных денежных средств», форма документа: 44,5 балла (D).
| Код | Потери | Что найдено |
|---|---|---|
| D01 | 16,9 + 3,1 | 80 элементов на экране сразу при пороге 25; на вкладке «Расшифровка без разбиения» ещё 35 |
| D09 | 10,0 | 20 полей лежат на вкладке «Расшифровка без разбиения» без групп |
| D11 | 5,0 | в таблице «Расшифровка платежа» 32 колонки |
| D02 | 2,5 за каждую | шесть групп и вкладок на пятом уровне вложенности |
| D07 | 1,0 | у одного из 19 полей вкладки задана ширина 10 |
| D06 | 4,5 | у 42 полей из 93 нет подсказки |
Отчёт указывает на первый экран, вкладку «Расшифровка без разбиения» с двадцатью полями без групп и таблицу на 32 колонки. С них и стоит начинать правку. Оценка не говорит, что элементы лишние: они могут быть нужны разным сценариям. Она говорит, что на экране сразу их 80, а на вкладке поля лежат одним списком.
Лучший пример среди больших форм - общая форма «Предупреждение безопасности»: 45 элементов, 16 групп, глубина 2, замечаний нет, 100 баллов. Её 45 элементов разложены по 12 страницам без закладок (PagesRepresentation=None), поэтому скрипт считает на первом экране только первую страницу: 4 элемента. Среди форм с оценкой A и 30 и более элементами таких всего 84.
Оценка и размер формы
Скрипт штрафует то, что накапливается с ростом формы, поэтому оценка падает вместе с числом элементов.
| Элементов в форме | Форм | Средняя оценка |
|---|---|---|
| 0-5 | 2706 | 98,5 |
| 6-15 | 1224 | 94,0 |
| 16-30 | 539 | 90,5 |
| 31-60 | 266 | 80,7 |
| 61 и больше | 114 | 67,8 |
Коэффициент корреляции числа элементов и оценки -0,77. Вывод для приёмки: в отчёте нельзя ставить в одну таблицу карточку контрагента с шестью полями и документ с 124 элементами и спорить, что у первой оценка выше. Скрипт нужен, чтобы сравнивать одну форму с самой собой до и после, и чтобы выбирать для правки формы из верхней части списка «что поправить первым».
Три формы «Нано-УТ»
В «Нано-УТ 2.0» 68 форм, они маленькие: больше 11 элементов нет ни в одной. До правки скрипт дал 56 форм с оценкой A и 12 с оценкой B, среднюю оценку 95,6. Хуже всего оценены документы, где поля лежат россыпью и нет подсказок. Для опыта я выбрала три формы с оценкой B. После правки в конфигурации 59 форм с оценкой A и 9 с оценкой B, средняя оценка 96,2: остальные формы я не трогала.
| Форма | До | Потери до | После |
|---|---|---|---|
| Справочник «Контрагенты», форма объекта | 87,3 (B) | D06 -10,0, D09 -2,7 | 100 (A) |
| Документ «Поступление денег», форма объекта | 85,2 (B) | D06 -10,0, D09 -4,8 | 100 (A) |
| Документ «Продажа товара», форма объекта | 84,5 (B) | D06 -10,0, D09 -5,5 | 100 (A) |

Что я сделала. Для D09 собрала поля в группы: у «Контрагентов» это «Наименование», «Код и ИНН» (в строку) и «Роль контрагента» с рамкой; у обоих документов шапка стала тремя вертикальными группами в одной горизонтальной («Документ», «Стороны», «Цена» или «Сумма»). Для D06 написала подсказку к каждому полю и вынесла три из них под поле расширенной подсказкой. Тексты подсказок я брала из кода: в «Продаже товара» подсказка к полю «Заказ» говорит, что без него команда «Заполнить по основанию» ответит «Выберите основание»; подсказка к «Виду цены» - что команда «Заполнить незаданные цены» ответит «Укажите вид цены»; подсказка к флажку нулевой цены - что без отметки проведение скажет «Подтвердите нулевую цену товара». Имена элементов, команды, пути к данным и модуль формы не менялись.
Кое-что в правке отчёт не требовал: заголовок поля «Инн» я исправила на «ИНН», контакты сделала многострочным полем (в клиенте оно растянулось на всё свободное место), надпись-пояснение и справку об учёте убрала в группу с рамкой. Эти правки в оценку не входят.
Метрики тех же форм по отчёту скрипта и по выгрузке, которую платформа сделала после загрузки правок:
| Форма | Элементов | Групп до / после | Глубина групп до / после | Полей россыпью до / после | Полей без подсказки до / после |
|---|---|---|---|---|---|
| Контрагенты | 6 | 0 / 3 | 0 / 1 | 6 / 1 | 6 / 0 |
| Поступление денег | 10 | 0 / 5 | 0 / 2 | 9 / 1 | 9 / 0 |
| Продажа товара | 11 | 0 / 6 | 0 / 2 | 10 / 1 | 10 / 0 |
Те же формы в клиенте 1С 8.3.27 (тонкий клиент, файловая база с выгрузкой «до», затем та же база после загрузки правленой выгрузки; данные одни и те же, их создаёт внешняя обработка).
Справочник «Контрагенты». До правки шесть полей идут столбцом, у ИНН подпись «Инн:», «Покупатель» и «Поставщик» показаны полями со списком «Да» и «Нет». После правки «Наименование» стоит отдельно, «Код» и «ИНН» в одной строке, под ИНН выведена серая подсказка про 10 и 12 цифр, роли собраны под заголовком «Роль контрагента», «Контакты» стали большим многострочным полем. Это поле заняло всё свободное место внизу окна: высоту в три строки форма не удержала, растяжение по вертикали я не отключала.


Документ «Поступление денег». До правки девять полей идут одним столбцом, подсказок нет. После правки шапка разложена на три блока в ряд: номер и дата слева, счёт, контрагент и направление в середине (под «Направлением» серая подсказка про раздельный учёт долгов), сумма и итого справа; комментарий стоит отдельной строкой. Блок «Учёт на дату» получил рамку-заголовок, но заголовок поля внутри него повторяется: «Учёт на дату» выведено дважды, и это недочёт моей правки, скрипт его не ловит.


Документ «Продажа товара». До правки поля идут столбцом над таблицей «Товары» с двумя строками, итог 3 960,00. После правки шапка в три блока: номер и дата, контрагент, склад и заказ (под заказом серая подсказка про команду «Заполнить по основанию»), вид цены и флажок нулевой цены; таблица начинается выше, итог и блок «Учёт на дату» остались под ней. Заголовок «Учёт на дату» здесь тоже повторяется.


Число элементов не изменилось ни в одной форме: правка добавила группы и подсказки и ничего не убрала. Обратная выгрузка платформы сохранила группы (Horizontal и Vertical записаны явно) и подсказки, оценки по ней совпали с оценками исходных файлов.
Что сказала платформа
Правленую выгрузку я загрузила в чистую файловую базу командой /LoadConfigFromFiles (около 12 секунд): код возврата 0, журнал пустой. /CheckModules написал «Синтаксических ошибок не обнаружено!», /CheckConfig - «Ошибок не обнаружено». Затем я выгрузила конфигурацию обратно из базы (/DumpConfigToFiles) и прогнала скрипт на этой выгрузке. Оценки всех 68 форм совпали с оценками исходных файлов, то есть платформа сохранила и группы, и подсказки так, как я их записала. Тот же прогон выполнен и для выгрузки до правки: расхождений нет.
В последнем коммите репозитория «Нано-УТ» (4accb27) проверка модулей находит синтаксическую ошибку в общем модуле ЦеныУчет (не закрыт цикл), поэтому для опыта я взяла предыдущий коммит 8a41e51.
Что с ценой
Заключение для заказчика я бы формулировала так: форма оформлена по одиннадцати признакам, оценка такая-то, до правки была такая-то, вот что изменилось. Фраза «после правки продукт стоит дороже» в такое заключение не помещается, потому что у меня её нечем подкрепить. Пример заключения с реальными числами лежит в архиве к статье.
Пределы
- Оценка считает то, что есть в
Form.xml. Опечатка в заголовке, неудачный порядок полей, непонятная подсказка и перегруженный экран из-за данных в таблице остаются за глазами человека. Для них в архиве есть чек-лист. - Оценка зависит от размера формы (коэффициент -0,77), поэтому годится для сравнения форм сопоставимого размера и для сравнения «до и после».
- Группы без записанной раскладки (в УТ 11.5 это в основном пары «дата и время») в сравнении ширин и заголовков не участвуют.
- Подсказку, которую форма пишет из кода, скрипт считает отсутствующей.
- Три правленые формы - это 3 из 68 форм «Нано-УТ». На больших конфигурациях и расширениях правку по отчёту я не проверяла.
- Пороги подобраны по УТ 11.5. Для другой конфигурации их стоит пересчитать по её собственному распределению.
Что проверить у себя
- Выгрузите конфигурацию в файлы и запустите
python form_design_audit.py <каталог> --format json --out до.json, затемpython form_design_audit.py <каталог> --format html --out отчёт.html. - Откройте блок «Что поправить первым» и возьмите две-три формы сверху. Для разбора одной формы добавьте
--only <путь> --detail <путь>. - После правки выгрузите конфигурацию снова, запустите скрипт с
--out после.jsonи сравните:python form_design_audit.py --compare до.json после.json. - Загрузите правленую выгрузку в копию базы (
/LoadConfigFromFiles) и выполните/CheckModulesи/CheckConfig. - Откройте форму в клиенте и пройдите чек-лист из архива: он содержит то, что скрипт не видит.
Файл к статье
В архиве form-design-25-4-tool.zip лежат form_design_audit.py и formxml.py, README с описанием кодов, весов и порогов, 70 тестов (в том числе на трёх настоящих формах «Нано-УТ» до и после), отчёт по УТ 11.5 и журналы проверки. Из распаковки архива:
В form-design-25-4-companion.zip - чек-лист оформления формы (двадцать пунктов с порогами и способом проверки вручную), шаблон задания на правку, разбор правок трёх форм, пример заключения для заказчика с реальными числами, три пары Form.xml до и после, скрипты опыта (правка форм, загрузка в платформу, независимый пересчёт) и все журналы прогонов.
Итог
Скрипт за минуту оценил 4849 форм УТ 11.5 и разложил их по оценкам: 87,0 % получили A, 9,4 % получили B, 2,6 % получили C, 0,9 % получили D. Самое частое замечание - отсутствие подсказок у полей (13 892 поля), самое тяжёлое - перегруженный первый экран и россыпь полей без групп. Три формы «Нано-УТ» поднялись с 87,3, 85,2 и 84,5 до 100 баллов, платформа приняла правки без ошибок, оценки после выгрузки обратно совпали.
Практический порядок такой: выгрузить, запустить скрипт, взять формы сверху списка «что поправить первым», поправить, сравнить «до и после», загрузить в платформу, посмотреть в клиенте по чек-листу. Оценка в этой цепочке служит ориентиром для приёмки и для выбора формы, с которой начинать. Она не доказывает красоту формы и не связана с ценой продукта в моих данных.
Выводы относятся к выгрузке УТ 11.5.22.77, учебной конфигурации «Нано-УТ 2.0», платформе 8.3.27.2130 и порогам, подобранным по УТ. На расширениях, обычных формах и других платформах скрипт не проверялся.
Вступайте в нашу телеграмм-группу Инфостарт