Форум Кладовочки АЛьФ`а

Обсуждение проектов => Дружественные проекты => Тема начата: alyuev от 09 октября 2026, 15:00

Название: Ошибки в наименованиях методов в 1c++
Отправлено: alyuev от 09 октября 2026, 15:00
В исходниках 1С++ нашлись два метода, у которых в одном из имён (русском или английском) одна буква набрана «не той» раскладкой. На экране такие буквы выглядят одинаково, но для 1С это разные символы. Поэтому вызов по имени, набранному честно на одной раскладке, падает с ошибкой «Метод не найден», хотя в справке и в исходниках имя выглядит правильно.

Ниже ошибочная буква выделена красным.

1. ЗаменитьБазовыйОбъект / ReplaceBaseObject (стандартный метод КОП)

defFnNames->AddParam("ReplaсeBaseObject", "ЗаменитьБазовыйОбъект", ...)
[/list]

2. СнятьПерехватСобытийГК / UnHookEventsOfGroupContext (класс Перехватчик / Hooker)

BL_METH_PROC("UnHookEventsOfGroupContext", "СнятьПерехватСобытийГK", ...)

Как обойти сейчас, не пересобирая компоненту


Как исправить в исходниках (предложение)

Правильное имя нужно добавить, а ошибочное оставить синонимом, чтобы не сломать уже написанный код:

// UserClassesImpl.cpp
defFnNames->AddParam("ReplaceBaseObject", "ЗаменитьБазовыйОбъект", funcReplaceInstBaseClasses, 1, 2);  // латинская c
// + синоним с прежним (ошибочным) написанием "Repla\xF1eBaseObject" для совместимости

// System\Hooker.cpp
BL_METH_PROC("UnHookEventsOfGroupContext", "СнятьПерехватСобытийГК", 1, &procUnHookEventsOfGroupContext) // русская К
// + синоним с прежним написанием "СнятьПерехватСобытийГK" (латинская K)

Перед правкой стоит проверить, что карта методов допускает два имени для одного номера метода. Если не допускает, синоним оформляется отдельной записью с тем же обработчиком: так в 1С++ уже сделано для ЗаменитьЭксзБазовогоКласса.

Как это нашли

Скриптом проверили все строковые литералы исходников 1С++ на слова, где смешаны кириллица и латиница из похожих букв (А/A, С/C, К/K, О/O, Р/P и т.д.). Кроме этих двух методов нашлось одно сообщение об ошибке: SQL\MetaDataWork.cpp, строка 414, «Cписок значений...», где первая буква «C» латинская (косметика). Всё остальное оказалось в комментариях. Такие имена, как ВыполнитьSQL_ИзТЗ, РежимRPC, СоздатьALS, смешаны намеренно и проблемой не являются.