lumca написал(а):
Доброе утро, Paul_80, спасибо за ответ.
В нашей системе, к сожалению, формуляра J_3R_INV1_CONTEXT нет (
Code:
data.#variables[0].speller - (JavaScript, client)
var _Digits = new Array( "НОЛЬ", "ОДИН", "ДВА", "ТРИ", "ЧЕТЫРЕ", "ПЯТЬ", "ШЕСТЬ", "СЕМЬ", "ВОСЕМЬ", "ДЕВЯТЬ" );
var _HigherDigits = new Array( "НОЛЬ", "ОДНА", "ДВЕ", "ТРИ", "ЧЕТЫРЕ", "ПЯТЬ", "ШЕСТЬ", "СЕМЬ", "ВОСЕМЬ", "ДЕВЯТЬ" ); // in case of thousands the 1 and the 2
// at the following numbers is different: 1,2,21,22,31,32,41,42,51,52,61,62,71,72
var _FromTenToTwenty = new Array( "ДЕСЯТЬ", "ОДИННАДЦАТЬ", "ДВЕНАДЦАТЬ", "ТРИНАДЦАТЬ", "ЧЕТЫРНАДЦАТЬ", "ПЯТНАДЦАТЬ", "ШЕСТНАДЦАТЬ", "СЕМНАДЦАТЬ", "ВОСЕМНАДЦАТЬ", "ДЕВЯТНАДЦАТЬ" );
var _Tens = new Array( "-", "ДЕСЯТЬ", "ДВАДЦАТЬ", "ТРИДЦАТЬ", "СОРОК", "ПЯТЬДЕСЯТ", "ШЕСТЬДЕСЯТ", "СЕМЬДЕСЯТ", "ВОСЕМЬДЕСЯТ", "ДЕВЯНОСТО" );
var _Hundreds = new Array( "-", "СТО", "ДВЕСТИ", "ТРИСТА", "ЧЕТЫРЕСТА", "ПЯТЬСОТ", "ШЕСТЬСОТ", "СЕМЬСОТ", "ВОСЕМЬСОТ", "ДЕВЯТЬСОТ", "ТЫСЯЧА" );
var _Thousands = new Array("ТЫСЯЧА", "ТЫСЯЧИ", "ТЫСЯЧ"); // thousands ending with 1:_Thousands[0], with 2-4: _Thousands[1], with 0, 5-9 and 10-19: _Thousands[2]
var _Millions = new Array("МИЛЛИОН", "МИЛЛИОНА", "МИЛЛИОНОВ"); // millions ending with 1:_Millios[0], with 2-4: _Millios[1], with 0, 5-9 and 10-19: _Millios[2]
var _Billions = new Array("МИЛЛИАРД", "МИЛЛИАРДА", "МИЛЛИАРДОВ"); // billions ending with 1:_Billions[0], with 2-4: _Billions[1], with 0, 5-9 and 10-19: _Billions[2]
var _Trillions = new Array("ТРИЛЛИОН", "ТРИЛЛИОНА", "ТРИЛЛИОНОВ"); // trillions ending with 1:_Trillions[0], with 2-4: _Trillions[1], with 0, 5-9 and 10-19: _Trillions[2]
// Remove the trailing space from a string, if any
function removeLastSpace( str )
{
var result = new String();
result = str.toString();
if( result.charAt(result.length - 1) - 1 )
result = result.substr(0, result.length - 1);
return result;
}
// Function to determine which word to take from Thousands, millions, Billions and Trillions
function determineConjugation( number )
{
var chunk_digit = number % 10;
var chunk_ten = parseInt((number % 100) / 10);
if(chunk_ten == 1){
// number ends with a number between 10 and 19
return 2;
}
else{
if(chunk_digit == 1){
// number ends with 1
return 0;
}
else if(chunk_digit >= 2 && chunk_digit <= 4){
// number ends with 2, 3, or 4
return 1;
}
else if(chunk_digit >= 5 && chunk_digit <= 9){
// number ends with 5, 6, 7, 8 or 9
return 2;
}
else if(chunk_digit == 0){
return 2;
}
}
}
// Function that spells a number into words
function spellWordsOf( amount, checkEnding)
{
amount = parseInt(amount);
if (isNaN(amount)) return "";
checkEnding = parseInt(checkEnding);
if (isNaN(checkEnding)) checkEnding = 0;
var different = 0;
var sb = new String();
var amountString = new String();
amountString = "" + amount;
var amount_Digits = new Array();
var amountDigitValues = new Array();
for(var i = 0; i < amountString.length; i++ ) {
amount_Digits[i] = amountString.charAt(i);
amountDigitValues[i] = 0;
}
// If only a single digit, go back quickly
if (amount < 10 && amount > -10)
{
if(amount < 0)
{
sb += "Minus ";
amount = -amount;
}
if(checkEnding == 1){ // && different == 1
sb += ( _HigherDigits[amount] );
}
else{
sb += ( _Digits[amount] ); // Append prefix
}
//sb += (_Digits[amount]);
return sb;
}
// Loop through _Digits from most to least significant
for(var i = 0; i < amount_Digits.length; i++)
{
if( amount_Digits[i] != '-' ) amountDigitValues[i] = parseInt(amount_Digits[i]);
var offset = amount_Digits.length - i - 1;
// If Negative sign
if( amount_Digits[i] == '-' )
sb += ("Minus ");
else if(checkEnding == 1 && amount_Digits.length >= 2 && i == (amount_Digits.length - 2) && amountDigitValues[i] == 0 ){
// if at decimal point for the 10 thousand the value is 0, the 1 and 2 at the decimal point for the thousands is different in certain cases
different = 1;
}
else if(amountDigitValues[i] > 0)
{
// For Trillios, Billions, Millions and Thousands.
if(offset > 2)
{
var nextOffset = offset - (offset % 3);
var chunk = amountString.substring(i, amount_Digits.length - nextOffset);
i = amount_Digits.length - nextOffset - 1;
var digitOffset = parseInt((offset / 3));
if(offset >= 3 && offset <= 5){
// in case of thousands the ending of 1 and 2 is different in certain cases
sb += ( spellWordsOf( chunk, 1 ) );
}
else{
sb += ( spellWordsOf( chunk, 0 ) );
}
sb += (" ");
switch(digitOffset){
case 0:
// hundreds
sb += _Hundreds[determineConjugation(parseInt(chunk))];
break;
case 1:
// thousands
sb += _Thousands[determineConjugation(parseInt(chunk))];
break;
case 2:
// millons
sb += _Millions[determineConjugation(parseInt(chunk))];
break;
case 3:
// billions
sb += _Billions[determineConjugation(parseInt(chunk))];
break;
case 4:
// trillions
sb += _Trillions[determineConjugation(parseInt(chunk))];
break;
}
sb += (" ");
}
else if(offset == 2) // hundreds
{
sb += _Hundreds[amountDigitValues[i]];
sb += (" ");
}
else if(offset == 1) // Tens
{
if(amountDigitValues[i] == 1) // From ten to twenty
{
amountDigitValues[i + 1] = parseInt(amount_Digits[i + 1]);
sb += ( _FromTenToTwenty[ amountDigitValues[i + 1] ] );
sb += (" ");
i++;
}
else
{
if(checkEnding == 1){
switch (amountDigitValues[i]){
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
different = 1;
break;
case 1:
different = 0;
break;
}
}
sb += ( _Tens[ amountDigitValues[i] ] ); // Append prefix
sb += (" ");
}
}
else if(offset == 0) // Solo Digits
{
if(checkEnding == 1 && different == 1){
sb += ( _HigherDigits[ amountDigitValues[i] ] );
}
else{
sb += ( _Digits[ amountDigitValues[i] ] ); // Append prefix
}
sb += (" ");
}
} // end else digit not 0
} // end for loop on Digits
return removeLastSpace(sb);
}
lumca написал(а):
В своем формуляре создала узел Variables, создала объект типа Script Object. Не могу найти каким образом вставить в этот объект код.
Выберите объект, в меню Palettes выберите Script Editor, увидите область ввода, выберите в опции Language язык JavaScript
lumca написал(а):
И еще не понимаю, как привязать этот узел Variables к моему полю, где должен отображаться этот текст.
там же в области ввода кода, надо ввести наподобие:
Code:
this.rawValue = speller.spellWordsOf(total_amount, 0);