Community

Нормализация суммы (в т.ч. с лидирующим минусом)

Данный скрипт приводит суммы к единому виду NNN.NN независимо от того, как сумма пишется на документах.


Dim intResult, fract, vMinus, vFieldName

vFieldName = "IncomeSum"
vFieldVal = me.Field(vFieldName).Text

if Mid(vFieldVal, 1, 1) = "-" then
vMinus = "-"
' ищем десятичный разделитель, начиная с конца строки
for i = Len(vFieldVal) to 2 Step - 1
if instr( 1, ".,-=", Mid( vFieldVal, i , 1 ) ) <> 0 then
Exit for
End if
next

if i = 1 then
' десятичный разделитель не найден
fract = ""
intResult = vFieldVal

else
'Right Function (Visual Basic)
' Returns a string containing a specified number of characters from the right side of a string.

fract = "." & Right (vFieldVal, Len(vFieldVal) - i)
intResult = Left (vFieldVal, i)
end if

else
vMinus = ""
' ищем десятичный разделитель
for i = Len(vFieldVal) to 1 Step -1
if instr( 1, ".,-=", Mid( vFieldVal, i , 1 ) ) <> 0 then
Exit for
End if
next

if i = 0 then
' десятичный разделитель не найден
fract = ""
intResult = vFieldVal

else
fract = "." & Right (vFieldVal, Len(vFieldVal) - i)
intResult = Left (vFieldVal, i)
end if
end if

' очищаем целую часть суммы от разделителей тысяч
intResult = Replace (intResult, ".", "")
intResult = Replace (intResult, ",", "")
intResult = Replace (intResult, "'", "")
intResult = Replace (intResult, "-", "")
intResult = Replace (intResult, "=", "")

me.Field(vFieldName).Text = vMinus & intResult & Mid(fract, 1, 3)

0

Comments

0 comments

Please sign in to leave a comment.