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

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

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

Определение версии объекта и его происхождения

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОбработкиСозданиеСвязанныхОбъектов();
    ПараметрыРегистрации.Наименование = "Моя обработка (доработка)";
    ПараметрыРегистрации.Версия = "1.1.10.15"; // Вот здесь разработчик указывает версию
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    Возврат ПараметрыРегистрации;
КонецФункции

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

Правильная стратегия внесения изменений: Расширения vs Изменение кода

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

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

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

Проанализируем ситуацию, когда необходимо программно узнать версию установленного расширения. Для этого используем коллекцию РасширенияКонфигурации:


ИмяРасширения = "МоиДоработки";
НайденноеРасширение = РасширенияКонфигурации.Найти(ИмяРасширения);
Если НайденноеРасширение <> Неопределено Тогда
    Сообщить("Установлена версия: " + НайденноеРасширение.Версия);
КонецЕсли;

Механизм обновления измененной конфигурации

Если использование расширений невозможно (например, из-за старой версии платформы или специфики доработок), разберем, как правильно проводить обновление через Настройку поддержки. Процесс должен выглядеть следующим образом:

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

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

Использование хранилища и файлов поставки

Чтобы автоматизировать процесс и точно знать, «что именно установлено», профессиональные разработчики используют Хранилище конфигурации. Рассмотрим, как это помогает в версионировании:

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

Рекомендации по сохранению прав доступа (Ролей)

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

Рассмотрим правильный алгоритм:

  1. Создайте новую роль, например, МоиИзменения_Дополнительно.
  2. В этой роли проставьте права только на те объекты и реквизиты, которые вы добавили сами.
  3. Назначьте эту роль пользователям через профили групп доступа.
  4. При обновлении ваша роль останется нетронутой, так как она отсутствует в файле поставки 1С.

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

← На главную