06.12.2012, 10:53 | #1 |
Участник
|
Создание проводок в ГК
Сижу разбираюсь с классами LedgerBond, для себя написал краткое описание работы разноски, решил выложить мало ли кому понадобится
Для того чтобы создать проводки в Главную книгу из произвольного места нужно организовать примерно следующий код. 1. Метод инициализации объектов. Основной объект необходимый для разноски LedgerVoucher. Краткое описание LedgerVoucher. Это класс который аккумулирует, классы LedgerVoucherObject, он записывает их в класс LedgerVoucherList, основанный на мапе вида [Voucher -- LedgerVoucherObject], а класс является оберткой данной структуры, с методами ввода вывода и поиска. В свою очередь LedgerVoucherObject состоит из объектов LedgerVoucherTransObject. LedgerVoucherTransObject - содержит в себе LedgerTrans, и параметры разноски. LedgerVoucherObject хранит LedgerVoucherTransObject, с помощью класса LedgerVoucherTransList, в основе которого лежит Map вида [номер по порядку -- LedgerVoucherTransObject] Т.е. как видно из структуры самый младший элемент в иерархии LedgerVoucherTransObject, мы в него записываем параметры, а он создает табличный курсор LedgerTrans, и заполняет необходимые поля исходя из входящих параметров. Исходя из этого нужно инициализировать LedgerVoucher, и заполнить его. (Я буду приводить примеры из блока налогового учета). Схема X++: protected void initLedgerVoucher() { NumberSeq numberSeq; // номерная серия Voucher voucher; // номер ваучера LedgerVoucherObject ledgerVoucherObject; boolean cancelMode = (processMode == SalesBookVATProcessCancelType_RU::Process) ? false : true; ; numberSeq = NumberSeq::newGetNum(CustParameters::numRefSalesBookVATProcessVoucherId_RU()); // определяем номерную серию для генерации ваучера voucher = numberSeq.num(); // генерируем номер ваучера // создаем ledgerVoucherObject, для каждого ваучера voucher, система в мапе создаст свой ledgerVoucherObject // данный обьект объеденяет в себе проводки, у которых одинаковы задаваемые параметры ledgerVoucherObject = LedgerVoucherObject::newVoucher(voucher, // ключ в классе LedgerVoucherList ledgerTrans.Voucher transDate, // дата проводки LedgerTrans.Transdate SysModule::Tax,// модуль разноски LedgerTransType::Tax, // ledgerTrans.TransType cancelMode, //ledgerTrans.Correct OperationsTax::Current, //ledgerTrans.OperationsTax '', // номер документа dateNull(), // дата документа null, dateNull(), false); // нициализация ledgerVoucher, задаем детализацияю, модуль и код номерной серии для генерации ваучера ledgerVoucher = LedgerVoucher::newLedgerPost(DetailSummary::Summary, SysModule::Tax, voucher); // добавляем ledgerVoucherObject в ledgerVoucher, ledgerVoucherObject наследует параметры от ledgerVoucher ledgerVoucher.addVoucher(ledgerVoucherObject); // дялее проедывается тоже самое, но в данный ledgerVoucher будут записываться операции по корректировке, это не обязательно // мне кажется необходимо для того чтобы не было ошибки корреспонденции ledgerVoucherObject = LedgerVoucherObject::newVoucher(voucher, transDate, SysModule::Tax, LedgerTransType::Tax, ! cancelMode, OperationsTax::Current, '', dateNull(), null, dateNull(), false); ledgerVoucherCorrect = LedgerVoucher::newLedgerPost(DetailSummary::Summary, SysModule::Tax, voucher); ledgerVoucherCorrect.addVoucher(ledgerVoucherObject); } X++: protected void post(TaxDirection _taxDirection, LedgerAccount _accountNum, LedgerAccount _offsetAccountUseTax, LedgerAccount _chargeAccount, Dimension _dimension, TaxAmount _taxAmount, TaxAmount _chargeAmount, LedgerAccount _accountTaxFreePct, ExchRate _exchRate = exchRate, ExchRate _exchRateSecond = 0, LedgerDetailLevel _ledgerDetailLevel = LedgerDetailLevel::AsDefault, LedgerAccount _offsetAccount = '', AmountMSTSecondary _amountMSTSecondary = 0) { LedgerVoucherTransObject ledgerVoucherTransObject; LedgerBondClient_RU ledgerBondClient; int counter; str tmpStr; ; // ledgerBondClient = ledgerVoucher.findLedgerVoucherObject().ledgerBondClient_RU(); //нужно для корреспондениции? если кореспонденция // в главной книге включена то этот класс инициализируется при инициализации ledgerVoucher, это класс позволяет загрузить данные в // LedgerBondServer_RU, который выполняет корреспонденцию счетов. Если класс LedgerBondClient_RU инициализирован, значит корреспондженция включена // русский припон, о структуре данных классов стоит говорить отдельно ledgerBondClient = ledgerVoucher.findLedgerVoucherObject().ledgerBondClient_RU(); if (ledgerBondClient) { ledgerBondClient.addNewLogObject(); // добавляет новый Log объект } // создаем провдоку с +, на какой счет приходит ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(ledgerVoucher.findLedgerVoucherObject(),// находит текущий LedgerVoucherObject LedgerPostingType::TaxReport, // тип разноски _accountNum, // счет _dimension, // аналитика currencyCode, //код валюты _taxAmount, //сумма в проводке logTransOper.TableId, // ссылка на источник logTransOper.RecId); ledgerVoucherTransObject.parmTransTxt(logTransOper.TransTxt); // задате текст операции ledgerVoucher.addTrans(ledgerVoucherTransObject); //добавляет в ledgerVoucher ledgerVoucherTransObject, если ваучер не изменился, аккумулирует все данные в одном ledgerVoucherTransObject // создаем провдоку с -, с какого счета идет списание, необходимо следить чтобы параметры не отличались, иначе проводки не скорреспондируются // сумма должна быть противоположной по знаку ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(ledgerVoucher.findLedgerVoucherObject(), LedgerPostingType::TaxReport, _offsetAccount, // корр. счет _dimension, currencyCode, - _taxAmount, logTransOper.TableId, logTransOper.RecId); ledgerVoucherTransObject.parmTransTxt(logTransOper.TransTxt); ledgerVoucher.addTrans(ledgerVoucherTransObject); // работа с корреспонденцией if (ledgerBondClient) { ledgerBondClient.bondLastVRef2CurrentLog(); // добавить ссылку в лог ledgerBondClient.removeCurrentLogObject(); // удалить текущий LogObject } } X++: protected void endLedgerVoucher() { ledgerVoucherCorrect.end(); ledgerVoucher.end(); } Последний раз редактировалось Kainix; 06.12.2012 в 11:56. |
|
|
За это сообщение автора поблагодарили: Logger (5), S.Kuskov (1). |
06.12.2012, 11:19 | #2 |
Участник
|
Просьба для большей полезности указать версию АХ, судя по аналитике это не АХ2012
|
|
06.12.2012, 11:48 | #3 |
Участник
|
Ax 2009
|
|
06.12.2012, 12:31 | #4 |
Участник
|
А куда должна вести ссылка "Схема"?
|
|
06.12.2012, 14:14 | #5 |
Участник
|
схема
|
|
Теги |
ax2009, ledgerbond, ledgerbondserver_ru, ledgertrans, ledgervoucher, корреспонденция |
|
|