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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.06.2011, 16:02   #1  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Ребята, объясните, пожалуйста, как такое может быть?
Имеем таблицу 37. В ней 2 поля: "Unit Price" и "Brutto/Netto Price". Оба - decimal
Смотрим на табл. часть ордера.
Старый 29.06.2011, 16:32   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
А свойства этих полей различаются? Пробовали анализировать?
А что это локализация? Какая версия?
Старый 29.06.2011, 16:40   #3  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Ну, а что там со свойством DecimalPlaces? Может оно просто маловато?
Старый 29.06.2011, 16:47   #4  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Попробовал в тестовом кодюните присвоить обычному decimal-полю присвоить значение с четырьмя знаками после запятой.
В таблице отображается с двумя, а в зуме с четырьмя. При это руками в этом поле занести более двух знаков после запятой я внести не могу.
Вот такая котовасия
Старый 29.06.2011, 17:33   #5  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
А свойства этих полей различаются? Пробовали анализировать?
А что это локализация? Какая версия?
Различаются, но это как-то пока помогает мало.
У Unit Price: AutoFormatType = 2, AutoFormatExpr = Currency Code
У Brutto/netto: 0 и <>
DecimalPlaces у обоих <Undefined>

В табличной форме, которая открывается при просмотре ордера эти Properties соответственно: 0, <>, 2:2

Версия Нава: 5.0 SP 1
В конторе, где я работаю, очень много чего в программе доделано/переделано (слишком уж специфики у них своей много)
Старый 29.06.2011, 17:36   #6  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Цитата:
Сообщение от Fly Посмотреть сообщение
А свойства этих полей различаются? Пробовали анализировать?
А что это локализация? Какая версия?
Различаются, но это как-то пока помогает мало.
У Unit Price: AutoFormatType = 2, AutoFormatExpr = Currency Code
У Brutto/netto: 0 и <>
DecimalPlaces у обоих <Undefined>

В табличной форме, которая открывается при просмотре ордера эти Properties соответственно: 0, <>, 2:2

Версия Нава: 5.0 SP 1
В конторе, где я работаю, очень много чего в программе доделано/переделано (слишком уж специфики у них своей много)
Понятно. А brutto/netto price где-то в системе рассчитывается или только вносится руками? Если рассчитывается, то округляется?
Старый 29.06.2011, 18:00   #7  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Цитата:
Сообщение от Fly Посмотреть сообщение
А свойства этих полей различаются? Пробовали анализировать?
А что это локализация? Какая версия?
Различаются, но это как-то пока помогает мало.
У Unit Price: AutoFormatType = 2, AutoFormatExpr = Currency Code
У Brutto/netto: 0 и <>
DecimalPlaces у обоих <Undefined>

В табличной форме, которая открывается при просмотре ордера эти Properties соответственно: 0, <>, 2:2

Версия Нава: 5.0 SP 1
В конторе, где я работаю, очень много чего в программе доделано/переделано (слишком уж специфики у них своей много)
Поставьте 4:4
Старый 29.06.2011, 18:01   #8  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
Понятно. А brutto/netto price где-то в системе рассчитывается или только вносится руками? Если рассчитывается, то округляется?
Brutto/netto считается довольно просто:

Код:
T37_BruttoNettoBerechnung(VAR prc_T37 : Record "Sales Line")
WITH prc_T37 DO BEGIN

  IF lrc_SalesHeader.GET("Document Type","Document No.") THEN BEGIN
    IF lrc_SalesHeader."Prices Including VAT" THEN BEGIN
      "Brutto/Netto-Preis" := "Unit Price" / (1 + "VAT %" / 100);
    END ELSE BEGIN
      "Brutto/Netto-Preis" := "Unit Price" * (1 + "VAT %" / 100);
    END;
  END;

END;
Старый 29.06.2011, 18:08   #9  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Fordewind Посмотреть сообщение
Поставьте 4:4
Забыла еще один момент: если в шапке документа валюта не выбрана, тогда показывает всё красиво (с двумя знаками после запятой). Когда выбираем, к примеру, USD, тогда Unit Price становится многозначным, а Брутто/нетто не меняется (в смысле значности).
Причем при выводе на печать, Unit Price выводится тоже с 4 знаками.
Шеф хочет, чтобы всегда было одинаково (не зависимо от выбора/не выбора валюты)

Где еще есть разница, которая может влиять (но только на Unit Price): table 98 (General Ledger Setup) и Table 4 (Currency). В этих таблицах по-разному задана значность рассчитываемых сумм.
Старый 29.06.2011, 23:01   #10  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
хм... все прочел
если вопрос "почему?", то понятно: брутанетту рассчитывает до четырех знаков, а показывает до двух.
может, надо как-то по-другому сформулировать вопрос?
напрмер:
как сделать, чтобы везде до четырех?
как сделать, чтобы везде до двух?
Старый 30.06.2011, 09:04   #11  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Если зависит от валюты, то логично проверить поля Amount Decimal Places, Unit-Amount Decimal Places, Amount Rounding Precision, Unit-Amount Rounding Precision в настройке валюты.
Старый 30.06.2011, 10:49   #12  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Думается надо сделать все-таки так.
Функция GetSalesHeader вернет валюту с нужным округлением в поле Currency."Unit-Amount Rounding Precision".
Ну и далее рассчитывать нашу величину с округлением.


Код:
T37_BruttoNettoBerechnung(VAR prc_T37 : Record "Sales Line")
WITH prc_T37 DO BEGIN 

IF lrc_SalesHeader.GET("Document Type","Document No.") THEN BEGIN  
  GetSalesHeader; 
  IF lrc_SalesHeader."Prices Including VAT" THEN BEGIN     
    "Brutto/Netto-Preis" := ROUND("Unit Price" / (1 + "VAT %" / 100), Currency."Unit-Amount Rounding Precision");  
  END 
  ELSE BEGIN     
   "Brutto/Netto-Preis" := ROUND("Unit Price" * (1 + "VAT %" / 100), Currency."Unit-Amount Rounding Precision");  
  END;  
END;

END;
 


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

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

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