|
01.03.2007, 09:36 | #1 |
сибиряк
|
Фильтр на DataSource из clipBoard
В копилку "бесполезного"
Задача: множество отчетов, данные выкидываются в excel. Соответственно, иногда необходимо найти запись в справочнике Аксапты, по коду. Копируем ячейку с кодом, лезем в аксапту, открываем форму справочника, фильтруемся... Вот, что бы убрать это "фильтруемся", и предлагаю следующий код (в нем ничего сложного): X++: void buf2range(FormDataSource _formDS) { TextBuffer textBuffer = new TextBuffer(); DictTable dictTable; SysDictField dictField; Common common; QueryBuildRange queryBuildRange; ; if (_formDS && WinAPI::isControlButtonDown()) // можно убрать "только при нажатом Ctrl". { textBuffer.fromClipboard(); dictTable = new DictTable(_formDS.cursor().TableId); if (dictTable.isMap() || dictTable.isView() || ! dictTable.primaryKeyField()) break; dictField = new SysDictField(dictTable.id(), dictTable.primaryKeyField()); if ((dictField.baseType() == Types::String || dictField.baseType() == Types::RString) && dictField.fieldSize() >= textBuffer.size()) { common = dictTable.makeRecord(); select recId from common where common.(dictField.id()) == textBuffer.getText(); if (common) { queryBuildRange = SysQuery::findOrCreateRange(_formDS.query().dataSourceNo(_formDS.query().levelTable(dictTable.id())), dictField.id()); if (queryBuildRange && ! queryBuildRange.value()) queryBuildRange.value(queryValue(textBuffer.getText())); } } } } X++: public void init() { ; super(); SysSecurityFormSetup::loadSecurity(this); // --> Slava, 01/02-07 /* */ if (this.objectSet()) this.AA_process(this.objectSet()); // <-- Slava, 01/02-07 }
__________________
С уважением, Вячеслав. |
|
|
|