Формат выводимого PDF-файла

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
damisha
OTRS Новобранец
Сообщения: 8
Зарегистрирован: 27 янв 2017, 13:34
Откуда: Дубна

Формат выводимого PDF-файла

Сообщение damisha » 05 сен 2018, 17:38

Добрый день!

Просьба уточнить, как можно изменить формат выводимого кастомного отчета (формат вывода: Печать).

Составил PM, который вытаскивает из БД следующий запрос:

Код: Выделить всё

SELECT
	CONCAT(
		ticket_type.name,' #',
		ticket.tn, '\n',
		ticket.title, '\n',
		ticket.create_time, '\n',
		CONCAT(users.first_name,' ',users.last_name)
		) AS "Ticket",
	GROUP_CONCAT(
		'\n',
		article.create_time,
		' ',
		(
		article.change_by,
		'\n',
		article.a_body,
		'\n') AS "Note"
FROM article
LEFT JOIN ticket ON
(
	ticket.id = article.ticket_id
)
LEFT JOIN users ON
(
	ticket.responsible_user_id = users.id
)
LEFT JOIN ticket_type ON
(
	ticket.type_id = ticket_type.id
)
LEFT JOIN ticket_state ON
(
	ticket.ticket_state_id = ticket_state.id
)
WHERE DATE_FORMAT(article.create_time,"%Y:%m:%d")=DATE_FORMAT(curdate(),"%Y:%m:%d")
AND users.id=18
GROUP BY ticket.tn
ORDER BY ticket.id DESC
Сейчас отчет "разъезжается", поле "Ticket" - на одной странице, поле "Note" - на другой.

Может кто подсказать, как изменить формат файла, чтобы оба поля были на одной странице? Куда смотреть, в сторону редактирования каких модулей/параметров?

Спасибо!
С уважением,
Дамир Асадуллин

Prod: OTRS ITSM 5.0.14 on Debian 8.6 x64 Linux with MySQL 5.5

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Формат выводимого PDF-файла

Сообщение alexus » 05 сен 2018, 18:02

Дамир, добрый день!

Вам необходимо сделать кастомный статический отчёт.
1. Делаете модуль по образу и подобию - https://github.com/OTRS/otrs/blob/rel-5 ... eAction.pm
2. Сохраняете его с отдельным именем в этом же месте - Kernel/System/Stats/Static/MyNewReport.pm
3. В агентском интерфейсе выбираете создание нового отчёта
4. Выбираете ваш отчёт и бинго!
1536159714141.png
1536159714141.png (73.22 КБ) 4515 просмотров
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

damisha
OTRS Новобранец
Сообщения: 8
Зарегистрирован: 27 янв 2017, 13:34
Откуда: Дубна

Re: Формат выводимого PDF-файла

Сообщение damisha » 06 сен 2018, 13:58

Алексей, спасибо, именно так я и создал кастомный отчет.

Мой вопрос в другом: я имел ввиду как изменить ширину столбцов, цветовую палитру выводимого на печать PDF-файла.
С уважением,
Дамир Асадуллин

Prod: OTRS ITSM 5.0.14 on Debian 8.6 x64 Linux with MySQL 5.5

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Формат выводимого PDF-файла

Сообщение alexus » 06 сен 2018, 16:49

А пример готового отчёта можете показать?
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

damisha
OTRS Новобранец
Сообщения: 8
Зарегистрирован: 27 янв 2017, 13:34
Откуда: Дубна

Re: Формат выводимого PDF-файла

Сообщение damisha » 06 сен 2018, 18:01

Да, конечно!

Ранее запрос был следующим:

Код: Выделить всё

SELECT
	ticket.tn AS "Ticket Number",
	ticket.title AS "Theme",
	ticket.create_time AS "Create Date",
	CONCAT(users.first_name,' ',users.last_name) AS "Responsible",
	ticket_type.name AS "Ticket Type",
	GROUP_CONCAT(
		article.create_time,
		' ',
		(
		CASE article.change_by 
			WHEN 6 THEN "Дамир Асадуллин"
			ELSE "Инженер ЦУС"
			END
		),
		'\n',
		article.a_body,
		'\n') AS "Note",
	ticket_state.name AS "Ticket State",
article.create_time AS "NOTE DATE"
FROM article
LEFT JOIN ticket ON
(
	ticket.id = article.ticket_id
)
LEFT JOIN users ON
(
	ticket.responsible_user_id = users.id
)
LEFT JOIN ticket_type ON
(
	ticket.type_id = ticket_type.id
)
LEFT JOIN ticket_state ON
(
	ticket.ticket_state_id = ticket_state.id
)
WHERE DATE_FORMAT(article.create_time,"%Y:%m:%d")=DATE_FORMAT(curdate(),"%Y:%m:%d")
AND users.id = 6
GROUP BY ticket.tn
ORDER BY ticket.id DESC
LIMIT 1
Т.е. я выводил 8 полей в результирующую таблицу, и при выводе на печать отчета - получал результат во вложении (см. скрины). Вместо того, чтобы вывести все колонки (8 полей из запроса) на один лист - часть колонок перенесена на второй лист.

Модуль:

Код: Выделить всё

package Kernel::System::Stats::Static::DamirTest;

use strict;
use warnings;

use Date::Pcalc qw(Days_in_Month);

our @ObjectDependencies = (
    'Kernel::Config',
    'Kernel::System::Log',
    'Kernel::System::Time',
);

sub new {
    my ( $Type, %Param ) = @_;

    # allocate new hash for object
    my $Self = {%Param};
    bless( $Self, $Type );

    return $Self;
}

sub Param {

    my $Self = shift;

    my @Params = ();

    return @Params;
}

sub Run {
    my ( $Self, %Param ) = @_;

    my $SQL1 = 'SET group_concat_max_len = 4096';
    my $DBObject1 = $Kernel::OM->Get('Kernel::System::DB');
        $DBObject1->Prepare( SQL => $SQL1 );

    my $SQL2 = 'SELECT ticket.tn, ticket.title, ticket.create_time, CONCAT(users.first_name,\' \',users.last_name), ticket_type.name, GROUP_CONCAT(article.create_time,\' \',(CASE article.change_by WHEN 6 THEN "Дамир Асадуллин" ELSE "Инженер ЦУС" END),\'\n\',article.a_body,\'\n\'),ticket_state.name,article.create_time FROM article LEFT JOIN ticket ON (ticket.id = article.ticket_id) LEFT JOIN users ON (ticket.responsible_user_id = users.id) LEFT JOIN ticket_type ON (ticket.type_id = ticket_type.id) LEFT JOIN ticket_state ON (ticket.ticket_state_id = ticket_state.id) WHERE DATE_FORMAT(article.create_time,"%Y:%m:%d")=DATE_FORMAT(curdate(),"%Y:%m:%d") AND users.id = 6 GROUP BY ticket.tn ORDER BY ticket.id DESC LIMIT 1';
    my $DBObject2 = $Kernel::OM->Get('Kernel::System::DB');
        $DBObject2->Prepare( SQL => $SQL2 );

    my %Stats;
    my @Data;
    while ( my @Row = $DBObject2->FetchrowArray() ) {
    push @Data, [
            $Row[0],
            $Row[1],
            $Row[2],
	    $Row[3],
            $Row[4],
            $Row[5],
            $Row[6],
            $Row[7],
            ];
    }
    
	my $Title = ' ';
    my @HeadData = (
        'Ticket',
        'Title',
        'Create Date',
	'Responsible',
	'Ticket Type',
	'Note',
	'Ticket State',
	'Note Date',
    );
        my @Result = ( [$Title], [@HeadData], @Data );

    return @Result;
}


1;



Хотелось бы узнать, как поменять форматирование выводимого файла.

Сейчас, к сожалению, смог решить только созданием запроса с выводом в одну колонку интересующих данных.(
Вложения
report1.png
report1.png (23.18 КБ) 4496 просмотров
С уважением,
Дамир Асадуллин

Prod: OTRS ITSM 5.0.14 on Debian 8.6 x64 Linux with MySQL 5.5

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Формат выводимого PDF-файла

Сообщение alexus » 06 сен 2018, 18:23

Выводить заметки в отчёт - очень плохая идея, так как невозможно предугадать, какие там тэги.
Про PDF вообще - тут /opt/otrs/Kernel/cpan-lib/PDF
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

Ответить