Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch orefkov-develop Excluding Merge-Ins
This is equivalent to a diff from 25bbbf6a80 to 3a0874858c
2011-12-09
| ||
09:54 | Перенос разработок в основную ветку check-in: 3cef153517 user: orefkov tags: trunk | |
09:33 | Начата разработка окружения для кодогенераторов Leaf check-in: 3a0874858c user: orefkov tags: orefkov-develop | |
2011-12-07
| ||
13:13 | Начат скрипт по кодогенерации для будущей версии спта check-in: 0a9a17f581 user: orefkov tags: orefkov-develop | |
08:07 | Скрываю сообщения типа 'Объект Роль.Менеджер заблокирован.' check-in: 25bbbf6a80 user: artbear tags: trunk | |
2011-12-06
| ||
11:08 | Исправлена ошибка определения координат курсора в случае, когда альтернативный маркер позиции курсора находится ниже стандартного маркера (Попытка <?> Исключение <|> КонецПопытки). check-in: 1faf3daa2c user: kuntashov tags: trunk | |
Added code_gen/create_doc.js.
1 +$engine JScript 2 +$uname codegen_create_doc 3 +$dname Генератор Документов 4 +$addin codegen_manager 5 +$addin stdlib 6 +$addin vbs 7 + 8 +// (c) Александр Орефков orefkov at gmail.com 9 +// Скрипт - генератор кода создания нового документа 10 +// 11 + 12 +var attrTypeCategory = "{30E571BC-A897-4A78-B2E5-1EA6D48B5742}" 13 + 14 +codegen_manager.registerCodeGen("Документы/Новый/С заполнением всех реквизитов", genarateNewDoc) 15 + 16 +function genarateNewDoc(param) 17 +{ 18 + // Для начала выберем вид документа 19 + var docKind = snegopat.parseTemplateString('<?"Выберите вид документа", Документ>') 20 + if(!docKind.length) 21 + return false 22 + vbs.result = "док" + docKind 23 + var varName = vbs.DoExecute('InputString result, "Укажите название группы"') 24 + 25 + // Получим список возможных типов 26 + var tf = new codegen_manager.TypeFinder() 27 + 28 + var mdObj = param.mdCont.rootObject.childObject("Документы", docKind) 29 + 30 + var defLangID = stdlib.getUuidFomMDRef(param.mdCont.rootObject.property("ОсновнойЯзык")) 31 + //var defLangMD = metadata.current.rootObject.childObject("Языки", defLangID) 32 + var defLangMD = param.mdCont.findByUUID(defLangID) 33 + var syn = mdObj.synonym(defLangMD.property("КодЯзыка")) 34 + if(!syn.length) 35 + syn = docKind 36 + 37 + var text = '//{ Создание документа "' + syn + '" в ' + varName +'\n' + varName + ' = Документы.' + docKind + '.СоздатьДокумент();\n' 38 + // Обработаем реквизиты документа 39 + text += processAttribs(" Заполнение реквизитов", "", "", varName, mdObj, tf) 40 + // Обработаем табличные части 41 + var tabPartsCount = mdObj.childObjectsCount("ТабличныеЧасти") 42 + if(tabPartsCount) 43 + { 44 + var lineVarName = varName + "Строка", 45 + indent = profileRoot.getValue("ModuleTextEditor/ReplaceTabOnInput") ? codegen_manager.fillLine(" ", profileRoot.getValue("ModuleTextEditor/TabSize")) : "\t" 46 + if(tabPartsCount > 1) 47 + text += "//{ Заполнение табличных частей\n" 48 + for(var i = 0; i < tabPartsCount; i++) 49 + { 50 + var tp = mdObj.childObject("ТабличныеЧасти", i) 51 + text += processAttribs(" Заполнение табличной части " + tp.name, 52 + "Для Каждого Из Цикл\n\t" + lineVarName + " = " + varName + "." + tp.name + ".Добавить();\n" , "КонецЦикла;\n", 53 + indent + lineVarName, tp, tf) 54 + } 55 + if(tabPartsCount > 1) 56 + text += "//} Заполнение табличных частей\n" 57 + } 58 + text += "//} Создание документа " + docKind + " в " + varName 59 + param.text = text 60 + return true 61 +} 62 + 63 +function processAttribs(comment, header, footer, line, obj, tf) 64 +{ 65 + var lines = [] 66 + for(var i = 0, cnt = obj.childObjectsCount("Реквизиты"); i < cnt; i++) 67 + { 68 + var attr = obj.childObject("Реквизиты", i) 69 + var l = line + "." + attr.name + " = ; // " + tf.getTypeString(attr) 70 + var c = attr.comment 71 + if(c.length) 72 + l += " / " + c 73 + lines.push(l) 74 + } 75 + if(lines.length) 76 + return "//{ " + comment + "\n" + header + codegen_manager.formatAssign(lines) + footer + "//} " + comment + "\n" 77 + else 78 + return "" 79 +} 80 +
Added code_gen/gen_mgr.js.
1 +$engine JScript 2 +$uname codegen_manager 3 +$dname Менеджер генераторов кода 4 +$addin stdlib 5 + 6 +// (c) Александр Орефков orefkov at gmail.com 7 +// Скрипт - для запуска различных генераторов кода 8 +// Данный скрипт должен быть загружен в addins.ini РАНЕЕ других скриптов - генераторов кода 9 +var attrTypeCategory = "{30E571BC-A897-4A78-B2E5-1EA6D48B5742}" 10 + 11 +// Сразу загрузим форму, т.к. ее дерево будет использоваться для хранения функций-кодогенераторов 12 +var codeGens = [], form 13 +form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self) 14 +form.ИспользоватьМетаданные = 1 15 +form.Дерево.Колонки.Добавить("caller") 16 + 17 +// Регистрация функции кодогенератора. 18 +function registerCodeGen(description, caller) 19 +{ 20 + var descr = description.split("/") 21 + var root = form.Дерево.Строки 22 + for(var i = 0; i < descr.length - 1; i++) 23 + { 24 + var row = root.Найти(descr[i], "Генератор") 25 + if(!row) 26 + { 27 + row = root.Добавить() 28 + row.Генератор = descr[i] 29 + row.Картинка = 0 30 + } 31 + root = row.Строки 32 + } 33 + // Сначала попробуем найти, может такая запись уже есть. 34 + // Это позволит перезагружать скрипты-кодогенераторы 35 + row = root.Найти(descr[i]) 36 + if(!row) 37 + { 38 + row = root.Добавить() 39 + row.Генератор = descr[i] 40 + } 41 + row.Картинка = 1 42 + row.caller = caller 43 +} 44 + 45 +// Собственно, выбор и запуск генерации 46 +SelfScript.Self["macrosХочу Кода!!!"] = function() 47 +{ 48 + var pathToForm = SelfScript.fullPath.replace(/js$/, 'ssf') 49 + // Обработку событий формы привяжем к самому скрипту 50 + if(form.ОткрытьМодально()) 51 + { 52 + var mdCont = form.ИспользоватьМетаданные == 1 ? metadata.ib : metadata.current 53 + var caller = form.ЭлементыФормы.Дерево.ТекущиеДанные.caller 54 + var param = {mdCont:mdCont, text:"", caretToBegin:true} 55 + if(!caller(param)) 56 + return 57 + var text = param.text 58 + var txtWnd = snegopat.activeTextWindow() 59 + if(!txtWnd || txtWnd.readOnly) 60 + Message(text) 61 + else 62 + { 63 + // Надо получить отступ 64 + var sel = txtWnd.getSelection() 65 + var textLine = txtWnd.line(sel.beginRow) 66 + // Курсор может быть за концом строки 67 + while(textLine.length < sel.beginCol - 1) 68 + textLine += ' ' 69 + // Оставим только часть строки перед курсором 70 + textLine = textLine.substr(0, sel.beginCol - 1) 71 + var m = textLine.match(/^\s+/) 72 + if(m) // Есть пробельные символы в начале строки 73 + text = text.replace(/\n/g, '\n' + m[0]) // Заменим переводы строк на перевод строк + отступ 74 + text = text.replace(/\s+$/m, '') // СокрП 75 + // Вставим текст 76 + txtWnd.selectedText = text 77 + if(param.caretToBegin) 78 + txtWnd.setCaretPos(sel.beginRow, sel.beginCol) 79 + } 80 + } 81 +} 82 + 83 +// Обработчики событий формы 84 +function ПриОткрытии() 85 +{ 86 + // Если текущая конфа не открыта или не отличается от конфы ИБ, 87 + // то нет смысла выбирать метаданные 88 + if(!stdlib.isConfigOpen() || !stdlib.isConfigsDifferent()) 89 + { 90 + form.ИспользоватьМетаданные = 1 91 + form.ЭлементыФормы.ОткрытаяКонфигурация.Доступность = false 92 + } 93 + else 94 + form.ЭлементыФормы.ОткрытаяКонфигурация.Доступность = true 95 +} 96 +function КоманднаяПанель1ОК(Кнопка) 97 +{ 98 + form.Закрыть(true) 99 +} 100 + 101 +function ДеревоПриАктивизацииСтроки(Элемент) 102 +{ 103 + form.ЭлементыФормы.КоманднаяПанель1.Кнопки.Ок.Доступность = !!Элемент.val.ТекущиеДанные.caller 104 +} 105 +function ДеревоВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) 106 +{ 107 + if(Элемент.val.ТекущиеДанные.caller) 108 + form.Закрыть(true) 109 +} 110 +///////////////////////////////////////////////////////// 111 +// Разные полезняшки для кодогенераторов 112 + 113 +// Класс для получения названий типов объекта матаданных, т.к. штатный объект ОписаниеТипов в 114 +// режиме Конфигуратора не выдает типы, основанные на метаданных. 115 +function TypeFinder() 116 +{ 117 + var types = new VBArray(metadata.current.typeList(attrTypeCategory, 1)).toArray() 118 + for(var i in types) 119 + { 120 + var t = types[i].split(",") 121 + this[t[1]] = t[0] 122 + } 123 +} 124 + 125 +TypeFinder.prototype.getTypeString = function(mdObj) 126 +{ 127 + var text = [] 128 + var types = new VBArray(mdObj.types()).toArray() 129 + for(var i in types) 130 + text.push(this[types[i]]); 131 + return text.join(", ") 132 +} 133 + 134 +// Функция, обрабатывает переданный массив строк, выравнивая в них знаки "=" 135 +function formatAssign(lines) 136 +{ 137 + var tabSize = profileRoot.getValue("ModuleTextEditor/TabSize") 138 + var ll = [] 139 + maxEqualPos = -1 140 + for(var l in lines) 141 + { 142 + var line = {text: lines[l]} 143 + line.eqRealPos = line.text.indexOf("=") 144 + if(line.eqRealPos >= 0) 145 + { 146 + line.eqPosInSpaces = 0 147 + for(var k = 0; k < line.eqRealPos; k++) 148 + { 149 + if(line.text.charAt(k) == "\t") 150 + line.eqPosInSpaces += tabSize - (line.eqPosInSpaces % tabSize) 151 + else 152 + line.eqPosInSpaces++ 153 + } 154 + if(line.eqPosInSpaces > maxEqualPos) 155 + maxEqualPos = line.eqPosInSpaces 156 + } 157 + ll.push(line) 158 + } 159 + var text = "" 160 + for(var l in ll) 161 + { 162 + var line = ll[l] 163 + if(line.eqRealPos < 0) 164 + text += line.text + "\n" 165 + else 166 + text += line.text.substr(0, line.eqRealPos) + fillLine(" ", maxEqualPos - line.eqPosInSpaces) + line.text.substr(line.eqRealPos) + "\n" 167 + } 168 + return text 169 +} 170 + 171 +// Получить строку одинаковых символов указанной длины 172 +function fillLine(symbol, count) 173 +{ 174 + var text = "" 175 + while(count--) 176 + text += symbol 177 + return text 178 +}
Added code_gen/gen_mgr.ssf.
cannot compute difference between binary files
Changes to snippets.js.
153 153 Message("Не удалось создать объект 'Svcsvc.Service'. Зарегистрируйте svcsvc.dll"); 154 154 return false; 155 155 } 156 156 //debugger; 157 157 return sel.FilterValue(values.join("\r\n"), 1 | 4, '', 0, 0, 350, 250); 158 158 } 159 159 160 +SnippetsManager.prototype.onProcessTemplate = function(params) 161 +{ 162 + //Message("Вставляется текст из шаблона '" + params.name + "':\n" + params.text + "\nОтступ '" + params.indent + "'") 163 +} 160 164 ////} SnippetsManager 161 165 162 166 //////////////////////////////////////////////////////////////////////////////////////// 163 167 ////{ SnippetParametersManager 164 168 //// 165 169 166 170 function SnippetParametersManager() { ................................................................................ 523 527 function GetSnippetsManager() { 524 528 if (!SnippetsManager._instance) 525 529 new SnippetsManager(); 526 530 527 531 return SnippetsManager._instance; 528 532 } 529 533 530 -GetSnippetsManager(); 534 +events.connect(snegopat, "onProcessTemplate", GetSnippetsManager()); 535 + 531 536 ////} Startup