30.03.2005, 20:23 | #1 |
Участник
|
Итак, сперва прелюдия...
Есть датапорт, основной его элемент - Item. Чего хочется - чтобы в выгрузке были наличия по складам (поля Inventory,"Reserved Qty. on Inventory", "Qty. on Purch. Order" являются FlowFields). Читаю мануал... Говорят, используйте "CALCFIELDS". Радостно подсовываю эту функцию в OnBeforeExportRecord.... Тишина... Вернее нули. А в базе остатки ненулевые. Спрашиваю знакомых Навизаторов, те советуют завести переменную, взять в ней запись, равную текущей, и рассчитать там. Получаю такой код: <div class='CALtop'>C/AL</div><div class='CAL'>rItem.COPYFILTERS(Item); rItem.GET("No."); rItem.CALCFIELDS(Inventory,"Reserved Qty. on Inventory", "Qty. on Purch. Order"); SkladFree := rItem.Inventory - rItem."Reserved Qty. on Inventory";</div> Ради проверки делаю <div class='CALtop'>C/AL</div><div class='CAL'>IF rItem.Inventory <> 0 THEN MESSAGE('#1', rItem.Inventory);</div> Нули... Пробовал распечатывать фильтры через MESSAGE, всё верно, так же как в форме 50006 "Sales Find Items", где всё прекрасно рассчитывается. Какие еще будут варианты? |
|
31.03.2005, 09:31 | #2 |
Участник
|
Ну посмотри через дебугер - построчно: какие фильтры попадают на rItem и какое значение Inventory после Calcfields. Если 0- ну значит 0 и есть.
|
|
31.03.2005, 10:04 | #3 |
Участник
|
Не понятно, что за проблема. Только что попробовал, все считается. Не функцию надо использовать в тригере, а свойство вашего Item именуемое "CALCFIELDS", где указать вычисляемые поля. Зачем огород городить, или я что-то не допонял?
__________________
MBS Certified Master in Navision Developer |
|
31.03.2005, 11:06 | #4 |
Участник
|
Цитата:
Сообщение от rov
Ну посмотри через дебугер - построчно: какие фильтры попадают на rItem и какое значение Inventory после Calcfields. Если 0- ну значит 0 и есть.
|
|
31.03.2005, 11:11 | #5 |
Участник
|
Цитата:
Сообщение от Роман
Не понятно, что за проблема. Только что попробовал, все считается. Не функцию надо использовать в тригере, а свойство вашего Item именуемое "CALCFIELDS", где указать вычисляемые поля. Зачем огород городить, или я что-то не допонял?
|
|
31.03.2005, 12:00 | #6 |
Участник
|
1. Роман прав, CalcFields - свойство DataItem, где можно перечислить поля, которые надо посчитать принудительно. Попробуйте, выкинув код из OnBeforeExportRecord
2. ошибка в том, что надо было рассчитанные значения в выгружаемую переменную-то вернуть... <div class='CALtop'>C/AL</div><div class='CAL'>rItem.CALCFIELDS... <- посчитали в пустоту Item := rItem; <- надо добавить, если не обращать внимания на п.1</div> |
|
31.03.2005, 12:31 | #7 |
Участник
|
Сейчас поэкспериментировал со свойством... Разницы с него - никакой.
Что же касается Цитата:
ошибка в том, что надо было рассчитанные значения в выгружаемую переменную-то вернуть
Вот полный код <div class='CALtop'>C/AL</div><div class='CAL'> rItem.COPYFILTERS(Item); rItem.GET("No."); rItem.CALCFIELDS(Inventory,"Reserved Qty. on Inventory"); SkladTotal := rItem.Inventory; SkladFree := rItem.Inventory - rItem."Reserved Qty. on Inventory"; </div> В SkladFree и SkladTotal нули. Всегда. Равно как и в остальных переменных. В списке полей датаайтема прописаны SkladFree и SkladTotal. Inventory и "Reserved Qty. on Inventory" даже не указаны. Хотя, по-моему, оно не должно влиять. |
|
31.03.2005, 13:13 | #8 |
Участник
|
нет, так не видно ничего.
Должно работать, даже в 3.10. Вот пример, сделал специально в двушке, чтоб вопрос об устаревшей версии не возникал - загружайте в кронус, сравнивайте со своим кодом. в крайнем случае - весь свой объект сюда, разберемся. |
|
31.03.2005, 17:04 | #9 |
Участник
|
Топик можно закрывать. Я сам дурак Как всегда
|
|