Не работает проверка применимости расширения при использовании директивы "ИзменениеИКонтроль"

1. 93 13.10.19 14:14 Сейчас в теме
Воспользовался в расширении новой директивой "&ИзменениеИКонтроль".
Директива отрабатывает правильно. В случае точного соответствия измененной функции/процедуры оригинальному тексту происходит подмена.
Если же добавить в модифицированный текст хотя бы одну строчку вне директив "#Вставка" - "#Удаление", то подмены не происходит, выполняется оригинальный метод. Проблема заключается в том, что вопреки методической документации, модификация игнорируется без каких-либо уведомлений. То есть если код оригинального метода не соответствует коду в расширении, то расширение остается подключенным, успешно проходит проверку применимости, но при выполнении отрабатывает текст из исходной конфигурации. В документации указано:
Как только разработчик конфигурации исправит ошибку (и расширяемая конфигурация будет обновлена), наше расширение перестанет выполняться с диагностикой следующего вида:

Расширение1: Обычная: Ошибка применения модуля "Расширение1 ОбщийМодуль.ОбщийМодуль1.Модуль". Текст модуля для метода "ВозведениеВСтепень" изменился
Если проверка применимости расширений выполняется в конфигураторе, то результатом проверки будет сообщение об ошибки и возможность восстановить соответствие с методом конфигурации.


Ничего подобного у меня не произошло. Никаких сообщений не выдалось ни в режиме конфигуратора, ни в режиме предприятия. Но модификация при этом отрабатывать перестала. В итоге работа ничем не отличается, от директивы "&Вместо", поскольку придется при каждом обновлении конфигурации вручную проверять модификацию и оригинал.
Возможно, я что-либо неверно делаю, или неправильно понял. Кто-нибудь пробовал пользоваться этой директивой и видел заявленную разработчиками реакцию конфигуратора при проверке расширения?
Nat_S; Mogilnikova; sapervodichka; +3 Ответить
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. AlexandrSmith 72 13.10.19 19:44 Сейчас в теме
(1) Много есть проблем еще в расширениях. Есть еще "После", которое не отрабатывает после проведения, и после отмены проведения. К сожалению, пока в инете много подобных историй и разработчики негласно исправляют какие-то дефекты, а какие-то даже не пытаются.
11. sergey512 28 23.10.19 14:06 Сейчас в теме
(1) Какую версию платформы используете?
13. PythonJ 93 23.10.19 14:46 Сейчас в теме
3. PythonJ 93 13.10.19 22:24 Сейчас в теме
4. stash_84 14.10.19 08:03 Сейчас в теме
(3) да, Вы бы попробовали обратиться в поддержу "1С", возможно включат Вашу ошибку в "Публикуемые ошибки" или ответят, что вопрос в разработке. Расширения ещё работают не по инструкции, к сожалению.
5. PythonJ 93 14.10.19 08:14 Сейчас в теме
(4) Обращусь, наверное. Хотел сначала спросить на форуме, возможно я что-либо неправильно понял и кто-то подскажет, что именно. Вообще, к ним обращаться - то еще развлечение. Уже пробовал как-то. Через недельку ответили "ошибка не воспроизведена", а между тем глюк в следующем релизе платформы исправили.
7. AlexandrSmith 72 14.10.19 14:55 Сейчас в теме
(5) Когда сталкиваюсь с проблемами расширений. Больше всего печалит:

1) Реквизиты не надежные.
2) Формы, откровенно говоря при обновлении почему-то меняют свои параметры, хотя должны полностью соответствовать форме в расширении.
3) Чисто логическая проблема - процедуры и функции лучше не вставлять целиком в расширение, так как сбои в работе конфигурации начинаются при изменении процедуры которая заменена, а ты ни сном ни духом.

Если вас такой расклад наведет на мысль, буду рад.

А пока я стараюсь просто обходить все эти "неучтенки" другими способами не связанными с расширениями.
8. PythonJ 93 14.10.19 21:14 Сейчас в теме
(7) Вроде как именно для решения логической проблемы за нумером 3 и сделали ИзменениеИКонтроль. Основной смысл - при обновлении основной конфы получить ошибку при проверке применимости. И именно это не отработало, как надо. Придется по старинке каждый раз проверять оригинальный код.
(6) К сожалению, как раз это - не песочница. В песочницах обычно необходимости в расширениях нету.
9. AlexandrSmith 72 14.10.19 22:16 Сейчас в теме
(8)
да вы правы я доисправлялся, что сам не заметил, как глупость вставил.

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

