Artifact 26d65c442ab6d2025259d9e73f749d1f3d48a08e:
- File Tests/Examples/predef.js — part of check-in [53353ca17a] at 2012-11-09 21:02:35 on branch trunk — Пример получения списка предопределенных счетов. (user: kuntashov size: 3772) [more...]
$engine JScript $uname predef $dname Пример получения списка предопределенных счетов $addin stdlib stdlib.require('SelectValueDialog.js', SelfScript); var predefinedValues = null; function macrosВыбратьПредопределенныйСчет() { events.connect(windows, "onDoModal", SelfScript.Self); // Собственно, этого шаблона должно быть достаточно :) // ...но мы загорелись целью все-таки получить весь список предопределенных // в какую-нибудь переменную. snegopat.parseTemplateString('<?"", ПланСчетовПредопределенныеДанные>'); events.disconnect(windows, "onDoModal", SelfScript.Self); if (predefinedValues) { // Тут у нас ассоциативный массив с предопределенными. // Можем из активного текстового документа взять из под курсора номер счета // и получить по нему из массива имя. // Мы пока просто предложим выбрать из диалога. var dlg = new SelectValueDialog('Выберите предопределенный счет', predefinedValues); if (dlg.selectValue()) { // Здесь счет можно вставить в модуль. Message('Выбран: ' + dlg.selectedValue); } } } function onDoModal(dlgInfo) { if (dlgInfo.stage == openModalWnd && dlgInfo.Caption.match(/Предопределенные счета/)) { predefinedValues = getPredefined(dlgInfo.form); dlgInfo.result = 0; // Нажимаем "Отмена". dlgInfo.cancel = true; // Окно показывать не надо. } else if (dlgInfo.stage == openModalWnd && dlgInfo.Caption.match(/Выбор объекта: План счетов/)) { // Здесь надо выбрать план счетов. // Пока исходим из ситуации, что план счетов у нас один - // выбираем первый план счетов из списка. var wsh = new ActiveXObject("WScript.Shell"); setTimeout(function () { wsh.SendKeys("{ENTER}");}, 100); //dlgInfo.result = 1; // Нажимаем "Ок". //dlgInfo.cancel = true; // Окно показывать не надо. } } // Возвращает ассоциативный массив: // Ключ - строка вида "10.1 - СырьеМатериалы" (номер счета - имя предопределенного счета) // Значение - имя предопределенного счета. function getPredefined(form) { var predefined = {}; (function (parentRow) { for(var row = parentRow.firstChild; row; row = row.next) { var accName = row.getCellValue(1); var accNumber = row.getCellValue(2); if (accName != '' && accNumber != '') { predefined[accNumber + ' - ' + accName] = row.getCellValue(1); } if (row.firstChild) { // Рекурсивно обходим ветку в глубину. arguments.callee(row); } } })(form.getControl(0).dataSource.root); return predefined; } function setTimeout(func, delay) { function DelayedFunc(func) { this.timerId = 0; this.func = func; this.callDelayed = function () { killTimer(this.timerId); this.func.call(null); } } var df = new DelayedFunc(func); df.timerId = createTimer(delay, df, 'callDelayed'); }