История одного обновления, или доработки, взывающие к механизму "расширений"

27.05.22

База данных - Обновление 1С

Цель: вынесение доработок в расширение и применение его в обновленной конфигурации 1С:ERP Управление предприятием 2 с релиза 2.4.13.123 на релиз 2.4.13.243 (4 релиза).

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

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

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

Принцип работы расширений описан здесь:

Причём заметим, что этот механизм постоянно совершенствуется, поэтому нововведения имеет смысл отслеживать самостоятельно (пример последних изменений):

https://wonderland.v8.1c.ru/blog/razvitie-rasshireniy/

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

Кратко рассмотрим аннотации.

Их четыре:

  1. &Перед
  2. &После
  3. &Вместо
  4. &ИзменениеИКонтроль

&Перед и &После это то, что будет выполняться «до» процедуры/функции или «после». Это идеальный вариант для переноса доработок в расширение. Необходимо стремиться использовать именно эти аннотации!

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

 

Для удобства дальнейшего переноса в расширение развернули 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, обновили конфигурацию.
  • Проверяем проводки с помощью отчёта оборотно-сальдовая ведомость (сравниваем значения в отчётах до обновления и после). 

На этом всё!

 

Комментарии, пожелания приветствуются!

С уважением, Оля-ля.

расширение аннотации Kdiff3 1С:ERP обновление

См. также

Обновление 1С Программист Платформа 1С v8.3 1С:ERP. Управление холдингом Абонемент ($m)

Описан практический пример обновления через копию конфигурации 1С:ERP. Управление холдингом с версии 3.2.6.6 на версию 3.2.6.7, который можно применять на других конфигурациях и версиях.

10 стартмани

18.02.2025    614    PetrovAnton    4    

4

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

Отчет о сравнении конфигураций представляет собой обширный массив информации. Однако у него есть значительное ограничение: его невозможно настраивать, например, добавлять различные группировки, фильтры или сортировку данных. Тем не менее, если преобразовать этот отчет в таблицу и использовать её в качестве источника данных, это открывает возможность для создания универсального отчета с использованием группировок, отборов и сортировки

10 стартмани

18.02.2025    554    2    kalyaka    0    

7

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

17.02.2025    260    0    slavik27    0    

3

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    1744    14    XilDen    26    

35

Групповая разработка (Git, хранилище) Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    1565    Nonik    10    

17

Обновление 1С Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Бухгалтерский учет НДС Абонемент ($m)

Обновление для конфигурации Управление торговлей 10.3.88.3 добавляет поддержку ставок НДС 5% и 7%, обеспечивает корректную печать этих ставок на актуальных моделях торгового оборудования (АТОЛ, ШТРИХ, ревизия 4004), содержит актуальные правила обмена с конфигурацией "Бухгалтерия предприятия 3.0" для передачи новых ставок. Новые ставки НДС поддерживается в печатных формах УПД, ТТН и т.д. В состав дистрибутива включены обработки для обслуживания торгового оборудования ККТ нового формата (Штрих-М и АТОЛ)

5 стартмани

31.01.2025    2129    37    karpik666    31    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Rain88 377 17.06.22 17:32 Сейчас в теме
Стоит отметить, что проверка применимости расширений действует только для аннотации &ИзменениеИКонтроль. С одной стороны вроде хорошо, при изменении процедуры после обновления система сообщает, что не может применить расширение, а с другой стороны на платформах, ниже 8.3.20 учитываются как пробелы, так и переводы строк, что доставляет массу неудобств) Возможно пробелы и переводы строк не учитываются уже с 8.3.19, не стала искать информацию по этому поводу, дорабатывала у себя на 8.3.20, у клиента на 8.3.18 заругалось.
Рамзес; artbear; +2 Ответить
2. olja-ljaaa 39 17.06.22 18:02 Сейчас в теме
(1)
Здравствуйте!
Большое спасибо за Ваш комментарий!

Скажите, пожалуйста, откуда такая информация "проверка применимости расширений действует только для аннотации &ИзменениеИКонтроль"?

На версии платформы 8.3.17 и ниже, действительно, была проблема с добавленными лишними пробелами и переносами. Поэтому на этих версиях платформы перенос доработок должен быть выполнен особенно внимательно и аккуратно. Но, на мой взгляд, это не может быть причиной, чтобы не использовать механизм расширений.
С уважением, Оля-ля.
3. Rain88 377 17.06.22 18:37 Сейчас в теме
(2) "проверка применимости расширений действует только для аннотации &ИзменениеИКонтроль" имелось ввиду, что для остальных аннотаций, например, &Вместо, проверка применимости не производится и может получится так, что данные будут обрабатываться некорректно, например, при формировании доработанного отчета, а система ошибок не выдаст.

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

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

