diff --git a/src/org/openbravo/erpCommon/ad_forms/DocInOut.java b/src/org/openbravo/erpCommon/ad_forms/DocInOut.java
--- a/src/org/openbravo/erpCommon/ad_forms/DocInOut.java
+++ b/src/org/openbravo/erpCommon/ad_forms/DocInOut.java
@@ -533,7 +533,7 @@
                 } else {
                   trxCost = CostingUtils.getStandardCost(inOutLine.getProduct(), legalEntity,
                       inOut.getAccountingDate(), costDimensions, legalEntity.getCurrency())
-                      .multiply(inOutLine.getMovementQuantity());
+                      .multiply(new BigDecimal(data[i].movementqty));
                 }
               }
             }
diff --git a/src/org/openbravo/erpCommon/ad_forms/DocLine_Material.java b/src/org/openbravo/erpCommon/ad_forms/DocLine_Material.java
--- a/src/org/openbravo/erpCommon/ad_forms/DocLine_Material.java
+++ b/src/org/openbravo/erpCommon/ad_forms/DocLine_Material.java
@@ -17,6 +17,7 @@
 package org.openbravo.erpCommon.ad_forms;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.sql.Connection;
 
 import org.apache.log4j.Logger;
@@ -29,6 +30,7 @@
 import org.openbravo.model.common.enterprise.Warehouse;
 import org.openbravo.model.common.plm.Product;
 import org.openbravo.model.materialmgmt.transaction.MaterialTransaction;
+import org.openbravo.model.materialmgmt.transaction.ShipmentInOutLine;
 
 public class DocLine_Material extends DocLine {
   static Logger log4jDocLine_Material = Logger.getLogger(DocLine_Material.class);
@@ -93,8 +95,18 @@
   public String getProductCosts(String date, AcctSchema as, ConnectionProvider conn, Connection con) {
     if (transaction != null && transaction.getTransactionCost() != null
         && CostingStatus.getInstance().isMigrated()) {
-      BigDecimal sign = new BigDecimal(new BigDecimal(getQty()).signum());
-      return transaction.getTransactionCost().multiply(sign).toString();
+      ShipmentInOutLine sio = (ShipmentInOutLine) OBDal.getInstance().getProxy(
+          ShipmentInOutLine.ENTITY_NAME, m_TrxLine_ID);
+      // It can be different when using breakdown
+      BigDecimal lineQty = new BigDecimal(getQty());
+      BigDecimal proportionalCost = lineQty;
+      if (lineQty.signum() != 0) {
+        proportionalCost = lineQty
+            .multiply(transaction.getTransactionCost(), MathContext.DECIMAL32).divide(
+                sio.getMovementQuantity(), MathContext.DECIMAL32);
+      }
+      BigDecimal sign = new BigDecimal(proportionalCost.signum());
+      return proportionalCost.multiply(sign).toString();
     } else if (transaction != null && CostingStatus.getInstance().isMigrated()) {
       return "";
     } else if (CostingStatus.getInstance().isMigrated()) {
