Первоначально задача не казалась трудозатратной, пока не выполнили сравнение конфигурации с типовой.
Получили множество мелких доработок, причём актуальность которых не известна.
Так как сопровождать конфигурацию быстрее/удобнее, когда доработки вынесены в расширение, то возникла потребность вплотную изучить этот механизм.
Принцип работы расширений описан здесь:
Причём заметим, что этот механизм постоянно совершенствуется, поэтому нововведения имеет смысл отслеживать самостоятельно (пример последних изменений):
https://wonderland.v8.1c.ru/blog/razvitie-rasshireniy/
Следует сказать, что встраивание в типовой код, вынося доработки в расширение, происходит с помощью аннотаций, которые дают понять программе, когда нужно исполнять код.
Кратко рассмотрим аннотации.
Их четыре:
- &Перед
- &После
- &Вместо
-
&ИзменениеИКонтроль
&Перед и &После это то, что будет выполняться «до» процедуры/функции или «после». Это идеальный вариант для переноса доработок в расширение. Необходимо стремиться использовать именно эти аннотации!
К сожалению, реалии жизни таковы, что порой алгоритм типового механизма полностью переписан и безвозвратно будет работать только в таком виде, тогда приходится прибегнуть к использованию аннотации &Вместо. Но есть случаи, когда код (например, типовой запрос) подвергнут небольшим доработкам, тогда на помощь приходит аннотация &ИзменениеИКонтроль.
Для удобства дальнейшего переноса в расширение развернули 2 конфигурации:
1) до обновления (которая с доработками) и сравнивали её с типовой
Сравнение производили следующим образом (в конфигураторе):
Конфигурация-Поддержка-Настройка поддержки и тут нажимаем на кнопку "Сравнить, объединить". Видим список модулей, в которых есть доработки.
2) обновленная до последней версии, в нашем случае 2.4.13.243
Расширение будем добавлять в обновленную конфигурацию.
Итак, мы создаём расширение (Конфигурация - Расширения конфигурации).
Вводим название расширения и в свойствах расширения указываем адаптация, активно.
В базе до обновления находим процедуру/функцию доработки которой нужно перенести. Затем переходим в эту же процедуру/функцию в обновлённой конфигурации, нажимаем правой кнопкой мыши на её название, в выпадающем списке выбираем «Добавить в расширение» («хоткей» Alt+Shift+F2), и вот тут видим список [доступных аннотаций]*. В зависимости от масштабов доработки выбираем подходящий для нас. Ещё раз отметим, что необходимо стремиться использовать аннотации &Перед и &После, возможно придётся немного переписать код и на это потребуется дополнительное время, но сокращение времени на сопровождение того стоит.
//Вставка Обновлено 27.05.2022
* - с выходом платформы 8.3.20 появилась интересная «фича».
В перечне доступных аннотаций процедуры/функции не активен тип вызова «Вызвать вместо (с контролем)», который показаны на рисунке 0.
Рисунок 0 - Доступные аннотации
Пробуем сделать следующее:
Выделяем ту строку, перед которой нам нужно разместить код и нажимаем правой кнопкой мыши. В выпадающем списке активен пункт меню «Изменить в расширении и контролировать». Описанные действия показаны на рисунке 0'.
Рисунок 0' - Пункт меню «Изменить в расширении и контролировать»
В появившемся окне с вопросом выбрать «Нет». В результате в расширение добавляется процедура/функция с аннотацией «ИзменениеИКонтроль». Начало процедуры и блок добавленного платформой кода показаны на рисунке 0''.
Рисунок 0'' - Пункт меню «Изменить в расширении и контролировать»
//КонецВставки Обновлено 27.05.2022
Рассмотрим использование аннотаций на примерах.
На рисунке представлен код (сравнение доработанной и типовой):
Рисунок 1 - Сравнение доработанной и типовой конфигураций
В зависимости от места выполнения кода доработки, выносим её либо до выполнения основной процедуры, либо после. Если после выполнения вызываются ещё какие-то процедуры, то их вызов тоже нужно вынести в расширение. Данный пример показан на рисунке 2.
Рисунок 2 - Сравнение доработанной и типовой конфигураций (повторный вызов процедур)
Результат вынесение доработок в расширение с помощью аннотаций &Перед и &После представлен на рисунке 3:
Рисунок 3 - Вынесение доработок
Аннотация &ИзменениеИКонтроль позволяет удалить или добавить код.
Если необходимо, чтобы часть кода типовой не выполнялась, то можно этот участок кода вынести в расширение с помощью аннотации &ИзменениеИКонтроль в блок:
#Удаление
#КонецУдаления
Если вместо этого участка кода нужно выполнить свой, то добавляем
#Вставка
#КонецВставки
Результат вынесения доработок в расширение с помощью аннотации &ИзменениеИКонтроль представлен на рисунке 4:
Рисунок 4 - Вынесение доработок в расширение с помощью аннотации &ИзменениеИКонтроль
При проверке кода расширения на наличие синтаксических ошибок можно встретить ошибки. Ошибки такого рода говорят о том, что расширение ничего не знает о содержимом объектов, поэтому их тоже необходимо добавлять в расширение. Ошибки и путь решения таких ошибок представлен на рисунке 5.
Рисунок 5 - Ошибки в расширении
После того, как доработки вынесены в расширение имеет смысл проверить, а "взлетит" ли наше расширение.
Для этого идём (режим конфигуратора) в пункт меню Конфигурация - Расширения конфигурации, правой кнопки мыши щёлкаем на наше расширение и выбираем "Проверка возможности применения всех расширений". Внизу, появляется окно со списком, где расширение не работает.
Барабанная дробь и знакомство с новым инструментом. Исходя из статистики работы моих коллег с инструментами, самый популярный это Kdiff3.
Буду очень рада, если поделитесь информацией о том, каким инструментом пользуетесь Вы и почему.
Итак, продолжим рассматривать инструмент Kdiff3.
Он бесплатный, лёгкий и удобный.
Скачать можно тут: http://kdiff3.sourceforge.net/
Затем его требуется установить на тот компьютер, где работаете с конфигурацией.
И в конфигураторе выбрать этот инструмент следующим образом:
Сервис - Параметры - Сравнение/объединение
Видим строку Kdiff3, изменить и указываем путь к исполняемому файлу.
Например, у нас он выглядит следующим образом: C:\Users\1C_User1\AppData\Local\KDiff3\kdiff3.exe
Остальные настройки оставляем без изменений и нажимаем "ОК". Во вкладке "Сравнение/объединение", Режим "Объединить с помощью внешней программы" выбираем Kdiff3. Нажимаем "Применить".
Выше указанные действия показаны на рисунке 6.
Рисунок 6 - Подключение инструмента Kdiff3
Возвращаемся к проверке возможности применения всех расширений. Информация о проверке возможности применения показана на рисунке 7.
Рисунок 7 - Обнаруженные проблемы подключения расширения
Справа указана ссылка на конфликт, произошедший в коде. Так как мы установили инструмент Kdiff3, то теперь при нажатии на ссылку (колонка "Действие") открывается программа, причём с тремя столбцами (далее - колонками) для сравнения.
Рассмотрим инструмент Kdiff3 в разрезе устранения конфликтов применения расширения в конфигурации.
Пойдем слева направо.
Первая колонка - это заимствованный "модуль" из расширения, восстановленный к первоначальному состоянию. Обозначается буквой А.
Вторая колонка - это "модуль" расширения. Обозначается буквой В.
Третья колонка - "модуль" из конфигурации. Обозначается буквой С.
Рассмотрим, на простом примере, как необходимо действовать в случае возникновения конфликтов в коде.
Код, вынесенный в расширение и присутствующий в основной конфигурации отличается, об этом программа Kdiff3 сообщает в окне снизу в виде следующего текста: <Merge Conflict>, который показан на рисунке 8.
Рисунок 8 - Инструмент Kdiff3
Щелкаем правой кнопкой мыши на строку <Merge Conflict>. Видим выпадающий список. Необходимо выбрать с какого модуля (колонки) требуется использовать код в данной строке. Обратите внимание, что последовательность выбора колонок влияет на порядок добавляемого кода, т.е. какой код будет добавлен в первую очередь. В данном случае это колонка В, а затем С. Мы их выбираем в выпадающем списке. Выше написанные действия показаны на рисунке 9.
Рисунок 9 - Инструмент Kdiff3
В результате мы получаем следующий код, показанный на рисунке 10.
Рисунок 10 - Инструмент Kdiff3
P.S.: задача была в том, чтобы на старом релизе обновить «Печатную форму накладной» в срочном режиме. Поэтому идеальным решением стал механизм расширения. Когда мы приступили к обновлению конфигурации на новый релиз, то инструмент Kdiff3 показывает нам какие есть различия. В данном случае, верным решением является полное удаление данной доработки из расширения. Это связано с тем, что вставка полностью дублирует код в обновлённой конфигурации.
Если больше конфликтов в данном модуле нет, то нажимаем на кнопку "Сохранить" (дискета сверху).
Итак, отрабатываем каждый конфликт применения расширения.
После того, как все конфликты устранены можно использовать данное расширение в работе.
В процессе обновления конфигурации стоит отметить, что после каждого обновления программы на новый релиз необходимо убедиться, что выполнение фоновых процедур обновления выполнено. Для этого необходимо зайти в раздел НСИ и Администрирование, обслуживание, обновление программы, результаты обновления и дополнительная обработка данных. В этом случае необходимо дождаться завершения всех фоновых процедур. Если фоновые задания не работают, то необходимо разблокировать регламентные задания на сервере.
Проверяем проводки с помощью отчёта оборотно-сальдовая ведомость. Сравниваем значения в базах до обновления и после обновления. Пример сравнения отчётов показан на рисунке 11.
Рисунок 11 - Сравнение оборотно-сальдовых ведомостей
Если данные отчётов совпадают, то это значит, что проводки не слетели.
После того, как выполнено тестирование конфигурации имеет смысл её заливать в рабочую конфигурацию.
При выгрузке оттестированной конфигурации столкнулись с проблемой максимального допустимого размера файла, показанной на рисунке 12.
Рисунок 12 - Ошибка при выгрузке конфигурации
Решение проблемы было найдено на форуме:
https://forum.infostart.ru/forum9/topic252240/
В итоге поменяли режим совместимости на 8.3.16.
Тогда получилось оттестированную конфигурацию выгрузить.
Последовательность действий обновления:
- Сделали полный бэкап рабочей базы (данные + конфигурация).
- Сохранили отчёт оборотно-сальдовая ведомость для сравнения значений после обновления.
- Включили блокировку.
- В рабочей конфигурации очистили основную форму поиска ФормаПоиска и тоже поменяли режим совместимости на 8.3.16, обновили конфигурацию.
- Затем загрузили оттестированную конфигурацию, вернули обратно режим совместимости на 8.3.14, обновили конфигурацию.
- Проверяем проводки с помощью отчёта оборотно-сальдовая ведомость (сравниваем значения в отчётах до обновления и после).
На этом всё!
Комментарии, пожелания приветствуются!
С уважением, Оля-ля.