Глюки расширений на платформе 1С: Предприятие 8.3

29.01.26

Разработка - Механизмы платформы 1С

Я программист 1С с опытом 28 лет, и сегодня впервые своими глазами увидел глючное расширение.

Поскольку глюк оказался очень устойчивым (воспроизводится с вероятностью 100%), я решил подробно описать, как он себя проявляет и как мне его удалось победить.

Платформа 1С Предприятие 8.3.22.2283. Серверная база (и не одна). Одинаково глючат сразу несколько баз.

В глючном расширении расширены модули объектов одного документа и двух обработок.

Глючит только модуль документа, причём глюк выглядит так.

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

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

В результате получается сбой открытия формы документа. Так как после выполнения процедуры в расширении ничего не возвращается (точнее, возвращается Неопределено), а выполняемый интерпретатором код ждёт значение типа Булево из выполняемой функции (которая вдруг стала процедурой).

Если расширение удалить из базы, то всё работает как часы (разумеется, за исключением удаленного функционала, который нужен его заказчику).

 

Откуда взялось проблемное расширение.

Его изготовил и установил в рабочие базы мой коллега (сотрудник моего отдела). Он и понятия не имел, что в расширении есть такая проблема. 

 

Как ни странно, мне удалось победить данный глюк следующим способом.

Я удалил документ из расширения и создал новое расширение, в котором способ исправления процедуры модуля документа в расширении выбрал не "Вместо", а "Изменение и контроль". Таким образом, глючное расширение было успешно декомпозировано на 2 части, каждая из которых работает нормально.

Первая часть - это исходное проблемное расширение, в котором удалён проблемный документ.

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

 

Эксперименты с проблемным расширением.

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

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

Вступайте в нашу телеграмм-группу Инфостарт

расширение ошибка платформа 1С 8.3.22

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    27552    TitanLuchs    106    

147

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    15143    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    17146    user2122906    9    

61

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    27718    dsdred    79    

143

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    25332    bayselonarrend    22    

175

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    13852    dsdred    22    

85
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1464 29.01.26 16:14 Сейчас в теме
Ничего не понятно, но очень интересно... Нужно же было видео хоть записать) Ну или привести алгоритм действий для воспроизведения, если уж
воспроизводится с вероятностью 100%
user1254376; tormozit; +2 Ответить
2. megatrend 132 29.01.26 16:17 Сейчас в теме
(1)
Ну или привести алгоритм действий для воспроизведения,

Для воспроизведения глюка нужно было всего лишь в режиме 1С Предприятие попытаться открыть форму нового документа, причём открыть КОПИРОВАНИЕМ старого документа.
3. RocKeR_13 1464 29.01.26 16:21 Сейчас в теме
(2) У меня хоть и нет 28 лет опыта, но мой опыт научил меня не верить пользователям/коллегам только с их слов) Если 100% воспроизводится - лучше еще раз повторите и добавьте к публикации. Иначе просто непонятно, действительно ли это глюк, и при каких условиях он имеет место быть.
ixijixi; Xershi; +2 Ответить
4. megatrend 132 29.01.26 16:26 Сейчас в теме
(3) глюк я сам воспроизводил несколько раз. Приложить бинарный файл расширения не могу, т.к. это программный код, принадлежащий работодателю.
6. RocKeR_13 1464 29.01.26 16:46 Сейчас в теме
(4) да не нужно файл расширения прикладывать реальный. Речь про то, как можно это повторить. По описанию из публикации ничего не понятно, что в расширении было сделано. Прошу прощения, но со стороны это выглядит как в известном мультипликационном фильме
Я вам посылку принес, только я вам ее не отдам, потому что у вас докУментов нету
EvgeniyOlxovskiy; +1 Ответить
7. megatrend 132 29.01.26 16:59 Сейчас в теме
(6)
что в расширении было сделано

Вот я открыл проблемное расширение. В нём переопределено всего три метода. Перечисляю их заголовки.

Документ Первый
модуль объекта
&Вместо("РассчитатьНДС")
Процедура Расш111_РассчитатьНДС(прСтрокаПлатеж = Неопределено) Экспорт

Обработка Первая
модуль объекта
&Вместо("ДействияЗагрузкаПКО")
Процедура Расш111_ДействияЗагрузкаПКО(ТЗДанные, Форма = Неопределено) Экспорт

Обработка Вторая
модуль объекта
&Вместо("ЗаполнитьТаблицу")
Функция Расш111_ЗаполнитьТаблицу(лкТаблица) Экспорт

