При разработке в среде 1С часто возникает необходимость создать полную копию существующего документа в расширении для его последующей глубокой модификации, при этом сохраняя оригинальный объект в основной конфигурации нетронутым. Ручное создание десятков реквизитов, табличных частей, форм и перенос кода модулей — процесс трудозатратный и подверженный ошибкам. В данной статье мы разберем наиболее эффективные способы клонирования объектов метаданных и сопутствующие технические нюансы, которые необходимо учесть для корректной работы клона.
Самым простым и быстрым способом переноса документа является использование стандартных команд операционной системы. Разберем по шагам, как это реализовать в конфигураторе:
РеализацияТоваровУслуг).Важно понимать, что при таком способе платформа автоматически переносит структуру объекта: все его реквизиты, табличные части, формы и модули. Однако на этом работа не заканчивается, так как документ-клон требует адаптации под новую среду.
После копирования документа в расширение весь программный код в модулях объекта, менеджера и форм остается идентичным оригиналу. Проанализируем ситуацию: если оригинальный документ назывался ЗаказПокупателя, а клон в расширении получил имя пр_ЗаказПокупателя, то все внутренние вызовы в коде будут по-прежнему обращаться к оригинальному типу.
Рассмотрим пример кода в модуле формы, который может вызвать проблему:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
// Дальнейшая логика
КонецПроцедуры
Чтобы клон работал автономно, необходимо выполнить контекстную замену. Для этого выполним следующие действия:
Одной из самых неочевидных проблем при клонировании является потеря способности документа делать движения по регистрам. При простом копировании документа связи с регистрами в расширении не устанавливаются автоматически, если эти регистры еще не добавлены в расширение.
Разберем, как восстановить проведение документа:
Проанализируем процедуру ОбработкаПроведения в модуле объекта. Убедимся, что обращения к коллекции Движения соответствуют именам регистров, добавленных в расширение. Если в коде используются специфические наборы записей, проверьте их инициализацию.
Клонированный документ является абсолютно новым объектом метаданных для системы, поэтому он «не наследует» окружение оригинала. Рассмотрим критически важные аспекты, которые часто упускают из виду:
1. Роли и права доступа. Стандартные роли из основной конфигурации ничего не знают о новом документе в расширении. Для того чтобы пользователи могли видеть документ и работать с ним, необходимо либо создать новую роль внутри расширения и дать ей права на этот документ, либо расширить существующие роли, добавив в них права на чтение, добавление и изменение нового объекта.
2. Подписки на события. Если логика оригинала завязана на общие подписки (например, автоматическое присвоение префикса или запись в дополнительные журналы), клон не будет в них участвовать. Выясним, в каких подписках задействован оригинал, и создадим в расширении аналогичные объекты ПодпискаНаСобытие, указав в качестве источника наш новый документ.
3. Команды печати. Если в оригинальном документе использовались команды, созданные как отдельные объекты метаданных в ветке «Команды», их также потребуется скопировать в расширение и перенастроить тип параметра команды на тип нашего нового документа.
При создании клонов в расширении крайне рекомендуется использовать уникальные префиксы (например, ХХ_). Рассмотрим причины, по которым это необходимо:
В редких случаях, когда прямое копирование между окнами конфигуратора работает некорректно (например, из-за различий в версиях или специфических ошибок кэша), можно воспользоваться методом выгрузки в файлы. Посмотрим, как это работает:
Этот метод более сложен, но позволяет «очистить» объект от лишних связей и детально проконтролировать процесс загрузки каждого элемента метаданных через окно сравнения-объединения. Для выборочного переноса метаданных можно применить обработку для выборочной выгрузки и загрузки объектов конфигурации.
Таким образом, использование Ctrl+C / Ctrl+V остается самым эффективным способом «быстрого старта», но требует обязательной последующей проверки ссылок в коде, настройки прав доступа и восстановления связей с регистрами для корректной работы бизнес-логики клонированного документа. Для проверки состава расширения и корректности вызовов в модулях подойдёт инструмент для анализа расширений и поиска ошибок в коде.