2016-12-28 2 views
0

Ich habe Probleme, eine ordnungsgemäße Bestandsanpassung durchzuführen. Es scheint, dass es nicht auf ein ordnungsgemäßes Konto innerhalb von QuickBooks verweist. Und mir ist nicht klar, wo es seine Verbindungen herstellt und was es liefert.Hinzufügen von Bestandsanpassungen für QuickBooks mit QuickBooks PHP Entwicklungskit/QuickBooks Web Connector

Ich bastle immer noch damit aber irgendwelche Vorschläge wären genial.

Update: Ändern von AccountRef FullName zu "Inventar Asset" beseitigt die Fehler und aktualisiert auch RefNumber, TxnID, etc., wenn es synchronisiert. ABER, es aktualisiert immer noch nicht die Menge in QuickBooks. Gehen wir davon aus, dass es nur "QuantityDifference" passiert.

QWCLog.txt

<?xml version="1.0" encoding="utf-8"?> 
     <?qbxml version="13.0"?> 
     <QBXML> 
      <QBXMLMsgsRq onError="stopOnError"> 
       <InventoryAdjustmentAddRq requestID="13"> 
        <InventoryAdjustmentAdd> 



         <AccountRef> 
          <FullName>Inventory Adjustments</FullName> 
         </AccountRef> 

         <TxnDate>2016-12-28</TxnDate> 
         <!--<RefNumber>9051</RefNumber>--> 

         <Memo></Memo> 

         <InventoryAdjustmentLineAdd> 
          <ItemRef> 
           <ListID>TxnLID-9051</ListID> 
          </ItemRef> 

          <QuantityAdjustment> 
           <QuantityDifference>0.00000</QuantityDifference> 
          </QuantityAdjustment> 
         </InventoryAdjustmentLineAdd> 


        </InventoryAdjustmentAdd> 
       </InventoryAdjustmentAddRq> 
      </QBXMLMsgsRq> 
     </QBXML> 

20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.do_sendRequestXML() : Request xml received. 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.ProcessRequestXML() : Processing request #2 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.ProcessRequestXML() : REQUEST: received from application: size (bytes) = 1191 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending request to QuickBooks. 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.ProcessRequestXML() : Response received from QuickBooks: size (bytes) = 379 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.ProcessRequestXML() : Sending response back to application. 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.do_receiveResponseXML() : *** Calling receiveResponseXML() with following parameters: 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.do_receiveResponseXML() : wcTicket="3388bbdc-18d0-a594-7dfd-70f68aac289e" 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.do_receiveResponseXML() : response = 
20161228.19:16:51 UTC : QBWebConnector.SOAPWebService.do_receiveResponseXML() : XML dump follows: - 

<?xml version="1.0" ?> 
<QBXML> 
<QBXMLMsgsRs> 
<InventoryAdjustmentAddRs requestID="13" statusCode="3140" statusSeverity="Error" statusMessage="There is an invalid reference to QuickBooks Account &quot;Inventory Adjustments&quot; in the InventoryAdjustment. QuickBooks error message: Invalid argument. The specified record does not exist in the list." /> 
</QBXMLMsgsRs> 
</QBXML> 

save.php Code, fügt und reiht sich das Inventar Anpassung

$Queue = new QuickBooks_WebConnector_Queue($dsn); 

// IMPORTANT: ONLY UPDATE CHANGED ROWS. WE DONT WANT INVENTORY ADJUSTMENTS FOR UNCHANGED ITEMS! 
foreach ($updates as $update) { 
    // Update QuantityOnHand still so our web interface can easily see the new quantity before QB sync 
    $sql = "UPDATE qb_item SET QuantityOnHand='" . $update[1] . "' WHERE ListID='" . $update[0] . "'"; 
    if (!$qb_result = $qb->query($sql)) { 
     dErr("Error: Our query failed to execute and here is why: <br />Query: " . $sql . "<br />Errno: " . $qb->errno . "<br />Error: " . $qb->error); 
    } 

    $sql = "SELECT * FROM qb_item WHERE ListID='" . $update[0] . "'"; 
    if (!$qb_result = $qb->query($sql)) { 
     dErr("Error: Our query failed to execute and here is why: <br />Query: " . $sql . "<br />Errno: " . $qb->errno . "<br />Error: " . $qb->error); 
    } 

    $row = $qb_result->fetch_assoc(); 

    // Generate unique TxnID 
    // Apparently QuickBooks will overwrite it with the permanent TxnID when it syncs 
    $tID = rand(1000, 9999); 

    // Insert new Item Adjustment 
    $sql = "INSERT INTO `qb_inventoryadjustment` (`TxnID`, `TimeCreated`, `TimeModified`, `Account_FullName`, `TxnDate`, `RefNumber`, `Memo`, `qbsql_discov_datetime`, `qbsql_resync_datetime`, `qbsql_modify_timestamp`) VALUES ('TxnID-" . $tID . "', now(), now(), 'Inventory Adjustments', CURDATE(), '" . $tID . "', NULL, NULL, NULL, now())"; 
    if (!$qb_result = $qb->query($sql)) { 
     dErr("Error: Our query failed to execute and here is why: <br />Query: " . $sql . "<br />Errno: " . $qb->errno . "<br />Error: " . $qb->error); 
    } 

    // Get the primary key of the new record 
    $id = $qb->insert_id; 

    // Queue up the inventory adjustment 
    $Queue->enqueue(QUICKBOOKS_ADD_INVENTORYADJUSTMENT, $id); 

    // Insert new Item Adjustment Line 
    $sql = "INSERT INTO `qb_inventoryadjustment_inventoryadjustmentline` (`InventoryAdjustment_TxnID`, `SortOrder`, `TxnLineID`, `Item_ListID`, `Item_FullName`, `QuantityAdjustment_NewQuantity`) VALUES ('TxnID-" . $tID . "', '0', 'TxnLID-" . $tID . "', '" . $update[0] . "', '" . $row['FullName'] . "', " . $update[1] . ")"; 
    if (!$qb_result = $qb->query($sql)) { 
     dErr("Error: Our query failed to execute and here is why: <br />Query: " . $sql . "<br />Errno: " . $qb->errno . "<br />Error: " . $qb->error); 
    } 

    // Get the primary key of the new record 
    $id = $qb->insert_id; 

    // Queue up the inventory adjusment 
    $Queue->enqueue(QUICKBOOKS_ADD_INVENTORYADJUSTMENT, $id); 
} 

Antwort

0

Blick in die Quickbooks UI/Hilfe oder Quickbooks OSR.

QuantityDifference Das Feld ist wie folgt definiert:

QuantityDifference

entweder eine positive oder negative Zahl, die die Mengenänderung für diesen Inventargegenstand zeigt.

Sie senden:

<QuantityDifference>0.00000</QuantityDifference> 

Welche Quickbooks, die Sie ändern möchten die Menge von ... 0 erzählt. Sie möchten 0 zu der Menge hinzufügen und 0 von der Menge subtrahieren.

Sie sollten in der QuickBooks-Benutzeroberfläche in der Lage sein, die zulässigen Konten zu erkennen.

+0

Wie Sie in meinem OP sehen können, bin ich bereits zu folgendem Schluss gekommen: 'Ich gehe davon aus, dass es nur" QuantityDifference "passiert." Was ich nicht verstanden habe, war, warum Sie mir eine Inventaranpassung empfohlen haben indem NUR "NewQuantity" aktualisiert wird (ein Schlüssel, der gar nicht existiert). – logicPwn

Verwandte Themen