Разработка и поддержка прикладных решений на платформе 1С часто сталкивает специалистов с необходимостью параллельной работы. Типичный сценарий: программист делает локальную копию рабочей базы, вносит изменения (например, дорабатывает модуль документа), в то время как в рабочей базе другие пользователи или разработчики продолжают активно изменять данные и метаданные. При попытке перенести свои доработки обратно возникает резонный вопрос: как правильно перенести код и не затереть чужие изменения или, что еще хуже, не лишиться накопленных учетных данных?
В этой статье мы подробно разберем внутренние механизмы сопоставления объектов в 1С, проанализируем разницу между опасными и безопасными методами обновления, а также рассмотрим современные инструменты, которые сводят подобные риски к нулю.
Прежде чем переходить к практическим действиям, разберем базовый принцип работы платформы 1С. Платформа идентифицирует любые объекты метаданных (справочники, документы, реквизиты, регистры) не по их синонимам или именам, а по внутренним уникальным идентификаторам — UUID (GUID). Это шестнадцатеричные строки, которые генерируются автоматически при создании объекта.
Рассмотрим детально, к чему ведет непонимание этого механизма на конкретном примере:
ПоступлениеТоваровУслуг с реквизитом Ответственный (его UUID, предположим, равен 1111-2222-...).Ответственный. Платформа создает новый объект метаданных и присваивает ему совершенно новый UUID (например, 9999-8888-...).1111-2222-... был удален, а новый с UUID 9999-8888-... — создан с нуля.Именно поэтому важно всегда помнить: совпадение имен объектов в конфигураторе не гарантирует их идентичности для платформы 1С.
В конфигураторе 1С существуют две принципиально разные операции для переноса изменений из внешнего файла конфигурации .cf. Разберем их различия и уровень опасности для рабочей базы данных.
1. Операция "Загрузить конфигурацию из файла..."
Этот инструмент выполняет полное замещение текущей конфигурации базы данных конфигурацией из файла .cf. При этом заменяется вся структура метаданных вместе со всей историей UUID. Если рабочая база успела уйти вперед (в ней были добавлены новые реквизиты, документы или изменены типы данных), то при выполнении этой команды платформа попытается физически удалить все несоответствующие таблицы в СУБД.
Использовать команду "Загрузить конфигурацию из файла" на рабочей базе категорически запрещено, если вы не уверены на 100%, что конфигурация-источник абсолютно идентична рабочей по своей структуре и истории развития.
2. Операция "Сравнить, объединить с конфигурацией из файла..."
Это единственный безопасный и профессиональный способ интеграции изменений в работающую систему. Данный режим позволяет детально сопоставить структуру метаданных, программный код и формы. Главное преимущество инструмента — интерактивность. Вы можете вручную отметить галочками только те объекты, формы или модули, которые действительно необходимо перенести.
Выясним правильный алгоритм действий для безопасного переноса доработанного куска кода в документе ПоступлениеТоваровУслуг из локальной копии обратно в рабочую базу.
Шаг 1. Создание резервной копии. Перед любыми манипуляциями с конфигурацией рабочей базы обязательно создайте резервную копию. Если база файловая, скопируйте файл 1CD. Если база клиент-серверная, выполните резервное копирование средствами СУБД (MS SQL, PostgreSQL) или выгрузите файл .dt.
Шаг 2. Выгрузка эталонного файла конфигурации. Откройте конфигуратор рабочей базы и выполните команду Конфигурация -> Сохранить конфигурацию в файл.... Полученный файл .cf будет содержать актуальную структуру метаданных рабочей базы.
Шаг 3. Сравнение и объединение в локальной копии (или на тестовом контуре). Перейдите в конфигуратор вашей копии, где вы писали новый код. Выполните команду Конфигурация -> Сравнить, объединить с конфигурацией из файла... и выберите файл .cf, выгруженный на предыдущем шаге из рабочей базы. Настройте правила объединения так, чтобы ваш написанный кусок кода добавился к логике рабочей базы, но при этом структура метаданных (реквизиты, UUID объектов) осталась неизменной.
Шаг 4. Настройка правил объединения. В открывшемся окне сравнения и объединения обратите внимание на следующие моменты:
ПоступлениеТоваровУслуг дважды кликните по строке объекта, чтобы открыть детальное сравнение модулей. Убедитесь, что переносится только нужная процедура или функция, а не весь модуль целиком (особенно если в рабочей базе этот модуль за это время успели поправить другие разработчики).Шаг 5. Выгрузка результирующего файла изменений. После того как вы успешно объединили код в своей копии и проверили его работоспособность, выгрузите итоговый файл .cf вашей копии.
Шаг 6. Обновление рабочей базы. Зайдите в конфигуратор рабочей базы, запустите Конфигурация -> Сравнить, объединить с конфигурацией из файла..., укажите итоговый файл .cf. Убедитесь, что в списке изменений присутствуют только планируемые к переносу процедуры модуля документа ПоступлениеТоваровУслуг. Нажмите кнопку "Выполнить" и обновите конфигурацию базы данных с помощью клавиши F7.
Если перед вами стоит задача "добавить кусок кода в документ ПоступлениеТоваровУслуг", то в современных версиях платформы 1С v8.3 лучшим решением является создание Расширения конфигурации. Этот механизм позволяет вообще не вносить изменения в основную конфигурацию и не снимать её с поддержки.
Разберем процесс использования расширения по шагам:
ПоступлениеТоваровУслуг в основной конфигурации, нажмите по нему правой кнопкой мыши и выберите пункт Добавить в расширение.&Перед, &После или &Вместо.Посмотрим на пример кода, написанного в модуле расширения:
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Наш кусок кода, который выполнится сразу после стандартного обработчика рабочей базы
Если ЭтотОбъект.Проведен Тогда
ВыполнитьДополнительныеПроверки()
КонецЕсли;
КонецПроцедуры
Преимущества такого подхода очевидны:
Если над проектом работают хотя бы два разработчика, классический обмен файлами .cf становится крайне опасным и трудоемким. Для решения этой проблемы в 1С встроен инструмент Хранилище конфигурации.
Принцип работы хранилища прост и надежен:
ПоступлениеТоваровУслуг) программист должен выполнить операцию Захватить в хранилище.После успешного переноса изменений через сравнение и объединение часто возникает соблазн применить изменения "на лету" (без выгона пользователей из базы), нажав синюю бочку в конфигураторе. Проанализируем риски этого действия.
Регулярные динамические обновления часто приводят к рассинхронизации кэша конфигурации на сервере приложений или на клиентских компьютерах пользователей. В результате система может начать вести себя непредсказуемо, выдавая критические ошибки вроде "Ошибка формата потока".
Рекомендуется применять изменения монопольно, когда в системе нет активных сеансов. Если динамическое обновление всё же было выполнено и пользователи столкнулись со сбоями, первым делом очистите локальный кэш конфигурации на проблемных рабочих станциях или перезапустите службу сервера 1С:Предприятие.