Как правильно обновить конфигурацию 1С на основе БСП, если стандартные объекты ошибочно помечены как измененные?

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

При работе с конфигурациями 1С, разработанными на основе Библиотеки стандартных подсистем (БСП), разработчики часто сталкиваются с проблемой при обновлении: многие типовые объекты, которые, казалось бы, не подвергались изменениям, система 1С помечает как модифицированные. Это явление мы называем «фантомными» изменениями. Такая ситуация приводит к ошибкам при обновлении и может стать серьезным препятствием для внедрения новых версий БСП. Давайте подробно разберем, почему возникают эти фантомные изменения и как эффективно с ними бороться, обеспечивая гладкое и безопасное обновление вашей конфигурации.

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

Почему возникают "фантомные" изменения в объектах БСП?

Прежде чем перейти к решению, давайте проанализируем, почему платформа 1С может считать неизмененные объекты БСП модифицированными. Это важно для понимания логики процесса и выбора правильной стратегии.

«Фантомные» изменения возникают из-за особенностей внутреннего механизма сравнения конфигураций 1С. Даже если вы не редактировали вручную код общего модуля, изменения могут быть вызваны следующими факторами:

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

Понимание этих причин поможет нам правильно оценить статус объекта в окне сравнения и объединения.

Подготовка к обновлению: обязательные шаги

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

  1. Создайте резервную копию информационной базы: Это самый критически важный шаг. Обязательно сделайте полный бэкап вашей рабочей конфигурации и базы данных. Это может быть как файл .dt, так и копия базы средствами СУБД (для клиент-серверного варианта). Мы должны быть уверены, что в случае неудачного обновления мы сможем легко восстановить систему.
  2. Закройте доступ пользователей: Перед началом обновления убедитесь, что все пользователи вышли из системы. Это предотвратит возможные конфликты и потерю данных во время процесса обновления.
  3. Включите версионирование объектов (по возможности): Если в вашей базе включено версионирование конфигурации (через хранилище конфигурации или средствами самой платформы), это поможет нам в дальнейшем анализировать историю изменений объектов.

После выполнения этих шагов мы можем переходить к процессу обновления.

Пошаговое обновление конфигурации с БСП

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

Шаг 1: Запуск сравнения и объединения конфигураций

Мы открываем вашу конфигурацию в режиме "Конфигуратор". Затем переходим в меню "Конфигурация" -> "Поддержка" -> "Настройка поддержки". В открывшемся окне нажимаем кнопку "Сравнить, объединить с конфигурацией из файла". В появившемся диалоге выбираем файл новой версии БСП, на которую мы хотим обновиться (обычно это файл с расширением .cf или .cfu, содержащий обновление БСП).

Шаг 2: Анализ окна сравнения и объединения

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

  1. Отключите фильтр "Показывать только дважды измененные объекты": По умолчанию этот флаг часто установлен. Нам необходимо его снять, чтобы увидеть абсолютно все объекты конфигурации, а не только те, которые были изменены и в конфигурации поставщика, и в нашей конфигурации. Это позволит нам выявить все «фантомные» изменения.
  2. Тщательно анализируйте список объектов: Внимательно просмотрите список объектов. Каждый объект имеет колонки, показывающие его состояние в текущей конфигурации, в файле поставщика и предлагаемое действие.

Шаг 3: Обработка "фантомных" изменений

Этот шаг является центральным в решении нашей проблемы. Мы сталкиваемся с ситуацией, когда типовые объекты БСП (например, общие модули, подсистемы, роли), которые вы уверены, что не меняли, помечены как "Измененные".

Для таких объектов мы должны выбрать действие "Взять из файла поставщика". Это означает, что мы полностью перезапишем этот объект версией из файла обновления БСП. Мы уверены в этом действии, потому что знаем, что сами его не модифицировали, и любое изменение является "фантомным" или внутренним изменением в БСП, которое мы должны принять.

Примеры объектов, для которых часто встречаются "фантомные" изменения и которые можно смело брать из файла поставщика (если вы их не трогали):

Важный момент: Мы должны быть абсолютно уверены, что объект действительно не менялся нами или другими разработчиками. Как это проверить, мы рассмотрим далее.

Шаг 4: Обработка действительно измененных типовых объектов

Если же вы обнаруживаете, что какой-то типовой объект БСП был действительно изменен в вашей конфигурации (например, вы добавили реквизит в стандартный справочник или изменили код в типовом общем модуле), то подход "Взять из файла поставщика" здесь неприменим, так как он сотрет все ваши доработки.

В этой ситуации у нас есть два основных пути:

Вариант 1: Ручное объединение

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

Вариант 2: Перенос доработок в расширения (рекомендуемый подход)

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

