Я разрабатываю рутину для хранения накладных в локальной базе данных на основе накладных QuickBooks.
Используя этот запрос qbXML:
$xml ='<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="8.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<InvoiceQueryRq requestID="'.$requestID.'">
</InvoiceQueryRq>
</QBXMLMsgsRq>
</QBXML>';
return $xml;
И я получаю результаты, которые я хочу, пример данных:
<InvoiceRet>
<TxnID>11-1428375941</TxnID>
<TimeCreated>2015-04-06T23:05:41-05:00</TimeCreated>
<TimeModified>2015-04-06T23:05:41-05:00</TimeModified>
<EditSequence>1428375941</EditSequence>
<TxnNumber>5</TxnNumber>
<CustomerRef>
<ListID>8000005A-1424374192</ListID>
<FullName>Fake</FullName>
</CustomerRef>
<ARAccountRef>
<ListID>80000010-1424374182</ListID>
<FullName>Accounts Receivable</FullName>
</ARAccountRef>
<TemplateRef>
<ListID>8000000B-1424373504</ListID>
<FullName>Time & Expense Invoice</FullName>
</TemplateRef>
<TxnDate>2015-04-06</TxnDate>
<RefNumber>3</RefNumber>
<BillAddress>
<Addr1>Fake </Addr1>
<Addr2>Fake Address</Addr2>
<City>Fake City</City>
<State>ON</State>
<PostalCode>123 ABC</PostalCode>
</BillAddress>
<BillAddressBlock>
<Addr1>Fake Address</Addr1>
<Addr2>Fake Address</Addr2>
<Addr3>Fake Address</Addr3>
</BillAddressBlock>
<IsPending>false</IsPending>
<IsFinanceCharge>false</IsFinanceCharge>
<TermsRef>
<ListID>80000006-1424373984</ListID>
<FullName>Net 30</FullName>
</TermsRef>
<DueDate>2015-05-06</DueDate>
<ShipDate>2015-04-06</ShipDate>
<Subtotal>1299.00</Subtotal>
<SalesTaxPercentage>13.00</SalesTaxPercentage>
<SalesTaxTotal>168.87</SalesTaxTotal>
<AppliedAmount>0.00</AppliedAmount>
<BalanceRemaining>1467.87</BalanceRemaining>
<IsPaid>false</IsPaid>
<IsToBePrinted>true</IsToBePrinted>
<IsToBeEmailed>false</IsToBeEmailed>
<IsTaxIncluded>false</IsTaxIncluded>
<CustomerSalesTaxCodeRef>
<ListID>80000006-1424373984</ListID>
<FullName>H</FullName>
</CustomerSalesTaxCodeRef>
Я хочу увидеть какие пункты находятся в этом счете. Поэтому я запустил xml, чтобы получить все элементы.
пример того, что я получил:
<ItemServiceRet>
<ListID>80000021-1424374186</ListID>
<TimeCreated>2015-02-19T14:29:46-05:00</TimeCreated>
<TimeModified>2015-02-19T14:29:46-05:00</TimeModified>
<EditSequence>1424374186</EditSequence>
<Name>Prep. of Electrical Drawing</Name>
<FullName>Prep. of Electrical Drawing</FullName>
<IsActive>true</IsActive>
<Sublevel>0</Sublevel>
<IsTaxIncluded>false</IsTaxIncluded>
<SalesTaxCodeRef>
<ListID>80000006-1424373984</ListID>
<FullName>H</FullName>
</SalesTaxCodeRef>
<SalesOrPurchase>
<Desc>For preparation of electrical drawings</Desc>
<Price>0.00</Price>
<AccountRef>
<ListID>80000034-1424374183</ListID>
<FullName>Engineering Revenue</FullName>
</AccountRef>
</SalesOrPurchase>
</ItemServiceRet>
Я пытался так долго, но я не могу найти переменную, которую я мог бы использовать, чтобы связать элементы с соответствующим счетом.
Какой XML-узел на Товар имеет идентификатор / информацию о том, к какому счету принадлежит товар?
Есть ли лучший qbXML для этого? Я попробовал все, от продаж до JournalEntry, как описано на этом сайте:
http://developer-static.intuit.com/qbSDK-current/Common/newOSR/index.html
Если вы ссылаетесь на QuickBooks OSR:
Вы увидите эту опцию:
<IncludeLineItems>true</IncludeLineItems>
С этим описанием:
Этот фильтр позволяет исключить позиции из ответа на запрос, чтобы получить
меньший результат. Значением по умолчанию является false, поэтому позиции
по умолчанию опущено. Установите для IncludeLineItems значение true, чтобы включить позиции
в ответ, если вы не против получить больший результат.
Итак, если вы хотите, чтобы позиции были изменены, измените ваш запрос на:
$xml ='<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="8.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<InvoiceQueryRq requestID="'.$requestID.'">
<IncludeLineItems>true</IncludeLineItems>
</InvoiceQueryRq>
</QBXMLMsgsRq>
</QBXML>';
return $xml;
Других решений пока нет …