Связь
Здравствуйте! Я Ваш личный надежный программист.
1С Предприятие 8.2-8.3, 1С-Битрикс: Управление сайтом, Битрикс24

Можно ли переменную записать сумму прописью?

Всем добрый день! Подскажите можно ли в бизнес процессе в Переменную записать сумму прописью? Типа number2words_rus.
 
Всем добрый день! Подскажите можно ли в бизнес процессе в Переменную записать сумму прописью? Типа number2words_rus.
 

штатными средствами?

 
Цитата
написал:
штатными средствами?
да
 
все штатные средства есть в калькуляторе БП.
этого там нет. ну а там варианты с доработками различной сложности
 

Если у Вас коробка - добавляете php скрипт в который закидываете переменную числа с типом float и на выходе будет письменная сумма

/* Пользовательские методы компонента */
   /**
    * Перевод суммы в рублях из (float) в писменное представление
    *
    * @param $sum
    * @return string
    */
   public function sumToString($sum)
   {
       {
           $nul = 'ноль';
           $ten = array(
               array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'),
               array('', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять')
           );
           $a20 = array('десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
           $tens = array(2 => 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
           $hundred = array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
           $unit = array(
               array('копейка', 'копейки', 'копеек', 1),
               array('рубль', 'рубля', 'рублей', 0),
               array('тысяча', 'тысячи', 'тысяч', 1),
               array('миллион', 'миллиона', 'миллионов', 0),
               array('миллиард', 'миллиарда', 'миллиардов', 0),
           );

           list($rub, $kop) = explode('.', sprintf("%015.2f", floatval($sum)));
           $out = array();
           if (intval($rub) > 0) {
               foreach (str_split($rub, 3) as $uk => $v) {
                   if (!intval($v)) continue;
                   $uk = sizeof($unit) - $uk - 1;
                   $gender = $unit[$uk][3];
                   list($i1, $i2, $i3) = array_map('intval', str_split($v, 1));
                   // mega-logic
                   $out[] = $hundred[$i1]; // 1xx-9xx
                   if ($i2 > 1) $out[] = $tens[$i2] . ' ' . $ten[$gender][$i3]; // 20-99
                   else $out[] = $i2 > 0 ? $a20[$i3] : $ten[$gender][$i3]; // 10-19 | 1-9
                   // units without rub & kop
                   if ($uk > 1) $out[] = self::morph($v, $unit[$uk][0], $unit[$uk][1], $unit[$uk][2]);
               }
           } else {
               $out[] = $nul;
           }
           $out[] = self::morph(intval($rub), $unit[1][0], $unit[1][1], $unit[1][2]); // rub
           $out[] = $kop . ' ' . self::morph($kop, $unit[0][0], $unit[0][1], $unit[0][2]); // kop
           return trim(preg_replace('/ {2,}/', ' ', join(' ', $out)));
       }
   }

   /**
    * Склоняем словоформу
    * @author runcore
    */
   public function morph($n, $f1, $f2, $f5)
   {
       $n = abs(intval($n)) % 100;
       if ($n > 10 && $n < 20) return $f5;
       $n = $n % 10;
       if ($n > 1 && $n < 5) return $f2;
       if ($n == 1) return $f1;
       return $f5;
   }
Читают тему
file_download Скачать Модуль Маркет
file_download Скачать Модуль Маркет