В глобальном модуле есть некоторая "глПеременная Экспорт".
Обнаружил что видимость этой переменной отличается для КОП-ов,
в зависимости от места создания экземпляра класса.
Если
1cpp.dll была загружена
в теле глобального модуля (а
не в ПриНачалеРаботыСистемы()), то
глобальный модуль (переменные/процедуры/функции) не будет доступен для КОП-объектов,
созданных
ВНЕ глобального модуля:
- как для объектов, созданных
в формах "нативных" объектов 1с77 (модуль проведения не проверял)
- так и для объектов, созданных
внутри других КОП-ов (в качестве атрибутов КОП-а или локальных переменных в методах этого КОП-а)
Тестируется 4 варианта доступа к глобальной переменной:
1)
прямой доступ (простое присваивание "А=Б")
2) ч\з
объект "Сервис" (FormEx) (многоуважаемый автор всем известен
)
3) ч\з
объект "ВыполняемыйМодуль"(автор идеи
mszsuz http://www.1cpp.ru/forum/YaBB.pl?num=1317653014/4#4)
4) ч\з "
Шаблон()" (недокументированные возможности, автор 1С
)
В результате тестирования (конфигурация прилагается, обновлено 2013-03-19)
прямой доступ ведет себя так (что очень-очень "не есть гуд")
(остальные 3 варианта - см.тестовую конфигурацию):
[1] объект "КопОбертка" создан в теле ГМ, до инициализации переменной "глПеременная":1.1 из "КопОбертка" |
доступ к переменной есть, правильно1.2 из атрибута "КопОбертка::КОПартибут1" | доступа нет,
вопрос№21.3 из атрибута"КопОбертка::КОПартибут2" | доступа нет,
вопрос№21.4 из переменной "КопЛокал" в "КопОбертка::Сообщение()" | доступа нет,
вопрос№2[2] объект "КопОбертка" создан в теле ГМ, после инициализации переменной "глПеременная":2.1 из "КопОбертка" |
доступ к переменной есть, правильно2.2 из атрибута "КопОбертка::КОПартибут1" | доступа нет,
вопрос№22.3 из атрибута"КопОбертка::КОПартибут2" | доступа нет,
вопрос№22.4 из переменной "КопЛокал" в "КопОбертка::Сообщение()" | доступа нет,
вопрос№2[3] объект "КопОбертка" создан внутри "ПриНачалеРаботыСистемы()":3.1 из "КопОбертка" |
доступ к переменной есть, правильно3.2 из атрибута "КопОбертка::КОПартибут1" | доступа нет,
вопрос№23.3 из атрибута"КопОбертка::КОПартибут2" | доступа нет,
вопрос№23.4 из переменной "КопЛокал" в "КопОбертка::Сообщение()" | доступа нет,
вопрос№2[4] объект "КопОбертка" создан в теле формы "Справочник.Новый1.ТелоМодуляФормы"4.1 из "КопОбертка" | доступа нет,
вопрос №14.2 из атрибута "КопОбертка::КОПартибут1" | доступа нет,
вопрос№24.3 из атрибута"КопОбертка::КОПартибут2" | доступа нет,
вопрос№24.4 из переменной "КопЛокал" в "КопОбертка::Сообщение()" | доступа нет,
вопрос№2[5] объект "КопОбертка" создан внутри "Справочник.Новый1.ПриОткрытии()":5.1 из "КопОбертка" | доступа нет,
вопрос №15.2 из атрибута "КопОбертка::КОПартибут1" | доступа нет,
вопрос№25.3 из атрибута"КопОбертка::КОПартибут2" | доступа нет,
вопрос№25.4 из переменной "КопЛокал" в "КопОбертка::Сообщение()" | доступа нет,
вопрос№2Вопрос №1 как получить доступ к переменной "глПеременная" из КОП-ов,
созданных в "нативном" модуле формы 1С7.7 (
НЕ в глобальном модуле - случаи 4.1 и 5.1) ?
Вопрос №2 как получить доступ к той же переменной из КОП-ов,
созданных
внутри других КОП-ов (случаи Х.2,Х.3,х,4) ?
Замечание: Понятно что случаи 1.1, 2.1, 3.1 - абсолютно рабочие и не рассматриваются.
В это таблице под
"доступа нет" я понимаю следующее:
исключение при чтении переменной не возникает (т.е переменная "вычитывается"),
но в результате внутри КОП-а (который это значение читал),
полученное значение оказывается СЛУЧАЙНЫМ значением
- не тем, которое реально "живет" в переменной "глПеременная экспорт"
При этом не важно какие настройки включены/выключены для "УправлениеНастройками",
а также не важно есть/нет другие ВК и порядок их загрузки.
Т.е. - это поведение "видимость глобальных переменных" исключительно определяется самой 1C++
Тест на: XP/Vista/7 + 2003 (32\64) + 2003 терминал.
1CPP.DLL Версия 3.2.4.0+3.2.4.1 (предыдущие версии не рассматривал)
от том что
это баг 1С++ и почему его
очень хочется исправить здесь:
http://www.1cpp.ru/forum/YaBB.pl?num=1363347562/6#6и
здесь:
http://www.1cpp.ru/forum/YaBB.pl?num=1363347562/9#9временное
рабочее решение (конфигурация с демонстрацией проблемы и ее решение):
http://www.1cpp.ru/forum/YaBB.pl?num=1363347562/7#7