Давайте разберем последовательность работы с расширениями:

  1. Создание нового расширения: В конфигураторе мы переходим в меню "Конфигурация" -> "Расширения конфигурации" -> "Добавить". Мы даем расширению понятное имя и указываем префикс.
  2. Добавление объектов для доработки в расширение: Мы добавляем в расширение те объекты основной конфигурации, которые мы хотим доработать. Например, если мы меняли форму стандартного документа, мы добавляем эту форму в расширение. Если мы меняли общий модуль, мы можем создать в расширении свой общий модуль и вызывать его из подписок на события типовых модулей.
  3. Перенос кода и логики доработок: Мы аккуратно переносим весь измененный нами код и функционал из типовых объектов в объекты нашего расширения.
    • Для форм: мы можем изменить элементы формы, добавить свои реквизиты, обработчики событий.
    • Для общих модулей: вместо прямого изменения типового модуля, мы создаем в расширении новый общий модуль. Затем используем механизмы подписок на события (для процедур/функций, экспортируемых типовым модулем) или вызовов внешних обработок/функций для интеграции нашей логики.
      
      // Пример подписки на событие типового модуля
      // В расширении создаем подписку на событие "ПриСозданииНаСервере" для типовой формы
      Процедура ПриСозданииНаСервере_Расширение(Форма, Отказ, СтандартнаяОбработка) Экспорт
          // Наша доработка
          Форма.Элементы.МойНовыйРеквизит.Видимость = Истина;
      КонецПроцедуры
      
    • Для объектов метаданных (справочники, документы): мы можем добавлять свои реквизиты, табличные части, формы, макеты. Важно помнить, что мы не можем удалять типовые реквизиты или изменять их тип.
  4. Отказ от изменений в основной конфигурации: После того как доработки перенесены в расширение, мы можем откатиться от наших изменений в типовом объекте основной конфигурации. То есть, при следующем обновлении мы сможем выбрать "Взять из файла поставщика" для этого типового объекта, не опасаясь потерять свои доработки, так как они теперь находятся в расширении.

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

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

Возникает логичный вопрос: как мы можем быть абсолютно уверены, что объект не менялся нами, а его изменение является "фантомным"?

  1. История изменений конфигурации: Если у вас включено хранилище конфигурации или версионирование объектов в самой базе (настройки функциональности), мы можем использовать этот механизм. Мы открываем нужный объект в конфигураторе, вызываем контекстное меню и выбираем пункт "История изменений" (или аналогичный). Это позволит нам сравнить текущую версию объекта с более ранними версиями, которые были зафиксированы в хранилище или базе. Если в истории нет наших правок, а есть только изменения, связанные с обновлениями БСП, то объект можно считать "фантомно" измененным.
  2. Сравнение с типовой конфигурацией БСП: Мы можем получить чистую типовую конфигурацию БСП той же версии, с которой мы начинали (например, 3.1.2.378). Затем мы сравниваем наш текущий объект с этим же объектом в чистой типовой конфигурации. Если различий нет, значит, наши доработки отсутствуют.
  3. Внешние Diff-инструменты: Для более глубокого анализа текста модулей мы можем выгрузить конфигурацию в файлы (меню "Конфигурация" -> "Сохранить конфигурацию в файлы..."). Затем использовать специализированные инструменты для сравнения текстов (например, Beyond Compare, WinMerge или встроенные в среды разработки Git-клиентов). Это позволит по строчно увидеть все различия между вашей версией модуля и версией из файла поставщика. Этот метод сложнее, но дает максимальную детализацию.

Обычно, если объект помечен как "Изменен", но относится к типовым механизмам БСП (например, ОбщиеНастройкиКлиентСервер, Подсистемы, роли без ваших доработок), и вы не помните, чтобы вы его трогали, то чаще всего это "фантомное" изменение, которое можно безопасно перезаписать из файла поставщика.

Завершение процесса обновления

После того как мы приняли все решения по объединению и определили действия для каждого измененного объекта (либо "Взять из файла поставщика", либо "Объединить", либо перенесли в расширение и приняли из файла поставщика), мы нажимаем кнопку "Выполнить" в окне "Сравнение и объединение конфигураций".

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

После успешного обновления конфигурации базы данных мы можем запустить систему в режиме "Предприятие" для проведения тестов. Обязательно проверим работоспособность основных типовых механизмов БСП, а также функционал, связанный с нашими доработками (если они были перенесены в расширения или объединены вручную). Мы должны убедиться, что все работает стабильно и без ошибок.

Дополнительные рекомендации и лучшие практики

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

  1. Планирование обновлений: Мы должны регулярно обновлять БСП и платформу 1С. Не стоит откладывать обновления на длительный срок, так как это может привести к накоплению большого количества изменений и усложнению процесса.
  2. Использование расширений по умолчанию: Мы всегда должны стремиться выполнять доработки через расширения, если это технически возможно. Это значительно снижает трудозатраты на поддержку и обновление.
  3. Ведение документации: Мы ведем подробную документацию по всем своим доработкам. Где, что и как было изменено. Это критически важно для понимания, что является нашей доработкой, а что – типовым функционалом.
  4. Тестовые среды: Все обновления сначала мы проводим на копии рабочей базы (тестовой среде). Только после успешного тестирования мы переносим обновление на продуктивную базу.
  5. Использование хранилища конфигурации: Работа в хранилище конфигурации позволяет нам отслеживать изменения, сделанные разными разработчиками, и возвращаться к предыдущим версиям объектов. Это бесценный инструмент для управления разработкой.

Применяя эти подходы, мы сможем эффективно справляться с проблемой «фантомных» изменений при обновлении конфигураций на основе БСП, обеспечивая стабильность и актуальность вашей информационной системы 1С.

← На главную