AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2005, 20:23   #1  
Mihon is offline
Mihon
Участник
 
39 / 10 (1) +
Регистрация: 25.03.2005
Thumbs up
Итак, сперва прелюдия...
Есть датапорт, основной его элемент - 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  
rov_imported is offline
rov_imported
Участник
 
176 / 10 (1) +
Регистрация: 20.01.2005
Ну посмотри через дебугер - построчно: какие фильтры попадают на rItem и какое значение Inventory после Calcfields. Если 0- ну значит 0 и есть.
Старый 31.03.2005, 10:04   #3  
Шрэк is offline
Шрэк
Участник
Аватар для Шрэк
 
645 / 24 (2) +++
Регистрация: 09.02.2004
Адрес: Москва
Не понятно, что за проблема. Только что попробовал, все считается. Не функцию надо использовать в тригере, а свойство вашего Item именуемое "CALCFIELDS", где указать вычисляемые поля. Зачем огород городить, или я что-то не допонял?
__________________
MBS Certified Master in Navision Developer
Старый 31.03.2005, 11:06   #4  
Mihon is offline
Mihon
Участник
 
39 / 10 (1) +
Регистрация: 25.03.2005
Цитата:
Сообщение от rov
Ну посмотри через дебугер - построчно: какие фильтры попадают на rItem и какое значение Inventory после Calcfields. Если 0- ну значит 0 и есть.
Я же написал, что фильтры совпадают! И там должен быть не ноль. Об этом я тоже написал. Но он там есть. Даже после CALCFIELDS. Проверял в дебаггере.
Старый 31.03.2005, 11:11   #5  
Mihon is offline
Mihon
Участник
 
39 / 10 (1) +
Регистрация: 25.03.2005
Цитата:
Сообщение от Роман
Не понятно, что за проблема. Только что попробовал, все считается. Не функцию надо использовать в тригере, а свойство вашего Item именуемое "CALCFIELDS", где указать вычисляемые поля. Зачем огород городить, или я что-то не допонял?
В датапортах, в триггегах-обработчиках событий датаайтема Item, переменная типа Record с подтипом Item <27> является глобальной. Потому и метод (а не свойство) CALCFIELDS, если его просто так написать, применяется именно к ней, не требуя дополнительных уточнений. Так что с точки зрения программирования мною изначально всё было написано корректно.
Старый 31.03.2005, 12:00   #6  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
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  
Mihon is offline
Mihon
Участник
 
39 / 10 (1) +
Регистрация: 25.03.2005
Сейчас поэкспериментировал со свойством... Разницы с него - никакой.
Что же касается
Цитата:
ошибка в том, что надо было рассчитанные значения в выгружаемую переменную-то вернуть
Я как раз и делал присваивания в свои переменные, которые возвращал.
Вот полный код
<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  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
нет, так не видно ничего.
Должно работать, даже в 3.10. Вот пример, сделал специально в двушке, чтоб вопрос об устаревшей версии не возникал - загружайте в кронус, сравнивайте со своим кодом.
в крайнем случае - весь свой объект сюда, разберемся.
Вложения
Тип файла: fob 50000.fob (4.5 Кб, 331 просмотров)
Старый 31.03.2005, 17:04   #9  
Mihon is offline
Mihon
Участник
 
39 / 10 (1) +
Регистрация: 25.03.2005
Топик можно закрывать. Я сам дурак Как всегда
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.