Как быстро клонировать документ из основной конфигурации в расширение 1С?

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

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

Стандартный механизм копирования через буфер обмена

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

  1. Откроем окно конфигурации и найдем интересующий нас документ (например, РеализацияТоваровУслуг).
  2. Выделим объект и нажмем комбинацию клавиш Ctrl+C.
  3. Перейдем в окно расширения конфигурации, выделим корень дерева метаданных расширения или ветку «Документы» и нажмем Ctrl+V.
  4. Альтернативно можно использовать механизм Drag-and-drop: просто зажмите левую кнопку мыши на документе в основной конфигурации и перетащите его в ветку документов расширения.

Важно понимать, что при таком способе платформа автоматически переносит структуру объекта: все его реквизиты, табличные части, формы и модули. Однако на этом работа не заканчивается, так как документ-клон требует адаптации под новую среду.

Массовая замена ссылок в программном коде

После копирования документа в расширение весь программный код в модулях объекта, менеджера и форм остается идентичным оригиналу. Проанализируем ситуацию: если оригинальный документ назывался ЗаказПокупателя, а клон в расширении получил имя пр_ЗаказПокупателя, то все внутренние вызовы в коде будут по-прежнему обращаться к оригинальному типу.

Рассмотрим пример кода в модуле формы, который может вызвать проблему:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
    // Дальнейшая логика
КонецПроцедуры

Чтобы клон работал автономно, необходимо выполнить контекстную замену. Для этого выполним следующие действия:

  1. Откроем модуль скопированного объекта или формы.
  2. Вызовем диалог замены (Ctrl+H).
  3. В поле «Искать» укажем имя старого документа, в поле «Заменить на» — имя нового документа с префиксом.
  4. Выберем область поиска «В текущем тексте» или «В выделенном тексте» и нажмем «Заменить все».

Обеспечение работы движений и регистров

Одной из самых неочевидных проблем при клонировании является потеря способности документа делать движения по регистрам. При простом копировании документа связи с регистрами в расширении не устанавливаются автоматически, если эти регистры еще не добавлены в расширение.

Разберем, как восстановить проведение документа:

  1. Выясним, в какие регистры (накопления, сведений или бухгалтерии) пишет оригинальный документ.
  2. Добавим эти регистры в расширение. Для этого в основной конфигурации нажмем правой кнопкой мыши на регистр и выберем «Добавить в расширение».
  3. Откроем свойства нашего клонированного документа в расширении.
  4. Перейдем на вкладку «Движения».
  5. В списке регистров проставим галочки напротив тех регистров, по которым документ должен формировать записи.

Проанализируем процедуру ОбработкаПроведения в модуле объекта. Убедимся, что обращения к коллекции Движения соответствуют именам регистров, добавленных в расширение. Если в коде используются специфические наборы записей, проверьте их инициализацию.

Копирование команд, прав доступа и подписок на события

Клонированный документ является абсолютно новым объектом метаданных для системы, поэтому он «не наследует» окружение оригинала. Рассмотрим критически важные аспекты, которые часто упускают из виду:

1. Роли и права доступа. Стандартные роли из основной конфигурации ничего не знают о новом документе в расширении. Для того чтобы пользователи могли видеть документ и работать с ним, необходимо либо создать новую роль внутри расширения и дать ей права на этот документ, либо расширить существующие роли, добавив в них права на чтение, добавление и изменение нового объекта.

2. Подписки на события. Если логика оригинала завязана на общие подписки (например, автоматическое присвоение префикса или запись в дополнительные журналы), клон не будет в них участвовать. Выясним, в каких подписках задействован оригинал, и создадим в расширении аналогичные объекты ПодпискаНаСобытие, указав в качестве источника наш новый документ.

3. Команды печати. Если в оригинальном документе использовались команды, созданные как отдельные объекты метаданных в ветке «Команды», их также потребуется скопировать в расширение и перенастроить тип параметра команды на тип нашего нового документа.

Использование префиксов и уникальность имен

При создании клонов в расширении крайне рекомендуется использовать уникальные префиксы (например, ХХ_). Рассмотрим причины, по которым это необходимо:

Альтернативный метод: Использование XML-выгрузки

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

  1. Создадим временную пустую базу (конфигурацию).
  2. Скопируем туда нужный документ из основной базы.
  3. Выполним команду «Конфигурация — Выгрузить конфигурацию в файлы».
  4. В расширении целевой базы воспользуемся механизмом сравнения и объединения, указав путь к выгруженным файлам, и выберем только нужный нам документ.

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

Таким образом, использование Ctrl+C / Ctrl+V остается самым эффективным способом «быстрого старта», но требует обязательной последующей проверки ссылок в коде, настройки прав доступа и восстановления связей с регистрами для корректной работы бизнес-логики клонированного документа. Для проверки состава расширения и корректности вызовов в модулях подойдёт инструмент для анализа расширений и поиска ошибок в коде.

← На главную