14.03.2011, 17:02 | #1 |
Участник
|
Требуется подсчитать значения количество в таблице 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 |
Участник
|
Ок, может быть строки с "Unit of Measure Code" ='ЧАС' у тебя есть, а что насчет "Invoice Key"? Поставь брейкпойнт на строку clt+=...
и посмотри, вылетит дебаггер или нет. UPD: Есть два предложения по поводу кода. 1. Не использовать FIND('-'), заменить на FINDSET. 2. Не "зашивать" в коде 'ЧАС', вынести в настройки и через get получать перед циклом. |
|
14.03.2011, 17:48 | #3 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
А вы в циклах не запутались? Где происходит поиск записей в 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 |
Участник
|
Цитата:
Сообщение от .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; |
|