|  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. Причина: Похожее содержание ответа | 
|  | 
| Теги | 
| закупка, коррекция налогов, налоги, программно | 
|  | 
| 
 |