actualizar varios registros con una accion

Hola comunidad, tengo un problema, es el siguiente, tengo una tabla historico de detalles de operaciones (histdetallesoper), tengo una accion en el cotrolador para cancelar una operacion, cuando por cualquier concepto sale mal y hay que cancelarla para repetir la operacion o no repetirla, esta accion hace varias cosas, pero necesito detenerme en la parte donde debe modificar campos a varios registros:

Aqui pongo la accion:




public function actionCancelar($id) {

    	$model = $this->loadModel($id);

    	foreach ($model->detalleFacturas as $value) {


        	$criteria = new CDbCriteria;

        	$criteria->addCondition('CodAlm=:codpven');

        	$criteria->addCondition('Codprod=:codigo');

        	$criteria->params = array(':codpven' => $model->CodAlm, ':codigo' => $value->idProducto->Codprod);

        	$objSubmp = Submayorprod::model()->find($criteria);

        	$objSubmp->SaldoAct = $objSubmp->SaldoAct + $value->cantidad;

        	$objSubmp->SaldoAnt = $objSubmp->SaldoAct - $value->cantidad;

        	

        	$objSubmp->save();

        	$criteria = new CDbCriteria;

        	$criteria->addCondition('Id_sal=:fact');

        	$criteria->params = array(':fact' => $model['nfactura']);

        	$objdetfacd = Detallesfacturas::model()->find($criteria);

        	$objdetfacd->SaldoDes = $objdetfacd->SaldoIni;

        	$objdetfacd->save();


//la parte que quiero ver es esta CDbCriteria

        	$criteria = new CDbCriteria;

        	$criteria->addCondition('nfactura=:fact');

        	$criteria->addCondition('Idn=:idn');

        	$criteria->params = array(':fact' => $model['nfactura']);

        	$criteria->params = array(':fact' => $model['nfactura'], ':idn' => $value->Id);

        	$objdetfach = Histdetallesoper::model()->find($criteria);

        	$objdetfach->SaldoDes = $objdetfach->SaldoIni;//aqui solo lo hago a esa operacion revertiendo la operacion

        	$objdetfach->Cancan = $objdetfach->cantidad;

        	$objdetfach->save();

    	}

    	$criteria = new CDbCriteria;

    	$criteria->addCondition('Idn=:fact');

    	$criteria->params = array(':fact' => $model['Idn']);

    	$objfactu = Datosfacturas::model()->find($criteria);

    	$objfactu->IdEstado = 2;

    	$objfactu->Fechacancelacion = date('Y-m-d_h.i.s');

    	$objfactu->save();


    	$criteria = new CDbCriteria;

    	$criteria->addCondition('nfactura=:fact');

    	$criteria->params = array(':fact' => $model['nfactura']);

    	$objfac = Histoper::model()->find($criteria);

    	$objfac->estado = 2;

    	$objfac->save();


    	// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

    	if (!isset($_GET['ajax']))

        	$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

	}



Cuando voy a cancelar la accion toma todos los productos que estan en esa factura y le arregla el ,campo SaldoIni, quiero que al hacer la accion me modifique los de esa factura y todos los de ese producto que esten despues en proximas facturas, ya que en realidad al cambiar un saldo, tambien hay que cambiarlo en los posteriores:

aqui pongo una tabla como quiero que se haga

como se observa al cancelar una operacion quiero arreglar todas las demas operaciones de ese producto hacia abajo, ya qjue cambian los valores, espero sus ayuda como siempre.

Gracias