24.05.2010, 13:59 | #1 |
Участник
|
Форма накладных
Помогите пожалуйста разобраться...
Мне необходимо программно получить накладную для нескольких заказов на продажу, делаю: X++: select * from salesTable where salesTable.SalesId like '.....*'; args = new Args(); args.record(salesTable); args.parmEnum(DocumentStatus::Invoice); args.caller(args); SalesFormLetter::main(args);
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
24.05.2010, 14:08 | #2 |
Moderator
|
Select-ом Вы вытянули первую запись, попадающую под заданное условие и именно ее (эту одну запись) передали как аргумент в класс Args.
|
|
24.05.2010, 14:17 | #3 |
Участник
|
Select-ом то я вытянул несколько записей! А вот передал быть может и неверно, подскажите как можно в эту форму передать набор?
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
24.05.2010, 14:34 | #4 |
Moderator
|
Вставка строк происходит вот здесь:
Цитата:
(S) \Classes\SalesFormLetter\chooseLines
(S) \Classes\SalesFormLetter\initLinesQuery X++: mapSalesRecord = map::create(Formletter::getFormRecord(callerFormDataSource)); mapSalesRecordEnumerator = mapSalesRecord.getEnumerator(); while (mapSalesRecordEnumerator.moveNext()) { localSalesTable = mapSalesRecordEnumerator.currentValue(); // ... X++: callerFormDataSource = salesTable.dataSource(); salesFormLetter.callerFormDataSource(callerFormDataSource); X++: // Select all lines of the grid salesTabToSelect = SalesTable_ds.getFirst(); while (salesTabToSelect) { SalesTable_ds.markRecord(salesTabToSelect, true); salesTabToSelect = SalesTable_ds.getNext(); } Последний раз редактировалось Андре; 24.05.2010 в 14:56. |
|
|
За это сообщение автора поблагодарили: hated8 (1). |
24.05.2010, 15:00 | #5 |
Moderator
|
Цитата:
не совсем понял что вы имеете ввиду...
Я имел в виду метод markRecord(). Ведь для разноски накладной по нескольким заказам Вы предварительно выделяете их. |
|
24.05.2010, 15:01 | #6 |
Участник
|
Цитата:
Я бы попробовал из кода (то есть, программно) выделить несколько записей на SalesTable
Цитата:
// Select all lines of the grid
salesTabToSelect = SalesTable_ds.getFirst(); while (salesTabToSelect) { SalesTable_ds.markRecord(salesTabToSelect, true); salesTabToSelect = SalesTable_ds.getNext(); } Я пробовал таким образом: X++: SalesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); SalesFormLetter.salesTable(SalesTable); salesFormLetter.parmSalesPurchCycleAction(salesPurchCycle::salesPurchCycleAction(DocumentStatus::Invoice)); salesFormLetter.callerFormDataSource(SalesTable.dataSource()); SalesFormLetter.prompt();
__________________
Что сломалось не знаем, но уже немного подчинили... Последний раз редактировалось hated8; 24.05.2010 в 15:14. |
|
24.05.2010, 15:46 | #7 |
Сенбернар
|
Как вариант: из вашего класса программно поднять форму SalesTable, скрыть ее тут же, получить датасорс. Далее - см. выше.
Но это - изврат, ИМХО
__________________
Best Regards, Roman |
|
24.05.2010, 15:48 | #8 |
Участник
|
Изврат не то слово)) Одна из самых тяжелых форм в AX.... )
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
24.05.2010, 15:52 | #9 |
Участник
|
То есть, Вам нужно программно вызвать механизм совместной обработки? Придется вручную формировать параметрические таблицы, ориентируясь на то место, которое подсказал Андре.
В приведенном ниже коде как раз производится что-то подобное. Единственное, этот код сразу разносит без открытия диалога, переделать с диалогом, думаю несложно. Ну и несколько параметров лишние, они чисто наши, можно не обращать внимание: X++: // ААК: МФД40_08_01_0008_003 24.04.2009 [Заявки на отгрузку] --> public static CustInvoiceJour multiSalesPost_OVK( container _conSales, // Контейнер с SalesId нужных заказов container _conLines, // Контейнер с RecId строк заказов TransDate _invoiceDate = systemDateGet(), // Дата накладной TransDate _documentDate = systemDateGet(), // Дата документа SalesUpdate _specQty = SalesUpdate::DeliverNow, // SpecQty AccountOrder _sumBy = AccountOrder::None, // Суммарная обработка PostInvoiceAdvData_OVK _postAdvData = null, BOLData_OVK _bolData = null // Данные для ТТН ) // ААК: МФД40_08_01_0008_003 24.04.2009 [Заявки на отгрузку] <-- { SalesTable salesTable; SalesLine salesLine; SalesParmTable salesParmTable; salesParmUpdate salesParmUpdate; SalesFormLetter_Invoice salesFormLetter; SalesParmLine parmLine; SalesId salesId; Counter iSales, iLines; RecId recId; ; salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); ttsBegin; salesFormLetter.createParmUpdate(false, conNull()); salesParmUpdate = salesParmUpdate::find(salesFormLetter.parmId(), true); salesParmUpdate.SumBy = _sumBy; if (_postAdvData) { salesParmUpdate.storno = _postAdvData.storno(); salesParmUpdate.CreditRemaining = _postAdvData.creditRemaining(); } if (_bolData) { salesParmUpdate.BOLCarrierName = _bolData.carrierName(); salesParmUpdate.BOLFreightChargeTerms = _bolData.freightChargeTerms(); salesParmUpdate.BOLFreightCounted = _bolData.freightCounted(); salesParmUpdate.BOLTrailerLoaded = _bolData.trailerLoaded(); salesParmUpdate.BOLFreightedBy = _bolData.freightedBy(); } salesParmUpdate.update(); salesFormLetter.salesParmUpdate(salesParmUpdate); salesFormLetter.initParameters(salesFormLetter.salesParmUpdate(), PrintOut::Current, _postAdvData ? _postAdvData.printInvoice() : NoYes::No); salesFormLetter.transDate(_invoiceDate); salesFormLetter.multiForm(true); salesFormLetter.specQty(_specQty); if (_postAdvData) { salesFormLetter.parmStornoStatus (_postAdvData.stornoStatus()); salesFormLetter.printFormLetter (_postAdvData.printInvoice()); salesFormLetter.printInMST_OVK (_postAdvData.printInMST()); salesFormLetter.printBillOfLading_OVK (_postAdvData.printBOL()); salesFormLetter.parmReservReturn (_postAdvData.remainReserv()); salesFormLetter.parmRefDocumentStorno (_postAdvData.correctedInvoiceRecId()); salesFormLetter.parmFixedDueDate_OVK (_postAdvData.fixedDueDate()); salesFormLetter.parmPayment_OVK (_postAdvData.payment()); salesFormLetter.parmShipBatchId_OVK (_postAdvData.shipBatchId()); salesFormLetter.parmReservTransId_OVK (_postAdvData.reservTransId()); if (_postAdvData.corrected()) { salesFormLetter.parmCorrect (_postAdvData.corrected()); salesFormLetter.parmCorrectedInvoiceId (_postAdvData.correctedInvoiceId()); salesFormLetter.parmCorrectedInvoiceDate (_postAdvData.correctedInvoiceDate()); } if (_postAdvData.printStamp()) { salesFormLetter.parmPrintStamp_OVK(UnknownNoYes::Yes); } else { salesFormLetter.parmPrintStamp_OVK(UnknownNoYes::No); } } for (iSales = 1; iSales <= conLen(_conSales); iSales ++) { salesId = conpeek(_conSales, iSales); salesTable = SalesTable::find(salesId); salesParmTable.clear(); salesFormLetter.createParmTable(salesParmTable, salesTable); salesParmTable.TableRefId = FormLetter::getTableRef(); salesParmTable.DocumentDate = _documentDate; salesParmTable.TransDate = _invoiceDate; salesParmTable.SalesId = salesTable.SalesId; salesParmTable.Invoice4PaymId_OVK = CustInvoice4PaymSalesLink_RU::oneInvoice4PaymId_OVK(salesTable.SalesId); if (_postAdvData) { if (_postAdvData.corrected()) { salesParmTable.Correct_RU = _postAdvData.corrected(); salesParmTable.CorrectedInvoiceId_RU = _postAdvData.correctedInvoiceId(); salesParmTable.CorrectedInvoiceDate_RU = _postAdvData.correctedInvoiceDate(); } salesParmTable.RefForStorno_OVK = _postAdvData.correctedInvoiceRecId(); salesParmTable.AverageExchRate_OVK = _postAdvData.fixedExchRate(); salesParmTable.ShipBatchId_OVK = _postAdvData.shipBatchId(); if (_postAdvData.fixedDueDate()) { salesParmTable.FixedDueDate = _postAdvData.fixedDueDate(); } } if (_bolData) { salesParmTable.BOLDeliveryDate_RU = _bolData.deliveryDate(); salesParmTable.BOLVehicleModel_RU = _bolData.vehicleModel(); salesParmTable.BOLVehiclePlateNum_RU = _bolData.vehiclePlateNum(); salesParmTable.BOLWaybillNum_RU = _bolData.waybillNum(); salesParmTable.BOLDriverName_RU = _bolData.driverName(); salesParmTable.BOLDrivingLicenseNum_RU = _bolData.drivingLicenseNum(); salesParmTable.BOLLicenseCardType_RU = _bolData.licenseCardType(); salesParmTable.BOLLicenseCardRegNum_RU = _bolData.licenseCardRegNum(); salesParmTable.BOLLicenseCardSeries_RU = _bolData.licenseCardSeries(); salesParmTable.BOLLicenseCardNum_RU = _bolData.licenseCardNum(); salesParmTable.BOLTransportationType_RU = _bolData.transportationType(); salesParmTable.BOLCarrierType_RU = _bolData.carrierType(); salesParmTable.BOLCarrierCode_RU = _bolData.carrierCode(); } salesParmTable.insert(); if (_bolData) { if (_bolData.addressTransTableId() && _bolData.addressTransRecId()) { AddressTrans_RU::copy(salesParmTable.TableId, salesParmTable.RecId, _bolData.addressTransTableId(), _bolData.addressTransRecId(), AddressType::Lading_W); AddressTrans_RU::copy(salesParmTable.TableId, salesParmTable.RecId, _bolData.addressTransTableId(), _bolData.addressTransRecId(), AddressType::Unlading_W); } } for (iLines = 1; iLines <= conlen(_conLines); iLines ++) { recId = conpeek(_conLines, iLines); salesLine = SalesLine::findRecId(recId); if (salesLine.SalesId == salesId) { salesFormLetter.createParmLine(salesLine, salesParmTable.TableRefId); } } } salesFormLetter.run(); ttscommit; return salesFormLetter.journal(); } |
|
|
За это сообщение автора поблагодарили: hated8 (1). |
24.05.2010, 16:17 | #10 |
Участник
|
Нда.....
Против лома нет приёма..... ) Конечно надеялся найти способ попроще но увы и ах....... ) Всем спасибо!
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
24.05.2010, 17:08 | #11 |
----------------
|
а может попробовать посмотреть, как работает кнопка Выбор на форме SalesEditLines?
Последний раз редактировалось Wamr; 24.05.2010 в 17:12. |
|
25.05.2010, 07:58 | #12 |
Участник
|
кнопка Выбрать просто делает выборку из salesParmTable_ds а в моём случае её еще заполнить надо... Да и _ds нет!....
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
25.05.2010, 10:15 | #13 |
----------------
|
кнопка Выбрать обычно даёт возможность изменить qeuryRun.query(), по которому потом делается выборка. Как раз туда и можно засунуть Ваш SalesId '.....*'.. попробуйте.
X++: static void JobSFL(Args _args) { SalesFormLetter sfl = SalesFormLetter::construct(DocumentStatus::Invoice); sfl.createParmUpdate(true); if(sfl.prompt()) sfl.run(); } Последний раз редактировалось Wamr; 25.05.2010 в 10:24. |
|