$engine JScript
$uname codegen_create_type
$dname Генератор Описания типов...
$addin codegen_manager
$addin stdlib
$addin vbs
// (c) Александр Орефков orefkov at gmail.com
// Сосна Евгений <shenja@sosna.zp.ua>
// Скрипт - генератор кода, обманем подсказку 1С.
//
codegen_manager.registerCodeGen("#Если _ Тогда/Справочник", genarateNewRefs);
codegen_manager.registerCodeGen("#Если _ Тогда/Документ", genarateNewDoc);
codegen_manager.registerCodeGen("#Если _ Тогда/ПроизвольныйТип", genarateNewType);
function getWordUnderCursor(){
extSearch = stdlib.require(stdlib.getSnegopatMainFolder()+'scripts\\extSearch.js').GetExtSearch();
selText = ''
w = extSearch.watcher.getActiveTextWindow();
if (!w) return ''
var selText = w.GetSelectedText();
if (selText == '')
selText = w.GetWordUnderCursor();
return selText
}
function genarateNewRefs(param)
{
// Для начала выберем вид справочника
var docKind = snegopat.parseTemplateString('<?"Выберите вид справочника", Справочник>')
if(!docKind.length)
return false
selText = getWordUnderCursor();
if (!selText.length){
selText ="спр" + docKind
}
vbs.result = selText
var varName = vbs.DoExecute('InputString result, "Укажите название переменной"')
param.text = "#Если _ Тогда\n" + varName + ' = Справочники.' + docKind + '.СоздатьЭлемент();\n#КонецЕсли'
return true
}
function genarateNewDoc(param)
{
// Для начала выберем вид документа
var docKind = snegopat.parseTemplateString('<?"Выберите вид документа", Документ>')
if(!docKind.length)
return false
selText = getWordUnderCursor();
if (!selText.length){
selText ="док" + docKind
}
vbs.result = selText
var varName = vbs.DoExecute('InputString result, "Укажите название переменной"')
param.text = "#Если _ Тогда\n" + varName + ' = Документы.' + docKind + '.СоздатьДокумент();\n#КонецЕсли'
return true
}
function genarateNewType(param)
{
// Для начала выберем вид тип
var docKind = snegopat.parseTemplateString('<?"Выберите тип ", КонструкторОписанияТипов>')
if(!docKind.length)
return false
selText = getWordUnderCursor();
if (!selText.length){
selText ="Элемент"
}
vbs.result = selText
var varName = vbs.DoExecute('InputString result, "Укажите название переменной"')
var re = new RegExp('(Новый\\s)ОписаниеТипов\\(\\"([А-я_0-9]{1,})\\"\\).*', 'gi');
var matches = re.exec(docKind);
if (matches && matches.length)
{
param.text = "#Если _ Тогда\n" + varName + ' = ' + matches[1] + ''+matches[2]+';\n#КонецЕсли'
return true
}
return false;
}