i need help for this bug action prepare invoice in Shipment Screen (SO302000)


in Shipment Screen, Project Field and Project Task Field is customize.
this is source code for Project and project task
protected void SOShipment_RowPersisting(PXCache cache, PXRowPersistingEventArgs e, PXRowPersisting InvokeBaseHandler)
{
if(InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);
var row = (SOShipment)e.Row;
if (row == null) return;
//if((e.Operation & PXDBOperation.Command )== PXDBOperation.Insert)
//{
var rowExt = PXCache<SOShipment>.GetExtension<SOShipmentExt>(row);
SOOrderShipment shipOrder = PXSelect<SOOrderShipment,
Where<SOOrderShipment.shipmentNbr, Equal<Required<SOOrderShipment.shipmentNbr>>>>
.Select(this.Base, row.ShipmentNbr);
if(shipOrder != null ){
SOOrder order = PXSelect<SOOrder,
Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>
.Select(this.Base, shipOrder.OrderNbr);
if(order != null ){
SOLine line = PXSelect<SOLine,
Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>>>
.Select(this.Base, order.OrderNbr);
PMProject prj = PXSelect<PMProject,
Where<PMProject.contractID, Equal<Required<PMProject.contractID>>>>
.Select(this.Base, order.ProjectID);
if(prj.ContractCD != null){
rowExt.UsrzProjectNumb = prj.ContractCD;
}
if(line.TaskID != null && prj.ContractID != null ){
PMTask task = PXSelect<PMTask,
Where<PMTask.projectID, Equal<Required<PMTask.projectID>>,
And<PMTask.taskID, Equal<Required<PMTask.taskID>>>>>
.Select(this.Base, prj.ContractID, line.TaskID);
if(task.TaskCD != null){
rowExt.UsrzProjectTask = task.TaskCD;
}
}
}
}
//}
}
anyone know how to solved this bug ? thanks