15 марта 2023, 15:12 Тоже хотел, во-первых, поблагодарить Георгия за форму. Но проблема в том, что я сначала потратил 3 дня, чтобы свою сварганить, а потом только ради прикола решил проверить, есть ли в инете готовая))) Да, такое тоже бывает. В итоге, что мы имеем. Я тоже решил выложить свой результат. Моя форма дополнена java-скриптом, который подсчитывает общую сумму включённых в таблицу товаров. Также несколько насыщеннее оформлена по стилям (CSS), ну, и является адаптивной (тянется как под альбомную, так и под книжную распечатку). В общем, пользуйтесь на здоровье. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Универсальный передаточный документ</title> <style> /* Общие */ /*Структура str: 1_1 | 1_2 (1_2_1, 1_2_2, 1_2_3) str: 2 str: 3_1 | 3_2 str: 4 str: 5_1 | 5_2 */ body {margin: 0px; padding: 0px} table {border-collapse: collapse;} td {border: 0px solid black} th {border: 0px solid black} .border_a, .border_a td {border: 4px solid black;} /*Бордюр вокруг*/ .border_r, .str2 td.border_r {border-right: 4px solid black;} /*Бордюр справа*/ .border_b {border-bottom: 4px solid black;} /*Бордюр снизу*/ .border_b_lite {border-bottom: 1px solid black;} .bold {font-weight: bold;} /*Жирный шрифт*/ .footnote {font-size: 70%; text-align: center; vertical-align: top;} /*Сноска -- подпись под строкой*/ .cut_string {border-right: 10px solid white;} /*Усечение подстрочных линий*/ .small_text {font-size: 70%} /*Мелкий шрифт*/ .vertical_text {writing-mode: vertical-lr;} /*Вертикальный текст*/ /* --str1_2-- Столбец правый _ Строка первая: TABLE + DIV _ НОМЕР СЧЕТА ФАКТУРЫ, ИСПРАВЛЕНИЕ. ПРИЛОЖЕНИЕ №1 */ .str1_2 {display: flex; justify-content: left;} /*Ставим у родительского блока*/ .str1_2_1 {width: 45%;} .str1_2_2 {width: 55%; line-height: 0; text-align: right;} /* Убираем строки */ /* --str1_2_3-- */ .str1_2_3 {width: 100%; margin-bottom: 5px;} /*Ставим у родительского блока*/ .str1_2 th, .str1_2_3 th {text-align: left; font-weight: normal;} .str1_2 th {white-space: pre;} /* --str2-- */ .str2 td {border: 1px solid black; text-align: center; font-size: 90%;} .str2 th {text-align: left;} /* --str3-- */ .str3 {width: 100%; margin-top: 15px;} /*Ставим у родительского блока*/ /* --str4-- */ .str4 {width: 100%;} /*Ставим у родительского блока*/ /* --str5-- Столбец 1 и 2 */ .str5 {display: flex; justify-content: left;} /*Ставим у родительского блока*/ .str5_1 {width: 50%;} .str5_2 {width: 50%;} /* Убираем строки */ /**/ </style> <script type="text/javascript"> function startsumms(){ /*summ('sum1count', 'summ1res');*/ summ('customPrices1','summPrice1'); summ('customPrices2','summPrice2'); summ('customPrices3','summPrice3'); MakePricesFormat(); /*window.print()*/; } function summ(fromClass,toId){ try{ var amount = 0; var tdArr = document.getElementsByClassName(fromClass); for(var i =0; i < tdArr.length; i++){ var res = tdArr[i].innerHTML.replace(",", "."); var getint = parseFloat(res); if(!isNaN(getint)){ amount = amount + getint; } } if(isNaN(amount)){amount=0;} document.getElementById(toId).innerHTML = amount; } catch(e){ document.getElementById(toId).innerHTML = amount.toFixed(2); } } function MakePricesFormat(){ var tdArr = document.getElementsByClassName("customPrices"); for(var i =0; i < tdArr.length; i++) { var getint = parseFloat(tdArr[i].innerHTML.replace(",", ".")); if(!isNaN(getint)) { tdArr[i].innerHTML = parseFloat(tdArr[i].innerHTML.replace(",", ".")).toFixed(2); } } var tdArr = document.getElementsByClassName("sum1count"); for (var i = 0; i < tdArr.length; i++) { var getint = parseFloat(tdArr[i].innerHTML.replace(",", ".")); if (!isNaN(getint)) { tdArr[i].innerHTML = parseFloat(tdArr[i].innerHTML.replace(",", ".")).toFixed(2); } } } function number_to_string(_number) { var _arr_numbers = new Array(); _arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'); _arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); _arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); function number_parser(_num, _desc) { var _string = ''; var _num_hundred = ''; if (_num.length == 3) { _num_hundred = _num.substr(0, 1); _num = _num.substr(1, 3); _string = _arr_numbers[3][_num_hundred] + ' '; } if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' '; else { var _first_num = _num.substr(0, 1); var _second_num = _num.substr(1, 2); _string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' '; } switch (_desc){ case 0: var _last_num = parseFloat(_num.substr(-1)); if (_last_num == 1) _string += 'рубль'; else if (_last_num > 1 && _last_num < 5) _string += 'рублей'; else _string += 'рублей'; break; case 1: var _last_num = parseFloat(_num.substr(-1)); if (_last_num == 1) _string += 'тысяча '; else if (_last_num > 1 && _last_num < 5) _string += 'тысяч '; else _string += 'тысяч '; _string = _string.replace('один ', 'одна '); _string = _string.replace('два ', 'две '); break; case 2: var _last_num = parseFloat(_num.substr(-1)); if (_last_num == 1) _string += 'миллион '; else if (_last_num > 1 && _last_num < 5) _string += 'миллиона '; else _string += 'миллионов '; break; case 3: var _last_num = parseFloat(_num.substr(-1)); if (_last_num == 1) _string += 'миллиард '; else if (_last_num > 1 && _last_num < 5) _string += 'миллиарда '; else _string += 'миллиардов '; break; } _string = _string.replace(' ', ' '); return _string; } function decimals_parser(_num) { var _first_num = _num.substr(0, 1); var _second_num = parseFloat(_num.substr(1, 2)); var _string = ' ' + _first_num + _second_num; if (_second_num == 1) _string += ' копейка'; else if (_second_num > 1 && _second_num < 5) _string += ' копеек'; else _string += ' копеек'; return _string; } if (!_number || _number == 0) return '' if (typeof _number !== 'number') { _number = _number.replace(',', '.'); _number = parseFloat(_number); if (isNaN(_number)) return '' } _number = _number.toFixed(2); if(_number.indexOf('.') != -1) { var _number_arr = _number.split('.'); var _number = _number_arr[0]; var _number_decimals = _number_arr[1]; } var _number_length = _number.length; var _string = ''; var _num_parser = ''; var _count = 0; for (var _p = (_number_length - 1); _p >= 0; _p--) { var _num_digit = _number.substr(_p, 1); _num_parser = _num_digit + _num_parser; if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) { _string = number_parser(_num_parser, _count) + _string; _num_parser = ''; _count++; } } if (_number_decimals) _string += decimals_parser(_number_decimals); return _string; } </script> <script language="javascript"> window.onload = function(){ startsumms(); }; </script> </head> <body onload="startsumms();"> <table> <tr> <td colspan="2" class="border_r" style="width: 8%;"> <p style="margin-right: 5px;">Универсальный передаточный документ</p> <p>Статус: <span style="border: 3px solid black; padding: 0px 5px;">1</span></p> <p class="small_text">1 — счет-фактура и передаточный документ (акт)</p> <p class="small_text">2 — передаточный документ (акт)</p> </td> <td colspan="14"> <div class="str1_2"> <table class="str1_2_1"> <tr> <th style="width: 16%;">Счет-фактура №</th> <td style="width: 18%;" class="border_b_lite cut_string"></td> <td style="width: 4%;">от</td> <td style="width: 22%;" class="border_b_lite"></td> <td style="width: 30px">(1)</td> </tr> <tr> <th>Исправление №</th> <td class="border_b_lite cut_string"></td> <td>от</td> <td class="border_b_lite"></td> <td>(1а)</td> </tr> </table> <div class="str1_2_2"> <p class="small_text">Приложение №1</p> <p class="small_text">к постановлению Правительства Российской Федерации от 26 декабря 2011 г. N 1137</p> <p class="small_text">(в ред. постановления Правительства РФ от 19 августа 2017 № 981)</p> </div> </div> <table class="str1_2_3"> <tr> <!-- 1 --> <td style="width: 15%" class="bold">Продавец</td> <td colspan="6" class="border_b_lite">123</td> <td style="width: 30px">(2)</td> </tr> <!-- 2 --> <tr> <th>Адрес</th> <td colspan="6" class="border_b_lite">123</td> <td>(2а)</td> </tr> <tr> <!-- 3 --> <th>ИНН/КПП продавца</th> <td colspan="6" class="border_b_lite">123</td> <td>(2б)</td> </tr> <!-- 4 --> <tr> <td>Грузоотправитель и его адрес</td> <td colspan="6" class="border_b_lite">123</td> <td>(3)</td> </tr> <tr> <!-- 5 --> <td>Грузополучатель и его адрес</td> <td colspan="6" class="border_b">123</td> <td>(4)</td> </tr> <tr> <!-- 6 --> <td>К платежно-расчетному документу</td> <td style="width: 5%">№</td> <td style="width: 5%" class="border_b"></td> <td style="width: 5%">от</td> <td colspan="3" class="border_b"></td> <td>(5)</td> </tr> <tr> <!-- 7 --> <td>Документ об отгрузке</td> <td>№ п/п</td> <td class="border_b_lite"></td> <td>№</td> <td style="width: 5%" class="border_b_lite"></td> <td style="width: 5%">от</td> <td class="border_b_lite"></td> <td>(5а)</td> </tr> <tr> <!-- 8 --> <td class="bold">Покупатель</td> <td colspan="6" class="border_b_lite">123</td> <td>(6)</td> </tr> <tr> <!-- 9 --> <td>Адрес</td> <td colspan="6" class="border_b_lite">123</td> <td>(6а)</td> </tr> <tr> <!-- 10 --> <td>ИНН/КПП покупателя</td> <td colspan="6" class="border_b_lite">123</td> <td>(6б)</td> </tr> <tr> <!-- 11 --> <td>Валюта: наименование, код</td> <td colspan="6" class="border_b_lite">Российский рубль, 643</td> <td>(7)</td> </tr> <tr> <!-- 12 --> <td colspan="5">Идентификатор государственного контракта, договора (соглашения) (при наличии)</td> <td colspan="2" class="border_b_lite"></td> <td>(8)</td> </tr> </table> </td> </tr> <!--table class="str2"--> <tr class="border_a str2"> <!-- 1 --> <td rowspan="2" style="width: 3%">№<br />п/п</td> <td rowspan="2" class="border_r" style="width: 5%">Код товара/ работ, услуг</td> <td rowspan="2">Наименование товара (описание выполненных работ, оказанных услуг), имущественного права</td> <td rowspan="2">Код вида товара</td> <td colspan="2">Единица измерения</td> <td rowspan="2" style="height: 150px;" class="vertical_text">Количество (объем)</td> <td rowspan="2">Цена (тариф) за единицу измерения</td> <td rowspan="2" style="height: 150px;" class="vertical_text">Стоимость товаров (работ, услуг), имущественных прав без налога – всего </td> <td rowspan="2">В том числе сумма акциза</td> <td rowspan="2">Налоговая ставка</td> <td rowspan="2" style="height: 150px;" class="vertical_text">Сумма налога, предъявляемая покупателю</td> <td rowspan="2" style="height: 150px;" class="vertical_text">Стоимость товаров (работ, услуг), имущественных прав с налогом – всего</td> <td colspan="2">Страна происхождения товара</td> <td rowspan="2" style="height: 150px;" class="vertical_text">Регистрационный номер таможенной декларации</td> </tr> <tr class="border_a str2"> <!-- 2 --> <td>Код</td> <td>Условное обозначение (национальное)</td> <td>Цифровой код</td> <td>Краткое наименование</td> </tr> <tr class="str2"> <!-- 3 --> <td>А</td> <td class="border_r str2">Б</td> <td>1</td> <td>1а</td> <td>2</td> <td>2а</td> <td>3</td> <td>4</td> <td>5</td> <td>6</td> <td>7</td> <td>8</td> <td>9</td> <td>10</td> <td>10а</td> <td>11</td> </tr> <tr netixexp='[%foreach{this.Items;1;49}%]' class="str2"> <!-- 4 --> <td>123</td> <td class="border_r">123</td> <td style="text-align: left;">123</td> <td></td> <td>321</td> <td>321</td> <td>321</td> <td>321</td> <td class="customPrices1">321</td> <td></td> <td>321</td><!----> <td class="customPrices2">321</td> <td class="customPrices3">321</td> <td></td> <td></td> <td>321</td> </tr> <tr class="border_a str2"> <!-- 5 --> <td></td> <td class="border_r"></td> <th colspan="6">Всего к оплате:</th> <td id='summPrice1'>0,00</td> <td colspan="2">X</td> <td id='summPrice2'>0,00</td> <td id='summPrice3'>0,00</td> <td></td> <td></td> <td></td> <!--/table--> </tr> <tr> <td colspan="2" class="border_r"><p>Документ составлен на <span style="border-bottom: 3px solid black; padding: 0px 5px;">3</span> листах</p></td> <td colspan="14"> <table class="str3"> <tr> <td style="width: 20%">Руководитель организации или иное уполномоченное лицо</td> <td style="width: 8%" class="border_b_lite"></td> <td style="width: 20%" class="border_b_lite"></td> <td style="width: 20%">Главный бухгалтер или иное уполномоченное лицо</td> <td style="width: 8%" class="border_b_lite"></td> <td style="width: 20%" class="border_b_lite"></td> </tr> <tr> <td></td> <td class="footnote cut_string">подпись</td> <td class="footnote">Ф.И.О.</td> <td></td> <td class="footnote cut_string">подпись</td> <td class="footnote">Ф.И.О.</td> </tr> <tr> <td>Индивидуальный предприниматель</td> <td class="border_b cut_string"></td> <td class="border_b cut_string"></td> <td colspan="3" class="border_b"></td> </tr> <tr class="border_b"> <td></td> <td class="footnote">подпись</td> <td class="footnote">Ф.И.О.</td> <td colspan="3">(реквизиты свидетельства о государственной регистрации индивидуального предпринимателя)</td> </tr> </table> </td> </tr> </table> <table class="str4"> <tr> <td>Основание передачи (сдачи)/получения (приемки)</td> <td class="border_b_lite"></td> <td style="width: 30px">[8]</td> </tr> <tr> <td></td> <td class="footnote">(договор; доверенность и др.)</td> <td></td> </tr> <tr> <td>Данные о транспортировке и грузе</td> <td class="border_b"></td> <td>[9]</td> </tr> <tr> <td></td> <td class="footnote">(транспортная накладная, поручение экспедитору, экспедиторская / складская расписка и др. / масса нетто/бруттно груза, если не приведены ссылки на транспортные документы, содержащие эти сведения)</td> <td></td> </tr> </table> <div class="str5"> <table class="str5_1"> <tr> <td colspan="4">Товар (груз) передал/услуги, результаты работ, права сдал</td> </tr> <tr> <td style="width: 30%;" class="border_b_lite cut_string"></td> <td style="width: 30%;" class="border_b_lite cut_string"></td> <td style="width: 35%;" class="border_b_lite"></td> <td style="width: 30px">[10]</td> </tr> <tr> <td class="footnote cut_string">(должность)</td> <td class="footnote cut_string">(подпись)</td> <td class="footnote">(Ф.И.О.)</td> <td></td> </tr> <tr> <td>Дата отгрузки, передачи (сдачи)</td> <td colspan="2">"__" ___________ 20__ г.</td> <td>[11]</td> </tr> <tr> <td colspan="4">Иные сведения об отгрузке</td> </tr> <tr> <td colspan="3" class="border_b_lite"></td> <td>[12]</td> </tr> <tr> <td colspan="3" class="footnote">(ссылки на неотъемлемые приложения, сопутствующие документы, иные документы и т.п.)</td> <td></td> </tr> <tr> <td colspan="4">Ответственный за правильность оформления факта хозяйственной жизни</td> </tr> <tr> <td class="border_b cut_string"></td> <td class="border_b cut_string"></td> <td class="border_b"></td> <td>[13]</td> </tr> <tr> <td class="footnote cut_string">(должность)</td> <td class="footnote cut_string">(подпись)</td> <td class="footnote">(Ф.И.О.)</td> <td></td> </tr> <tr> <td colspan="4">Наименование экономического субъекта — составителя документа (в т.ч. комиссионера/агента)</td> </tr> <tr> <td colspan="3" class="border_b_lite"></td> <td>[14]</td> </tr> <tr> <td colspan="4" class="footnote">(может не заполняться при проставлении печати в М.П., может быть указан ИНН/КПП)</td> </tr> <tr> <td colspan="4">М.П.</td> </tr> </table> <table class="str5_2"> <tr> <td colspan="4">Товар (груз) получил/услуги, результаты работ, права принял</td> </tr> <tr> <td style="width: 30%" class="border_b_lite cut_string"></td> <td style="width: 30%" class="border_b_lite cut_string"></td> <td style="width: 40%" class="border_b_lite"></td> <td style="width: 30px">[15]</td> </tr> <tr> <td class="footnote cut_string">(должность)</td> <td class="footnote cut_string">(подпись)</td> <td class="footnote">(Ф.И.О.)</td> <td></td> </tr> <tr> <td>Дата отгрузки, передачи (сдачи)</td> <td colspan="2">"__" ___________ 20__ г.</td> <td>[16]</td> </tr> <tr> <td colspan="4">Иные сведения о получении, приёмке</td> </tr> <tr> <td colspan="3" class="border_b_lite"></td> <td>[17]</td> </tr> <tr> <td colspan="3" class="footnote">(информация о наличии/отсутствии претензий, ссылки на неотъемлемые приложения и другие документы и т.п.)</td> <td></td> </tr> <tr> <td colspan="4">Ответственный за правильность оформления факта хозяйственной жизни</td> </tr> <tr> <td class="border_b cut_string"></td> <td class="border_b cut_string"></td> <td class="border_b"></td> <td>[18]</td> </tr> <tr> <td class="footnote cut_string">(должность)</td> <td class="footnote cut_string">(подпись)</td> <td class="footnote">(Ф.И.О.)</td> <td></td> </tr> <tr> <td colspan="4">Наименование экономического субъекта — составителя документа</td> </tr> <tr> <td colspan="3" class="border_b_lite"></td> <td>[19]</td> </tr> <tr> <td colspan="4" class="footnote">(может не заполняться при проставлении печати в М.П., может быть указан ИНН/КПП)</td> </tr> <tr> <td colspan="4">М.П.</td> </tr> </table> </div> </body> </html> Вопросы / Ищу html-шаблон универсального передаточного документа (УПД) 9 0 1
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
Личный кабинет на Sendit - не удается сбросить пароль Есть ли ?rp= в адресе из письма. Сниппет при пустом $_GET['rp'] молча ничего не делает (snippet.resetpassword.php:3). Некоторые почтовики/антиспам-обёртки режут query-парам...
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
MiniShop3 - Не выводятся товары дополнительных категорий @SYAN ваша указанная проблема исправлена еще до версии 1.2.3 @Павлик Мышкин завел: github.com/modx-pro/MiniShop3/issues/480 github.com/modx-pro/MiniShop3/issues/481Исправим в б...
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
msImportExport не сохраняет родителя по умолчанию Компонент не понимает кирилические домены при загрузку фото. пример: Error download. Url : https://антаресдвери.рф/upload/iblock/a50/a50b2ef45305a3c18f6e298f1e134880.jpg. Message...
Где можно править тексты и заголовки писем? «Управление словарями» находится в панели администратора по пути: меню Система (иконка в виде шестеренки) -> Управление словарями.
В итоге, что мы имеем. Я тоже решил выложить свой результат.
Моя форма дополнена java-скриптом, который подсчитывает общую сумму включённых в таблицу товаров. Также несколько насыщеннее оформлена по стилям (CSS), ну, и является адаптивной (тянется как под альбомную, так и под книжную распечатку). В общем, пользуйтесь на здоровье.