Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Файлы INTS для КОП-ов (обновление метода Update1CppInts) (число прочтений - 14840 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Файлы INTS для КОП-ов (обновление метода Update1CppInts)
18. Мая 2014 :: 23:37
Печать  
скрипт Intellisence.vbs , макрос Update1CppInts
теперь умеет:

1) вычитывать файлы *.PRM по сетевому пути,
   когда база подключена как

   \\сервер\шара\путь\КаталогИБ\бла-бла\файлы.prm

   Раньше ругался на корневой (и далее не работал):

   "Ошибка открытия модуля \\сервер\шара\путь\КаталогИБ\DefCls.prm "

   (исправлен метод "TClassModule()" в файле "SyntaxAnalysis.wsc")

2) к методам КОП-ов (помимо имен методов)
   добавляет теперь еще и параметры вызова, т.е.

  вместо "МойМетод(f)"

  подставляет "МойМетод(Парам1,знач Парам2=0, Парам3=0, и т.д.)"
  т.е. полное определение методов.

   - в файле "SyntaxAnalysis.wsc" добавлено свойство-коллекция "ParamsOfMethod"
   - остальные правки в "Intellisence.vbs"
     (AddCppMethods,Update1CppInts,новый Update1CppIntsThisClass)

   TODO: научить Intellisence генерить хмл/тлс-файл для класса
   и потом получать тлс-файл для телепата
   После реализации этой задачи:
   - фичу этого пункта отменить (не удобно удалять параметры по-умолчанию)
   - вместо этого : устанавливать курсор на "междускобъё" (|)

3) в список стандартных методов КОП-ов
   дополнительно добавлены методы (ранее не было) по работе с

   - контроль обычных атрибутов (по количеству публичных атрибутов класса: ПриПолучении_/ПриЗаписи_ )
   - методы для динамических атрибутов
   - методы для сериализация экземпляров класса
   - методы для универсальной загрузки в любой объект класса

   (для этих целей в "Intellisence.vbs" завел отдельный метод "AddStandartKOPMethodsTo1CppInts")

в Intellisence.vbs добавлен обработчик события Configurator_OnFileSaved
4) при сохранении активного окна (CTRL+S или по иконке "Сохранить")
   автоматически (после успешного сохранения конфигуратором)
   а) если сохраненное окно - модуль КОП-класса (в составе МД или внешний)
   генерит для этого класса INTS-файл (по стандартному пути для классов intellisens-а)
   б) если сохраненное окно - файл определений классов (DefCls@MD|*.prm)
   перечитывает "словарь" объявленных классов с которыми работает Intellisence

5) Добавлен контроль языка интерфейса и метаданных.
   если 1С77 запускается как локализованная версия с параметром /L<язк>
   то intellisence иногда глючит на локализованные слова (есть любители такого  Ужас)
   - при инициализации скрипта проверяется командная строка
     и если не 'rus' и не 'eng' - инициализации не происходит (+сообщение).
   - исключение: когда локализованная версия запущена с метаданными,
     в которых стоит признак "Язык=Английский" (запускается всегда)
   
   
В ОБЩЕМ СЛУЧАЕ:

Изменению подверглись 2 файла (исходные версии указаны в скобках):

\BIN\config\scripts\Intellisense\Intellisence.vbs ($Revision: 1.75)
\BIN\config\system\SyntaxAnalysis.wsc ($Revision: 1.24)


Перереристрация WSC не требуется.

Файлы во вложении.

ЗЫ. Исходные версии файлов были взяты из "последней ночной сборки"
http://1c.alterplast.ru/files/ocs/ocs_last.dos.zip

ЗЫ.ЗЫ. Просьба к гуру. Если считаете это полезным:
пожалуйста, присвойте этим файлам новую версию (как там положено)
и вложите их в указанную "стандартную последнюю сборку"

(как сказано в http://www.1cpp.ru/forum/YaBB.pl?num=1150707341)

Чтоб не потерялось.  Подмигивание

Всем спасибо.

TODO (из файла Intellisence.vbs) КТО ХОЧЕТ ПОПРОБОВАТЬ:

1) скриптом генерить алс-файлы для классов 1С++,
в принципе trdm уже сделал класс в скрипте для генерации подобного файла,
теперь дело осталось за малым -
нужно просто слить методы и переменные класса в als-файлик.

2) еще можно расширить скриплет от ADirks по анализу хедеров и классов 1C++
на предмет получения комментов к методам и получения типов параметров метода.
   (Оказывается ADirks уже правил скрипт Intellisence.vbs
   для этих целей здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1376299540
   но в официальную ночную сборку это почему-то не попало .....)

3)А еще можно генерить хмл/тлс-файл для класса и потом получать тлс-файл для телепата

4) А еще кто бы сделал генерацию хмл/тлс-файлов для телепата на базе любых алс-файлов, а?

5) постепенно сложность Intellisense.vbs возрастает, и становится все сложнее контролировать его функционал.
Хорошо бы добавить возможность тестирования этого скрипта

Улыбка Улыбка Улыбка

   
« Последняя редакция: 16. Июня 2014 :: 14:17 - kos »  

OpenConf_config_scripts_013.7z ( 33 KB | Загрузки )
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #1 - 19. Мая 2014 :: 08:26
Печать  
Обновлено:

4) Методы базового класса добавляем
       только если наследник не переопределил его:


   Ранее: методы базового добавлялись первыми,
   а потом анализировался наследник.

   Например:

   в базе 'Метод(Парам1,знач Парам2=0)'
   в наследнике 'Метод(Парам1,знач Парам2=0,знач Парам3=0)'

Обновление - в первом посте.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #2 - 19. Мая 2014 :: 10:38
Печать  
Обновлено:

5) добавлен контроль нажатия сочетаний CTRL+Ы CTRL+S
   

   ( чтобы каждый раз не кликать на "Update1CppInts" )

   Если текущее редактируемое окно является
   ОБЪЯВЛЕННЫМ (в defcls.prn или defcls@MD) КОП-классом

   и (на клавиатуре) нажато "сохранить файл"

   выполняется автоматическая генерация ints-файла этого класса
   по пути "по-умолчанию" (так же как в методе "Update1CppInts")

   Требует наличие аддона 'KbdProcs.DLL' для ОпенКонфа
   Если его нет - скрипт отключает перехват нажатий этой комбинации (у себя)
   и автогенерация отключается.
   При этом "ручной метод" ч/з кликание "Update1CppInts" остается рабочим.


Как и ранее: обновленные 2ва файла - в первом посте.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #3 - 19. Мая 2014 :: 11:39
Печать  
kos писал(а) 19. Мая 2014 :: 10:38:
[b]5) добавлен контроль нажатия сочетаний CTRL+Ы CTRL+S


Это обновление отменено. Плачущий

Глюк очень простой: перестал работать скрипт "KbdProcsHandler.vbs" Ужас
т.к. внутри "Intellisence.vbs" я пепреподключал плагин "KbdProcs.DLL"

Пока что CTRL+S для "Intellisence.vbs" не работает.
Но работает стандартный "Update1CppInts"

Вопрос к гуру:

1) вариант №1: Как перехватить "CTRL+S" внутри "Intellisence.vbs"
   без подключения "KbdProcs.DLL" (т.е. только средствами "Телепата") ?

2) Вариант №2: как достучаться к методам "KbdProcsHandler.vbs" из "Intellisence.vbs"
   или (что тоже) к методам "Intellisence.vbs" из "KbdProcsHandler.vbs" ?
   (в скриптостроении не оч.силен)

Не удобно каждый раз кликать на обновлении ВСЕХ классов
когда обновить нужно только один (текущее редактируемое окно).

Обновленная исправленная версия - (как и раньше) в первом посте.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #4 - 19. Мая 2014 :: 12:09
Печать  
оказывается ADirks уже правил скрипт Intellisence.vbs
здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1376299540

по сравнению с тем, что лежит "официально" в ФАК-ах:
http://www.1cpp.ru/forum/YaBB.pl?num=1150707341


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


Вопрос остается открытым:

как перехватить CTRL+S в скрипте Intellisence.vbs ?
HELP !
  
Наверх
 
IP записан
 
stepman1
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 02. Июля 2007
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #5 - 19. Мая 2014 :: 12:44
Печать  
Понравилось. Но местами есть глюки -  пропадают функции процедуры в списке выбора,
параметры функций подставляются из других функций.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #6 - 19. Мая 2014 :: 15:48
Печать  
stepman1 писал(а) 19. Мая 2014 :: 12:44:
пропадают функции процедуры в списке выбора,


не понял. можно подробней. или скрин.
исправлю.

stepman1 писал(а) 19. Мая 2014 :: 12:44:
параметры функций подставляются из других функций.


исправил.

обновление = в первом сообщении.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #7 - 19. Мая 2014 :: 15:54
Печать  
Подскажите
какие события (полный список желательно) есть у объектов:

Configurator_OnXXXX()
Telepat_OnXXXXX()

это здоровски помогло бы с задачей для CTRL+S

Или может есть какая-нить IDE/Util
которая покажет их  для любого js/vbs/dll ?

Я так понял нужно перехватить событие
что-то вроде

Configurator_OnKeyPress
Telepat_OnKeyPress


тока не пойму как.....

ХЕЛП!
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #8 - 19. Мая 2014 :: 20:25
Печать  
Благодаря великолепной страничке Федора Евзеева
http://1c.alterplast.ru/faq/openconf.html

на которй есть конкретный ответ на мой вопрос
из предыдущего сообщения
"Q. Как написать свой плагин (скрипт) к OpenConf?"

Обнаружил, что моя задача ЛЕГКО решается ч/з обработчик события

Configurator_OnFileSaved

Задача решена. УРА!

Финальную версию - выкладываю в первом посте.

Пользуйтесь на здоровье. Подмигивание
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #9 - 20. Мая 2014 :: 05:34
Печать  
ОЙ!

В последнем обновлении при сохранении окна
выдавалось служебное сообщение для отладки. Злой

Исправил. Прошу прощения.
Теперь - финальная версия - в первом посте.
Улыбка
  
Наверх
 
IP записан
 
stepman1
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 02. Июля 2007
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #10 - 20. Мая 2014 :: 06:26
Печать  
// defcls@MD

///<class name = "ЗапросSQL"
класс ЗапросSQL = классЗапросSQL@MD
{
     void УстановитьПериод(ДатаНачала, ДатаКонца);
     void ДобавитьУсловие(Строка Таблица="", Строка Переменная="", Строка Модификатор="", Значение, Строка ИмяУсловия="", Строка Текст="", Строка ТипФильтра="", Строка ИмяДопУсловия="");
     undefine Выполнить(Число Отладка=0, Число ТаблицаГруппировок=0, Число ОчиститьУловия=0);
     void РежимRPC(Число Парам=0);
};
///</class>

сама процедура
Процедура ДобавитьУсловие(Таблица, Переменная, Модификатор, Значение, ИмяУсловия, Текст, ТипФильтра, ИмяДопУсловия) Экспорт
     Если ПустоеЗначение(тзУсловия)=1 Тогда
           тзУсловия=СоздатьОбъект("ТаблицаЗначений");
           тзУсловия.НоваяКолонка("Таблица");
           тзУсловия.НоваяКолонка("Переменная");
           тзУсловия.НоваяКолонка("Модификатор");
           тзУсловия.НоваяКолонка("ТипФильтра");
           тзУсловия.НоваяКолонка("Значение");
           тзУсловия.НоваяКолонка("Имя");
           тзУсловия.НоваяКолонка("Текст");
           тзУсловия.НоваяКолонка("ИмяДопУсловия", "Строка"); //***
           тзУсловия.НоваяКолонка("ВремТаблица"); //Используется для "УложитьСписокОбъектов"
     КонецЕсли;

     тзУсловия.НоваяСтрока();
     тзУсловия.Таблица=Таблица;
     тзУсловия.Переменная=Переменная;
     тзУсловия.Модификатор=Модификатор;
     тзУсловия.Значение=Значение;
     тзУсловия.ТипФильтра=ТипФильтра;
     тзУсловия.Имя=?(ПустоеЗначение(ИмяУсловия)=1, Переменная, ИмяУсловия);
     тзУсловия.ИмяДопУсловия=ИмяДопУсловия; //***
     тзУсловия.Текст=Текст;

     АвтоПараметры=1;
