Эксперт-Клуб

Наш подписчик, Подкорытов Алексей:

1Вопрос:

В процессе работы столкнулся со следующими проблемами:

1) при вводе стоимости позиции заказа на поставку в валюте JPY, система выдает сообщение об ошибке, если количество знаков до запятой превышает 8 (т.е. сумму свыше  99.999.999 единиц валюты указать невозможно). Однако, при использовании других валют, например RUB или EUR, ошибки не возникает: 

 

Подскажите пожалуйста, как можно решить данную проблему?

Ответ

Ответ подготовлен фрилансером Олегом Точенюком.

Принципы организации разрядности  в системе

В общем виде в системе поле ввода суммы имеет максимальную разрядную сетку в 11 знаков, т.е. максимальное целое число, которое можно внести, подчеркиваю, целое число - это 99 999 999 999, (11 знаков). Ограничение в 11 знаков, можно увидеть в определении домена описывающего данные валюты, это тип CURR.

Обращаю внимание: если мы указываем, что для суммы возможно ведение дробных чисел, например копеек и задаем разрядность числа копеек - 2, то этим мы уменьшаем максимально возможное целое число, которое можно внести для валюты. По факту, после задания разрядности 2 максимальное целое число становится 999 999 999 и два знака резервируется на ввод копеек. Стандартно, по умолчанию, система предполагает, что для валюты используется два знака на копейки, т.е. когда в систему вводится код валюты система предполагает, что маска ввода, максимального числа по умолчанию следующая 999 999 999,99. Однако этим процессом можно управлять: увеличить максимально вносимое целое число в принципе невозможно (т.е. в числе допустимо не более 11 знаков), но можно указать, что число будет без копеек и, таким образом, в поле валюты можно будет внести уже сумму как 99 999 999 999,00. То есть увеличение точности суммы до копеек уменьшает максимальную разрядность числа (вводимой суммы) в поле ввода.

Настройка разрядности сумм в системе

Для настройки разрядности используется транзакция OY04 или по дереву настройки в транзакции SPRO (см. Рис.1).

Рис. 1 Просмотр руководства по внедрению

ВНИМАНИЕ! Использование данной транзакции может привести систему в полностью не консистентное состояние, если вы будете делать изменения для кодов валют, которые уже использовался для проводок документов. Т.е. изменение, можно проводить только для кода валюты, который не использовался в операциях.

 
Запускаем транзакцию настройки десятичных разрядов для валют (OY04). Система не-сколько раз попытается вас отговорить от этого действия, т.е. если вы уверены в своих дейст-вия, то не следует вносить изменений.
 
Итак, первое предупреждение (Рис.2): суть предупреждения заключа-ется в том, что данные изменения повлекут изменения для всей системы, т.е. коды валют межмандантные данные и их нельзя настроить или изменить для какой-то одной БЕ, измене-ния произойдут во всех мандантах для всех БЕ.
 
Рис. 2 Предупреждение!

Далее система предупредит: валюта уже используется. Обратите внимание, при использовании валюты где-либо в системе (в любом манданте) по факту изменений все введенные документы с изменяемой валютой будет ошибочными (Рис.3).

Рис. 3 Предупреждение!

Если вас не испугали два предыдущие сообщения, то система попытается «как в сказ-ке» в третий раз отговорить вас от выполняемых действий, причем в сообщении будет дана попытка объяснить почему вам это не следует делать (Рис.4).

Рис. 4 Предупреждение!

 

Полный текст выдаваемый в этом окне следующий (ошибки в синтаксисе в тексте, на-пример  «вниматИльно», «щапрос на перенос» - результат работы переводчиков):

Перед тем как продолжить, вниматильно прочитайте этот текст.

Эта транзакция может причинить почти непоправимый ущерб Вашей системе, если Вы не примите во внимание данное указание. Поля валюты сохраняются в таблицах системы R/3 как десятичные числа с переменным десятичным числом. Десятичный знак сохранен не в поле в базе данных. Вместо этого каждое поле валюты ссылается на поле кода валюты. Этому коду валюты Вы присваиваете в этой транзакции однозначное число де-сятичных знаков.

Если Вы, например, настроили валюту USD на два десятичных разряда и выполняете проводку суммы в 100 USD, то в базе данных в поле валюты стоит

сумма 10000. Только при дальнейшей обработке или выводе этой суммы система обра-щается к коду валюты из поля ссылки и определяет через эту таблицу число десятич-ных разрядов. Таким образом возможна правильная интерпретация содержимого таблицы для дальнейшей обработки или форматирование для вывода с правильными знаками пре-пинания.

Если после удачной проводки Вы измените десятичные разряды для USD, например, на 3, то существующее содержимое поля 10000 для дальнейшей обработки или вывода бу-дет интерпретировано как 10 USD (10.000). Таким образом все содерж. таблиц во всей системе для всех полей валют с суммой в USD неправильно

интерпретируются на десятичный порядок. Для изменения числа десятичных разрядов уже использованной валюты необходимо преобразовать все таблицы системы R/3, со-держащие поля валют, чтобы сохранить целостность данных. К сожалению, по причинам организационного характера, а также времени выполнения это невозможно выполнить в продуктивной системе.

Следующие изменения в таблице TCURX могут, таким образом, привести к утрате цело-стности данных, если изменение выполняется в продуктивной системе или переносится в продуктивную систему:

  • Изменение числа десятичных разрядов существующей валюты.
  • Удаление записи из таблицы TCURX (соответствует изменению десятичных разря-дов со стандартного значения 2 десятичных разряда на другое значение), если речь идет об уже существующем коде валюты.
  • Добавление записи в TCURX (соответствует изменению стандартного значения в 2 десятичных разряда на другое значение), если речь идет об уже существую-щем коде валюты. Некритичными же являются все изменения в этой таблице во время настройки новой инсталляции или добавление записей TCURX по ходу те-кущей эксплуатации, если коды валюты были только что занесены с помощью транзакции OY03 в таблицу TCURC, т.к. таким образом пока не могла быть вы-полнена проводка для этих кодов валюты.

Как видим, фактически расписаны проблемы и варианты возможных изменений в дан-ной настроечной транзакции. Приведены примеры последствий вызванных изменениями для уже применяющихся в документах  кодов валют.

В стандарте IDES для валюты российский рубль и японская иена десятичные разряды не ведутся (Рис.5).

Рис. 5 Предупреждение!

Я думаю, что скорее всего, в системе для японской иены стоит ненулевое значение десятичных разрядов в этой таблице, поэтому и возникает ошибка.

Комментарии:

Сергей Попов (Рейтинг: 20) 16:25, 20 сентября 2011

Ну а если после всех мучений и страхов, возникших при настройке десятичных разрядов валюты все равно не хватает разрядности поля отображения, - начните использовать десятичные разряды базиса расчета цены. Базис расчета, это то значение, которое указывается в поле "За" на скринах вопроса.

Олег Точенюк (Рейтинг: 10291) 15:50, 23 сентября 2011

Что-то я не вкурил, а чем это поможет, если "цена за", целочисленное значение, при этом 1 штука стоит в примере явно больше, чем разрядная сетка валюты, соответственно "цена за" хотя бы 2 штуки будет явно больше цены за 1 штуку?! Не можете подробнее прояснить свой совет?