|
16.01.2012, 10:19 | #1 |
Участник
|
Редактирование отчета "счет на оплату"
Добрый день, уважаемые!
Есть вопрос от изучающего разработку: Как в отчете "счет на оплату" по клиенту добавить поле "грузополучатель" из SalesTable.ConsigneeAccount_Ru с условием есть ли по заказу грузополучатель? Пол дела я сделал, добавив в репортс "salesinvoice4paym" string "Грузополучатель" =))) Нашел временную таблицу TmpSalesPurchReportTable на которую ссылаются некоторые поля в интересующем меня репорте. Создал в этой таблице поле, к примеру"consignor". осталось, на сколько я понимаю прописать в каком-то классе внесенное мной изменение? Буду рад любому ответу. P/S Axapta v3 С уважением, Юрий Последний раз редактировалось AX3; 16.01.2012 в 11:13. |
|
16.01.2012, 14:39 | #2 |
Участник
|
Если говорить про заказы :
Класс, который формирует счет на оплату : SalesFormLetter_Invoice4Paym_RU. В методе writeJournal() заполняется шапка, в методе writeJournalLine() - строки. Сформированные счета на оплату хранятся в 2-х таблицах : CustInvoice4PaymJour_RU,CustInvoice4PaymTrans_RU (соответственно шапка и строки). В закупках аналогично. Т.е. в метод writeJournal() надо прописать код. Общий класс, который отвечает за вывод отчета : SalesPurchReport_Invoice4Paym_RU. В методе X++: protected void prepareReportHeader() { super(); select firstonly costAllocationHistory where costAllocationHistory.CustVendInvoice4PaymJourRecId == invoiceJour.RecId; header.CustName = invoiceJour.DeliveryName_RU; header.CustBankAddress = invoiceJour.DeliveryAddresss_RU; header.DueDate = invoiceJour.FixedDueDate ? invoiceJour.FixedDueDate : PaymTerm::find(invoiceJour.Payment).due(invoiceJour.InvoiceDate); [ header.AcceptorName, header.AcceptorTitle ] = OfficialsTrans_RU::getNameTitleByIdPosition(invoiceJour.OffSessionId_RU, OffPosition_RU::Responsible); [ header.TakerName, header.TakerTitle ] = OfficialsTrans_RU::getNameTitleByIdPosition(invoiceJour.OffSessionId_RU, OffPosition_RU::Filler); header.Notes = CustInvoice4PaymJour_RU::findRecId(invoiceJour.RecId).Notes; if (mappingExists_RU(tablenum(CustVendInvoiceJour), invoiceJour.TableId, fieldnum(CustVendInvoiceJour, rContractCode))) { header.rContractAccount = invoiceJour.rContractAccount; header.rContractCode = invoiceJour.rContractCode; header.rContractDate = RContractTable::find(RContractPartnerType::Cust,invoiceJour.rContractCode,invoiceJour.rContractAccount).ContractDate; header.rContractNumber = RContractTable::find(RContractPartnerType::Cust,invoiceJour.rContractCode,invoiceJour.rContractAccount).rContractNumber; } } Обратите внимание, что invoiceJour - это Map : CustVendInvoiceJour., который передается в методе main() класса SalesReport_Invoice4Paym_RU. В мар-е поле ConsigneeAccount_RU уже есть. И в этом методе тоже прописать добавление вашего поля или в таблице TmpSalesPurchReportTable_RU в метод initFromInvoiceJour().
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 16.01.2012 в 15:30. Причина: в мар-е поле ConsigneeAccount_RU уже есть |
|
|
За это сообщение автора поблагодарили: AX3 (1). |
17.01.2012, 10:16 | #3 |
Участник
|
Спасибо Pustik за описание сего процесса!
Немного уточню/подытожу: В таблицу CustInvoice4PaymJour_RU добавляю филд ConsigneeAccount_RU 1) В SalesFormLetter_Invoice4Paym_RU.writeJournal() добавляю запись: custInvoice4PaymJour.ConsigneeAccount_RU = salestable.ConsigneeAccount_RU; 2) В SalesPurchReport_Invoice4Paym_RU.prepareReportHeader() добавляю запись: header.ConsigneeAccount_RU = invoiceJour.ConsigneeAccount_RU; 3) В таблице TmpSalesPurchReportTable_RU в методе initFromInvoiceJour добавляю запись: this.ConsigneeAccount_RU = _invoiceJour.ConsigneeAccount_RU; 4)Вопрос. Проанализировав класс SalesReport_Invoice4Paym_RU. prepareReportHeader(): protected void prepareReportHeader() { SalesPurchReportCounteragentData_RU counteragentData; CustPaymModeTable custPaymMode; super(); header.DueDate = header.DueDate ? header.DueDate : invoiceJour.DueDate; // Respite date counteragentData = this.initContragentData(customer, customerBankAccount, invoiceJour.OrderAccount); header.CustName = invoiceJour.DeliveryName; header.CustBankAddress = invoiceJour.DeliveryAddresss; header.CustINN = 'ИНН\\КПП ' + counteragentData.parmINN() + '\\' +counteragentData.parmKPP(); custPaymMode = CustPaymModeTable::find(Salestable::find(invoiceJour.SalesPurchId).PaymMode); counteragentData = this.initCompanyData(custPaymMode.AccountType == LedgerJournalACType::Bank ? custPaymMode.PaymAccount : ""); header.VendINN = 'ИНН\\КПП ' + counteragentData.parmINN() + '\\' +counteragentData.parmKPP(); header.VendName = counteragentData.parmName();// + ', ' + counteragentData.fullBankAccountName(); header.VendBank = counteragentData.BankAccountName(); header.VendBankAccount = counteragentData.BankAccountNum(); header.VendBIC = counteragentData.BankBIC_RU(); header.VendCorrAccount = counteragentData.BankCorrAccount_RU(); header.VendBankAddress = counteragentData.fullAddress(false, true) ////////////////////// Нужно ли в выше указанный код что-то дописывать? подозреваю что нужно ?! На данный момент то, что описал выше - дописал, но к сожалению тщетно- в теле письма error Последний раз редактировалось AX3; 17.01.2012 в 10:19. |
|
17.01.2012, 14:03 | #4 |
Участник
|
CustVendInvoiceJour(_invoiceJour) - ЭТО МАР. Надо ему(мар-у) дать понять, что означает поле ConsigneeAccount_RU от таблицы CustInvoice4PaymJour_RU. Т.е. связать поле мар-а с полем таблицы. Найдите этот Мар через репозитарий и в разделе Mappings привяжите поле мар-а ConsigneeAccount_RU к такому же полю таблицы CustInvoice4PaymJour_RU.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 17.01.2012 в 14:41. |
|