Ошибка при использовании расширения

1. _sergei 01.02.21 15:16 Сейчас в теме
Добрый день!

В случае наличия в расширении экспортной функции без директивы, выполнение кода происходит неочевидно.

Подробнее.
Предварительная информация.
Из модуля объекта документа определенная функция (1) была перенесена в расширение с директивой &Вместо.
Внутри этой функции (1) находился вызов ещё одной функции (2), которая целиком была перенесена в расширение с удалением из основной конфигурации. У функции (2) был скопирован признак "Экспорт".

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

Поиск.
Естественно, при появлении сообщений от пользователей начал пытаться повторить проблему. Выставил точку останова на строке с ошибкой. Запустил приложение. Выполнил действие. Остановился в отладчике на строке. Увидел, что переменные, которые были в коде "неожиданного" типа. Посмотрел в стеке последовательность вызова процедур и функций. Оказалось, что приход к ошибке "ошибочный", неявный. Последовала чистка кеша, ТИИ, выгрузка в dt, восстановление в файловую, chkdbfl и прочие специальные слова. Дальнейшие действия привели к тому, что была найдена ошибка в расширении. Тот самый "Экспорт", где он не нужен был.

Итог.
Попросил 1С доработать "Проверку модуля" расширения объектов конфигурации на наличие бездирективных экспортных процедур и функций.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. _sergei 02.02.21 11:30 Сейчас в теме
(1) Итак! Сегодня повторил:

В расширении конфигурации добавил новую функцию. Указал, что она экспортная.

При работе с документом получаю ошибку.
В отладчике сталкиваюсь с тем, что в процедуру прилетает "неожиданный" параметр на вход. Ожидаем Неопределено или структуру.
Если смотреть стек, то вижу, что в процедуру в модуле объекта попал из процедуры ПриОткрытии модуля формы.
Перехожу по указанной строке - там вызов другого метода модуля объекта. Прохождение которого в стеке не отражено. Ставил точку на входе в метод ОбработкаРеквизита - исполнение кода туда не попадает.

Лечится все просто снятием признака Экспорт с вновь добавленного метода.
Прикрепленные файлы:
18. SlavaKron 02.02.21 16:01 Сейчас в теме
(1)
которая целиком была перенесена в расширение с удалением из основной конфигурации. У функции (2) был скопирован признак "Экспорт".
А зачем вы меняете основную конфигурацию, если используете расширения?
Не понятно описали Проявление. Попробуйте описать минимальный пример для того, чтобы другие смогли воспроизвести "чудеса".
19. _sergei 02.02.21 16:28 Сейчас в теме
(18) Основная конфигурация меняется для приведения к варианту поставщика. Пример с картинками в (14)
21. SlavaKron 02.02.21 16:34 Сейчас в теме
(19) На 3-ей картинке у вас код модуля не соответствует коду из стека вызовов. Исполняемый код не соответствует тому, который вы видите в конфигураторе. Когда вы разберетесь с этой проблемой, можно разбираться и с функциями.
23. _sergei 03.02.21 08:08 Сейчас в теме
(21) В том и дело, что исполняемый код соответствовал стеку, но не соответствовал написанному коду.
2. user633533_encantado 11 01.02.21 15:25 Сейчас в теме
"на наличие бездирективных экспортных процедур и функций." какая логика должна быть по вашему у этой проверки ?
3. _sergei 01.02.21 15:56 Сейчас в теме
(2) Если поведение кода становится нелогичным, то можно об этом предупредить.
4. _sergei 01.02.21 15:58 Сейчас в теме
(2) Что-нибудь "В расширении <таком-то> функция <бездирективная, экспортная>".
Понятно, что на будущее буду обращать на это внимание. Однако, на всяческие "танцы с бубном" ушла неделя.
5. user633533_encantado 11 01.02.21 16:00 Сейчас в теме
(4) экспортная функция вполне может быть, почему проверка должна считать ее ошибкой ?
6. _sergei 01.02.21 16:03 Сейчас в теме
(5) БЕЗ директивы. Экспортная. Не уверен.
7. user633533_encantado 11 01.02.21 16:06 Сейчас в теме
(6) Без директивы это как : не указано на сервере или на клиенте ?
8. _sergei 01.02.21 16:34 Сейчас в теме
(7) Чорт! Имел ввиду тип вызова: Перед, после, вместо или вместо с контролем
9. user633533_encantado 11 01.02.21 16:41 Сейчас в теме
(8) Ну так она может такой быть.
10. _sergei 01.02.21 16:43 Сейчас в теме
(9) Функция в расширении без указания типа вызова, но при этом экспортная ?
11. user633533_encantado 11 01.02.21 16:46 Сейчас в теме
(10) Да, не позаимствованная функция, которая нужна например для вызова из других мест.
12. _sergei 01.02.21 17:00 Сейчас в теме
(11)В теории, как оказалось, да. Но получилось как описано выше. Продолжу эксперименты.
13. user633533_encantado 11 01.02.21 17:02 Сейчас в теме
(12) Ответ от 1с будет очевидным.
15. _sergei 02.02.21 11:37 Сейчас в теме
(11) Продолжил эксперименты. Приложил слайды.
16. user633533_encantado 11 02.02.21 11:48 Сейчас в теме
17. _sergei 02.02.21 15:43 Сейчас в теме
(16) см. п.1 "Последовала чистка кеша, ТИИ, выгрузка в dt, восстановление в файловую, chkdbfl и прочие специальные слова." На разных компьютерах.
20. EVKash 14 02.02.21 16:33 Сейчас в теме
(19) Не плохо было бы еще на разных платформах проверить. У вас какая?
22. _sergei 03.02.21 08:06 Сейчас в теме
24. EVKash 14 03.02.21 08:29 Сейчас в теме
26. _sergei 03.02.21 08:56 Сейчас в теме
(24) Да, очень похоже. В моем случае, нет необходимости откатываться на 17. Достаточно исправление внести. Но, вообще, нужно отметить, что 18 платформа вендору удалась!
27. EVKash 14 03.02.21 09:26 Сейчас в теме
(26)
18 платформа вендору удалась!

да уж. а ведь раньше четные стабильные были.
сколько нытья уже по 18й. сам думаю до последнего на 16й пока сидеть.
https://forum.infostart.ru/forum34/topic246669/
еще и с производительность все не так хорошо.
25. _sergei 03.02.21 08:49 Сейчас в теме
P.S. Попытался воспроизвести ошибку в другой конфигурации (**). В расширении добавил в модуль объекта экспортный метод, без вызова. Ошибки не последовало.
Конфигурацию (*), в которой ошибка проявляется запускал на разных компах, в разных сетях, в разных (файл-серверных) вариантах. Делаю вывод, что там "звёзды сходятся"...
В любом случае, метод в конфигурации (*) был не экспортный, поэтому признак с него снял. Ошибочное поведение более не проявляется.
28. dap 13 03.02.21 13:00 Сейчас в теме
Не всегда убрать экспорт поможет.
А как например "не видит свойств структуры"

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

пришлось такое типа УчетнаяПолитика.ЕстьНалогНаПрибыль заменять на "Истина".

и это не в расширениях.

не не не, живем пока на 16-й платформе. и с этого момента новые платформы перед обновлением проверяем жесткой тестовой эксплуатацией.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот