Разработка и Конфигурация · 11 мин
Как скопировать форму в 1С
Как скопировать форму в 1С: через конфигуратор, Ctrl+C/Ctrl+V, перетаскивание и между конфигурациями. Особенности управляемых и обычных форм, типичные ошибки.
Копирование формы — одна из базовых операций при доработке конфигураций 1С. Она нужна, когда требуется создать новую форму на основе существующей, перенести форму между объектами метаданных или сделать резервный вариант перед изменениями. В зависимости от задачи используются разные приёмы: стандартное копирование через буфер обмена, перетаскивание мышью или перенос через файлы.
Важно понимать: форма в 1С — это не отдельный файл, а часть объекта конфигурации (справочника, документа, обработки). Она состоит из описания в метаданных, модуля с кодом и, в обычных формах, визуальной разметки. Поэтому корректное копирование выполняется через конфигуратор, а не через файловую систему напрямую.
Ниже разобраны основные способы копирования форм, их ограничения, особенности для управляемых и обычных форм, а также типичные ошибки, из-за которых скопированная форма перестаёт работать.
Когда нужно копировать форму
На практике копирование формы востребовано в нескольких ситуациях. Чаще всего — когда у объекта уже есть рабочая форма (например, форма списка справочника), а нужна похожая форма с небольшими изменениями: дополнительными колонками, отбором или другой командной панелью. Создавать такую форму с нуля дольше, чем скопировать и доработать.
Вторая ситуация — перенос разработки между конфигурациями. Например, форма обработки, написанная для одной базы, нужна в другой. Третья — создание «черновой» копии формы перед рискованной доработкой, чтобы был вариант для отката. Наконец, копирование используют при переименовании объектов: старую форму копируют к новому объекту, а затем удаляют исходную.
Перед копированием убедитесь, что у вас есть права на изменение конфигурации и объект не находится на поддержке с запретом редактирования. Если конфигурация типовая и закрыта от изменений, сначала включите возможность изменения через «Конфигурация → Поддержка → Настройка поддержки».
Копирование формы внутри одного объекта
Самый простой случай — создать копию формы в рамках того же объекта метаданных. Откройте конфигуратор, найдите нужный объект (справочник, документ, обработку) и разверните ветку «Формы». Выделите форму, которую хотите скопировать, и нажмите Ctrl+C или выберите «Копировать» в контекстном меню.
Затем снова встаньте на ветку «Формы» того же объекта и нажмите Ctrl+V. Конфигуратор создаст новую форму с тем же содержимым и предложит задать ей имя. Имя должно быть уникальным в рамках объекта и соответствовать правилам именования идентификаторов: без пробелов, без начала с цифры, только буквы, цифры и подчёркивания.
- 1Откройте конфигуратор и найдите объект метаданных с нужной формой
- 2Разверните ветку «Формы», выделите форму и нажмите Ctrl+C
- 3Встаньте на ветку «Формы» целевого объекта и нажмите Ctrl+V
- 4Задайте уникальное имя новой формы и подтвердите создание
- 5Откройте модуль скопированной формы и проверьте обращения к реквизитам
- 6Сохраните конфигурацию (Ctrl+S) и обновите конфигурацию базы данных (F7)
- 7Запустите 1С в режиме предприятия и откройте новую форму для проверки
После копирования форма не назначается автоматически ни на одну из ролей (форма по умолчанию, форма списка, форма выбора). Чтобы новая форма использовалась, откройте свойства объекта и укажите её в соответствующем поле, либо вызывайте её программно через ПолучитьФорму() или ОткрытьФорму().
Копирование формы между объектами одной конфигурации
Если форму нужно перенести к другому объекту — например, из одной обработки в другую — приём тот же: скопируйте форму, встаньте на ветку «Формы» целевого объекта и вставьте. Конфигуратор перенесёт описание формы и её модуль.
Здесь начинаются подводные камни. Если в модуле формы есть обращения к реквизитам исходного объекта (например, Объект.Номенклатура для справочника), а у нового объекта таких реквизитов нет, форма откроется с ошибками или не откроется вовсе. После копирования пройдитесь по модулю и элементам формы и уберите или замените все привязки, которых нет у нового владельца.
Для управляемых форм дополнительно проверьте реквизиты формы: они хранятся внутри описания формы и переносятся целиком. Если реквизит формы имеет ссылочный тип на объект, которого нет в целевой конфигурации, такой реквизит придётся удалить или изменить его тип.
Перенос формы между разными конфигурациями
Буфер обмена конфигуратора не работает между двумя открытыми конфигураторами разных баз — вставить форму из одного окна в другое не получится. Для переноса между конфигурациями используются другие механизмы.
Первый способ — сравнение и объединение конфигураций. В конфигураторе целевой базы выберите «Конфигурация → Сравнить, объединить с конфигурацией из файла», укажите выгруженный .cf-файл исходной конфигурации и в диалоге сравнения отметьте только нужную форму. Платформа перенесёт её вместе с модулем. Этот способ надёжен, но требует аккуратности, чтобы не затянуть лишние объекты.
Второй способ — выгрузка конфигурации в файлы («Конфигурация → Выгрузить конфигурацию в файлы») и перенос нужных файлов формы вручную с последующей загрузкой. Способ подходит опытным разработчикам, так как структура файлов должна остаться согласованной. Третий вариант для обработок: сохранить внешнюю обработку, открыть её в целевой базе и перенести форму уже внутри неё.
Способы переноса формы
Подходит внутри одной конфигурации. Быстро, но не работает между разными базами
Подходит для переноса между базами. Требует внимательного отбора объектов, чтобы не перенести лишнее
Гибкий способ для опытных разработчиков. Высок риск рассогласования структуры файлов
Удобно для переноса форм обработок: сохранили .epf, открыли в целевой базе, скопировали форму
Особенности управляемых и обычных форм
Управляемые формы (режим «Такси» и управляемое приложение) копируются целиком: переносятся реквизиты формы, команды, элементы и модуль. Однако в модуле управляемой формы часто встречаются обращения к контексту владельца и директивы &НаКлиенте, &НаСервере с вызовами серверных процедур общих модулей. Если целевая конфигурация не содержит этих общих модулей, код нужно адаптировать.
Обычные формы (для приложений в режиме обычного приложения) хранят визуальную разметку отдельно от модуля. При копировании через конфигуратор разметка переносится автоматически. Но если переносить обычную форму файлами, легко потерять связь между разметкой и модулем — форма откроется пустой или с ошибкой.
Ещё одно отличие: в управляемых формах нельзя напрямую использовать некоторые элементы обычных форм и наоборот. Копировать форму между объектами с разными режимами работы форм можно, но результат почти всегда потребует переработки интерфейса.
Проверка результата после копирования
После копирования и сохранения конфигурации выполните проверку встроенными средствами: «Конфигурация → Проверка конфигурации». Отметьте проверку модулей — она покажет синтаксические ошибки и обращения к несуществующим реквизитам в скопированной форме.
Затем обновите конфигурацию базы данных (F7) и запустите режим предприятия. Откройте новую форму тем способом, которым её будут открывать пользователи: через интерфейс объекта, если она назначена формой по умолчанию, или программно, если она вызывается из кода. Проверьте заполнение реквизитов, работу кнопок и команд, сохранение данных.
Как проверить результат
Форма открывается без сообщений об ошибках
Ошибка «Метод объекта не обнаружен» или «Поле объекта не обнаружено»
Все поля отображаются и связаны с данными
Пустые поля или элементы без привязки к реквизитам
Кнопки выполняют заявленные действия
При нажатии возникает ошибка или ничего не происходит
Данные записываются и перечитываются корректно
Данные теряются или запись завершается ошибкой
Типичные ошибки и как их избежать
Наиболее частая ошибка — копирование формы без проверки модуля. Модуль переносится как есть, и все обращения к реквизитам исходного объекта, общим модулям и менеджерам объектов остаются. В новом контексте они ломаются. Правило простое: после копирования всегда прогоняйте проверку конфигурации.
Вторая ошибка — попытка скопировать форму между базами через буфер обмена. Конфигураторы разных баз не делят общий буфер метаданных, поэтому вставка либо не сработает, либо вставит текст. Используйте сравнение/объединение или выгрузку в файлы.
Третья ошибка — забыть назначить скопированную форму. Форма существует в конфигурации, но нигде не используется, и пользователь видит старую. Проверьте свойства объекта и код, открывающий формы.
Как выбрать действие
Если доработка выполняется в типовой конфигурации, учитывайте последствия для обновлений: изменённые и добавленные формы усложняют автоматическое обновление. Альтернатива — выносить доработки в расширения конфигурации, где формы тоже можно заимствовать и переопределять без изменения основной конфигурации.
Часто задаваемые вопросы
Можно ли скопировать форму без конфигуратора?
Нет. Форма — часть метаданных конфигурации, и работать с ней можно только через конфигуратор, механизм расширений или инструменты выгрузки/загрузки конфигурации. В режиме предприятия формы не копируются.
Почему скопированная форма не открывается и выдаёт ошибку?
Чаще всего модуль формы обращается к реквизитам или общим модулям, которых нет у нового объекта или в целевой конфигурации. Запустите проверку конфигурации — она укажет конкретные строки с ошибками.
Как скопировать форму из типовой конфигурации в свою доработку?
Откройте типовую конфигурацию, скопируйте форму в буфер, затем вставьте её в свой объект в той же базе. Если доработка в другой базе — выгрузите типовую конфигурацию в .cf и перенесите форму через сравнение и объединение.
Можно ли скопировать форму через расширение конфигурации?
В расширении форму не копируют, а заимствуют: добавляемая форма наследует состав исходной и позволяет добавлять свои элементы и обработчики. Это предпочтительный способ доработки типовых конфигураций, так как он не мешает обновлениям.
Копируется ли модуль формы вместе с формой?
Да, при копировании через конфигуратор модуль переносится целиком вместе с описанием формы, реквизитами и командами. Именно поэтому после копирования модуль нужно проверить на обращения к объектам, которых нет в новом контексте.
Что делать, если имя новой формы уже занято?
Имена форм уникальны в рамках объекта. Либо задайте другое имя (например, добавьте префикс проекта), либо удалите или переименуйте существующую форму, если она больше не нужна.
Что важно запомнить
Формы в 1С копируются через конфигуратор: Ctrl+C / Ctrl+V внутри базы, сравнение и объединение — между базами. После копирования обязательно проверьте модуль, назначьте форму объекту и протестируйте её работу в режиме предприятия. Для доработки типовых конфигураций предпочтительнее расширения.