При совместной командной разработке в среде 1С:Предприятие через механизм Хранилища конфигурации разработчики нередко сталкиваются с ситуацией: в процессе работы создано несколько новых объектов метаданных (к примеру, новый документ ЗаявкаНаЗамену и новый план обмена ПланОбменаССайтом). Задача по плану обмена уже завершена и протестирована, а работа над документом еще продолжается. При попытке передать готовый план обмена в Хранилище Конфигуратор выдает ошибку:
«Для выполнения операции требуется помещение объектов: ЗаявкаНаЗамену»
Попытка снять флажок с недоработанного объекта ни к чему не приводит — система упорно блокирует раздельное помещение. Разберем архитектурные причины такого поведения платформы и детально рассмотрим несколько проверенных способов решения этой проблемы.
Проанализируем внутреннее устройство конфигурации. В системе 1С корень конфигурации представляет собой служебный объект, который хранит структуру всего дерева метаданных и уникальные идентификаторы (UUID) всех существующих в системе объектов. Для добавления любого нового элемента разработчик обязан захватить корень конфигурации.
Когда мы создаем одновременно несколько новых объектов, информация о них записывается в локальный экземпляр корня конфигурации. Для успешной фиксации изменений в Хранилище действуют жесткие правила целостности:
Именно поэтому механизм Хранилища воспринимает добавление группы новых объектов как единое неделимое изменение дерева метаданных.
Рассмотрим самый надежный практический сценарий, позволяющий сохранить все локальные наработки по незавершенному объекту и при этом передать в общее Хранилище только готовый функционал. Разберем процесс по шагам:
backup_work.cf).backup_work.cf.ПланОбменаССайтом. Документ ЗаявкаНаЗамену оставляем неотмеченным. Нажимаем Выполнить.backup_work.cf, но теперь отмечаем флажком только наш недоработанный документ ЗаявкаНаЗамену. Применяем объединение и продолжаем разработку в спокойном режиме.Если корень конфигурации срочно требуется освободить для других участников команды, а выгрузка в файл кажется слишком долгой, применим альтернативный подход: зафиксируем все объекты разом, но временно скроем недоработанный функционал.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
#Если Не Внедрение Тогда
ВызватьИсключение НСтр("ru = 'Объект находится в разработке и временно недоступен.'");
#КонецЕсли
КонецПроцедуры
ЗаявкаНаЗамену для продолжения работы.Посмотрим на более современный и удобный способ изоляции функционала без риска заблокировать Хранилище. Незавершенный объект можно на время вынести в отдельное локальное расширение:
Дополнение или Адаптация). Локальные расширения не привязаны к Хранилищу основной конфигурации.ЗаявкаНаЗамену в расширение.ПланОбменаССайтом и корень метаданных в Хранилище — никаких конфликтов зависимостей больше не возникнет.В крупных командах захват корня конфигурации часто становится «бутылочным горлышком», блокирующим параллельную работу. Чтобы свести к минимуму необходимость захвата корня, опытные разработчики используют превентивное создание пустых объектов («болванок»):
Справочник1...Справочник5, Документ1...Документ5, РегистрСведений1...РегистрСведений5.Выбор конкретного метода зависит от принятых в проекте регламентов: для быстрых разовых задач отлично подходит вариант с промежуточным объединением через .cf-файл, а для постоянной масштабной разработки стоит настроить работу через расширения или пул предварительно созданных объектов.