Artifact
a068216004150337d6f71615b23b4c697c027824:
- File
code_gen/create_type.js
— part of check-in
[9b9b3ef4c9]
at
2012-11-30 11:50:32
on branch trunk
— ДОбавил скрипт генерации определения типа переменной для обмана контекстной подсказки 1С
(user:
sosnae
size: 4886)
[more...]
$engine JScript
$uname codegen_create_type
$dname Генератор Описания типов...
$addin codegen_manager
$addin stdlib
$addin vbs
// (c) Александр Орефков orefkov at gmail.com
// Сосна Евгений <shenja@sosna.zp.ua>
// Скрипт - генератор кода, обманим подсказку 1С.
//
var attrTypeCategory = "{30E571BC-A897-4A78-B2E5-1EA6D48B5742}"
var СтандартныеРеквизиты = ["Код", "Наименование", "Родитель", "Владелец", "ПометкаУдаления", "Ссылка"]
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, "Укажите название переменной"')
// Получим список возможных типов
var tf = new codegen_manager.TypeFinder()
var mdObj = param.mdCont.rootObject.childObject("Справочники", docKind)
var defLangID = stdlib.getUuidFomMDRef(param.mdCont.rootObject.property("ОсновнойЯзык"))
var defLangMD = param.mdCont.findByUUID(defLangID)
var syn = mdObj.synonym(defLangMD.property("КодЯзыка"))
if(!syn.length)
syn = docKind
var text = "#Если _ Тогда\n";
text += varName + ' = Справочники.' + docKind + '.СоздатьЭлемент();\n'
text +="#КонецЕсли"
param.text = text
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, "Укажите название переменной"')
// Получим список возможных типов
var tf = new codegen_manager.TypeFinder()
var mdObj = param.mdCont.rootObject.childObject("Документы", docKind)
var defLangID = stdlib.getUuidFomMDRef(param.mdCont.rootObject.property("ОсновнойЯзык"))
var defLangMD = param.mdCont.findByUUID(defLangID)
var syn = mdObj.synonym(defLangMD.property("КодЯзыка"))
if(!syn.length)
syn = docKind
var text = "#Если _ Тогда\n";
text += varName + ' = Документы.' + docKind + '.СоздатьДокумент();\n'
text +="#КонецЕсли"
param.text = text
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 tf = new codegen_manager.TypeFinder()
var re = new RegExp('(Новый\\s)ОписаниеТипов\\(\\"([А-я_0-9]{1,})\\"\\).*', 'gi');
var matches = re.exec(docKind);
if (matches && matches.length)
{
var text = "#Если _ Тогда\n";
text += varName + ' = ' + matches[1] + ''+matches[2]+';\n';
text +="#КонецЕсли"
param.text = text
}else {
return false;
}
return true
}