12.12.2008, 18:53 | #1 |
Участник
|
Создание CustInvoiceJour, CustInvoiceSalesLink, CustInvoiceTrans from X++
День добрый.
Есть такая необходимость: на основании SalesOrders (и SalesLine) запостить (создать) инвойс с помощью X++. (Т.е. чтобы из самого Dynamics AX я смог выбрать свой ордер и просмотреть соответствующий ему инвойс с items в итоге). Все делается на Dynamics AX 2009! Что делаю я в X++? 1. создаю Sales Order ( ок ) 2. создаю Sales Line ( ок ) 3. делаю постинг Invoice следующим образом: X++: SalesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, true); salesFormLetter.update(salesTable, SystemDateGet(), SalesUpdate::All, AccountOrder::None, false, true); 1. инвойс (запись в CustInvoiceJour) создается без InvoiceId, LedgerVoucher, ParmId 2. необходимые записи в таблицах CustInvoiceSalesLink and CustInvoiceTrans не создаются. Подскажите плиз, как решить данные проблемы? Заранее спасибо! |
|
12.12.2008, 21:20 | #3 |
Участник
|
Судя по коду разноски, вроде все делаете правильно. Поэтому предполагаю, что ошибка где-то в первых двух пунктах, или же неправильно (не до конца) настроена система (номерные серии??).
|
|
12.12.2008, 23:54 | #4 |
MCITP
|
DmitrySincerity,
А вручную вы пробовали разносить эти созданные вам заказы? Всё ли получалось?
__________________
Zhirenkov Vitaly |
|
15.12.2008, 13:23 | #5 |
Участник
|
|
|
15.12.2008, 17:49 | #6 |
Участник
|
Цитата:
1. создание Sales Order: X++: NumberSeq = NumberSeq::newGetNumFromCode( SalesParameters::numRefSalesId().numberSequence); salesTable.SalesId = NumberSeq.num(); salesTable.CurrencyCode = "USD"; salesTable.CustGroup = "10"; salesTable.CustAccount = custAccount; salesTable.InvoiceAccount = custAccount; salesTable.SalesType = 3; salesTable.LanguageId = "en-us"; salesTable.ShippingDateRequested = SystemDateGet(); salesTable.SalesStatus = 1; salesTable.PostingProfile= "GEN"; salesTable.AddressRefRecId = 5637147107; salesTable.AddressRefTableId = 77; salesTable.initValue(); //salesTable.initFromCustTable(); salesTable.insert(); 2. создание Sales Line: X++: salesLine.clear(); salesLine.salesId = salesTable.SalesId; salesLine.ItemId = itemId; salesLine.LineAmount = 888; salesLine.ShippingDateRequested = SystemDateGet(); salesLine.ConfirmedDlv = SystemDateGet(); salesLine.InventDimId = "00008243_069"; salesLine.Name = "IN006"; salesLine.QtyOrdered = 1; salesLine.SalesQty = 1; salesLine.SalesPrice = 777; salesLine.SalesStatus = 3; salesLine.SalesType = 1; salesLine.CurrencyCode = "USD"; salesLine.CustGroup = "10"; salesLine.CustAccount = "ACC13"; salesLine.AddressRefRecId = salesTable.AddressRefRecId; salesLine.AddressRefTableId = 366; salesLine.SalesUnit = "Pcs"; salesLine.PriceUnit = 1; salesLine.LineNum = 1; salesLine.LineAmount = 888; salesLine.createLine(true, true,true,true,true, false); 3. постинг инвойса с вытекающими "приятными" последствиями: X++: SalesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, true); salesFormLetter.update(salesTable, SystemDateGet(), SalesUpdate::All, AccountOrder::None, false, true); |
|
15.12.2008, 18:22 | #7 |
Программатор
|
salesTable.initValue();
не понравилось мне, что это стоит в конце, перед инсертом. После создания Sales Line не должен создаваться SalesParmLine . перед инсертами вызывайте if (table.validateWrite()) Последний раз редактировалось Sada; 15.12.2008 в 18:30. |
|
15.12.2008, 18:28 | #8 |
Участник
|
предлагаете вставить после инсерта?
|
|
15.12.2008, 18:30 | #9 |
Программатор
|
Предлагаю вставить в самом начале.
|
|
15.12.2008, 18:34 | #10 |
Программатор
|
После salesLine.clear();
вызывать salesline.initformsalestable(salestable); + Вам почитать как создаются заказы на продажу на форуме нада |
|
15.12.2008, 18:35 | #11 |
Участник
|
|
|
15.12.2008, 18:36 | #12 |
Программатор
|
|
|
15.12.2008, 18:40 | #13 |
Участник
|
|
|