Расширения особенно актуальны для баз, которые находятся во фреше, а также на проектах, где особого доступа к конфигуратору заказчика нет, а доработать что-то просят.
olja-ljaaa; +1 Ответить
4. ollega 117 26.07.22 14:00 Сейчас в теме
Хм. Отлично, что добавляют новые плюшки для расширений. Может это изменит мое негатиное отношение к данному механизму. До сих пор у меня опыт был только один: в конечном счете расширения значительно усложняют обновление. Актуализировать расширения сложнее, чем аналогичные доработки непосредственно в основной конфе.
5. ovasiliev 6 09.04.23 15:49 Сейчас в теме
"Ошибки такого рода говорят о том, что расширение ничего не знает о содержимом объектов, поэтому их тоже необходимо добавлять в расширение."

Слово "необходимо" здесь неправильное. Никакой необходимости добавлять метаданные в расширение в этом случае нет.
Наоборот, чем больше метаданных заимствовано - тем больше потенциальных проблем оно имеет.
В пользовательском режиме этих ошибок не будет.
Понятное дело, что в куче ошибок надо разбираться с критическими и этими, а также запрос конструктором в расширении не соберёшь, не заимствовав всё. Но запрос надо собирать в основной конфигурации, куда также следует добавлять и все новые метаданные, к которым идёт обращение в запросе.
Метаданные объектов, содержащих данные, в расширение добавлять не следует, в общем случае.
Работа с расширением - дело практики. Ко всем его особенностям привыкаешь быстро.
6. olja-ljaaa 39 13.04.23 11:23 Сейчас в теме
(5)Добрый день!
В случае запроса необязательно добавлять метаданные в расширение. Запрос можно собрать вне расширения.
На скрине показана ошибка, что расширение не может найти конкретный объект. Так как этот объект не добавлен в расширение.
Не совсем поняла Вас. Вы предлагаете не добавлять объект метаданных, тогда каким образом избавиться от ошибки "переменная не определена (рисунок 5)"?
7. ovasiliev 6 13.04.23 12:43 Сейчас в теме
(6) Никак не избавляться. Просто игнорируйте. Жмите "ок".
8. olja-ljaaa 39 13.04.23 16:18 Сейчас в теме
(7) Не понимаю, зачем игнорировать, если можно просто добавить в расширение. Откуда такая информация? На ИТС я такого не встречала.
Выше Вы упомянули, что:
"Метаданные объектов, содержащих данные, в расширение добавлять не следует, в общем случае."
Впервые такое слышу. Можете скинуть ссылку на источник?
10. ovasiliev 6 13.04.23 17:38 Сейчас в теме
(8) Вы находитесь в мире 1С. В мире бесконечных компетенций, большая часть которых не документирована.
Ваше право, добавляйте. Это такое дело, пока сами не накопите критической массы опыта, аргументированного самостоятельного решения не примете.
В принципе, я и не говорил, что добавлять нельзя. Я говорил, что необязательно.
А для себя я решил, что лучше не тащить в расширение лишнего. Оно тяжелеет, становится менее стабильным и копит в себе потенциальные проблемы при дальнейших обновлениях.
Может, у вас всё по другому. Но это вряд ли.
11. olja-ljaaa 39 13.04.23 17:46 Сейчас в теме
9. ovasiliev 6 13.04.23 17:38 Сейчас в теме
12. Andreeei 50 28.07.23 16:00 Сейчас в теме
&ИзменениеИКонтроль не помогает замечать и предупреждать ошибки обновления, если поставщик конфигурации меняет имя исходной процедуры. У меня такое было, например, при последнем обновлении ЕРП: в модуле МенеджерОбменаЧерезУниверсальныйФормат изменилось название процедуры, было "ПОД_Документ_ВнутреннееПотреблениеТоваров_Отправка_ПриОбраб­отке" стало "ПОД_Документ_ВнутреннееПотребление_Отправка_ПриОбработке". Проверка применимости расширения этого не заметила. В результате в продуктиве появилась ошибка, которую очень даже заметили пользователи.

Расширение удобно, если надо сделать что-то "сбоку" от типового функционала, или временные пачти для исправления ошибок с последующим их переносом в основную конфигурацию. Если же расширяется типовой функционал, то последующее внесение изменений в расширение при обновлениях без трехстороннего сравнения делается долго и нудно.
14. olja-ljaaa 39 31.07.23 12:02 Сейчас в теме
(12)Здравствуйте!
В случае ошибок обновления могут помочь только тесты, которые упадут до обнаружения ошибки пользователем.
Спасибо за комментарий!
13. olja-ljaaa 39 31.07.23 12:02 Сейчас в теме
Здравствуйте!
В случае ошибок обновления могут помочь только тесты, которые упадут до обнаружения ошибки пользователем.
Спасибо за комментарий!
Оставьте свое сообщение