kos писал(а) 26. Февраля 2014 :: 22:02:...skip...
(2)
метод ПарсингФункцийНачалоКонецПериода()
метод Обороты_РегистрОстатки_SQL()
метод Обороты_РегистрОбороты_SQL()
метод БИОборотыДтКт_SQL()
метод ПолучитьВТОбороты_SQL()
+(наверное,не проверял) для парных DBF-версий.
в начале каждого метода конструкция Врег(Подготовить...) РЕГИСТР строки не меняет
(и как следствие - дальнейшая проверка "Если ... Тогда" не работает)
В отладчике: "Период"<>"ПЕРИОД" и "Документ"<>"ДОКУМЕНТ"
.... skip ....
По поводу п.2 предыдущего поста:Выяснил откуда такое странное поведение
Глючит
сам 1С++ (версия 3.2.4.1) - неверная область видимости публичных атрибутов !!
Суть в следующем:
у меня есть наследник от класса "ПрямойЗапрос"
в котором есть 2 публичных атрибута
- Периодичность
- МетодДополнения
(имена пересекаются с локальными переменными в указанных методах базов.класса "ПрямойЗапрос")
В базовом классе "ПрямойЗапрос" методы я(),вирт(),Сам(Контекст) и т.д.
не используются
(и если не вносить правки из п.2, что постом выше)
и поэтому 1С++ "думает"
что переменные в указанных выше методах - это публичные атрибуты наследника..... а не локальные переменные метода!!!
Я до сих пор понимал так (согласно ООП от 1С++)
= вирт().Х - это обращение к публичным атрибутам/методам "крайнего" наследника из базы (того объекта, который реально создан)
= я().ХХХ - это обращение к собственным публичным атрибутам/методам текущего класса
= ХХХ - это обращение приватным методам/переменным (общим в модуле/локальным в методе)
Если взять "чистый" класс "ПрямойЗапрос" - глюков не наблюдается
(естественно - наследников-то нет !).
Это проблема 1С++.
Почему "Периодичность" и "МетодДополнения" так себя ведут - не понятно.
Может кто-нить сказать что-нить?
кто хочет может проверить:
1) сделайте класс-наследник от "ПрямойЗапрос"
с публичными атрибутами "Периодичность" и "МетодДополнения"
2) присвойте им значения (написание значений должно быть НЕ В ВЕРХНЕМ регистре!)
оКОП.Периодичность = "Период";
оКОП.МетодДополнения = "Движения";
3) из обработки сделайте запрос:
оКОП.Текст = "
| select * from $РегистрОстаткиОбороты.ОстаткиПартий(:НачДата,:КонДата~,Период,Движения
| ,,,,) как Рег
|";
и получите ошибку что постом выше
(парсер базового класса не сможет привести к верхнему регистру переменные в указанных методах).
Думаю
очень родственный (известный) глюкдля метода "
Информатор.ПолучитьТаблицуСвойств()"
который возвращает как публичные атрибуты, так и приватные
для любого КОП-а
но при этом парный метод "Информатор.ПолучитьТаблицуМетодов()"
работает без такой ошибки (только публичные методы, без приватных)
В общем-то п.2 из предыдущего поста наверное никому не мешает, кроме меня.
Но "
очепятки" описанные в п.1,3 -
явно ошибки класса.
И очень сильная "
хотелка" - п.4 из предыдущего поста.
Спасибо.