При проверке модуля вызываемого по Ctrl-F7 если есть ошибки то 2 клик по строке с ошибкой приводит к переходу на нажную строку.
Что нужно написать в скрипте что бы мой вывод в это окно работал также?
пока использую тупо message
Как выводить текст что бы работал переход?
Re: Как выводить текст что бы работал переход?
Да, объектная модель позволяет.
Посмотри описание объектной модели.
Посмотри описание объектной модели.
-
quest
Re: Как выводить текст что бы работал переход?
а ссылку, для облегчения поиска? понимаю что нагло, но мое гугл-фу - очень плохо....
-
quest
Re: Как выводить текст что бы работал переход?
Вот только это нашел. Есть что-то еще или придется самому дописыфвать обрабочик?
Метод Message
Выводит сообщение в окно сообшений.
Синтаксис:
Message(Текст, [Пиктограмма], [Обработчик], [Параметр для обработчика])
Параметры:
Текст. Обязательный. Строка. Текст выводимого сообщения. Пустой текст движком 1С не выводится.
[Пиктограмма]. Не обязательный. Число или объект Картинка. Указывает пиктограмму для выводимого сообщения. Если передано число, выводится одна из стандартных пиктограмм:
mNone = 0, без пиктограммы
mTriangle = 1, Треугольник
mExc1 = 2, !
mExc2 = 3, !!
mExc3 = 4, !!!
mInfo = 5, Информация
Также может быть передана картинка, кроме картинок из стандартной библиотеки. По умолчанию выводится без пиктограммы.
[Обработчик]. Необязательный. Функция, которая будет вызвана при клике или нажатии Enter на выведенном сообщении.
[Параметр для обработчика]. Необязательный. Любого типа. Будет передан аргументом в функцию-обработчик нажатия при ее вызове.
Метод Message
Выводит сообщение в окно сообшений.
Синтаксис:
Message(Текст, [Пиктограмма], [Обработчик], [Параметр для обработчика])
Параметры:
Текст. Обязательный. Строка. Текст выводимого сообщения. Пустой текст движком 1С не выводится.
[Пиктограмма]. Не обязательный. Число или объект Картинка. Указывает пиктограмму для выводимого сообщения. Если передано число, выводится одна из стандартных пиктограмм:
mNone = 0, без пиктограммы
mTriangle = 1, Треугольник
mExc1 = 2, !
mExc2 = 3, !!
mExc3 = 4, !!!
mInfo = 5, Информация
Также может быть передана картинка, кроме картинок из стандартной библиотеки. По умолчанию выводится без пиктограммы.
[Обработчик]. Необязательный. Функция, которая будет вызвана при клике или нажатии Enter на выведенном сообщении.
[Параметр для обработчика]. Необязательный. Любого типа. Будет передан аргументом в функцию-обработчик нажатия при ее вызове.
-
quest
Re: Как выводить текст что бы работал переход?
Разорбрался.
Но вопрос такой - курсор не мигает. все остально работает, а вот курсор не видно. вот и приходиться мышкой тыкать в окно.
И попутно вопрос - есть шаблон вообще для таких мелентких скриптов? типа того что бы только нужную часть писать а вся обвязка была бы более-менее стандартной?
И еще вопрос - код закритикуйте - где неправильно сделал? как придать коду совершенства?
код
$engine JScript
$uname warn_45lines
$dname warn_45lines
$addin global
$addin stdlib
$addin stdcommands
stdlib.require('TextWindow.js', SelfScript);
stdlib.require('SyntaxAnalysis.js', SelfScript);
global.connectGlobals(SelfScript);
function onSyntaxCheck(cmd)
{
var mdObj, av = windows.getActiveView()
if(!av || !(mdObj = av.mdObj))
return
macrosanalizeModule();
}
function macrosanalizeModule(){
var tw = GetTextWindow();
if (!tw) return;
var parser = snegopat.parseSources(tw.text());
for(var i = 0, c = parser.lexemCount; i < c; i++)
{
var lex = parser.lexem(i)
if(lex.type==40 )
i+= analizeFunction(parser,i,lex);
}
}
function onClick_45Lines(param)
{
if (!param['wnd'])
return
if (!param['wnd'].IsActive())
return
param['wnd'].setCaretPos(param['line']+1,1);
var view = param['wnd'].GetView();
if (!view){}
else
view.activate();
}
function analizeFunction(parser,start,startlex){
line = 0;
name = parser.lexem(start+1).text;
lastline = startlex.line;
var i,c, wnd = GetTextWindow();
for(i = start, c = parser.lexemCount; i< c; i++){
var lex = parser.lexem(i);
var maxLines = 45;
if(lex.type==42){
if(line > maxLines) {
var param = {};
param['wnd'] = wnd;
param['line'] = startlex.line;
message("Функция "+name+" большая. Лишних "+(line - maxLines)+" строк ",mExc1, onClick_45Lines, param);
}
break;
}
if (lex.type == 1) // коменты не считаются кодом.
continue;
line+= (lastline==lex.line) ? 0:1; // смениться после прочтения перевода строки. а это может только при честном переводе или если прочли многострочную строку
lastline =lex.line;
}
return (i - start);
}
// Добавим обработчик команды сохранения файла
stdcommands.Frntend.SyntaxCheck.addHandler(SelfScript.self, "onSyntaxCheck");
Но вопрос такой - курсор не мигает. все остально работает, а вот курсор не видно. вот и приходиться мышкой тыкать в окно.
И попутно вопрос - есть шаблон вообще для таких мелентких скриптов? типа того что бы только нужную часть писать а вся обвязка была бы более-менее стандартной?
И еще вопрос - код закритикуйте - где неправильно сделал? как придать коду совершенства?
код
$engine JScript
$uname warn_45lines
$dname warn_45lines
$addin global
$addin stdlib
$addin stdcommands
stdlib.require('TextWindow.js', SelfScript);
stdlib.require('SyntaxAnalysis.js', SelfScript);
global.connectGlobals(SelfScript);
function onSyntaxCheck(cmd)
{
var mdObj, av = windows.getActiveView()
if(!av || !(mdObj = av.mdObj))
return
macrosanalizeModule();
}
function macrosanalizeModule(){
var tw = GetTextWindow();
if (!tw) return;
var parser = snegopat.parseSources(tw.text());
for(var i = 0, c = parser.lexemCount; i < c; i++)
{
var lex = parser.lexem(i)
if(lex.type==40 )
i+= analizeFunction(parser,i,lex);
}
}
function onClick_45Lines(param)
{
if (!param['wnd'])
return
if (!param['wnd'].IsActive())
return
param['wnd'].setCaretPos(param['line']+1,1);
var view = param['wnd'].GetView();
if (!view){}
else
view.activate();
}
function analizeFunction(parser,start,startlex){
line = 0;
name = parser.lexem(start+1).text;
lastline = startlex.line;
var i,c, wnd = GetTextWindow();
for(i = start, c = parser.lexemCount; i< c; i++){
var lex = parser.lexem(i);
var maxLines = 45;
if(lex.type==42){
if(line > maxLines) {
var param = {};
param['wnd'] = wnd;
param['line'] = startlex.line;
message("Функция "+name+" большая. Лишних "+(line - maxLines)+" строк ",mExc1, onClick_45Lines, param);
}
break;
}
if (lex.type == 1) // коменты не считаются кодом.
continue;
line+= (lastline==lex.line) ? 0:1; // смениться после прочтения перевода строки. а это может только при честном переводе или если прочли многострочную строку
lastline =lex.line;
}
return (i - start);
}
// Добавим обработчик команды сохранения файла
stdcommands.Frntend.SyntaxCheck.addHandler(SelfScript.self, "onSyntaxCheck");
Re: Как выводить текст что бы работал переход?
Конструкции param['wnd'] лучше замени на param.wnd
А так, как я понял, пишет о слишком длинных функциях?
А так, как я понял, пишет о слишком длинных функциях?
-
quest
Re: Как выводить текст что бы работал переход?
ну да. Кандидаты для анализа и под нож рефакторинга.
Пользуясь случаем - автору этого скрипта - респект и уважуха.
Пользуясь случаем - автору этого скрипта - респект и уважуха.
Re: Как выводить текст что бы работал переход?
Давай тогда добавлю с настройкой в расширенную проверку. Типа в настройках выбираешь тип проверки:
синтаксис проверка
орфографическая проверка
длинна в функции/процедуры и параметром задаем количество строк для проверки.
синтаксис проверка
орфографическая проверка
длинна в функции/процедуры и параметром задаем количество строк для проверки.
-
quest
Re: Как выводить текст что бы работал переход?
Да, я только за.
и про двиения функций по списку не забудь
и про двиения функций по списку не забудь