[РЕШЕНО] Экспорт отчетов в Excel

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

[РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 15 янв 2014, 08:49

В разделе Howtos есть тема с таким же именем - viewtopic.php?f=4&t=1498
Наконец, дошли руки попробовать. Вроде делал все как написано, правда, пункт - 1. Инсталируем perl-модуль Text::CSV::Encoded вызвал у админа какие-то проблемы, но вроде, говорит все решил. Однако при попытке экспорта выдает ошибку:
Server error!

The server encountered an internal error and was unable to complete your request.

Error message:
Can't locate object method "new" via package "Text::CSV::Encoded" (perhaps you forgot to load "Text::CSV::Encoded"?) at /opt/otrs/Custom/Kernel/System/CSV.pm line 157. ,

If you think this is a server error, please contact the webmaster.
Error 500
Т.е. указывает, что модуль не инсталлирован или инсталлирован не туда???
Кто-нибудь делал это? Какие были проблемы и как решали? :oops:
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

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

Re: Экспорт отчетов в Excel

Сообщение alexus » 16 янв 2014, 00:28

Юрий, вот ключевые моменты

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

use Text::CSV::Encoded;
далее в коде

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

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

    # check required params
    for (qw(Data)) {
        if ( !$Param{$_} ) {
            $Self->{LogObject}->Log( Priority => 'error', Message => "Got no $_ param!" );
            return;
        }
    }

    my @Head;
    my @Data = ( ['##No Data##'] );
    if ( $Param{Head} ) {
        @Head = @{ $Param{Head} };
    }
    if ( $Param{Data} ) {
        @Data = @{ $Param{Data} };
    }

    # get separator
    if ( !defined $Param{Separator} || $Param{Separator} eq '' ) {
        $Param{Separator} = ';';
    }

    # get separator
    if ( !defined $Param{Quote} ) {
        $Param{Quote} = '"';
    }

    # create new csv backend object
	my $CSV;
	if ( !defined $Param{Encode} ) {
		$CSV = Text::CSV->new(
			{
			quote_char => $Param{Quote},
			escape_char => $Param{Quote},
			sep_char => $Param{Separator},
			eol => '',
			always_quote => 1,
			binary => 1,
			keep_meta_info => 0,
			allow_loose_quotes => 0,
			allow_loose_escapes => 0,
			allow_whitespace => 0,
			verbatim => 0,
			}
		);
	}
	else {
		# create new csv backend object
		$CSV = Text::CSV::Encoded->new( # ram
			{
				quote_char => $Param{Quote},
				escape_char => $Param{Quote},
				sep_char => $Param{Separator},
				eol => '',
				always_quote => 1,
				binary => 1,
				keep_meta_info => 0,
				allow_loose_quotes => 0,
				allow_loose_escapes => 0,
				allow_whitespace => 0,
				verbatim => 0,
				encoding_in => "utf-8", # the encoding comes into Perl ram
				encoding_out => $Param{Encode}, # the encoding comes out of Perl ram
			}
		);
	}


    my $Output = '';

    # if we have head param fill in header
    if (@Head) {
        my $Status = $CSV->combine(@Head);
        $Output .= $CSV->string() . "\n";
    }

    # fill in data
    for my $Row (@Data) {
        my $Status = $CSV->combine( @{$Row} );
        if ($Status) {
            $Output .= $CSV->string() . "\n";
        }
        else {
            $Self->{LogObject}->Log(
                Priority => 'error',
                Message  => 'Failed to build line: ' . $CSV->error_input(),
            );
        }
    }
    return $Output;
}
С уважением,
Алексей Юсов

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? Спросите меня как!

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

[РЕШЕНО]Re: Экспорт отчетов в Excel

Сообщение ykolesnikov » 16 янв 2014, 09:16

Спасибо, Алексей!
Все так и делал, но, как всегда,слабое знание языка подвело. :roll:
Фразу
use Text::CSV::Encoded;
поставил не в ту секцию и она, естественно, не работала. Перенес в нужное место и все О.К.
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

sam
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 21 май 2014, 13:25

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение sam » 26 май 2014, 11:09

Здравствуйте! Вожусь с каракулями в заголовках отчета. Все делал по вашему описанию, но видимо я что-то не догоняю. В программировании я 0. Помогите, пожалуйста, с экспортом в excel. Сейчас попробую изложить, что я имею:
1) Linux (none) 3.2.0-0.bpo.4-amd64 #1 SMP Debian 3.2.46-1+deb7u1~bpo60+1 x86_64

2) root@(none):/opt/otrs/bin# /opt/otrs/bin/otrs.CheckModules.pl
o Crypt::Eksblowfish::Bcrypt.......ok (v0.008)
o Crypt::SSLeay....................ok (v0.57)
o Date::Format.....................ok (v2.24)
o DBI..............................ok (v1.612)
o DBD::mysql.......................ok (v4.016)
o DBD::ODBC........................ok (v1.24)
o DBD::Oracle......................Not installed! (optional - Required to conn ect to a Oracle database.)
o DBD::Pg..........................ok (v2.17.1)
o Encode::HanExtra.................ok (v0.23)
o GD...............................ok (v2.39)
o GD::Text.......................ok (v0.86)
o GD::Graph......................ok (v1.44)
o IO::Socket::SSL..................ok (v1.33)
o JSON::XS.........................ok (v2.29)
o List::Util::XS...................ok (v1.21)
o LWP::UserAgent...................ok (v6.05)
o Mail::IMAPClient.................ok (v3.25)
o IO::Socket::SSL................ok (v1.33)
o ModPerl::Util....................ok (v2.000004)
o Net::DNS.........................ok (v0.66)
o Net::LDAP........................ok (v0.4001)
o Net::SSL.........................ok (v2.84)
o PDF::API2........................ok (v2.015)
o Compress::Zlib.................ok (v2.020)
o Text::CSV_XS.....................ok (v0.73)
o Time::HiRes......................ok (v1.9719)
o XML::Parser......................ok (v2.36)
o YAML::XS.........................ok (v0.33)

3) TARGET/SHARE/var/otrs/Kernel/System/CSV.pm

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

...
use strict;
use warnings;
use Text::CSV;
use Text::CSV::Encoded;
...
    # create new csv backend object
   my $CSV;
   if ( !defined $Param{Encode} ) {
      $CSV = Text::CSV->new(
         {
         quote_char => $Param{Quote},
         escape_char => $Param{Quote},
         sep_char => $Param{Separator},
         eol => '',
         always_quote => 1,
         binary => 1,
         keep_meta_info => 0,
         allow_loose_quotes => 0,
         allow_loose_escapes => 0,
         allow_whitespace => 0,
         verbatim => 0,
         }
      );
   }
   else {
      # create new csv backend object
      $CSV = Text::CSV::Encoded->new( # ram
         {
            quote_char => $Param{Quote},
            escape_char => $Param{Quote},
            sep_char => $Param{Separator},
            eol => '',
            always_quote => 1,
            binary => 1,
            keep_meta_info => 0,
            allow_loose_quotes => 0,
            allow_loose_escapes => 0,
            allow_whitespace => 0,
            verbatim => 0,
            encoding_in => "utf-8", # the encoding comes into Perl ram
            encoding_out => $Param{Encode}, # the encoding comes out of Perl ram
         }
      );
   }
4) TARGET/SHARE/var/otrs/Kernel/Modules/AdminStats.pm

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

...
 # csv output
        if ( $Param{Format} eq 'CSV' ) {
            my ( $s, $m, $h, $D, $M, $Y )
                = $Self->{TimeObject}->SystemTime2Date(
                SystemTime => $Self->{TimeObject}->SystemTime(),
                );
            my $Time = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $Y, $M, $D, $h, $m, $s );
            my $Output;

            # get Separator from language file
            my $UserCSVSeparator = $Self->{LayoutObject}->{LanguageObject}->{Separator};

            if ( $Self->{ConfigObject}->Get('PreferencesGroups')->{CSVSeparator}->{Active} ) {
                my %UserData = $Self->{UserObject}->GetUserData( UserID => $Self->{UserID} );
                $UserCSVSeparator = $UserData{UserCSVSeparator} if $UserData{UserCSVSeparator};
            }
            $Output .= $Self->{CSVObject}->Array2CSV(
                Head => $HeadArrayRef,
                Data => \@StatArray,
                Separator => $UserCSVSeparator,
                Encode => 'cp1251',
            );

            return $Self->{LayoutObject}->Attachment(
                Filename    => $Filename . '.csv',
                ContentType => "text/csv",
                Content     => $Output,
            );
        }
...
P.S. Пробовал по-всякому. Это окончательный, как я понял наиболее правильный вариант. Но все равно с ним не работает. веб-интерфейс ругается так, что даже главная страница не грузится. В некоторых случаях (правках) ругается в момент, когда захожу в раздел отчетов. Убил много времени. Заранее спасибо.

sam
OTRS Новобранец
Сообщения: 2
Зарегистрирован: 21 май 2014, 13:25

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение sam » 27 май 2014, 12:04

Ну помогите, пожалуйста, время поджимает. Пришлите свои конфиги. Почту могу дать. Юрий, вы же настроили успешно, подскажите, что делать.

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 27 май 2014, 12:14

Делать можно только одно - внимательно делать изменения, проверять все до запятой. Я тоже не программист Perl, но вставить кусок текста в модуль по силам всем.
Кроме того измененные модули надо помещать в папку Custom, повторяя в ней всю структуру(путь) к оригинальному файлу. Это неоднократно описано на форуме. Оригинальные модули изменять нельзя.
Кроме того, у Вас в подписи нет сведений о версии OTRS, поэтому подставлять чужие модули путь неверный, там могут быть и другие изменения, Вам недоступные.
Так что, всё в Ваших руках, буквально.
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение mukexa » 27 май 2014, 12:16

1. Инсталируем perl-модуль Text::CSV::Encoded
?
OTRS 5s, Ubuntu 12.04

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 27 май 2014, 12:41

mukexa писал(а):
1. Инсталируем perl-модуль Text::CSV::Encoded
?
Это ведь было написано в теме. Нужно только выполнять неукоснительно. :)
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение mukexa » 27 май 2014, 15:23

ykolesnikov. Себе сделал можно сказать с первого раза(за что очень благодарен!), я не увидел у нашего коллеги комментария по этому пункту.
OTRS 5s, Ubuntu 12.04

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 27 май 2014, 15:26

Новобранец. :) Может отпишется еще. Я в свое время делал все как написано. Раз промахнулся с местом, ну и еще админ несколько времени пошаманил в установкой доп модуля. И сразу все пошло. Просто тщательнЕй надо! :lol:
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

NvAriec
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 01 дек 2015, 03:49

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение NvAriec » 01 дек 2015, 03:51

Здравствуйте.
А как в 5й версии otrs решить проблему с кодировкой в CSV?
С уважением.
otrs 5.0.3
Debian

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 01 дек 2015, 07:05

А нужно решать? Уже с 4-й есть экспорт в Excel штатный, без доработок и шаманства. Или это научный интерес?
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

NvAriec
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 01 дек 2015, 03:49

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение NvAriec » 01 дек 2015, 09:01

ykolesnikov писал(а):А нужно решать? Уже с 4-й есть экспорт в Excel штатный, без доработок и шаманства. Или это научный интерес?
Эмс. А можно по-подробнее?

Я вчера обновился с 3.1 до 5.0.3 и при экспорта статистики в CSV с кодировкой остались косяки. Может что я делаю не так?
С уважением.
otrs 5.0.3
Debian

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение ykolesnikov » 01 дек 2015, 09:08

Надо просто выбирать вывод в Excel, а не в CSV. Если этой опции нет, смотрите в настройки, возможно, она отключена.
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

NvAriec
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 01 дек 2015, 03:49

Re: [РЕШЕНО] Экспорт отчетов в Excel

Сообщение NvAriec » 01 дек 2015, 09:19

ykolesnikov писал(а):Надо просто выбирать вывод в Excel, а не в CSV. Если этой опции нет, смотрите в настройки, возможно, она отключена.
Спасибо, добрый человек)
С уважением.
otrs 5.0.3
Debian

Ответить