Как правильно работать с хранилищем конфигурации 1С и не потерять свой код?

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

Работа в команде над одним проектом в 1С требует четкого понимания механизмов взаимодействия с Хранилищем конфигурации. Одной из самых коварных настроек является опция «Разрешить получать захваченные». Часто начинающие (а иногда и опытные) разработчики сталкиваются с ситуацией, когда результаты их многочасового труда бесследно исчезают после простого обновления конфигурации из хранилища. В этой статье мы подробно разберем, как работает этот механизм, почему происходит затирание данных и какие современные инструменты позволяют избежать подобных проблем.

Разбираем механизм «Разрешить получать захваченные»

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

Важно понимать: это действие является критическим. Проанализируем, что происходит на техническом уровне:

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

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

Что делать, если код уже затерт?

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

  1. Откройте модуль, код в котором был утерян.
  2. Нажмите правой кнопкой мыши в любом месте текстового редактора.
  3. Выберите пункт «Текст» — «Локальная история» — «Показать историю».
  4. В открывшемся окне вы увидите список всех промежуточных сохранений модуля на вашем локальном компьютере. Выберите версию до момента «получения» из хранилища и восстановите код.

Различие между «Получением» и «Захватом»

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

Посмотрим на типичный рабочий процесс:

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

Проблема одновременного редактирования и расширения

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

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


&Вместо("ПриПринятииРешения")
Процедура Расш1_ПриПринятииРешения(Параметр1, Параметр2)
    // Сначала выполняем стандартную логику
    ПродолжитьВызов(Параметр1, Параметр2);
    
    // Добавляем свою логику
    Сообщить("Выполнено расширение №1");
КонецПроцедуры

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

Переход на Git и EDT (1C:Enterprise Development Tools)

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

Проанализируем, как строится работа в Git:

Администрирование и стабильность хранилища

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

1. Сокращение истории. Регулярно проводите процедуру оптимизации. Хранить историю изменений пятилетней давности в рабочей базе часто нет смысла. Администратор может «отрезать» старые версии, что существенно ускорит получение объектов новыми разработчиками.

2. Использование сервера хранилища. Вместо прямого доступа к файлу через сетевую папку (протокол file://), настоятельно рекомендуем использовать Сервер хранилища конфигурации 1С (протокол tcp://). Это на порядок повышает стабильность базы хранилища и защищает её от повреждений при разрыве сетевого соединения во время помещения крупных объектов.

3. Тестирование и исправление. В меню «Конфигурация — Хранилище конфигурации» есть пункт «Администрирование», где можно запустить проверку целостности базы. Это стоит делать превентивно раз в месяц, особенно если в команде более 5 человек.

Особенности работы с формами и макетами

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

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

← На главную