Код для движения строк

Вверх

if mem.t.currentRow()<>0:
	mem.t.zzDb.transaction()
	cu_npp=int(mem.t.r.npp)
	mem.t.prev()
	cu2_npp=int(mem.t.r.npp)
	if cu_npp==cu2_npp:
		cu2_npp+=1
	mem.t.si("npp",cu_npp)
	mem.t.next()
	mem.t.si("npp",cu2_npp)
	mem.brUp()
	mem.t.zzDb.commit()
	mem.refresh()

Вниз

if mem.t.currentRow()<mem.t.rowCount()-1:
	mem.t.zzDb.transaction()
	cu_npp=int(mem.t.r.npp)
	mem.t.next()
	cu2_npp=int(mem.t.r.npp)
	if cu_npp==cu2_npp: cu_npp+=1
	mem.t.si("npp",cu_npp)
	mem.t.prev()
	mem.t.si("npp",cu2_npp)
	mem.brDown()
	mem.t.zzDb.commit()
	mem.refresh()

Для варианта с уникальным индексом по полю NPP
Вверх

if mem.t.currentRow()<>0:
    mem.t.zzDb.transaction()
    cu_npp=int(mem.t.r.npp)
    mem.t.prev()
    cu2_npp=int(mem.t.r.npp)
    tmpnpp=mem.t.kodmax("npp")
    if cu_npp==cu2_npp:
        cu2_npp+=1
    mem.t.si("npp",tmpnpp)
    mem.t.next()
    mem.t.si("npp",cu2_npp)
    mem.t.prev()
    mem.t.si("npp",cu_npp)
    mem.brUp()
    mem.t.zzDb.commit()
    mem.refresh()

Вниз

if mem.t.currentRow()<mem.t.rowCount()-1:
    mem.t.zzDb.transaction()
    cu_npp=int(mem.t.r.npp)
    tmpnpp=mem.t.kodmax("npp")
    mem.t.next()
    cu2_npp=int(mem.t.r.npp)
    if cu_npp==cu2_npp: cu_npp+=1
    mem.t.si("npp",tmpnpp)
    mem.t.prev()
    mem.t.si("npp",cu2_npp)
    mem.t.next()
    mem.t.si("npp",cu_npp)
    mem.brDown()
    mem.t.zzDb.commit()
    mem.refresh()