Так понятнее стало, что внутри?
8. RocKeR_13 1464 29.01.26 17:03 Сейчас в теме
(7) и вы утверждаете, что при добавлении копированием в таком случае происходит ошибка?
12. megatrend 132 29.01.26 17:19 Сейчас в теме
(8) Да. Ошибка времени выполнения.
9. RocKeR_13 1464 29.01.26 17:10 Сейчас в теме
(7)

ВВызов этой функции (не исправленной в расширении!), переадресуется в расширение в тело процедуры, которая замещает другую процедуру (даже не функцию!) модуля документа.

Так может эта функция вызывает процедуру "РассчитатьНДС"? Поэтому и попадает в расширение в процедуру "Расш111_РассчитатьНДС", которая была некорректно реализована и приводила к сбою?
10. megatrend 132 29.01.26 17:18 Сейчас в теме
(9) В том то и дело, что вызываемая при открытии формы документа функция модуля объекта документа никак не вызывает процедуру "РассчитатьНДС".
НИКАК.

Кроме формирования замера производительности, указывающего на глюк, я ещё пошагово отлаживал каждую строку кода, которая приводила к ошибке. Там вместо перехода в модуль объекта на функцию (не-расширенную в расширениях) происходил прыжок в расширение на процедуру.
13. RocKeR_13 1464 29.01.26 17:27 Сейчас в теме
(10)
В том то и дело, что переопределяемая функция документа никак не вызывает процедуру "РассчитатьНДС".
НИКАК.

Это ваши слова) Мы, как сторонние наблюдатели, не видим ни стек вызовов, ни демонстрацию - соответственно, не можем это воспроизвести, каким-либо образом подтвердить и использовать на практике.

К тому же я уже запутался: в расширении переопределена процедура или функция?
Вызов этой функции (не исправленной в расширении!)


Что хоть за конфигурация? Что там за функция первая в модуле объекта? Что там по стеку вызов было перед "ошибочным" переходом в модифицированную в расширении процедуру?
14. megatrend 132 29.01.26 17:29 Сейчас в теме
(13) я исправился в сообщении выше. Функция не "переопределяемая", а "вызываемая при открытии формы документа".
15. RocKeR_13 1464 29.01.26 17:32 Сейчас в теме
(14)
я исправился в сообщении выше. Функция не "переопределяемая", а "вызываемая при открытии формы документа".

Ладно, раз не хотите нам реальные доказательства/демонстрацию приводить - вытаскивать по крупице тоже нет желания.
З.Ы. минус не от меня, не подумайте ничего плохого)
16. megatrend 132 29.01.26 17:35 Сейчас в теме
(13)
Что хоть за конфигурация?

Самописная. Режим совместимости = "Не использовать". CF-файл весит 90 Мбайт.

(13)
Что там за функция первая в модуле объекта?

Функция ПередОткрытиемФормыОбъекта.

(13)
Что там по стеку вызов было перед "ошибочным" переходом в модифицированную в расширении процедуру?

Вызов проблемной функции происходит из предопределенного обработчика обычной формы документа
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
5. aximo 2573 29.01.26 16:36 Сейчас в теме
Я тоже считаю, что упоминать про 28 лет опыта в этой статье лишнее
user1254376; ardn; +2 Ответить
11. megatrend 132 29.01.26 17:19 Сейчас в теме
(5) простите, в следующей статье об этом не будет ни слова.
17. starik-2005 3211 29.01.26 18:53 Сейчас в теме
(5)
упоминать
Расширениям всего-ничего сколько лет. Я бы сказал так: имея три года опыта работы с расширениями, я первый раз сталкиваюсь с таком вот поведением платформы, и мне наплевать, что на форуме тут тема о глюках на стопиццот страниц.
protonfoton; +1 Ответить
18. Xershi 1537 30.01.26 06:27 Сейчас в теме
Я тоже часто ловил глюки расширения, но довольно часто это баг кеша и битой базы.
После очистки модуля и ввода текста кода с нуля обычно всё проходит. Ну и релиз давно нужно поднять. Типовые на таком релизе уже не работают.
А раз у вас несколько разработчиков, есть ещё баг работы с хранилищем, который к сожалению даже опытные разработчики игнорируют. Работают не корректно с точки зрения работы с хранилищем. И там опять тот же самый кеш))
Поэтому все предсказуемо.
А по делу нужно писать в ТП и подтверждать баг!
user1254376; RocKeR_13; EvgeniyOlxovskiy; +3 Ответить
21. megatrend 132 30.01.26 12:13 Сейчас в теме
(18) Вносить изменения в модуль документа я пробовал, удалил несколько пробелов.

