$engine JScript
$uname codegen_create_doc
$dname Генератор Документов
$addin codegen_manager
$addin stdlib
// (c) Александр Орефков orefkov at gmail.com
// Скрипт - генератор кода создания нового документа
//
codegen_manager.registerCodeGen("Документы/Новый/С заполнением всех реквизитов", genarateNewDoc)
function genarateNewDoc(param)
{
// Для начала выберем вид документа
var docKind = codegen_manager.selectMetaKind(param.mdCont, "Документы", "документа")
if(!docKind.length)
return false
var mdObj = param.mdCont.rootObject.childObject("Документы", docKind)
// Получим список возможных типов
var tf = new codegen_manager.TypeFinder(param.mdCont)
// Приготовим данные для диалога запроса параметров
var data = {
VarName: "док" + docKind,
items:[
{
name: 'Стандартные реквизиты',
comment: 'Заполнение стандартных реквизитов',
header: '',
footer: '',
items:[
{name:'Номер', comment: 'Присвоение номера документа', text: "%%.Номер = ;"},
{name:'Дата', comment: 'Присвоение даты документа', text: "%%.Дата = ;"},
{name:'ПометкаУдаления', comment:'', text: "%%.ПометкаУдаления = ;"},
{name:'Ссылка', comment:'', text: "%%.Ссылка = ;"},
{name:'Проведен', comment:'', text: "%%.Проведен = ;"}
]
}
]
}
processAttribs(data.items, 'Реквизиты документа', 'Заполнение реквизитов документа', '', '', '%%', mdObj, tf)
var tabPartsCount = mdObj.childObjectsCount("ТабличныеЧасти")
if(tabPartsCount)
{
var indent = profileRoot.getValue("ModuleTextEditor/ReplaceTabOnInput") ? codegen_manager.fillLine(" ", profileRoot.getValue("ModuleTextEditor/TabSize")) : "\t"
for(var i = 0; i < tabPartsCount; i++)
{
var tp = mdObj.childObject("ТабличныеЧасти", i)
processAttribs(data.items, 'Табличная часть ' + tp.name, " Заполнение табличной части " + tp.name,
"Для Каждого Из Цикл\n" + indent + "%%Строка = %%." + tp.name + ".Добавить();" , "КонецЦикла;",
indent + "%%Строка", tp, tf)
}
}
var res = new codegen_manager.AdditionalParams().getParams(data)
if(!res)
return false
var lines = []
if(res.comments)
{
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
lines.push('//{ Создание документа "' + syn + '" в %%')
}
lines.push('%% = Документы.' + docKind + '.СоздатьДокумент();')
for(var k in res.items)
processItem(lines, res.items[k], res.comments)
if(res.comments)
lines.push('//} Конец создания документа "' + syn + '" в %%')
param.text = lines.join('\n').replace(/%%/g, res.VarName) + '\n'
return true
}
function processAttribs(dest, name, comment, header, footer, line, obj, tf)
{
var item = {
name: name,
comment: comment,
header: header,
footer: footer,
items:[]
}
function getComment(attr)
{
var l = tf.getTypeString(attr)
var c = attr.comment
if(c.length)
l += " / " + c
return l
}
for(var i = 0, cnt = obj.childObjectsCount("Реквизиты"); i < cnt; i++)
{
var attr = obj.childObject("Реквизиты", i)
item.items.push({
name: attr.name,
text: line + "." + attr.name + " = ;",
comment: getComment(attr)
})
}
if(item.items.length)
dest.push(item)
}
function processItem(lines, item, needComment)
{
if(item.checked)
{
if(needComment)
lines.push('//{ ' + item.comment);
if(item.header.length)
lines.push(item.header)
var startLine = lines.length
for(var k in item.items)
{
var e = item.items[k]
if(e.checked)
lines.push(e.text + (needComment ? ' // ' + e.comment : ''))
}
codegen_manager.formatAssignInplace(lines, startLine)
if(item.footer.length)
lines.push(item.footer)
if(needComment)
lines.push('//} ' + item.comment);
}
}