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

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, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

19900 руб.

01.04.2020    141069    682    352    

233

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

2 стартмани

08.05.2019    24366    55    VPanin56    26    

27

Ссылочная константа содержит недопустимый ссылочный номер таблицы

Обновление 1С Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Бесплатно (free)

На связи Сергей Скирдин, технический директор ИТ-интегратора «Белый код». Сегодня расскажу, как решить одну из проблем, с которой можно столкнуться при обновлении конфигурации 1С.

19.03.2024    996    sergey.skirdin    4    

14

Скрипт для обновления базы с расширением из хранилища

Обновление 1С Платформа 1С v8.3 Бесплатно (free)

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

22.01.2024    1213    ke.92@mail.ru    2    

25

Многопоточное обновление 1С: Управление холдингом

Обновление 1С 8.3.14 1С:Управление холдингом Абонемент ($m)

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

1 стартмани

10.01.2024    3265    saver77    18    

24

Не обновляется типовая конфигурация 1С через конфигуратор

Обновление 1С Платформа 1С v8.3 Россия Бесплатно (free)

Столкнулся с проблемой. Нужно было поднять до текущего релиза Розницу 2.3. Обновлял по старинке, через конфигуратор (база клиент-серверная). Указывал логин и пароль, ждал скачивания обновления и обновлял. Но после накатывания 5 релизов следующий устанавливаться не хотел, а точнее конфигуратор гордо говорил, что обновлений больше нет. Решение нашел здесь на форуме и хочу зафиксировать. Чтобы самому не забыть и передать опыт начинающим.

29.11.2023    1479    shestopalovpro    4    

7

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

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

Ручной запуск процедур обработки обработчиков после обновлений. Может быть полезно стажерам, консультантам, разработчикам, администраторам, всем, кто обновляет информационные базы.

1 стартмани

20.11.2023    684    9    IvanTerentev    0    

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

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

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

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

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

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

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

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