Ошибка применения расширения конфигурации текст модуля для метода изменился

Очень забавная ошибка, т.к. при сохранении конфигурации система о ней не оповещает.

Поэтому, перед тем как применять измененную конфигурацию расширения с использованием аннотации ИзменениеИКонтроль нужно выполнить проверку применения:

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

Оригинал содержит один символ перевода строки

Оригинал содержит один символ перевода строки

Как я хотел сделать и получил в итоге ошибку

А вот как правильно вставлять

ПыСы

В этом примере в процедуре нужны были изменения в середине, поэтому вопросы почему я не использовал ВызыватьПосле прошу не задавать.

UP 11/2022

Случайно увидел ссылки на эту страницу на инфостарте и мисте, поэтому решил еще кое-что добавить

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

Установка плагина: А вот как правильно вставлять

ПыСы

В этом примере в процедуре нужны были изменения в середине, поэтому вопросы почему я не использовал ВызыватьПосле прошу не задавать.

UP 11/2022

Случайно увидел ссылки на эту страницу на инфостарте и мисте, поэтому решил еще кое-что добавить

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

Установка плагина:

После чего создаем два пустых файла, в один кидаем оригинал, во второй измененный, Ctrl+Shift+C и он выведет сравнение с подсветкой. Я обычно развожу сам по областям два файла:

Собственно вот так выглядит:

Собственно вот так выглядит:

Поправили в нашем коде, нажали Ctrl+Shift+C и проверяем дальше

Добрый вечер, дорогие друзья.

Появились проблемы с расширением после обновления платформы с 8.3.13.1334 на 8.3.18.1741

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

Вдруг некоторые процедуры изменённые методом — «ИзменениеИКонтроль» перестали работать, а многие другие продолжили работать, как ни в чём не бывало.

Например не получается внести изменения в код процедуры — «ПриНачалеВыбораНоменклатуры» модуля «СобытияФормИСКлиентПереопределяемый» в УТ 11.4

Пробовал вот такое например:

#Вставка

#КонецВставки

Всё норм, ошибки нет

Делаешь вот так

#Вставка

//

#КонецВставки

И всё, ошибка изменения текста процедуры..

Кто-нибудь в курсе в чём может быть дело?

Или может быть кто-нибудь попробует внести изменения в эту процедуру, чтобы мне понять это она такая заколдованная, или может ещё с чем проблемы.

Кэш был почищен.

30.01.2019

Развитие механизма расширений конфигурации

Данная статья является анонсом новой функциональности.

Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.


Полное описание новой функциональности будет приведено в документации к соответствующей версии.


Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.15.1489.

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

Упрощение поддержки небольших изменений в методах

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

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

Специально для таких небольших доработок мы сделали компромиссное решение – новую аннотацию &ИзменениеИКонтроль. Она позволяет вам добавить собственные изменения в метод, сохраняя, при этом, его исходный текст.

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

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

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

002.png

Вас всё устраивает в работе этого метода. Если вдруг в типовой конфигурации будет применен какой-то новый способ формирования этого сообщения – пусть так и будет. Единственное, что вы хотели бы изменить, это всегда добавлять слово Срочно в тему письма и имя отправителя.

В такой ситуации вы можете заимствовать этот метод в расширение, и использовать при этом аннотацию &ИзменениеИКонтроль.

001.png

После этого, с помощью инструкций препроцессора #Удалить и #КонецУдалить, вы можете выделить тот фрагмент, который не должен работать в вашем случае. А с помощью инструкций #Вставить и #КонецВставить вы можете обозначить те строки кода (новые), которые должны исполняться вместо «удалённых».

004.png

Таким образом, заимствованный модуль будет содержать сразу два «варианта» текста:

  • Если «выкинуть» фрагмент #Вставить#КонецВставить, получится исходный текст модуля. Его и будет контролировать платформа при применении расширения.
  • Если «выкинуть» фрагмент #Удалить и #КонецУдалить, получится новый текст модуля, который платформа будет исполнять.

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

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

Облегчение поддержки расширений в случае переименования объектов конфигурации

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

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

