23.12.2008, 07:11 | #1 |
Участник
|
Ну уже не знаю что и как делать ((
Уважаемы гуру, прошу посмотрите код. Что в нем не так. Ну ни как не могу скорректировать налог ((. Выдает ошибку и все тут .
X++: switch (rDeferralsJournalTrans.DocumentStatus) { case DocumentStatus::Invoice : purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice); break; case DocumentStatus::Facture_RU : purchFormLetter = PurchFormLetter::construct(DocumentStatus::Facture_RU); break; } purchFormLetter.specQty(PurchUpdate::ReceiveNow); purchParmTable.clear(); purchFormLetter.createParmTable(purchParmTable,purchTable); purchParmTable.ParmId = purchFormLetter.parmId(); purchParmTable.TransDate = systemDateGet(); purchParmTable.DocumentDate = systemDateGet(); purchParmTable.Num = rDeferralsJournalTrans.DocumentNum; purchParmTable.FactureExternalId_RU = rDeferralsJournalTrans.DocumentNum; purchParmTable.insert(); purchFormLetter.createParmLine(purchLine); ttsbegin; select forupdate * from purchParmLine where purchParmLine.OrigPurchId==rDeferralsJournalTrans.PurchId && purchParmLine.ParmId==purchFormLetter.parmId(); purchParmLine.initFromPurchLine(purchLine); purchParmLine.initFromParmTable(purchParmTable); purchParmLine.LineAmount=rDeferralsJournalTrans.AmountCur; purchParmLine.update(); ttscommit; purchFormLetter.createParmUpdate(); purchParmUpdate = purchFormLetter.purchParmUpdate(); purchParmUpdate.SumBy = AccountOrder::None; purchParmUpdate.SpecQty = purchFormLetter.specQty(); purchParmUpdate.DocumentStatus = purchFormLetter.documentStatus(); purchParmUpdate.update(); purchFormLetter.purchParmUpdate(purchParmUpdate); purchTotals = PurchTotals::construct(purchTable, PurchUpdate::ReceiveNow, AccountOrder::None, purchFormLetter.parmId(), purchTable.PurchId, purchFormLetter.documentStatus()); purchTotals.calc(); taxRegulation = TaxRegulation::newTaxRegulation(purchTotals.tax()); taxRegulation.allocateAmount(rDeferralsJournalTrans.TaxAmount); taxRegulation.saveTaxRegulation(); purchFormLetter.initParameters(purchParmUpdate,PrintOut::Current,NoYes::No,NoYes::No,NoYes::No); purchFormLetter.run();
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 10:02 | #2 |
Участник
|
А в выборку попадает несколько закупок? Такая ошибка происходит когда обрабатывается несколько закупок и есть коррекция налога на одной из них. Если делать "руками" в интерфейсе, то ДО коррекции налогов нужно нажать кнопку "Упорядочить" в форме обработка накладной и после этого делать коррекцию. Может, в коде нужно явно вызвать упорядочивание?
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
23.12.2008, 10:56 | #3 |
MCITP
|
Цитата:
Сообщение от Ivanhoe
А в выборку попадает несколько закупок? Такая ошибка происходит когда обрабатывается несколько закупок и есть коррекция налога на одной из них. Если делать "руками" в интерфейсе, то ДО коррекции налогов нужно нажать кнопку "Упорядочить" в форме обработка накладной и после этого делать коррекцию. Может, в коде нужно явно вызвать упорядочивание?
К тому же судя по коду там одна закупка, более того - одна строка по закупке, в накладной. Вопрос даже скорее по функционалу налогов, чем по программированию.
__________________
Zhirenkov Vitaly |
|
23.12.2008, 11:00 | #4 |
Участник
|
если вызвать purchFormLetter.Prompt() то все срабатывает ((, но мне не надо вызывать эту форму
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 11:17 | #5 |
MCITP
|
Цитата:
Ставите брейкпоинт на info.add(), либо ищете где используется метка по вашему сообщению. Находите нужное место, откуда идёт данное сообщение. Проясняете для себя причины, почему оно возникает. Ищете код, который эти причины устраняет (вероятно в стеке prompt() что-то с этим делается). Копируете в свой код.
__________________
Zhirenkov Vitaly |
|
23.12.2008, 11:24 | #6 |
Программатор
|
В промпте вроде как вызывается метод initLinesQuery(), где заполняются parmTable parmLine и иже с ними. Я бы не стал создавать эти таблы руками и тем более апдейтить их потом. Вместо промпта вызовите ряд методов, которые в нем вызываются и добавьте какой нить параметр типа showdialog, чтоб вызывать purcheditLines или нет. По умолчанию естественно он должен быть true. выже в свой парм метод передавайте false. Возможно этот способ Вам не поможет, но будет более правильным на мой взгляд.
|
|
23.12.2008, 11:27 | #7 |
Программатор
|
Что то вроде
X++: salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); parmId = salesFormLetter.parmId(); salesFormLetter.salesTable(salesTable); salesFormLetter.getLast(); salesFormLetter.parmId(parmId); salesFormLetter.transDate(salesTable.InvoiceDate); salesFormLetter.specQty(SalesUpdate::All); salesFormLetter.createParmUpdate(); salesFormLetter.createParmTable(salesParmTable, salesTable); salesFormLetter.initLinesQuery(); salesFormLetter.run(); Последний раз редактировалось Sada; 23.12.2008 в 11:31. |
|
23.12.2008, 11:34 | #8 |
Участник
|
в методе purchFormLetter.run() есть строка
X++: if (reArrangeNow) this.reArrange(false, false); X++: if (!this.checkTaxWorkRegulation()) throw error("@SYS21628");
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 11:40 | #9 |
Программатор
|
\Classes\FormLetter\reArrangeNow
поставьте тут точку останова |
|
23.12.2008, 11:41 | #10 |
MCITP
|
Цитата:
Сообщение от kalex_a
в методе purchFormLetter.run() есть строка
X++: if (reArrangeNow) this.reArrange(false, false); X++: if (!this.checkTaxWorkRegulation()) throw error("@SYS21628"); Вероятно, метод purchFormLetter.reArrangeNow(false) перед run вам должен помочь.
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: kalex_a (1). |
23.12.2008, 11:42 | #11 |
Программатор
|
|
|
23.12.2008, 11:50 | #12 |
Участник
|
Цитата:
Спасибо ZVV
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 11:58 | #13 |
Программатор
|
В методе reArrange выполняется ацкое количество кода Может он там зачем то нужен
|
|
23.12.2008, 12:04 | #14 |
Участник
|
Может, в настройках модуля РП стоит Суммарная обработка = Нет, и этот параметр автоматически подтягивается в форму обработки накладной. А когда вы делаете все из кода, то не прописываете, что суммарной обработки не будет, вот и ошибка.
__________________
Ivanhoe as is.. |
|
23.12.2008, 12:06 | #15 |
Участник
|
Согласен, как я понял ( по моим раскопкам ), он выполняется когда "Суммарная обработка" не равно "Нет", а т.к. у меня всегда равно "Нет", то мне он не нужен
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 12:08 | #16 |
Участник
|
Цитата:
X++: purchParmUpdate.SumBy = AccountOrder::None;
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
23.12.2008, 12:45 | #17 |
Участник
|
Эх, залезаем в код
В методе init формы обработки есть строки: X++: sumBy.selection(purchEditLinesForm.sumBy());
element.sumByChanged(true); X++: purchParmUpdate.SumBy = AccountOrder::None; Но во второй строке запускается метод в котором: X++: if (_init && purchParmUpdate.SumBy == AccountOrder::None) reArrangeNow = false; Так что совет ZVV абсолютно точен.
__________________
Ivanhoe as is.. |
|
23.12.2008, 13:21 | #18 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Может, в настройках модуля РП стоит Суммарная обработка = Нет, и этот параметр автоматически подтягивается в форму обработки накладной.
Цитата:
Цитата:
Сообщение от Sada
...
Нада посмотреть почему при стандартной оброботке эта переменная false Forms\PurchEditLines\init(): X++: ...
sumBy.selection(purchEditLinesForm.sumBy());
element.sumByChanged(true);
... X++: AccountOrder sumBy()
{;
return PurchParameters::find().SummaryUpdateBy;
} Forms\PurchEditLines\sumByChanged(): X++: void sumByChanged(boolean _init) { ... if (_init && purchParmUpdate.SumBy == AccountOrder::None) reArrangeNow = false; else reArrangeNow = true; buttonReArrange.enabled(reArrangeNow); ... } X++: void closeOk()
{
...
purchFormLetter.reArrangeNow(reArrangeNow);
...
} Цитата:
Сообщение от kalex_a
, а если разносить через форму заказа ("Разноска" -> "Накладная" и т.д.) то она имеет значение "False".
X++: purchFormLetter.reArrangeNow(false);
...
purchParmUpdate.SumBy = AccountOrder::None; P.S. Oops... пока излагал свою мысль Ivanhoe уже ответил в тему. Последний раз редактировалось petergunn; 23.12.2008 в 13:26. Причина: Похожее содержание ответа |
|
Теги |
закупка, коррекция налогов, налоги, программно |
|
|