Вообщем я на такую штуку нарывался, решил сообщить.
16. sergey512 28 23.10.19 16:00 Сейчас в теме
(3) У меня в 8.3.15.1656 все работает. Добавляешь даже лишнюю пустую строку в не конструкций #Удаление #КонецУдаления или #Вставка #КонецВставки. Появляется ошибка и в конфигураторе при нажатии на "Проверка возможности применения" и в предприятии. На любой лишний пробел ругается вообщем.
leonidol; CepeLLlka; boba13; user832824; Angealtor; +5 Ответить
17. PythonJ 93 23.10.19 16:09 Сейчас в теме
(16) А режимы совместимости основной/расширения какие?
18. sergey512 28 23.10.19 16:30 Сейчас в теме
6. VmvLer 14.10.19 10:00 Сейчас в теме
ИзменениеИКонтроль может и включено уже в финальные релизы, но все же это пока в статусе "неплохая идея".

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

а бежать впереди планет всей можно и нужно в своих тестовых песочницах.
надеюсь автор именно в таких местах обнаружил баги и очень хорошо,
т.к. чем раньше и чаще пинать баг - тем больше вероятность, что будет "гол".
PythonJ; EVKash; +2 Ответить
45. Salavat 13 21.11.20 10:49 Сейчас в теме
(6)
а бежать впереди планет всей можно и нужно в своих тестовых песочницах.

Абсолютно согласен.
Также как и с тем, что - всё (включая и расширения) нужно применять к месту.
А не "потомучто это новое!"
Встречал я таких "современников", которые вместо элементарной Доп-Обработки ИзменениеТабличнойЧасти - сделали Отдельное Расширение.

И "убеждали" свою "правоту" именно этой "коронной" фразой -
"Это новая современная технология! И я никого слушать не буду, а буду делать, только так!"
10. Xershi 1046 17.10.19 09:09 Сейчас в теме
А вы режим совместимости конфигурации подняли?
Если нет, то нечего функции использовать на устаревших конфигурациях.
12. PythonJ 93 23.10.19 14:45 Сейчас в теме
(10) Нет, основная-то конфигурации не подняла еще. 8.3.12 стоит, основная - отраслевая, сделана на базе Бухгалтерии. Платформа 8.3.15. Если поменять режим совместимости расширения, оно не пройдет проверку применимости. Обещают, что можно будет в расширении поднимать режим совместимости выше основной, но для этого, насколько я понимаю, сама основная должна доползти до версии, где такую возможность реализовали. Вообще говоря, боюсь себе представить, как расширение будет работать при таком раскладе.
Просто сейчас сама директива отрабатывает именно так, как заявлено, не смотря на режим совместимости, то есть заходит в измененный код только когда он соответствует основной конфигурации. Возникло предположение, что проверка конфигурации тоже отработает, так как реализована в конфигураторе и, по идее, не должна обращать внимания на режим совместимости. А получилось ни два ни полтора. "Контроль" срабатывает, но молча. Полагаете, когда основная конфигурация доползет до 8.3.15, то все будет работать правильно?
Не подумал. Сделаю копию базы, сниму с поддержи, подниму совместимость и проверю. По результату напишу.
14. Xershi 1046 23.10.19 15:25 Сейчас в теме
(12) когда подымите до нужного уровня все у вас заработает. Если не на 1 релизе так на другом.
15. PythonJ 93 23.10.19 15:32 Сейчас в теме
Сейчас релиз платформы последний стоит, 8.3.15.1700. В боевой базе основную конфигурацию с поддержки в снимать не планируется, собственно почему и делаю расширениями. В виде эксперимента на копии попробую выровнять режим в потолок и в основной и в расширении и посмотрю, что получится.
19. aleksey.kubovtsov 88 25.12.19 10:15 Сейчас в теме
1С:Предприятие 8.3 (8.3.16.1063)
Бухгалтерия предприятия, редакция 3.0 (3.0.73.50)

ИзменениеИКонтроль
Отработал корректно, при условии, что не было лишних пробелов вне дериктивы
препроцессора #Вставка … #КонецВставки и #Удаление … #КонецУдаления
Сразу не заработал, были лишние пробелы перед дериктивой и после, как обычно делаешь отступы по коду
Обновление конф с данными механизмом еще не проводилось, посмотрим как себя поведет
примеры в скрине
Прикрепленные файлы:
20. shoy 19 17.02.20 14:59 Сейчас в теме
(19)
были лишние пробелы
так пробелы или всё же строки?
22. aleksey.kubovtsov 88 19.02.20 13:09 Сейчас в теме
(20) пост 21 , пробелы , строки
21. z4z4z 47 18.02.20 18:01 Сейчас в теме
Решение такое
(специально тестил)

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