Это понятное ограничение, но технически следовать ему не очень удобно. Такое переименование в расширении приходится выполнять вручную. К тому же не всегда бывает ясно, какое исходное имя было у переименованного объекта.

Чтобы облегчить вам эту работу, мы сделали следующие доработки:

  • Для свойств заимствованных объектов мы добавили новый тип действия – Предупреждать о расхождении при подключении расширения. Он отображается как обычный флажок. Кроме этого для заимствованных объектов мы добавили новое контролируемое свойство Объект расширяемой конфигурации. Оно недоступно для редактирования, заполняется автоматически при заимствовании и содержит внутренний идентификатор расширяемого объекта.

101.png

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

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

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

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

  • Переименовать, сохранив соответствие,
  • Выбрать соответствие,
  • Сохранить имя, изменив соответствие,
  • Установить значение из объекта конфигурации,
  • Очистить соответствие,
  • Отключить проверку,
  • Удалить объект.

Облегчение подключения «универсальных» расширений

«Универсальными» мы, условно, называем такие расширения, которые приносят в конфигурацию свою функциональность, и, как правило, не содержат заимствованных объектов. Например, это может быть расширение, добавляющее в конфигурацию какие-то обработки или отчёты.

Пользователи конфигурации, у которых есть роли, автоматически дающие права на новые объекты, смогут воспользоваться этими обработками и отчётами. Но дать права на них другим пользователям бывает сложно.

Хорошо, если разработчик расширения предусмотрел собственную роль (роли), включающую объекты расширения. Тогда администратор может назначить эту роль нужным пользователям. Однако заранее неизвестно, как такая роль может называться, да и само создание такой роли для разработчика расширения является чисто «механической» задачей.

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

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

  • На предприятии некоторым ответственным пользователям дается дополнительное право администрирования расширений конфигурации. Благодаря этому они могут самостоятельно (без участия администратора) подключать новые расширения.
  • Эти пользователи, например, скачивают из Интернета расширение, подключающее новую печатную форму.
  • С помощью стандартной функции Управление расширениями конфигурации они добавляют это расширение в информационную базу.

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

Во-первых, теперь при создании расширения в нем автоматически создаётся роль, имя которой формируется по шаблону <ПрефиксРасширенияКонфигурации>_ОсновнаяРоль. Эта роль устанавливает права для новых собственных объектов.

Эта роль сразу же добавляется в свойство Основные роли расширения (возможность модифицировать основные роли мы добавили в версии 8.3.14).

202.png

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

Во-вторых, расширению конфигурации мы добавили новое свойство ИспользоватьОсновныеРолиДляВсехПользователей, которое стандартно установлено в значение Истина. Это значит, что по умолчанию при добавлении такого расширения все пользователи конфигурации будут обладать правами из основных ролей добавляемого расширения.

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

203.png

С её помощью пользователь, которому «доверено» администрирование расширений, может отобрать роли расширения у тех пользователей, которым оно не нужно. При этом автоматически будет сброшено свойство расширения ИспользоватьОсновныеРолиДляВсехПользователей.

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

Таким образом, если вы не хотите использовать новое стандартное поведение (чтобы при добавлении вашего расширения все пользователи сразу же получали доступ к его функциям), устанавливайте свойство расширения ИспользоватьОсновныеРолиДляВсехПользователей в значение Ложь. Тогда роли расширения, как и раньше, администратор должен будет добавить пользователям в явном виде.

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

201.png

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

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

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

И, наконец, если в расширении нужен разный ролевой доступ к разным его частям, то в основную роль расширения добавляйте ту роль, которая понадобится большинству пользователей. А роль, которая даёт права на остальную функциональность, администратор добавит пользователям самостоятельно. Например, ваше расширение позволяет формировать и отправлять отчёты. Формировать могут все, а отправлять – только некоторые пользователи. Тогда роль, позволяющую формировать отчеты, вам нужно включить в основные роли расширения.

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

Теги:
расширения 
8.3.15 

264 / 219 / 95

Регистрация: 07.04.2011

Сообщений: 1,358

1

Изменение и контроль в расширении

03.06.2021, 21:47. Показов 6421. Ответов 2


