23.10.2013, 16:22 | #1 |
Участник
|
Уважаемые форумчане, помогите.
Выгружаю в цыкле строки, делаю условие if then else, Для выгрузки сумм с + в поле б, с суммой -, в поле г, но оно почему-то выгружает лишь ноли, и все время в одну строку, хотя в строках суммы и с плюсом и минусом ???WTF?? Код: i:=18; VendorLEDENTRY.RESET; VendorLEDENTRY.SETRANGE(VendorLEDENTRY."Vendor No.",VendorCode); VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE); IF VendorLEDENTRY.FINDSET THEN REPEAT ExcelMgt.FillCell('B'+FORMAT(i),FORMAT(VendorLEDENTRY."Posting Date")); ExcelMgt.FillCell('C'+FORMAT(i),FORMAT(VendorLEDENTRY.Description)); IF VendorLEDENTRY."Original Amount"<0 THEN ExcelMgt.FillCell('F'+FORMAT(i),FORMAT(VendorLEDENTRY.Amount)) ELSE ExcelMgt.FillCell('G'+FORMAT(i),FORMAT(VendorLEDENTRY.Amount)); i+=1; UNTIL VendorLEDENTRY.NEXT=0; |
|
23.10.2013, 16:34 | #2 |
Участник
|
Если в фильтре VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE); OnDate < DateAE - он выбирает 0 записей (попробуйте отфильтровать прямо в классике таблицу по такому фильтру).
В Вашем случае придется перебирать отдельно 2 раза, что-то в таком роде: Код: VendorLEDENTRY.SETRANGE("Posting Date",0D,OnDate); ... перебор записей..... VendorLEDENTRY.SETRANGE("Posting Date",DateAE,WORKDATE); //за последнюю дату принимается рабочая, либо по TODAY выбирать ... перебор записей..... З.Ы. а проверяете вы "Original Amount", но выгружаете Amount - тоже странно />
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.10.2013, 16:36 | #3 |
Участник
|
Цитата:
оно лупит все в одну строку,и лупит только ноли)) Проверяю, "Original Ammount", выгружаю тоже, это ошибка была) |
|
23.10.2013, 16:48 | #4 |
Участник
|
Цитата:
На счет что все в одну строку - после фильтров, перед FINDSET, допишите MESSAGE(FORMAT(VendorLEDENTRY.COUNT)) - и увидите сколько записей нашлось, ну и MESSAGE(FORMAT(i)) внутри цикла - тоже ради интереса.
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.10.2013, 16:50 | #5 |
Участник
|
Если мне не изменяет память, "Original Amount" в Vendor Ledger Entry это FlowField. Добавьте после REPEAT CALCFIELDS("Original Amount"), и будет Вам счастье.
|
|
23.10.2013, 16:51 | #6 |
Участник
|
Цитата:
calcfields сделал, не помогло,. |
|
23.10.2013, 16:53 | #7 |
Участник
|
Цитата:
Сообщение от Fierce
Уважаемые форумчане, помогите.
Выгружаю в цыкле строки, делаю условие if then else, Для выгрузки сумм с + в поле б, с суммой -, в поле г, но оно почему-то выгружает лишь ноли, и все время в одну строку, хотя в строках суммы и с плюсом и минусом ???WTF?? Код: i:=18; VendorLEDENTRY.RESET; VendorLEDENTRY.SETRANGE(VendorLEDENTRY."Vendor No.",VendorCode); VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE); IF VendorLEDENTRY.FINDSET THEN REPEAT ExcelMgt.FillCell('B'+FORMAT(i),FORMAT(VendorLEDENTRY."Posting Date")); ExcelMgt.FillCell('C'+FORMAT(i),FORMAT(VendorLEDENTRY.Description)); IF VendorLEDENTRY."Original Amount"<0 THEN ExcelMgt.FillCell('F'+FORMAT(i),FORMAT(VendorLEDENTRY.Amount)) ELSE ExcelMgt.FillCell('G'+FORMAT(i),FORMAT(VendorLEDENTRY.Amount)); i+=1; UNTIL VendorLEDENTRY.NEXT=0; Код: VendorLEDENTRY.CALCFIELDS(Amount);
__________________
--------------------------------------------------------------------------------------------- "Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица |
|
23.10.2013, 16:53 | #8 |
Участник
|
точно подмечено, сам часто спотыкаюсь)) но уже привык смотреть в свойство поля если такое происходит.
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.10.2013, 16:55 | #9 |
Участник
|
добавил калкфилдс еще, до советов, но не помогло.
количество строк выгружает правильное. но вот сумма, всегда грузит "0" и лишь в одну из строк, в строку F, либо G столько же раз, сколько и строк. Код: i:=18; VendorLEDENTRY.RESET; VendorLEDENTRY.SETRANGE(VendorLEDENTRY."Vendor No.",VendorCode); VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE); VendorLEDENTRY.CALCFIELDS("Original Amount"); IF VendorLEDENTRY.FINDSET THEN REPEAT ExcelMgt.FillCell('B'+FORMAT(i),FORMAT(VendorLEDENTRY."Posting Date")); ExcelMgt.FillCell('C'+FORMAT(i),FORMAT(VendorLEDENTRY.Description)); IF VendorLEDENTRY."Original Amount"<0 THEN ExcelMgt.FillCell('F'+FORMAT(i),FORMAT(VendorLEDENTRY."Original Amount")) ELSE ExcelMgt.FillCell('G'+FORMAT(i),FORMAT(VendorLEDENTRY."Original Amount")); i+=1; UNTIL VendorLEDENTRY.NEXT=0; END; |
|
23.10.2013, 16:58 | #10 |
Участник
|
Цитата:
Сообщение от Fierce
добавил калкфилдс еще, до советов, но не помогло.
количество строк выгружает правильное. но вот сумма, всегда грузит "0" и лишь в одну из строк, в строку F, либо G столько же раз, сколько и строк. Код: i:=18; VendorLEDENTRY.RESET; VendorLEDENTRY.SETRANGE(VendorLEDENTRY."Vendor No.",VendorCode); VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE); VendorLEDENTRY.CALCFIELDS("Original Amount"); IF VendorLEDENTRY.FINDSET THEN REPEAT ExcelMgt.FillCell('B'+FORMAT(i),FORMAT(VendorLEDENTRY."Posting Date")); ExcelMgt.FillCell('C'+FORMAT(i),FORMAT(VendorLEDENTRY.Description)); IF VendorLEDENTRY.Amount<0 THEN ExcelMgt.FillCell('F'+FORMAT(i),FORMAT(VendorLEDENTRY."Original Amount")) ELSE ExcelMgt.FillCell('G'+FORMAT(i),FORMAT(VendorLEDENTRY."Original Amount")); i+=1; UNTIL VendorLEDENTRY.NEXT=0; END;
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
23.10.2013, 17:02 | #11 |
Участник
|
CALCFIELDS надо делать уже после того как встали на нужную запись, а не перед FINDSET
|
|
23.10.2013, 17:04 | #12 |
Участник
|
надо было прост калкфилдс в цикл добавиь
|
|
01.11.2013, 23:32 | #13 |
Участник
|
Если NAV2013 то для скорости можно прописать SETAUTOCALCFIELDS на требуемое поле перед FINDSET'ом, тогда не нужно выполнять CALCFIELDS в цикле для каждой записи.
|
|