03.11.2021

Инструкция по созданию патчей (оперативных исправлений ошибок)

1. Патчи следует выпускать для оперативного исправления критичных ошибок в прикладных решениях и библиотеках, не дожидаясь выпуска очередного исправительного релиза ("минуя" длительную процедуру выпуска и встраивания библиотек – в случае ошибок в библиотеках).

Критичность определяется ответственным за прикладное решение (библиотеку). 

2. Технически патч – это расширение конфигурации, которое имеет небольшой размер (по сравнению с файлом поставки или обновления конфигурации), и установка которого не требует длительного обновления и блокировки работы пользователей. Для применения патча достаточно перезапустить сеанс.

Установка и удаление патчей реализована в 1С:Библиотека стандартных подсистем, а в 1С:Библиотека интернет-поддержки предусмотрена автоматическая загрузка патчей с портала 1C:Обновление программ. Вариант установки патчей (ручной или автоматический) в "коробках" контролирует администратор, а в модели сервиса – администратор сервиса (требуется подключение экземпляра облачного решения 1C:Fresh к порталу 1С:ИТС). Для "коробок" и облачных решений без подключения к интернету также возможно загружать интересующие патчи с портала 1C:Обновление программ на флешку и устанавливать с нее.

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

Создание патчей с помощью конфигуратора

Сначала исходную ошибку, которую требуется закрыть патчем, необходимо исправить и протестировать штатным образом. Изменения по исправлению ошибки поместить в рабочее хранилище проекта.

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

Для этого создать новое расширение конфигурации (если изменять ранее созданное расширение для другой ошибки, то это приведет к исключению при одновременном подключении этих расширений) и выполнить действия:

  1. Указать свойства расширения:   
  2. Не удалять объект метаданных Язык – Русский.    
  3. Перенести изменения в расширение-патч. 
  4. Создать и заполнить макет, который описывает содержимое патча и информацию о нем: Копировать в буфер обмена

    <Patch xmlns="http://www.v8.1c.ru/ssl/patch" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Name>EF_00_00268773</Name>    
     <Description>В веб-клиенте при сохранении некоторых печатных форм может быть недоступен выбор папки сохранения.</Description>    
     <UUID>abfde8f7-7ac4-43a9-9521-d291d0d0d6c3</UUID> 
     <ModifiedMetadata>ОбщаяФорма.СохранениеПечатнойФормы.ПриСозданииНаСервере</ModifiedMetadata> 
     <AppliedFor>    
      <ConfigurationName>СтандартныеПодсистемы</ConfigurationName>    
      <Versions>3.1.2.229,3.1.2.245</Versions>    
     </AppliedFor>
    </Patch>

    где:

При переносе исправления ошибки в расширение следует учитывать следующее. Новые процедуры и функции следует добавлять в расширение с префиксом патча, например, вместо

"ИмяМоейПроцедуры" следует указывать

"EF_<произвольный_номер_ошибки>_ИмяМоейПроцедуры".

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

Создание патчей с помощью Системы проектирования прикладных решений (СППР)

Первичная настройка

  1. Развернуть сервер репозиториев git (например, GitLab) и указать его адрес в карточке проекта в СППР.
  2. Переключиться на закладку Общая информация проекта и заполнить поля Имя конфигурации – то, что указано в модуле ОбновлениеИнформационнойБазы<Сокращение> и Идентификатор программы – идентификатор в сервисах Интернет-поддержки пользователей. Если СППР будет использоваться только для создания патчей, без их публикации, то идентификатор программы заполнять не обязательно.
  3. В карточке версии:

Создание патчей для ошибок

  1. Исправить ошибку в хранилище проекта.
  2. В карточке ошибки в СППР внизу на закладке Исправление включить флажок Создать патч по исправлению ошибки.
  3. Описание патча автоматически заполнится из публикуемого описания ошибки.
  4. Дождаться готовности патча, проверить его на версии, в которой ошибка была привнесена, и нажать Проверен в карточке патча (для каждой версии, если патч создается сразу для нескольких версий проекта). 
  5. Сформированный патч сохранить по кнопке Сохранить патч… и передать пользователям.
  6. Если СППР подключен к базе публикации, то нажать Опубликовать. После чего патч будет отправлен в базу публикации и вскоре окажется доступен для автоматической загрузки с портала 1C:Обновление программ.

Отзыв патчей с портала 1C:Обновление программ

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

  1. Открыть карточку интересующего патча. 
  2. В меню Еще списка версий патча нажать Отозвать. После чего информация об отзыве патча будет отправлена на портал 1C:Обновление программ.

Если патч публиковался вручную на портале 1C:Обновление программ, то отзыв так же выполняется вручную.

После доисправления ошибки появится возможность вновь опубликовать патч для нее.

Если патч не удалось создавать автоматически

Не во всех случаях возможно создать патч автоматически, например:

В первых двух случаях рекомендуется выполнить оставшиеся действия вручную, внеся изменения непосредственно в сформированное расширение, и опубликовать получившийся патч.

Рекомендации и ограничения технологии патчей

Патчи подходят для исправления ошибок:

Патчи не подходят:

Один патч должен "точечно" исправлять только одну ошибку

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

Патчи не должны создаваться "внахлест"

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

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

Тщательно проверять патчи

Поскольку патч публикуется максимально оперативно, то рекомендуется дополнительно проверять патч отдельно от проверки исправления ошибки:

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

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

Кроме того, для проверки патчей настоятельно рекомендуется:

Если проверка исправления ошибки требует регламентного тестирования (например, обязательно подтверждение исправления регрессионными тестами и т.п.), то патч также не следует публиковать до того, как исправление ошибки пройдет все предусмотренные этапы проверки.

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

Подпись патчей для базовых версий конфигураций

Для того, чтобы созданный патч установился в базовой конфигурации он должен быть подписан тем же ключом, что и сама базовая конфигурация.
Пример строки запуска для подписи патча:

Копировать в буфер обмена

<путь к платформе> DESIGNER /IBConnectionString <строка подключения> /SignCfg <путь к подписанному патчу> -Type File -digisign <путь к закрытому ключу (*.pem)> -File <путь к исходному патчу>