Писать в ТП не стал, так как ошибка была исправлена моими силами (хотя в ТП я иногда пишу письма, которые потом вносят в списки ошибок платформы).

Подъём релиза запланирован.
23. Xershi 1537 30.01.26 12:27 Сейчас в теме
(21) я думаю после очистки всех кешей и полного удаления текста модуля и вставки его заново с привязкой обработчиков всё наладилось бы.
В принципе вы это и сделали из описания статьи.
25. megatrend 132 30.01.26 12:33 Сейчас в теме
(23)
после очистки всех кешей

Кэши я не чистил. Почему-то не было причин подозревать, что это кэш (по причине массовости явления, в том числе). Может, и зря.

Попробую воспроизвести ситуацию на базе с очищенным кэшем и напишу, что получится.
19. Avatarzorro 69 30.01.26 07:46 Сейчас в теме
ничего не понятно. Как связан опыт и глюк? И глюк ли это? Почему только при копировании?

Что если закомментить все изменения в расширении из вызываемых функций? Будет ли проявляться ошибка?

Судя по комментам автор все на расширениях делает на &Вместо, что уже говорит о его высоком опыте в 28 лет (думаю все поняли о чем я).

Да и опыт опыту рознь. Можно 20 лет тыкать унылую ут и сидеть на низком уровне, а можно 1-2 года потыкать условную erp и будешь значительно выше чем вот этот чел с торговлей и 20 летним стажем

Единственные глюки которые я ловил с расширениями это баги идентификаторов расширяемых форм, когда при попытке добавить\открыть измененую форму в расшерении вылетает конфигуратор.

То что Процедура основного модуля Процедура_Х заменяется на расш_Процедура_У даже звучит как дичь. Разве что если автор не указал или в таком духе
&Вместо("Процедура_Х")
Процедура Процедура_У()

КонецПроцедуры
22. megatrend 132 30.01.26 12:22 Сейчас в теме
(19)
Почему только при копировании?

Понятия не имею почему. Не было времени и интереса копать глубже.

У кого-то из пользователей по слухам ошибка проявлялась не только при копировании, а наоборот при открытии существующих документов. Но у меня лично она проявлялась только при копировании. Я описал в статье только то, что видел сам, а не то, что мне говорили другие.
(19)
Что если закомментить все изменения в расширении из вызываемых функций? Будет ли проявляться ошибка?

Вот это я не делал, может потом как-нибудь изучу поведение и напишу ответ на этот вопрос.
(19)
Разве что если автор не указал или в таком духе
&Вместо("Процедура_Х")
Процедура Процедура_У()

КонецПроцедуры

Нет, такого нет. Всё в расширении было сделано как нужно - имя процедуры в заголовке соответствует инструкции &Вместо.
(19)
То что Процедура основного модуля Процедура_Х заменяется на расш_Процедура_У даже звучит как дичь

Верно. Отсюда и родилась эта статья, что такого поведения я никак не ожидал увидеть.
27. megatrend 132 30.01.26 13:00 Сейчас в теме
(19)
Да и опыт опыту рознь. Можно 20 лет тыкать унылую ут и сидеть на низком уровне, а можно 1-2 года потыкать условную erp и будешь значительно выше чем вот этот чел с торговлей и 20 летним стажем

Не знаю, про какого чела с торговлей тут речь, но конфигурация в статье ничуть не "торговая", а скорее это самописный (отраслевой) аналог конфигурации "Управление холдингом", правда, на обычных формах. И соответствующее холдингу количество пользователей в базах этой системы.
20. ixijixi 2099 30.01.26 08:53 Сейчас в теме
Чисти программный кэш.

У меня было такое: идешь отладчиком по коду и глаза на лоб лезут - отладчик скачет по модулю совершенно непредсказуемо.

Подробнее тут писал https://forum.infostart.ru/forum24/topic210659/message2152264/
megatrend; +1 Ответить
28. RocKeR_13 1464 30.01.26 15:34 Сейчас в теме
(20) Я обычно сталкивался с кешем после обновления основной конфы: расширение правил под новый релиз, а 1С мне выкидывала "Метод объекта не обнаружен" на строке, где менял вызов процедуры/функции. Пару раз с патчами такое было)
24. Xershi 1537 30.01.26 12:29 Сейчас в теме
И ещё в догонку используется ли динамическое обновление конфигурации?
Иногда и это становится причиной не корректно работающего кеша.
26. megatrend 132 30.01.26 12:37 Сейчас в теме
(24)
И ещё в догонку используется ли динамическое обновление конфигурации?

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