trdm писал(а) 31. Июля 2013 :: 11:54:kos писал(а) 30. Июля 2013 :: 11:55:Как получить список ВСЕХ процедур / функций / атрибутов 1С (и их параметры) которые являются в 1С системными
Распарсить 1cv7Lang.als ?
))
Да нет же! Ребята!
Цель ведь не в том чтобы
- продублировать документацию
- распарсить ресурсы 1crcrus.DLL
- распарсить ALS
- ....
Идея очень простая: понять КАК 1С отличает
- локальные переменные внутри процедуры\функции
- переменные в контексте формы, реквизиты формы
- глобальные переменные
- системные атрибуты 1С: ФС, Регистр,....
- процедуры\функции контекста формы (объекта)
- глобальные процедуры функции
- встроенные (системные) процедуры \ функции
Т.Е.
в зависимости от КОНТЕКСТА (СоздатьОбъект \ КонтекстФормы \ ГлобальныйМодуль \ СобственноСистема1С )не меняя сигнатуры УЖЕ имеющихся методов \ набора объектов самой 1С++
получать
- список перемнных ЭТОГО контекста
- список процедур\функций (с параметрами) ЭТОГО контекста.
В 1С++ реализована работа (Перехватчик, Информатор, Система, ...)
только с контекстами: СоздатьОбъект \ КонтекстФормы \ ГлобальныйМодульА вот контекст "Собственно 1С (системные вызовы и свойства)"
не перехватывается и анализ не реализован.Если реализовать такой анализ (список системных процедур и т.д.)
то после этого реализовать их же перехват будет дело техники.....
Уж очень хочется иметь такое:
Перехватчик.ВызватьОригинальноеСобытиеСистемы("ОткрытьФорму",ОткрываемОбъект,Парам2,Парам3,.....); Возможно кто-то уже знает как такой анализ выполнить:
- где хранятся точки входа в СИСТЕМНЫЕ процедуры\функции 1С
- где хранятся СИСТЕМНЫЕ атрибуты самой 1С
- как эти static\const точки входа \ атрибуты сопоставлены с объявлениями имен в 1crcrus.dll
- ....
После того как "поимеем" такие списки 1С,
Инфо = СоздатьОбъект("Информатор");
тз = Инфо.ПолучитьТаблицуМетодов(Собственно_Сам_1С);
тз = Инфо.ПолучитьТаблицуСвойств(Собственно_Сам_1С);
мик = СоздатьОбъект("MetaInfoClasses");
мик.ЗагрузитьОписаниеКлассов(Собственно_Сам_1С);
СписокНативныхТипов1С = мик.ПолучитьВсеИменаКлассов();
тогда уже можно будет организовать их перехват...
Процедура ПриНачалеРаботыСистемы()
......
УправлениеНастройками.Включить("ПерехватГлобальныхПроцедурФункций");
......
КонецПроцедуры
Процедура глОткрытьФорму(......) Экспорт
//сейчас перехват включен и отрабатывают наши переопределенные процедуры/функии
..............
Если ТипЗначения(ОткрываемОбъект)=100 Тогда
//сейчас это всё-равно что "глТипЗначенияСтр(...)" .....
Если ТипЗначенияСтр(ОткрываемОбъект)="Справочник" Тогда
глОткрытьФорму(ОткрываемОбъект.ТекущийЭлемент()......);
Возврат;
КонецЕсли;
КонецЕсли;
.............. ....
ам2,Парам3,.....);
......
КонецПроцедуры
Возможно я не прав (не пишу на уровне С\С++),
но концепцию понимаю именно так.
Поправьте меня если я не смотрю в корень....