когда вставляете #Вставка … #КонецВставки и #Удаление … #КонецУдаления
тоже надо следить чтоб не до не после не было лишних пустых строк, и не убирать типовые пустые строки
Grubly; tigcorp; kinoman; MihailP; +4 Ответить
23. kinoman 02.03.20 18:24 Сейчас в теме
(21) Всьо верно. Механызм работает
24. VN78 12.03.20 10:43 Сейчас в теме
(21)
Смысл директивы &ИзменениеИКонтроль как раз и заключается в том, что должна выводится ошибка в случае отклонения кода в расширении от кода в основной конфигурации. Если не использовать никаких лишних строк и пробелов, тогда код будет выполнятся, но при изменении кода поставщиком код расширения перестанет исполнятся и программист при обновлении не получит никакого сообщения.

У меня был момент, когда при использовании директивы &ИзменениеИКонтроль программа выдала ошибку о том, что в программе несоответствие кода, но потом сообщение перестало выводиться.

Вывод: код отрабатывает до момента изменения кода в конфигурации поставщика, как только поставщик изменит код директива &ИзменениеИКонтроль перестанет отрабатываться, следовательно директива не отрабатывается так, как заявлено.
25. tigcorp 30.03.20 20:59 Сейчас в теме
(21) А еще никаких тонкостей не находили? Пробую у клиента поменять одну процедуру модуля документа объекта и одну функцию общего модуля. Вот функцию победил,а процедура упорно ругается на несоответствие кода. Ради теста полностью очистил модуль расширения, повторно добавил в расширение с директивой "Вызывать вместо (с контролем) и запустил (без вноса каких-либо правок). Все - равно ошибку выдает.
Помимо в расширение добавлены 2 реквизита и табличные части (только наименования без наполнения. в коде идет наполнение этих таблиц. может быть в них дело?
Если полностью очищаю модуль документа объекта в расширении, то ошибок не бьет.
26. Xershi 1046 30.03.20 23:33 Сейчас в теме
Какие есть нюансы.
1. Не переносит переменные.
2. Не должно быть лишних пробелов и строк.
3. Режим совместимости выше 8.3.10 по идее, а платформа 8.3.15+.
Если не понятно в чем проблема, то берете программу для сравнения текстов. Я пользуюсь винмердж.
И сравниваете все посимвольно.
Находите отличие и исправляете руками.
28. Xershi 1046 03.04.20 15:23 Сейчас в теме
На 1С:Предприятие 8.3 (8.3.16.1063)
Как не пытался экспортная клиентская процедура не меняется.
Если не вносить правок работает)) Но как я понял это косяк должны исправлять.
В итоге плюнул и сделал через вместо по старинке.
29. SunStroke 27.05.20 14:44 Сейчас в теме
(28) Судя по всему, баг платформы - "Расширение методов конфигурации с помощью аннотации ИзменениеИКонтроль не работает, если вызов метода происходит на клиенте." По заверениям 1С, исправлено в 8.3.18, 8.3.15.1958, 8.3.16.1296, 8.3.17.1386
30. wokituk 17 30.05.20 02:15 Сейчас в теме
Может зависеть от режима совместимости основной конфигурации (и режима совместимости расширения) (скорее всего, если ниже 8.3.15, то не будет срабатывать "ИзменениеИКонтроль")
31. hottion 32 09.07.20 18:39 Сейчас в теме
В параметрах расширения выставите галочки и поедет) сам долго пытался понять почему в одном расширении у меня заработало а в другом нет, пока не обнаружил связь ) после выставления галочек сделайте изменения в расширении(пробела будет достаточно) и примите их. После чего все работает)
Прикрепленные файлы:
32. Alfn 21 09.07.20 19:56 Сейчас в теме
(31) а если мне не надо безопасный режим, как тогда быть?
38. hottion 32 10.07.20 10:24 Сейчас в теме
(32) вот именно что снимаете все галочки как на скриншоте. у нас платформа 8.3.15.1830, и такая комбинация срабатывает.
33. Xershi 1046 09.07.20 20:15 Сейчас в теме
Поставили 8.3.17 и забыли, что это такое.
34. EVKash 9 10.07.20 08:24 Сейчас в теме
35. Xershi 1046 10.07.20 09:08 Сейчас в теме
(34) вы не умеете ставить платформу?
36. EVKash 9 10.07.20 09:14 Сейчас в теме
(35) смешно)
о чем забыли?
о проблеме и все работает как должно?
или о директиве "&ИзменениеИКонтроль"? что-то новое в 17й появилось?
37. Xershi 1046 10.07.20 09:16 Сейчас в теме
(36) все работает.
В определённых моментах не работало пока спецы 1с не поправили по баг репортам.
39. Alfn 21 10.07.20 18:25 Сейчас в теме
(37) при определенных моментах при наличии ИзменениеИКонтроль в расширениях, невозможно обновить конфу... и на 17-й платформе в том числе
Был опыт неделю назад. Пока не вынес все эти криворукожопосделанные вставки и удаления, ни в какую не обновлялось... такая вот проза (((
40. Xershi 1046 10.07.20 18:59 Сейчас в теме
(39)неделю назад у вас не мог быть актуальный релиз. Вышел с беты 7 числа.
41. Alfn 21 11.07.20 06:31 Сейчас в теме
(40) а это?
Прикрепленные файлы:
46. Xershi 1046 21.11.20 13:32 Сейчас в теме
(41) так я же писал актуальный. А актуальный это через 3 дня с фиксом!
А так уже давно 8.3.18.
42. shved 26.10.20 07:56 Сейчас в теме
Мож кто знает как после обновления найти все "Текст модуля для метода "" изменился" ? Проверки пименимости проходят, но режиме юзеров начинают вылазить Текст модуля для метода "" изменился.
Модули в расширении через &ИзменениеИКонтроль.
В идеале при обновлении основной конфы - обновлялись бы и куски кода оставшиеся оригинальными в расширении
43. GV. 12.11.20 19:59 Сейчас в теме
Это просто полнейшая феерия!!!
Система вообще игнорирует фукнцию в расширении с директивой "&ИзменениеИКонтроль", если в основной конфигурации в строке объявления метода есть перенос строки!

НЕ БУДЕТ РАБОТАТЬ для метода в основной конфигурации:
Функция ВариантыОтветовДляВыполненияЗадачиПоПочте(
	ЗадачаСсылка,
	БизнесПроцессСсылка,
	ТочкаМаршрута) Экспорт
	
	Результат = Новый Структура;
	...
КонецФункции


Но БУДЕТ РАБОТАТЬ для метода основной конфигурации:
Функция СформироватьТекстУведомленияПоЗадачеСВозможностьюВыполненияПоПочте(ЗадачаСсылка, ПолучательУведомления) Экспорт
	
	// Получение файлов предметов задачи
	Предметы = МультипредметностьКлиентСервер.ПолучитьМассивПредметовОбъекта(ЗадачаСсылка);
	...
КонецФункции


Вывод: в моем случае я разрешил редактирование модулей и подкорректировал объявление необходимых методов без переноса строк как во втором представленном выше варианте. После этого переопределение методов в расширении с директивой "&ИзменениеИКонтроль" заработало как следует.
44. GV. 12.11.20 21:56 Сейчас в теме
Дополнение:
1. Последующее изменение модуля основной конфигурации на исходный отрабатывает правильно: в режиме предприятия выводится уведомление об изменении соответствующего метода.
2. Вывод в (43) - это не единственное и не лучшее решение. Если вручную полностью скопировать метод, объявляемый в несколько строк (первый случай упомянутый в (43)) вместе со строкой, которая его объявляет, то механизм "&ИзменениеИКонтроль" также работает корректно, код переопределенного метода выполняется.

Данный метод в расширении успешно переопределит метод основной конфигурации:

&ИзменениеИКонтроль("ВариантыОтветовДляВыполненияЗадачиПоПочте")
Функция MY_ВариантыОтветовДляВыполненияЗадачиПоПочте(
	ЗадачаСсылка,
	БизнесПроцессСсылка,
	ТочкаМаршрута) Экспорт
	
	Результат = Новый Структура;
	...
КонецФункции
Показать
47. Xershi 1046 21.11.20 13:33 Сейчас в теме
(43) следует указывать релиз платформы и ответ от ТП 1С.
Оставьте свое сообщение
Вопросы с вознаграждением