В процессе сопровождения программ на базе «1С:Предприятие 8» специалисты часто сталкиваются с необходимостью внесения изменений в типовые конфигурации. Основная сложность заключается не столько в написании кода, сколько в последующем сохранении этих изменений при установке обновлений от вендора. Разберем подробно, как управлять версиями объектов и какие инструменты использовать, чтобы ваши доработки не «пропадали».
Прежде всего, проанализируем ситуацию с версионированием. В платформе 1С не существует автоматического счетчика версий для каждого отдельного объекта (справочника, документа или обработки). Если вы изменили код в модуле, номер версии конфигурации сам по себе не изменится. Рассмотрим, как можно идентифицировать версию в разных сценариях.
Для внешних обработок, разработанных по стандартам БСП (Библиотеки стандартных подсистем), версия обычно указывается в модуле объекта. Проанализируем программный интерфейс: в модуле должна присутствовать экспортная функция СведенияОВнешнейОбработке. Посмотрим на пример ее реализации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОбработкиСозданиеСвязанныхОбъектов();
ПараметрыРегистрации.Наименование = "Моя обработка (доработка)";
ПараметрыРегистрации.Версия = "1.1.10.15"; // Вот здесь разработчик указывает версию
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Если же обработка встроена в конфигурацию, то отдельного поля «Версия» у нее нет. В этом случае версию можно отслеживать только по версии всей конфигурации или по комментариям в модуле. Чтобы выяснить, откуда вызывается обработка, используем механизм поиска ссылок. Нажмем правой кнопкой мыши на объект в дереве метаданных и выберем пункт «Найти ссылки на объект». Это позволит нам увидеть все формы, команды и программные модули, где задействован данный объект.
Выясним причину, по которой при обновлении могут пропадать права доступа или измененные реквизиты. Если вы вносите изменения непосредственно в типовую конфигурацию (снимаете «замок»), то при следующем обновлении через сравнение и объединение система может затереть ваши правки приоритетными данными из нового файла поставки (.cf или .cfu).
Рассмотрим наиболее современный и безопасный метод — Расширения конфигурации. Это отдельный слой метаданных, который «накладывается» на основную конфигурацию. Разберем преимущества этого подхода:
Проанализируем ситуацию, когда необходимо программно узнать версию установленного расширения. Для этого используем коллекцию РасширенияКонфигурации:
ИмяРасширения = "МоиДоработки";
НайденноеРасширение = РасширенияКонфигурации.Найти(ИмяРасширения);
Если НайденноеРасширение <> Неопределено Тогда
Сообщить("Установлена версия: " + НайденноеРасширение.Версия);
КонецЕсли;
Если использование расширений невозможно (например, из-за старой версии платформы или специфики доработок), разберем, как правильно проводить обновление через Настройку поддержки. Процесс должен выглядеть следующим образом:
Зайдем в меню Конфигурация — Поддержка — Настройка поддержки. Здесь мы видим статусы объектов. Чтобы ваши изменения не терялись, объект должен иметь статус «Объект поставщика редактируется с сохранением поддержки». При выполнении обновления (Конфигурация — Поддержка — Обновить конфигурацию) 1С откроет окно сравнения и объединения.
В этом окне крайне важно проанализировать трехстороннее сравнение. Система сравнивает три версии: старую конфигурацию поставщика, новую конфигурацию из обновления и вашу текущую базу с доработками. Рассмотрим правила настройки фильтров в этом окне:
Чтобы автоматизировать процесс и точно знать, «что именно установлено», профессиональные разработчики используют Хранилище конфигурации. Рассмотрим, как это помогает в версионировании:
При каждом помещении изменений в хранилище система присваивает версии порядковый номер (1, 2, 3...). В комментарии к версии принято указывать номер задачи или краткое описание изменений. Если вы хотите передать изменения на другую базу, вы можете создать файл поставки (.cf) собственной разработки. Таким образом, ваша база будет находиться на поддержке у двух поставщиков: у фирмы «1С» (для типового функционала) и у вас (для ваших доработок). Это позволит системе более четко разделять изменения при сравнении.
Одной из самых частых проблем является «затирание» прав доступа. Выясним, как этого избежать. Права в 1С — это сложный объект метаданных. Если вы добавили право на новый реквизит в типовую роль ПолныеПрава, то при обновлении 1С заменит эту роль на свою, где вашего реквизита еще нет в списке исключений или разрешений.
Рассмотрим правильный алгоритм:
МоиИзменения_Дополнительно.В завершение подчеркнем: знание номера версии — это лишь верхушка айсберга. Ключ к успешному сопровождению 1С лежит в использовании правильных инструментов (расширения, БСП, настройка поддержки) и дисциплине ведения разработки.