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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2013, 16:22   #1  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Уважаемые форумчане, помогите.
Выгружаю в цыкле строки, делаю условие 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  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Если в фильтре 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 выбирать
... перебор записей.....
Хотя вообще странно что FINDSET что-то нашел....
З.Ы. а проверяете вы "Original Amount", но выгружаете Amount - тоже странно />
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 23.10.2013, 16:36   #3  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от zuzka Посмотреть сообщение
фильтр VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE) работает корректно? попробуйте отфильтровать прямо в классике таблицу по такому фильтру.
фильтр корректно работает, строки выводит именно за период, но проблема именно в условии, если сумма<0
оно лупит все в одну строку,и лупит только ноли))

Проверяю, "Original Ammount", выгружаю тоже, это ошибка была)
Старый 23.10.2013, 16:48   #4  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
Цитата:
Сообщение от zuzka Посмотреть сообщение
фильтр VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE) работает корректно? попробуйте отфильтровать прямо в классике таблицу по такому фильтру.
фильтр корректно работает, строки выводит именно за период, но проблема именно в условии, если сумма<0
оно лупит все в одну строку,и лупит только ноли))
проверьте еще раз что вы выгружаете... Amount или нужен "Original Amount"?
На счет что все в одну строку - после фильтров, перед FINDSET, допишите
MESSAGE(FORMAT(VendorLEDENTRY.COUNT)) - и увидите сколько записей нашлось, ну и MESSAGE(FORMAT(i)) внутри цикла - тоже ради интереса.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 23.10.2013, 16:50   #5  
Eugeny_F is offline
Eugeny_F
Участник
 
368 / 28 (1) +++
Регистрация: 18.11.2003
Адрес: Москва
Если мне не изменяет память, "Original Amount" в Vendor Ledger Entry это FlowField. Добавьте после REPEAT CALCFIELDS("Original Amount"), и будет Вам счастье.
Старый 23.10.2013, 16:51   #6  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от zuzka Посмотреть сообщение
Цитата:
Сообщение от Fierce Посмотреть сообщение
Цитата:
Сообщение от zuzka Посмотреть сообщение
фильтр VendorLEDENTRY.SETFILTER("Posting Date",'<=%1&>=%2',OnDate,DateAE) работает корректно? попробуйте отфильтровать прямо в классике таблицу по такому фильтру.
фильтр корректно работает, строки выводит именно за период, но проблема именно в условии, если сумма<0
оно лупит все в одну строку,и лупит только ноли))
проверьте еще раз что вы выгружаете... Amount или нужен "Original Amount"?
выгружаю "Original Amount", но проблема одна и та же.
calcfields сделал, не помогло,.
Старый 23.10.2013, 16:53   #7  
Captain is offline
Captain
Участник
Лучший по профессии 2017
 
300 / 81 (3) ++++
Регистрация: 28.02.2003
Цитата:
Сообщение от 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;
Поле Amount имеет тип FlowField.Перед проверкой условия сделайте вызов
Код:
VendorLEDENTRY.CALCFIELDS(Amount);
__________________
---------------------------------------------------------------------------------------------
"Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица
Старый 23.10.2013, 16:53   #8  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Eugeny_F Посмотреть сообщение
Если мне не изменяет память, "Original Amount" в Vendor Ledger Entry это FlowField. Добавьте после REPEAT CALCFIELDS("Original Amount"), и будет Вам счастье.
точно подмечено, сам часто спотыкаюсь)) но уже привык смотреть в свойство поля если такое происходит.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 23.10.2013, 16:55   #9  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
добавил калкфилдс еще, до советов, но не помогло.
количество строк выгружает правильное.
но вот сумма, всегда грузит "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  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от 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;
делаем i строкой и увеличивем счетчик через INCSTR (или code - тип).
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 23.10.2013, 17:02   #11  
Eugeny_F is offline
Eugeny_F
Участник
 
368 / 28 (1) +++
Регистрация: 18.11.2003
Адрес: Москва
CALCFIELDS надо делать уже после того как встали на нужную запись, а не перед FINDSET
Старый 23.10.2013, 17:04   #12  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
надо было прост калкфилдс в цикл добавиь
Старый 01.11.2013, 23:32   #13  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Если NAV2013 то для скорости можно прописать SETAUTOCALCFIELDS на требуемое поле перед FINDSET'ом, тогда не нужно выполнять CALCFIELDS в цикле для каждой записи.
 

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

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

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

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

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