![]() |
#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 не создаются. Подскажите плиз, как решить данные проблемы? Заранее спасибо! |
|
![]() |
#3 |
Участник
|
Судя по коду разноски, вроде все делаете правильно. Поэтому предполагаю, что ошибка где-то в первых двух пунктах, или же неправильно (не до конца) настроена система (номерные серии??).
|
|
![]() |
#4 |
MCITP
|
![]()
DmitrySincerity,
А вручную вы пробовали разносить эти созданные вам заказы? Всё ли получалось? ![]()
__________________
Zhirenkov Vitaly |
|
![]() |
#5 |
Участник
|
|
|
![]() |
#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); |
|
![]() |
#7 |
Программатор
|
salesTable.initValue();
не понравилось мне, что это стоит в конце, перед инсертом. После создания Sales Line не должен создаваться SalesParmLine . перед инсертами вызывайте if (table.validateWrite()) Последний раз редактировалось Sada; 15.12.2008 в 18:30. |
|
![]() |
#8 |
Участник
|
предлагаете вставить после инсерта?
|
|
![]() |
#9 |
Программатор
|
Предлагаю вставить в самом начале.
|
|
![]() |
#10 |
Программатор
|
После salesLine.clear();
вызывать salesline.initformsalestable(salestable); + Вам почитать как создаются заказы на продажу на форуме нада |
|
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Программатор
|
|
|
![]() |
#13 |
Участник
|
|
|