КонецПроцедуры

. в списке выбора нет процедуры "ДобавитьУсловие", а процедуры "ДобавитьДинамическоеСвойство" в классе нет.

  

____1.PNG ( 4 KB | Загрузки )
____1.PNG
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #11 - 20. Мая 2014 :: 07:40
Печать  
stepman1 писал(а) 20. Мая 2014 :: 06:26:
в списке выбора нет процедуры "ДобавитьУсловие", а процедуры "ДобавитьДинамическоеСвойство" в классе нет.


Исправил.
- "ДобавитьУсловие" в состав попадает
- "ДобавитьДинамическоеСвойство" - это стандартная процедура для всех КОП-ов (http://1cpp.ru/docum/icpp/html/classes.html#id41)

Кроме того
- исправил оЧепятку в составе "стандартные методы КОП-ов"
- добавил новый функционал

Функционал: при сохранении по CTRL+S/иконке
если активное окно является файлом определений (DefCLS|PRM)
выполняется перечитывание списка объявленных в составе конфигурации
классов, с которыми работает Интелисенс.

Обновление - как и прежде - в первом посте.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #12 - 20. Мая 2014 :: 09:27
Печать  
Добавлен контроль языка интерфейса и метаданных.

Дело в том, что

если 1С77 запускается как локализованная версия с параметром /L<язк>
то intellisence иногда глючит на локализованные слова  Смех

Обнаружил умельцев-программистов,
которые пишут на родном языке  Ужас Ужас

При инициализации скрипта проверяется командная строка
и если не 'rus' и не 'eng' - инициализации не происходит (+сообщение).

Исключение: когда локализованная версия запущена с метаданными,
в которых стоит признак "Язык=Английский"
(предполагается что ВСЁ в конфигурации - логично ведь - на английском)

Обновление: в первом посте.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #13 - 20. Мая 2014 :: 10:21
Печать  
Гуру!

Где взять описание для структуры "хмл/тлс-файлов телепата"
чтобы научить Интелисенс
генерить хмл/тлс-файл для класса и потом получать тлс-файл для телепата ?

Так сказать RefGuide

А ?

Бросьте ссылочку.

БОЛЬШОЕ СПС.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Файлы INTS для КОП-ов (обновление метода Update1CppInts)
Ответ #14 - 21. Мая 2014 :: 06:26
Печать  
Обновление (надеюсь это будет "стабильная последняя бета" )  Смех

Исправления:
1) SyntaxAnalysis, метод FillMethodList
   исправил шаблон RegExp-а, а также последовательность парсинга.
   Первым делом удаляю все комментарии:
   - закомментированными могут быть публичные методы/атрибуты
     и тогда они попадают в список
   - комментарии, "приклееные" к параметрам вызова методов
     тоже нужно обрезать
2) исправил логику (последовательность) заполнения
   - сначала собственные атрибуты / методы
   - потом стандартные (1с++ для КОП-ов = в КОП-е могли их переопределить)
   - и только после этого - анализируем базовые методы
     (которые тоже наследник мог переопределить)
3) исправил ошибку дублирования стандартных методов
4) исправил ошибку когда попадали не все методы класса в список
5) чего-то там еще: уже не помню.

В общем - работает.

Обновление: в первом посте.
Надеюсь, коллеги, Вам понравится и будете пользоваться.

На будущее:
(если будет время и желание) попробую сделать генерацию "хмл/тлс-файлов телепата"

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

Кто хочет помочь: не стесняйтесь. Хотя бы словом.
Или информацией - например:

где взять толковое описание структуры файлов для телепата (хмл/тлс) ?




ЗЫ. Огромный поклон ADirks & Co.
ЗЫ.ЗЫ. Пытался прикрутить фишки, которые задумал ADirks по теме
http://www.1cpp.ru/forum/YaBB.pl?num=1376299540
по анализу комментариев. Похоже мне понятно,
почему в основную сборку это не попало:
гиблое дело анализ комментариев  Плачущий
Закометировано может быть всё что угодно.....
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать