10.11.2012, 19:04 | #1 |
Участник
|
Сортировка после изменения номера строки
Задача элементарная: добавить на форму "Заказы на перемещение" (InventTransferOrders) 2 кнопочки: Вверх и Вниз, которые будут перемещать строку заказа вверх или вниз на одну строку. Тут как-бы без проблем, новый LineNum генерится правильно. Но тут возникла неувязочка: строчка должна ПЕРЕДВИГАТЬСЯ (перескакивать) вверх или вниз, в зависимости от нового номера строки.
Были добавлены методы на форму в источник данных InventTransferLine в поле LineNum: PHP код:
PHP код:
Решение где-то рядом, а я ... |
|
10.11.2012, 19:32 | #2 |
Участник
|
можно попробовать сделать так: запомнить recid передвигаемой записи, затем выпольнить executequery для датасорса, затем найти запись по запомненному recid и позиционировать курсор на ней (аксапты под рукой нет, так что в точности код сейчас вам не напишу)
|
|
10.11.2012, 19:45 | #3 |
Участник
|
еще как вариант - посмотреть аналогичные места в аксапте. такие точно есть, но там вроде элементы в дереве двигаются (например объекты в программном проекте, или поля при пользовательской настройке формы), про грид навскидку не вспомню примеры. Тогда можно сделать так: сделать отдельную кнопку для перехода в режим передвигания строк, в этот момент открывать отдельное окно где строчки перемещения будут выстроены в дерево, там юзер будет двигать строчки как его душе угодно, а когда закончит - по закрытии этого окна один раз перерисовать строчки перемещения, чтобы они выстроились все в окончательном порядке
вообще, на кажду задачку можно придумать несколько вариантов решения - особенно, если четко представлять зачем точно это всё нужно, и как с этим хочет работать юзер |
|
10.11.2012, 22:02 | #4 |
Участник
|
|
|
11.11.2012, 00:29 | #5 |
Участник
|
Как показала практика, метод на форме в источнике данных InventTransferLine в поле LineNum отрабатывает только при изменении поля вручную.
А вот такой метод на кнопке помог: X++: void clicked() { InventTransferId origId; LineNum origLineNum; ; origId=InventTransferLine.TransferId; origLineNum=InventTransferLine.LineNum; super(); origLineNum=(select firstonly maxof(LineNum) from inventTransferLine where inventTransferLine.TransferId==OrigId && inventTransferLine.LineNum<OrigLineNum).LineNum; inventTransferLine_ds.research(); inventtransferline_ds.findRecord(InventTransferLine::find(origId, origLineNum)); } |
|
Теги |
linenum, номер строки, обновление, сортировка, строки, спецификация |
|
|