11.04.2007, 10:51 | #1 |
Участник
|
Баг в сопоставлении открытых проводок
И снова салют вам, уважаемые коллеги!
Сегодня во время археологических раскопок кода обнаружил в методе \Classes\CustVendSettle_Vend\postAmountDiffTrans_RU один очень любопытный фрагмент. (Этот метод вызывается в процессе сопоставления открытых проводок по клиенту) Код: maxCount = (select count (RecId) from VendInvoiceTrans where VendInvoiceTrans.PurchID == _vendInvoiceJour.Num && VendInvoiceTrans.InvoiceId == _vendInvoiceJour.InvoiceId && VendInvoiceTrans.InvoiceDate == _vendInvoiceJour.InvoiceDate && VendInvoiceTrans.numberSequenceGroup == _vendInvoiceJour.NumberSequenceGroupId).RecId; postMarkup (tableNum(VendInvoiceJour),_vendInvoiceJour.RecId,_vendInvoiceJour.Dimension); while select vendInvoiceTrans where vendInvoiceTrans.PurchID == _vendInvoiceJour.Num && vendInvoiceTrans.InvoiceId == _vendInvoiceJour.InvoiceId && vendInvoiceTrans.InvoiceDate == _vendInvoiceJour.InvoiceDate && vendInvoiceTrans.numberSequenceGroup == _vendInvoiceJour.NumberSequenceGroupId { .... } Подозреваю, что это цикл по строкам накладной. Но вот ведь незадача - набор полей для фильтрации неуникальный! Получается так, что в цикл могут попасть строки нескольких накладных. Есть мнение, что русские кодеры, программировавшие этот метод мягко говоря ошиблись, и связывать тыблицы нужно было по InernalInvoiceId Собственно, о чем я... Кто что может сказать по этому поводу? |
|
11.04.2007, 11:01 | #2 |
Участник
|
Вообще, связка между этими таблицами везде по системе идет именно по этим четырем полям, afair.
И relation по ним же настроен |
|
11.04.2007, 11:25 | #3 |
Участник
|
InernalInvoiceId вообще необязательный, он может не заполняться (попробуйте не задавать номерную серию "Внутренняя накладная")
Единственный уникальный индекс в VIJ это RecID но его-то как раз в VIT нет, так что это правильный код (вернее настолько правильный, насколько возможно) Последний раз редактировалось belugin; 11.04.2007 в 11:28. |
|
11.04.2007, 11:30 | #4 |
Участник
|
2 kashperuk
Тогда есть другой не менее ламерский вопрос, но сначала немного фактов из жизни: 1. Открываю \Работа с поставщиками\Поставщики\Функции\Сопоставление открытых проводок 2. Выделяю две проводки, жму Обновить 3. Вылетает вот такое сообщение: Цитата:
Ошибка времени выполнения. : Деление на ноль.
Трассировка стека: (S) \Classes\CustVendSettle_Vend\postAmountDiffTrans_RU - line 29 (S) \Classes\CustVendSettle\postExchAmountDiff_RU - line 89 (S) \Classes\CustVendSettle\settleNow - line 714 (S) \Data Dictionary\Maps\CustVendTrans\Methods\updateOffsetVoucher - line 28 (S) \Data Dictionary\Tables\VendTrans\Methods\updateOffsetVoucher - line 7 (S) \Data Dictionary\Tables\VendTrans\Methods\settleTransact - line 31 (C) \Classes\FormButtonControl\Clicked - line 5 5. Иду в \Работа с поставщиками\Запросы\Журналы\Накладные 6. Ищу накладную с таким же полем "Накладная", как и в открытой проводке из пункта 2 7. Находится 2 накладные, созданные по одной и той же закупке, с одинаковой датой, InvoceId и NumberSequenceGroupId (обозначим их как Накл1 и Накл2) 8. Во всех строках Накл1 стоят нули в полях Цена/ед, Скидка, Скидка %, Сумма и Налог, включенный в цену 9. Возвращаюсь в Сопотавление открытых проводок по поставщику и в открытой проводке никаких нулей там не вижу 10. Жму Запрос\Документ ГК. Там в строках стоит Документ ГК такой же как у Накл2 Спрашивается, зачем при нажатии кнопки Обновить в цикле, который приведен в первом сообщении, идет обход по строкам обеих накладных - и Накл1 и Накл2? 2 belugin Не знаю как у вас, но у нас прямой SQL-запрос к базе показывает, что в таблице VendInvoiceJour нет таких двух записей, у которых был бы одинаковый InernalInvoiceId |
|
11.04.2007, 12:05 | #5 |
Участник
|
Только что посмотрел Relation на VendInvoiceTrans
(на DAX 4.0 SP1, DAX 3.0 SP5 KR2, DAX 3.0 SP3) Везде связка по пяти полям, а не по 4ем. 5ым полем добавлен как раз внутренний номер накладной. Так что забираю свои слова про Relation по 4ем только полям назад. Хотя точно помнится, что видел связку именно по 4ем. Хм. Может это я перепутал с накладными клиентскими... |
|
11.04.2007, 12:34 | #6 |
Участник
|
Цитата:
2 belugin
Не знаю как у вас, но у нас прямой SQL-запрос к базе показывает, что в таблице VendInvoiceJour нет таких двух записей, у которых был бы одинаковый InernalInvoiceId - Разнесите две накладных Тогда будет |
|
11.04.2007, 12:42 | #7 |
Участник
|
Цитата:
Так что забираю свои слова про Relation по 4ем только полям назад.
PS. Правда я не знаю практикуется ли незаполнение внетренней накладной в реальности - возможно это делают, когда номер накладной уникален внктри закупки? |
|
11.04.2007, 12:46 | #8 |
Участник
|
Цитата:
\Classes\TradeLoopTrans\buildQuery Кстати, используется при построении отчета по накладной. Правда я сам грешу именно таким как у тебя вариантом реализации. (разве что, без регулярных выражений ) |
|
11.04.2007, 13:10 | #9 |
Участник
|
Уже спасибо за внимание к моей проблеме!
А кто что скажет про сабжевый цикл? Может быть он в какой-то версии уже исправлен? |
|
11.04.2007, 13:13 | #10 |
Участник
|
Ах, да, простите, код не привел
из DAX 4.0 SP1: X++: maxCount = any2int((select count (RecId) from vendInvoiceTrans where vendInvoiceTrans.PurchID == _vendInvoiceJour.Num && vendInvoiceTrans.InvoiceId == _vendInvoiceJour.InvoiceId && vendInvoiceTrans.InvoiceDate == _vendInvoiceJour.InvoiceDate && vendInvoiceTrans.NumberSequenceGroup == _vendInvoiceJour.NumberSequenceGroupId && vendInvoiceTrans.InternalInvoiceId == _vendInvoiceJour.PurchInternalInvoiceId_RU).RecId); postMarkup (tablenum(VendInvoiceJour),_vendInvoiceJour.RecId,_vendInvoiceJour.Dimension); while select vendInvoiceTrans where vendInvoiceTrans.PurchID == _vendInvoiceJour.Num && vendInvoiceTrans.InvoiceId == _vendInvoiceJour.InvoiceId && vendInvoiceTrans.InvoiceDate == _vendInvoiceJour.InvoiceDate && vendInvoiceTrans.NumberSequenceGroup == _vendInvoiceJour.NumberSequenceGroupId && vendInvoiceTrans.InternalInvoiceId == _vendInvoiceJour.PurchInternalInvoiceId_RU |
|
|
За это сообщение автора поблагодарили: Owl83 (1). |
11.04.2007, 13:40 | #11 |
Участник
|
2 kashperuk
Огромное спасибо! |
|
11.04.2007, 17:24 | #12 |
Administrator
|
Или, как вариант, \Tables\VendInvoiceJour\Methods\queryVendInvoiceTrans
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
Теги |
custsettlement, vendsettlement, сопоставление |
|
|