Студворк — интернет-сервис помощи студентам

Всем доброго времени суток.
Есть доработанная конфа.В документы «Заказ клиента» и «РТУ» добавлены реквизиты.Нужно чтобы из документа «Заказ клиента» при вводе основании в «РТУ» перенеслись эти доп.реквизиты.

Хотел сделать через &ИзменениеИКонтроль(«ЗаполнитьДокументНаОснованииЗаказаКлиента»)
Выделил исходный запрос,ПКМ -Изменить в расширении и контролировать. Поправил запрос.

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

Расширение1: Обычная: Ошибка применения модуля «Расширение1 Документ.РеализацияТоваровУслуг.МодульОбъекта». Текст модуля для метода «ЗаполнитьДокументНаОснованииЗаказаКлиента» изменился

Что не так?



0



1884 / 1289 / 460

Регистрация: 16.01.2015

Сообщений: 5,633

03.06.2021, 22:07

2

OverDozero, Сталкивался, когда Изменение и контроль работал некорректно, вернее НЕ работал. Якобы из-за того, что режим совместимости 8.3.14, а Изменение и контроль работает с 8.3.15. И в то же время в той же конфе срабатывало в другом коде. Сними замок и попробуй работу при совместимости 8.3.15 Либо попробуй обойтись После-Перед,



1



264 / 219 / 95

Регистрация: 07.04.2011

Сообщений: 1,358

04.06.2021, 05:14

 [ТС]

3

Платформа 8.3.15, совместимость конфы и расширения 8.3.10.
На итс, да и смотрел видео с курсов 1срф , там рассказывается что на совместимость пофиг. Но оно не работает и все.
Попробую снять замок.
Спасибо



0



Давайте разберем пример использования аннотации &ИзменениеИКонтроль (изменение и контроль). Для начала работы Вам потребуется создать расширение конфигурации. Для этого откройте список расширений и добавьте в него новое расширение. При этом обратите внимание на правильный выбор варианта назначения расширения конфигурации.

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

Давайте разберем основные вставки, которые Вы можете выполнять в процедурах и функциях с аннотацией &ИзменениеИКонтроль:

  1. Для удаления кода типовой конфигурации Вы используете вставки #Удаление и#КонецУдаления. Таким образом, весь код, который будет обрамлен этими вставками будет игнорироваться при компиляции модуля.
  2. Для добавления своего кода Вы используете вставки #Вставка и #КонецВставки.

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

В контекстном меню выберите пункт «Добавить в расширение». Далее выберите «Вызывать вместо (с контролем):

В результате в модуль расширения будет добавлен текст процедуры с обрамлением в аннотацию &ИзменениеИКонтроль:

&ИзменениеИКонтроль("ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO")
Процедура Доп_ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO()
	ТекстПредупреждения = НСтр("ru = 'В табличной части нет товаров, по которым серии можно заполнить по FEFO.'");	

	ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецПроцедуры

Теперь давайте внесем изменения в этот код:

&ИзменениеИКонтроль("ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO")
Процедура Доп_ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO()
	
	#Удаление
	ТекстПредупреждения = НСтр("ru = 'В табличной части нет товаров, по которым серии можно заполнить по FEFO.'");
	#КонецУдаления
	
	#Вставка
	ТекстПредупреждения = НСтр("ru = 'Мой текст предупреждения.'");
	#КонецВставки

	ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецПроцедуры

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

{Дополнение ОбщийМодуль.НоменклатураКлиент.Модуль(5,3)}: Ожидается оператор препроцессора
#<<?>>Удалить (Проверка: Тонкий клиент)

Это значит Вы используете неверные операторы препроцессора. В своих пресс-релизах 1С объявило об одних наименованиях, а сделали по другому). Ну ничего — мы быстро адаптируемся!

Наши разработки:

Понравилась статья? Поделить с друзьями:
  • Ошибка приложения исключение unknown software exception 0x80000003
  • Ошибка применения расширения конфигурации нельзя установить область действия
  • Ошибка приложения исключение unknown software exception 0x40000015
  • Ошибка применения расширения конфигурации не найден объект
  • Ошибка приложения интернет с телефона на