Booster Опубликовано 5 ноября, 2013 Жалоба Поделиться Опубликовано 5 ноября, 2013 На досуге решил сделать печать накладной со страницы заказа, в принципе все сделал, но есть пару вопросов.Хочу сделать конвертацию числовой суммы, в сумму прописью. Тоесть должна быть сумма числовая и прописная. Реализовать можно? Еще нужен № п/п для товаров в накладной.. как его сделать?1.2.3. и т.д. Помогите советами! Цитата Ссылка на сообщение Поделиться на другие сайты
VladP Опубликовано 5 ноября, 2013 Жалоба Поделиться Опубликовано 5 ноября, 2013 сумма прописью: function num2str($num) { $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($num))); $out = array(); if (intval($rub)>0) { foreach(str_split($rub,3) as $uk=>$v) { if (!intval($v)) continue; $uk = sizeof($unit)-$uk-1; // unit key $gender = $unit[$uk][3]; list($i1,$i2,$i3) = array_map('intval',str_split($v,1)); $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 if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]); } } else $out[] = $nul; $out[] = morph(intval($rub), $unit[1][0],$unit[1][1]); // rub // $out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // копейки, раскоментировать если нужны return trim(preg_replace('/ {2,}/', ' ', join(' ',$out))); } /** * Склоняем словоформу */ 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; } п/п:нужно просто добавить переменную, которая в цикле вывода товара будет выводится и делать +1 себе Цитата Ссылка на сообщение Поделиться на другие сайты
ps-simpla Опубликовано 5 ноября, 2013 Жалоба Поделиться Опубликовано 5 ноября, 2013 № п/п {foreach $purchases as $purchase} <tr> <td> {$purchase@iteration} </td> .... Цитата Ссылка на сообщение Поделиться на другие сайты
Booster Опубликовано 5 ноября, 2013 Автор Жалоба Поделиться Опубликовано 5 ноября, 2013 № п/п {foreach $purchases as $purchase} <tr> <td> {$purchase@iteration} </td> .... Отлично!) То что нужно! Спасибо в репу) Цитата Ссылка на сообщение Поделиться на другие сайты
Booster Опубликовано 6 ноября, 2013 Автор Жалоба Поделиться Опубликовано 6 ноября, 2013 VladP, предоставленный вами скрипт кажется на PHP Если я правильно понимаю, то за вывод конвертированной суммы отвечает переменная $out ? Цитата Ссылка на сообщение Поделиться на другие сайты
Решение Booster Опубликовано 6 ноября, 2013 Автор Решение Жалоба Поделиться Опубликовано 6 ноября, 2013 Сделал на JS <script language="JavaScript" type="text/javascript"> var money; var price; var rub, kop; var litera = sotny = desatky = edinicy = minus = ""; var k = 0, i, j; N = ["", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто", "", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот", "тысяч", "тысяча", "тысячи", "тысячи", "тысячи", "тысяч", "тысяч", "тысяч", "тысяч", "тысяч", "миллионов","миллион","миллиона","миллиона", "миллиона", "миллионов", "миллионов", "миллионов", "миллионов", "миллионов", "миллиардов", "миллиард", "миллиарда", "миллиарда", "миллиарда", "миллиардов", "миллиардов", "миллиардов", "миллиардов", "миллиардов"]; var M = new Array(10); for (j = 0; j < 10; ++j) M[j] = new Array(N.length); for (i = 0; i < N.length; i++) for (j = 0; j < 10; j++) M[j][i] = N[k++] var R = new Array("рублей", "рубль", "рубля", "рубля", "рубля", "рублей", "рублей", "рублей", "рублей", "рублей"); var K = new Array("копеек", "копейка", "копейки", "копейки", "копейки", "копеек", "копеек", "копеек", "копеек", "копеек"); function num2str(money, target) { rub = "", kop = ""; money = money.replace(",", "."); if(isNaN(money)) {document.getElementById(target).innerHTML = "Не числовое значение"; return} if(money.substr(0, 1) == "-") {money = money.substr(1); minus = "минус "} else minus = ""; money = Math.round(money * 100) / 100 + ""; if(money.indexOf(".") != -1) { rub = money.substr(0, money.indexOf(".")); kop = money.substr(money.indexOf(".") + 1); if(kop.length == 1) kop += "0"; } else rub = money; if(rub.length > 12) {document.getElementById(target).innerHTML = "Слишком большое число"; return} ru = propis(price = rub, R); ko = propis(price = kop, K); ko != "" ? res = ru + " " + ko: res = ru; ru == "Ноль " + R[0] && ko != ""? res = ko: 0; kop == 0? res += " ноль " + K[0]: 0; document.getElementById(target).innerHTML = (minus + res).substr(0,1).toUpperCase() + (minus + res).substr(1); } function propis(price, D) { litera = ""; for(i = 0; i < price.length; i += 3) { sotny = desatky = edinicy = ""; if(n(i + 2, 2) > 10 && n(i + 2, 2) < 20) { edinicy = " " + M[n(i + 1, 1)][1] + " " + M[0][i / 3 + 3]; i == 0? edinicy += D[0]: 0; } else { edinicy = M[n(i + 1, 1)][0]; (edinicy == "один" && (i == 3 || D == K))? edinicy = "одна": 0; (edinicy == "два" && (i == 3 || D == K))? edinicy = "две" : 0; i == 0 && edinicy != ""? 0: edinicy += " " + M[n(i + 1, 1)][i / 3 + 3]; edinicy == " "? edinicy = "": (edinicy == " " + M[n(i + 1, 1)][i / 3 + 3])? 0: edinicy = " " + edinicy; i == 0? edinicy += " " + D[n(i + 1, 1)]: 0; (desatky = M[n(i + 2, 1)][2]) != ""? desatky = " " + desatky: 0; } (sotny = M[n(i + 3, 1)][3]) != ""? sotny = " " + sotny: 0; if(price.substr(price.length - i - 3, 3) == "000" && edinicy == " " + M[0][i / 3 + 3]) edinicy = ""; litera = sotny + desatky + edinicy + litera; } if(litera == " " + R[0]) return "ноль" + litera; else return litera.substr(1); } function n(start,len) { if(start > price.length) return 0; else return Number(price.substr(price.length - start, len)); } </script> Цитата Ссылка на сообщение Поделиться на другие сайты
Booster Опубликовано 6 ноября, 2013 Автор Жалоба Поделиться Опубликовано 6 ноября, 2013 Сделал.. Цитата Ссылка на сообщение Поделиться на другие сайты
Vladq Опубликовано 11 декабря, 2014 Жалоба Поделиться Опубликовано 11 декабря, 2014 Кому нибудь удалось подключить этот класс к симпле на смарти?Поделитесь кому не жаль Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.