Как захватить объекты в хранилище 1С по определенной подсистеме?

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

В процессе коллективной разработки на платформе 1С:Предприятие часто возникает задача массового захвата объектов, относящихся к определенному функциональному блоку (подсистеме). Стандартное окно работы с хранилищем (Конфигурация — Хранилище конфигурации — Хранилище) предоставляет список всех объектов, однако в нем отсутствует прямой фильтр по подсистемам. Это создает неудобства, когда нужно захватить, например, 50–100 объектов, разбросанных по дереву метаданных.

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

Метод 1. Использование фильтра в дереве конфигурации

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

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

Важный нюанс: при таком способе платформа предложит захватить именно те объекты, которые видны в текущем представлении дерева. Если объект включен в подсистему, он будет захвачен. Это гораздо быстрее, чем искать каждый объект в общем списке хранилища.

Метод 2. Использование окна сравнения и объединения

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

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

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

Метод 3. Рекурсивный захват (Workaround)

Если подсистема представляет собой иерархическую структуру или включает в себя крупные составные объекты, можно воспользоваться методом рекурсивного захвата, который упоминали разработчики на форуме. Рассмотрим ситуацию, когда нам нужно захватить объект со всеми его подчиненными элементами (формами, макетами, командами).

При вызове команды Захватить в хранилище платформа часто предлагает флаг «Захватывать рекурсивно». Это полезно, если вы работаете с объектом типа Документ или Справочник. Однако будьте осторожны: если вы случайно примените рекурсивный захват к корню конфигурации, вы заблокируете работу всей команды, захватив все объекты базы данных.

Метод 4. Использование среды разработки 1C:EDT

Современная среда разработки 1C:Enterprise Development Tool (EDT), построенная на базе Eclipse, принципиально иначе подходит к работе с версионностью. Рассмотрим преимущества EDT в контексте нашей задачи:

В EDT объекты представлены в виде файловой структуры. Вы можете легко группировать их, использовать мощные средства поиска и фильтрации, встроенные в IDE. Захват объектов (или фиксация изменений в Git, если хранилище используется через мост) происходит через панель Git Staging или через навигатор проекта, где можно выделить целую папку подсистемы и выполнить групповую операцию одним кликом. Если ваша команда перешла на EDT, проблема выбора объектов по подсистеме исчезает сама собой благодаря архитектуре инструмента.

Метод 5. Автоматизация через командную строку и OneScript

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

Мы можем использовать параметры запуска /ConfigurationRepositoryLock для захвата объектов. Чтобы не вводить имена объектов вручную, можно написать небольшой скрипт на языке OneScript, который:

  1. Выгружает структуру конфигурации в файлы (/DumpConfigToFiles).
  2. Парсит файлы подсистем, чтобы получить точный список входящих в них объектов.
  3. Формирует командную строку для конфигуратора со списком всех необходимых объектов для захвата.

Пример логики формирования списка объектов (условно):


// Примерный алгоритм на OneScript для получения состава подсистемы
ПодсистемаФайл = Новый ЧтениеТекста("C:\Dump\Subsystems\МояПодсистема.xml");
// ... парсинг XML для получения имен объектов ...
СписокОбъектов = "Справочник.Клиенты, Документ.ЗаказПокупателя";
ЗапуститьПриложение("1cv8.exe DESIGNER /ConfigurationRepositoryLock -Objects " + СписокОбъектов);

Метод 6. Внешние инструменты (Инструментарий разработчика)

Существуют специализированные расширения и обработки (например, популярные на порталах для разработчиков инструменты), которые встраиваются в контекстное меню или запускаются отдельно. Рассмотрим их возможности:

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

Рекомендации по работе с хранилищем

Выясним причины, по которым важно правильно выбирать стратегию захвата:

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

← На главную