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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.03.2011, 17:02   #1  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Требуется подсчитать значения количество в таблице sales invoice line (SIL), где SIL."Unit of Measure Code" ='ЧАС'.
код.

SIH.RESET;
SIH.SETRANGE("Srv Order No.");
SIH.SETRANGE(Storno,FALSE);

CASE TRUE OF
(PostingDate <> 0D) AND (PostingDate2 <> 0D):
SIH.SETRANGE("Posting Date",PostingDate,PostingDate2);
(PostingDate <> 0D) AND (PostingDate2 = 0D):
SIH.SETRANGE("Posting Date",PostingDate);

END ;

это работает
Наложил фильтр по дате Sales Invoice header (SIH)
далее


SIL.RESET;
SIL.SETRANGE(SIL."Document No.", SIH."No.");
IF SIH.FIND('-') THEN REPEAT

IF SIL."Unit of Measure Code" ='ЧАС' THEN BEGIN;
IF SIH."Invoice Key"= 'П1' THEN BEGIN
clt+=SIL.Quantity;
cost+=SIL."Unit Cost (LCY)";
END;
end;
UNTIL SIH.NEXT = 0;

Проблема в том что когда пишу усовие "IF SIL."Unit of Measure Code" ='ЧАС' THEN BEGIN"
то переменные clt и cost не считаются, хотя есть строки с
"Unit of Measure Code" ='ЧАС' , без этого усовия они считаются.
Не могу разобраться в чем дело, подскажите пожалуйста в чем проблема.
Старый 14.03.2011, 17:40   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Ок, может быть строки с "Unit of Measure Code" ='ЧАС' у тебя есть, а что насчет "Invoice Key"? Поставь брейкпойнт на строку clt+=...
и посмотри, вылетит дебаггер или нет.

UPD: Есть два предложения по поводу кода.
1. Не использовать FIND('-'), заменить на FINDSET.
2. Не "зашивать" в коде 'ЧАС', вынести в настройки и через get получать перед циклом.
Старый 14.03.2011, 17:48   #3  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от Fly Посмотреть сообщение
Ок, может быть строки с "Unit of Measure Code" ='ЧАС' у тебя есть, а что насчет "Invoice Key"? Поставь брейкпойнт на строку clt+=...
и посмотри, вылетит дебаггер или нет.

UPD: Есть два предложения по поводу кода.
1. Не использовать FIND('-'), заменить на FINDSET.
2. Не "зашивать" в коде 'ЧАС', вынести в настройки и через get получать перед циклом.

С условием SIH."Invoice Key"= 'П1' переменные считаются.
Когда ставлю условие на любое поле таблици SIL, переменные не считаются.
А по каким ключам делать get, ведь это таблицы header и line?
Старый 14.03.2011, 21:16   #4  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
А вы в циклах не запутались? Где происходит поиск записей в SIL?
Явно не хватает цикла по SIL.

Цитата:
Сообщение от lobster Посмотреть сообщение
SIL.RESET;
SIL.SETRANGE(SIL."Document No.", SIH."No.");
IF SIH.FIND('-') THEN REPEAT // Может по SIL цикл должен быть?

IF SIL."Unit of Measure Code" ='ЧАС' THEN BEGIN;
IF SIH."Invoice Key"= 'П1' THEN BEGIN
clt+=SIL.Quantity;
cost+=SIL."Unit Cost (LCY)";
END;
end;
UNTIL SIH.NEXT = 0;
Старый 15.03.2011, 09:47   #5  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Цитата:
Сообщение от .Quattro. Посмотреть сообщение
А вы в циклах не запутались? Где происходит поиск записей в SIL?
Явно не хватает цикла по SIL.

Цитата:
Сообщение от lobster Посмотреть сообщение
SIL.RESET;
SIL.SETRANGE(SIL."Document No.", SIH."No.");
IF SIH.FIND('-') THEN REPEAT // Может по SIL цикл должен быть?

IF SIL."Unit of Measure Code" ='ЧАС' THEN BEGIN;
IF SIH."Invoice Key"= 'П1' THEN BEGIN
clt+=SIL.Quantity;
cost+=SIL."Unit Cost (LCY)";
END;
end;
UNTIL SIH.NEXT = 0;
Спасибо, теперь понял где ошибся.
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:51.