Как сделать форму в расширении 1С пустой и зачем это нужно

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Зачем очищать визуальные элементы в расширении?

Прежде чем перейти к технической реализации, давайте проанализируем, в каких ситуациях этот прием будет максимально полезен. Рассмотрим основные причины:

  1. Минимизация конфликтов при обновлении. Если вы заимствуете форму только для того, чтобы перехватить событие (например, ПриСозданииНаСервере) или добавить новый обработчик, визуальные элементы типовой конфигурации в расширении вам не нужны. Оставляя их, вы заставляете платформу сравнивать их при каждом обновлении.
  2. Чистота метаданных. Пустая форма в расширении — признак того, что интерфейсная часть не менялась, а все правки сосредоточены исключительно в модуле. Это упрощает аудит кода другими разработчиками.
  3. Производительность. Чем меньше объем файла расширения (.cfe), тем быстрее происходят процессы компиляции и загрузки метаданных. Вырезание лишних визуальных узлов из XML значительно сокращает размер расширения.

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

Метод 1: Прямая правка XML-структуры формы

Это самый эффективный и надежный способ, который позволяет полностью контролировать содержимое метаданных. Разберем его по шагам.

Шаг 1. Выгрузка расширения в файлы.

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

Шаг 2. Поиск нужного файла формы.

Перейдите в папку, куда были выгружены файлы. Структура папок будет соответствовать метаданным. Проследуйте по пути: Catalogs > [ИмяСправочника] > Forms > [ИмяФормы] > Ext. В этой папке вы найдете файл с названием Form.xml. Именно он описывает визуальную структуру формы.

Шаг 3. Редактирование XML.

Откройте файл Form.xml любым текстовым редактором (например, Блокнотом или Notepad++). Проанализируем его структуру. Нам необходимо найти узел childItems. В типичном файле это выглядит примерно так:


<ChildItems>
    <LabelField name="Код" id="1">
        <DataPath>Объект.Code</DataPath>
        ...
    </LabelField>
    <InputField name="Наименование" id="4">
        ...
    </InputField>
</ChildItems>

Ваша задача — удалить всё содержимое между открывающим тегом <ChildItems> и закрывающим </ChildItems>. Будьте внимательны: в файле может быть несколько секций с похожими именами (например, для реквизитов или команд), нас интересует первая секция childItems, которая отвечает за дерево элементов формы. Обычно она начинается в районе 7–10 строки файла.

После удаления файл должен выглядеть так:


<ChildItems />

Или так:


<ChildItems>
</ChildItems>

Шаг 4. Загрузка расширения обратно.

Сохраните изменения в файле. Вернитесь в конфигуратор 1С и выберите пункт Конфигурация — Загрузить конфигурацию из файлов. После завершения загрузки откройте форму в расширении. Вы увидите, что дерево элементов стало пустым (или осталась только командная панель), при этом сама форма осталась заимствованной.

Метод 2: Использование «фиктивной» конфигурации

Если вы опасаетесь вручную править XML, можно воспользоваться методом обмана платформы через временную информационную базу. Рассмотрим этот алгоритм.

  1. Создайте абсолютно пустую новую информационную базу.
  2. В свойствах конфигурации задайте ей точно такое же Имя, как у вашей основной конфигурации (например, ЗарплатаИУправлениеПерсоналом).
  3. Создайте в этой базе объект (справочник или документ) с тем же именем, что и в оригинале.
  4. Создайте у этого объекта форму с тем же именем, что и типовая форма, которую вы хотите заимствовать. Не добавляйте в нее никаких элементов.
  5. Создайте в этой базе расширение и заимствуйте в него эту пустую форму.
  6. Выгрузите расширение в файл .cfe.
  7. Загрузите этот файл .cfe в вашу рабочую базу.

Платформа сопоставит имена объектов и форм, «подцепит» связь, но поскольку в источнике форма была пустой, в расширении она также останется без элементов. Этот метод более трудоемкий, но позволяет избежать прямой работы с текстовыми редакторами.

Нюансы отображения командной панели

Многие разработчики замечают, что даже после полной очистки ChildItems в конфигураторе продолжает отображаться командная панель. Выясним причину этого поведения. Командная панель формы в управляемом интерфейсе часто генерируется автоматически на основе свойств самой формы (раздел Команды). Если в расширении заимствованы стандартные команды или включено свойство Автозаполнение у командной панели, она будет видна. Это не является ошибкой и не мешает достижению нашей цели — чистоты дерева элементов.

Риски и предостережения

Проанализируем возможные проблемы, с которыми можно столкнуться при использовании «пустых» форм:

1. Эффект «Белого экрана». Если в расширении у формы установлено свойство СпособЗаимствованияФормы в значение Замещение (Replacement), то в режиме «Предприятие» пользователь увидит абсолютно пустую форму без единого элемента. Убедитесь, что вы используете стандартное заимствование (дополнение), при котором расширение лишь модифицирует основную форму.

2. Ошибки кэширования. На старых версиях платформы (8.3.14, 8.3.15) иногда возникали баги, когда форма «ослепла» (становилась пустой) самопроизвольно из-за повреждения кэша метаданных. Если вы не планировали очищать форму, а она стала пустой — попробуйте удалить её из расширения и заимствовать заново с обновлением из основной конфигурации.

3. Потеря реквизитов. При очистке ChildItems важно не задеть секцию Attributes (Реквизиты). Если вы удалите реквизиты из XML, программный код в модуле формы, обращающийся к Объект.Ссылка или другим данным, перестанет работать, так как форма «забудет» о существовании этих данных.

Заключение

Мы рассмотрели продвинутый прием разработки расширений — создание форм без визуальных элементов. Это позволяет сделать расширение более легким, профессиональным и устойчивым к обновлениям типовых конфигураций. Рекомендуем использовать Метод 1 (через XML), так как он дает наиболее предсказуемый результат и позволяет быстро обрабатывать сразу несколько форм в одном цикле выгрузки-загрузки.

← На главную