Перейти к содержимому


Шаблоны печати


Сообщений в теме: 19

#1 Alexander

    Активный участник

  • Пользователи
  • PipPipPip
  • 121 сообщений

Отправлено 07 Июнь 2010 - 12:24

В таблице "Лицензии" Есть поля: "Контрагент" и "Следующее продление".
Хочу распечатать таблицу, в которой выводились бы все контрагенты со всеми след продлениями лицензии.
Написал такой код HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body><table width="200" border="1">
<tr>
<th scope="col"><span class="excel2">Номер строки</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Ресторан</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Следующее продление</span></th>
</tr>
<tr>
<th scope="row"><span class="excel2" style="border-top:none;">{$_NumberOfRecord}</span></th>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Kontragent.Nazvanie}</span></td>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Sled.prodlenie}</span></td>
</tr>
</table>

<p> </p>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body><table width="200" border="1">
<tr>
<th scope="col"><span class="excel2">Номер строки</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Ресторан</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Следующее продление</span></th>
</tr>
<tr>
<th scope="row"><span class="excel2" style="border-top:none;">{$_NumberOfRecord}</span></th>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Kontragent.Nazvanie}</span></td>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Sled.prodlenie}</span></td>
</tr>
</table>

<p> </p>
</body>
</html>

В таблице 2 строчки -1 заглавие и 2 данные. Как сделать, чтобы повторялась только 2 строка а не 1и 2 вместе (скриншот в прицепе)

Прикрепленные изображения

  • Прикрепленное изображение: untitled2.jpg


#2 Timur

    Активный участник

  • Техподдержка ООО "КБ"
  • PipPipPip
  • 854 сообщений
  • Пол:Мужчина

Отправлено 07 Июнь 2010 - 12:46

А вы специально продублировали код, или это просто ошибка?

Имею ввиду следующее:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
....
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
....
</html>


Судя по скриншоту, в программе у вас дублированного кода нет, просто вы выделили две строки на печать и у вас вышло две отдельные таблички. В этом случае вам нужно разделить код шаблона на "шапку" (выводится один раз в начале шаблона), "тело" (выводится для каждой строки) и соответственно "подвал"

Часть которую следует занести в шапку шаблона:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body><table width="200" border="1">
<tr>
<th scope="col"><span class="excel2">Номер строки</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Ресторан</span></th>
<th scope="col"><span class="excel2" style="border-left:none;">Следующее продление</span></th>
</tr>

Часть которую следует занести в тело шаблона:
<tr>
<th scope="row"><span class="excel2" style="border-top:none;">{$_NumberOfRecord}</span></th>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Kontragent.Nazvanie}</span></td>
<td><span class="excel2" style="border-top:none;border-left:none;">{$Sled.prodlenie}</span></td>
</tr>

Часть которую следует занести в подвал:
</table>
<p> </p>
</body>
</html>


#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Апрель 2011 - 17:49

сформировал шаблон для печати накладной ТОРГ-12
дату вывел в русской локали через
{setlocale(LC_TIME,'ru_RU.UTF8')}
но выскакивает предупреждение
Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead in /home/m/megatavr/public_html/cb/include/Smarty/sysplugins/smarty_internal_template.php(425) : eval()'d code on line 19
ru_RU.UTF8

как правильно установить локаль?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Апрель 2011 - 18:24

Это Вы в документации по Smarty об этом прочитали? Имею ввиду "установку локали".

#5 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Апрель 2011 - 18:28

Просмотр сообщенияРазработчик (19.4.2011, 18:24) писал:

Это Вы в документации по Smarty об этом прочитали? Имею ввиду "установку локали".
в smarty есть только упоминание о локали при использовании функции date_format
решил воспользоваться php функцией, но она либо не дружит со smarty или с eval

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Апрель 2011 - 18:38

Насчет локали я Вам ничего не могу сказать, т.к. мы в программе ей не пользуемся. Судя по сообщению об ошибке, Вы или не правильно ее задаете, или просто сервер не поддерживает такой синтаксис. Но вообще, если Вам просто требуется вывести дату из поля в русском формате, то для этого в программе специально прописана функция Smarty, а именно DataPropis. Синтаксис такой: {DataPropis field=$MyDate}, где $MyDate - ваше поле. Образцы есть в шаблонах станд. конфигурации.

#7 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Апрель 2011 - 18:48

Просмотр сообщенияРазработчик (19.4.2011, 18:38) писал:

если Вам просто требуется вывести дату из поля в русском формате, то для этого в программе специально прописана функция Smarty, а именно DataPropis. Синтаксис такой: {DataPropis field=$MyDate}, где $MyDate - ваше поле. Образцы есть в шаблонах станд. конфигурации.
есть возможность вывода только месяца или даты или задать форматирование? где о функции посмотреть более подробно?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Апрель 2011 - 18:55

Просмотр сообщенияandibrag (19.4.2011, 19:48) писал:

есть возможность вывода только месяца или даты или задать форматирование?
Нет, только дата в формате "19 апреля 2011". Для всего остального нужно или писать вычисляемое поле, или пытаться как-то добить Smarty на этот счет. Тут я Вам не могу подсказать как именно.

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Апрель 2011 - 18:59

Вообще, Вы интересную мысль подали, можно ведь доработать фунцию DataPropis (с нашей стороны), добавив туда возможность задания в качестве второго параметра свою строку форматирования. А названия месяцев в принципе уже определяются языком, заданным в программе, т.е. мучаться с локалью для этого не придется. Вобщем включим это в план доработки.

#10 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Апрель 2011 - 18:59

Просмотр сообщенияРазработчик (19.4.2011, 18:55) писал:

Нет, только дата в формате "19 апреля 2011". Для всего остального нужно или писать вычисляемое поле, или пытаться как-то добить Smarty на этот счет. Тут я Вам не могу подсказать как именно.
пока оставлю
время будет добью smarty

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#11 Bob_chemist

    Активный участник

  • Пользователи
  • PipPipPip
  • 56 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 31 Март 2012 - 16:40

подниму тему:
возможно ли в шаблоне форматировать дату в нужную сторону?
например, дата в таблице в формате с часами и минутами, а нужно только день-месяц-год
В документации smarty должно выглядеть так:
{$Data | date_format: %d.%m.%y}

В шаблоне не работает. Не поддерживает или я что-то делаю не так?
И вдогонку, можно ли к дате как то прибавлять дни прямо в шаблоне?

Сообщение отредактировал Bob_chemist: 31 Март 2012 - 16:42


#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2012 - 09:13

Smarty не работает с русским форматом даты. Используйте нашу функцию {DataPropis field=поле format="формат даты"}. Например в вашем случае: {DataPropis field=$Data format="d.m.y"}.

#13 Bob_chemist

    Активный участник

  • Пользователи
  • PipPipPip
  • 56 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Апрель 2012 - 12:08

хотелось бы еще прибавлять день прямо в шаблоне.
{DataPropis field=(date("Y-m-d 00:00:00", strtotime($Data) + 60*60*24)) format="d.m.Y"}
вот такая конструкция не работает. Выдает 01.01.1970. Ошибка в коде, или он в принципе не работоспособен?
Можно, конечно, отдельное поле с вычислением сделать специально для этого, но не хочется, их и так полно

Сообщение отредактировал Bob_chemist: 07 Апрель 2012 - 12:08


#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 07 Апрель 2012 - 14:27

Две ошибки: во-первых, в функцию Smarty нельзя напрямую вставлять выражения на PHP - это два совершенно разных языка. Во-вторых, даже если и было бы можно, $Data как и любая другая переменная с датой в шаблонах КБ, выдает результат в локализованном варианте (07.04.2012 к примеру для русского языка), и функция strtotime корректно обрабатывать ее не будет.

#15 nk

    Активный участник

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 23 Ноябрь 2012 - 08:59

Подскажите, как в шаблоне печати DOCX вывести дату в нужном формате?
return "Срок: ".date('d.m.y', $row['f158'])
возвращает 'Срок: 01.01.70'


код
return "Срок: ".date('d.m.y', strtotime($row['f158']));

возвращает 'Срок: 01.11.12', но некорректно обрабатывает незаполненное поле (f158 - дата/время), получается 'Срок: 30.11.-1'

Сообщение отредактировал nk: 23 Ноябрь 2012 - 08:59


#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 23 Ноябрь 2012 - 10:36

if ($row['f158']!="0000-00-00 00:00:00")
  return "Срок: ".date('d.m.y', strtotime($row['f158']));
else
  return "Срок:";


#17 nk

    Активный участник

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 23 Ноябрь 2012 - 10:44

хм, ну можно и так :)

#18 nk

    Активный участник

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 23 Ноябрь 2012 - 10:46

но на самом деле код такой

return
	  "Срок 1-й главы: ".date('d.m.y', strtotime($row['f160'])).
	  "\r\nСрок 2-й главы: ".date('d.m.y', strtotime($row['f161'])).
	  "\r\nСрок 3-й главы: ".date('d.m.y', strtotime($row['f162'])).
	  "\r\nСрок 4-й главы: ".date('d.m.y', strtotime($row['f163'])).
	  "\r\nСрок 5-й главы: ".date('d.m.y', strtotime($row['f164'])).
	  "\r\nСрок 6-й главы: ".date('d.m.y', strtotime($row['f165'])).
	  "\r\nВремя: ".$row['f159'];

Других вариантов нет, чтобы в одной функции?

#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 23 Ноябрь 2012 - 10:48

Функция есть уже встроенная, но она выводит дату в формате "d.m.Y", а вам нужно "d.m.y"

return "Срок: ".form_local_time($row['f158']); // d.m.Y


#20 nk

    Активный участник

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 23 Ноябрь 2012 - 11:09

"Я согласен на медаль." (с)





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных