Наш подписчик, Подкорытов Алексей:
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 | Просмотр руководства по внедрению |
ВНИМАНИЕ! Использование данной транзакции может привести систему в полностью не консистентное состояние, если вы будете делать изменения для кодов валют, которые уже использовался для проводок документов. Т.е. изменение, можно проводить только для кода валюты, который не использовался в операциях.
Рис. 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 | Предупреждение! |
Я думаю, что скорее всего, в системе для японской иены стоит ненулевое значение десятичных разрядов в этой таблице, поэтому и возникает ошибка.