Правка формы через XML-выгрузку и обновление базы на сервере 1С
Содержание
Чтобы обновить форму в серверной базе 1С 8.3, выгрузите конфигурацию в XML-файлы (Конфигурация → Выгрузить конфигурацию в файлы), поправьте файлы формы, загрузите обратно только их и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Изменение формы не меняет структуру таблиц, поэтому обычно его можно применить динамически, не выгоняя пользователей.
Порядок одинаков для формы документа, справочника, обработки и общей формы. Путь описан для платформы 8.3.2x и клиент-серверной базы: те же команды работают и с файловой, но динамическое обновление там менее надёжно — пользователей лучше попросить выйти. Если форма типовая и вы не хотите снимать конфигурацию с поддержки, тот же результат даёт расширение (раздел 6).
1. Подготовка: копия базы, поддержка и хранилище
Прежде чем трогать форму в рабочей базе, проверьте три вещи. Каждая из них способна остановить загрузку на полпути.
Резервная копия. Сделайте выгрузку .dt (Администрирование → Выгрузить информационную базу) или резервную копию средствами СУБД. Для выгрузки .dt нужен монопольный доступ — делайте её вне рабочего времени. Резервная копия СУБД пользователей не отключает.
Режим поддержки. Если конфигурация типовая и стоит на поддержке, объект с формой должен быть разрешён к изменению:
- Откройте
Конфигурация → Поддержка → Настройка поддержки. - Если изменения запрещены, нажмите «Включить возможность изменения» и подтвердите.
- Для нужного объекта выберите правило «Объект поставщика редактируется с сохранением поддержки».
После снятия объекта с полной поддержки каждое обновление типовой конфигурации потребует сравнения и объединения этой формы. Если форму можно доработать расширением — сначала прочитайте раздел 6.
Хранилище конфигурации. Если база подключена к хранилищу, захватите в нём объект с формой (контекстное меню объекта в дереве → Хранилище → Захватить в хранилище). Без захвата Конфигуратор не даст изменить объект, в том числе загрузкой из файлов.
Узнать версию
платформы, с которой работает сервер, можно в Конфигураторе: Справка → О программе. Конфигуратор на рабочем месте должен быть той же версии, что и сервер 1С, иначе он не подключится к базе.
2. Выгрузка формы в XML-файлы
Отдельно одну форму в файлы выгрузить нельзя — выгружается вся конфигурация, а нужные файлы вы потом выбираете сами. На типовой БП 3.0 это несколько десятков тысяч файлов и несколько минут работы.
Через меню Конфигуратора
- Откройте базу в Конфигураторе.
Конфигурация → Открыть конфигурацию.Конфигурация → Выгрузить конфигурацию в файлы.- Укажите пустой каталог, например
D:\dump\buh, и формат «Иерархический».
Из командной строки
Удобно, когда выгрузку нужно повторять или запускать на сервере без интерфейса:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" ^
/DumpConfigToFiles "D:\dump\buh" -Format Hierarchical ^
/Out "D:\dump\dump.log" /DisableStartupDialogs
/S — адрес базы в виде сервер\имя_базы, /Out — файл журнала. Если выгрузка не прошла, причина будет в этом журнале.
Где лежит форма
В иерархическом формате форма документа «РеализацияТоваровУслуг» раскладывается так:
| Файл | Что в нём |
|---|---|
Documents\РеализацияТоваровУслуг\Forms\ФормаДокумента.xml | Описание формы как объекта метаданных: имя, синоним, тип |
...\Forms\ФормаДокумента\Ext\Form.xml | Состав формы: элементы, реквизиты, команды |
...\Forms\ФормаДокумента\Ext\Form\Module.bsl | Модуль формы |
У справочников путь начинается с Catalogs\, у обработок — с DataProcessors\, у общих форм — с CommonForms\.
3. Как устроен Form.xml и что в нём можно править
Файлы сохраняются в кодировке UTF-8. Редактор должен сохранять её без изменений: Notepad++ или VS Code подойдут, стандартный «Блокнот» старых версий Windows — рискованно.
Каждый элемент формы в Form.xml имеет атрибут id. Номера внутри одной формы не должны повторяться. Если копируете кусок разметки, чтобы добавить поле, присвойте новому элементу и его вложенным объектам (контекстному меню, расширенной подсказке) свободные номера — больше максимального в файле.
Что безопасно менять вручную:
- 🟢 заголовки, подсказки, видимость, порядок элементов внутри группы;
- 🟢 текст модуля в
Module.bsl— это обычный код на встроенном языке; - 🟡 добавление поля, привязанного к уже существующему реквизиту объекта;
- 🔴 новые реквизиты объекта, табличные части, типы — правьте их в Конфигураторе, а не в XML.
Если правок больше, чем поменять пару свойств, выгрузку удобнее вести в git. Перед правкой сделайте коммит — git diff покажет точно, что вы изменили, и поможет найти лишнюю строку, если загрузка упадёт.
Обработчики событий формы связаны с процедурами модуля по имени. Если вы переименовали процедуру в Module.bsl, поменяйте её имя и в Form.xml, иначе при открытии формы будет ошибка о ненайденном обработчике.
4. Загрузка изменённой формы обратно в конфигурацию
Загружать всю конфигурацию ради одной формы не нужно. Платформа умеет загружать выбранные файлы.
В Конфигураторе
Конфигурация → Загрузить конфигурацию из файлов.- Укажите каталог выгрузки.
- Выберите загрузку отдельных файлов и отметьте три файла формы из таблицы выше.
- Подтвердите загрузку и дождитесь сообщения о завершении.
После этого форма изменена в основной конфигурации, но ещё не в базе данных. Пользователи пока работают со старой версией.
Пакетный режим
Создайте текстовый файл D:\dump\list.txt с полными путями к файлам формы, по одному в строке, и запустите:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" ^
/LoadConfigFromFiles "D:\dump\buh" -listFile "D:\dump\list.txt" -Format Hierarchical ^
/Out "D:\dump\load.log" /DisableStartupDialogs
Если база в хранилище, после загрузки поместите объект: Хранилище → Поместить в хранилище, с комментарием, что изменено в форме.
5. Обновление конфигурации базы данных на сервере
Это шаг, после которого изменение реально попадает на сервер: Конфигурация → Обновить конфигурацию базы данных или F7.
Платформа сначала покажет, какие изменения применяются. Для правки формы реорганизации таблиц нет, поэтому окно со списком изменений структуры будет пустым или коротким. Если в нём появились таблицы, значит, вместе с формой загрузилось что-то ещё — остановитесь и проверьте список файлов.
Динамическое или монопольное обновление
| Способ | Когда | Что увидят пользователи |
|---|---|---|
| Динамическое | В базе есть сеансы, структура данных не меняется | Работают в старой версии до перезапуска клиента, получают сообщение об изменении конфигурации |
| Монопольное | Пользователей нет или изменилась структура | Ничего: при следующем входе сразу новая форма |
Если в базе есть активные сеансы, Конфигуратор предложит динамическое обновление. В командной строке его включают ключом:
1cv8.exe DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /UpdateDBCfg -Dynamic+ /Out "D:\dump\upd.log"
Динамическое обновление не стоит делать часто подряд в нагруженной базе: сеансы со старой версией продолжают работать параллельно, и часть пользователей видит одну форму, часть — другую. Попросите всех перезапустить 1С, когда закончите.
Если вам нужна монопольная установка, а пользователи не выходят, завершите их сеансы через консоль кластера. Все несохранённые данные в этих сеансах потеряются — предупредите людей заранее и делайте это в обед или после работы.
6. Расширение: обновить форму, не снимая типовую с поддержки
Для типовых БП 3.0, ЗУП 3.1, УТ 11 правка формы в расширении часто лучше прямого изменения. Основная конфигурация остаётся на полной поддержке, обновления ставятся без объединения.
Как это сделать:
Конфигурация → Расширения конфигурации, добавьте новое расширение.- В дереве основной конфигурации найдите форму, в контекстном меню выберите
Добавить в расширение. - Откройте заимствованную форму в расширении и добавьте элементы, команды, обработчики.
- Сохраните расширение:
Конфигурация → Обновить конфигурацию базы данныхв окне расширения.
Расширения доступны с платформы 8.3.6. Расширение тоже можно выгрузить в XML и загрузить обратно — для этого у /DumpConfigToFiles и /LoadConfigFromFiles есть ключ -Extension с именем расширения.
Расширение, применённое в рабочей базе, начинает действовать для пользователя после перезапуска его сеанса — так же, как динамическое обновление.
7. Проверка и отладка новой формы на сервере
Сначала проверьте форму в тестовой копии базы, потом в рабочей. В обоих случаях открывайте её под пользователем с обычными правами, а не под администратором. Типичная ловушка — новое поле видно администратору и скрыто у бухгалтера из-за прав на реквизит или функциональных опций.
Что проверить:
- 🔍 форма открывается без ошибок, новые элементы на месте;
- 🔍 существующий документ открывается, записывается и проводится;
- 🔍 печатные формы и команды формы работают;
- 🔍 в журнале регистрации (
Администрирование → Обслуживание → Журнал регистрациив БП 3.0) нет новых ошибок.
Пользователь не видит изменений
Чаще всего виноваты сохранённые настройки формы: если пользователь когда-то перестраивал форму под себя, платформа показывает его вариант. Решения:
- Пользователь сам открывает
Ещё → Изменить формуи возвращает стандартные настройки. - Администратор очищает настройки пользователя:
Администрирование → Настройки пользователей и прав, ссылка на настройки пользователей. - Если не помогло — запуск клиента с ключом
/ClearCacheсбрасывает кэш конфигурации на компьютере пользователя.
Отладка серверного кода формы
Процедуры с директивой &НаСервере выполняются в рабочем процессе кластера. Чтобы ставить в них точки останова, агент сервера 1С должен быть запущен с ключом -debug (для HTTP-отладки — -debug -http). Ключ добавляют в параметры запуска службы агента.
Перезапуск службы агента обрывает все сеансы на этом сервере. Включайте отладку на тестовом сервере или вне рабочего времени. На рабочем сервере не оставляйте её включённой постоянно.
Затем в Конфигураторе: Отладка → Подключение, выберите нужный сеанс и ставьте точки останова в модуле формы.
8. Частые ошибки при обновлении формы
Если загрузка сломала форму, откатиться можно без резервной копии: Конфигурация → Конфигурация базы данных → Вернуться к конфигурации БД. Основная конфигурация вернётся к тому, что сейчас работает у пользователей.
Можно ли обновить форму без Конфигуратора?
.cfe, загруженное в режиме 1С:Предприятие: в БП 3.0 это раздел Администрирование → Печатные формы, отчёты и обработки, ссылка «Расширения». Саму основную конфигурацию без Конфигуратора не изменить.Нужно ли выгонять пользователей, чтобы обновить форму?
Чем внешняя обработка отличается от правки формы?
.epf со своей формой, который подключают к базе без изменения конфигурации. Форму документа или справочника она не заменяет, но может добавить к нему команду.