AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2012, 18:54   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Выгрузка отчета в RTF - усечение полей.
Добрый день.
Может кто-нибудь решал проблему усечения полей отчета при выгрузке в RTF?

Есть отчет, на нем куча контролов с типом Text (статичный текст). Шрифт Arial,7 или больше.
Ширина контролов стоит Auto.
Отчет выглядит нормально на экране и печати.

При сохранении его в RTF, происходит систематическая ошибка в определении ширины контролов в меньшую сторону. Из-за чего происходит усечение последних 1-2 символов, либо идет попытка сделать перенос текста на следующую строку и тогда теряется уже последнее слово целиком.

Для выгрузки в PDF проблема тоже существует, но проявляется на меньшем числе контролов, т.е. почти не заметна.
Глюк воспроизводится на ax 3.0 и ax 2009

Иногда (похоже при выборе определенного принтера, но точно установить не удалось) эффект пропадал.

Опытным путем удалось установить, что если явно сделать ширину контрола не Auto, а проставить фиксированную ширину, равную числу символов в тексте + 1 ( единица измерения ширины контрола Char) то все становится нормально. Способ работает, но очень уж неудобен в использовании.

Может есть вариант попроще ?
Старый 14.08.2017, 16:37   #2  
Daiver is offline
Daiver
Участник
Самостоятельные клиенты AX
 
177 / 44 (2) +++
Регистрация: 19.07.2005
Адрес: Москва
Похожая ситуация, только текстовое поле в отчете со свойством DynamicHeight = Yes. В аксапте и при печати на принтер всё хорошо. При выводе в RTF пропадает часть данных. Заметил что это происходит из-за алгоритма переноса на новую строчку. В аксаптовской форме отчета при переносе место для разрыва ищется по пробелу и по "-", возможно еще какие-то символы.
При выгрузке в RTF ищутся в первую очередь пробелы и там рвется, но при этом высота для текста не увеличивается, в итоге часть данных пропадает.
Заметил такое же поведение при выгрузке в PDF. Но там можно повлиять на алгоритм внеся исправления в метод breakText (внутренний метод findLastBlank) класса PDFViewer.
Подскажите, через какой класс создается RTF?

DAX 2009 SP1 RU6

Последний раз редактировалось Daiver; 14.08.2017 в 16:53.
Старый 14.08.2017, 17:22   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Штатным образом все делали.
Старый 14.08.2017, 23:30   #4  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Цитата:
Заметил такое же поведение при выгрузке в PDF. Но там можно повлиять на алгоритм внеся исправления в метод breakText (внутренний метод findLastBlank) класса PDFViewer.
Если не затруднит, как именно вы исправили код в этом методе?
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 15.08.2017, 08:32   #5  
Daiver is offline
Daiver
Участник
Самостоятельные клиенты AX
 
177 / 44 (2) +++
Регистрация: 19.07.2005
Адрес: Москва
Цитата:
Сообщение от Weez Посмотреть сообщение
Если не затруднит, как именно вы исправили код в этом методе?
X++:
int findLastBlank (str _s)
    {
        int i = 0;
        for (i = strlen(_s); i >= 1; i--)
        {
            if (substr(_s, i, 1) == ' ')
                break;
        }
        return i;
    }
с помощью этого метода принимается решение с какого места будет новая строка. Попробовал вариант когда метод возвращает всегда 0, в этом случае рвется сразу в конце строки, тоже вариант, но не очень визуально красиво получается. Пока добавил дополнительный символ при поиске
X++:
if (substr(_s, i, 1) == ' ' || substr(_s, i, 1) == '-')
в данном случае нам это помогло так как в проблемном поле часто встречается символ "-". Но по хорошему нужно копнуть глубже и исправить класс чтобы он корректно рассчитывал общую высоту разбитой строки и учитывал это при выводе.

Последний раз редактировалось Daiver; 15.08.2017 в 08:54.
За это сообщение автора поблагодарили: Logger (10), Weez (2).
Старый 15.08.2017, 09:01   #6  
Daiver is offline
Daiver
Участник
Самостоятельные клиенты AX
 
177 / 44 (2) +++
Регистрация: 19.07.2005
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Штатным образом все делали.
Можно чуть подробнее? Что именно делали штатным образом? Может есть где-то настройка форматирования RTF, или имеется ввиду что сами контролировали в коде ширину контрола?
Мне хотелось бы посмотреть на класс который формирует RTF при сохранении отчета, наверняка там есть нечто подобное как и в классе PDFViewer, но с ходу не нашел этот класс Может подскажите где копнуть?
Старый 15.08.2017, 09:06   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Daiver Посмотреть сообщение
Можно чуть подробнее? Что именно делали штатным образом? Может есть где-то настройка форматирования RTF, или имеется ввиду что сами контролировали в коде ширину контрола?
Мне хотелось бы посмотреть на класс который формирует RTF при сохранении отчета, наверняка там есть нечто подобное как и в классе PDFViewer, но с ходу не нашел этот класс Может подскажите где копнуть?
Обычная выгрузка в RTF которую можно сделать в Аксапте из отчета. Все штатное без модификаций.
Багу просто обошли.
Проявлялась она так :
в заголовке табличной части отчета был заголовочный текстовый контрол высотой где то в 3-4 строки. Текст в обычном отчете - переносился. При выгрузке в RTF - не переносился а был написан в одну строку так что внизу контрола была пустота а на верхней строке усеченный текст. Мы отредактировали отчет - сделали вместо одного контрола - несколько в ручную разбив текст на куски.
Штатным образом для авторазбиения там ничего настройками сделать нельзя

второй вариант - описан в заголовке темы. Там просто играли шириной контролов, можно занулить у них margin и немножко подвинуть размер. Как правило хватало.

Только модификация, которую мы так и не делали.

Последний раз редактировалось Logger; 15.08.2017 в 09:08.
За это сообщение автора поблагодарили: Daiver (1).
Теги
pdf, rtf, выгрузка в rtf, отчет

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
"Печать" отчета в Excel - проблема с округлением real полей Яга DAX: Программирование 6 17.06.2011 14:57
обрезание полей при выводе отчета на принтер и сохранении в PDF IKA DAX: Программирование 6 07.10.2010 17:22
Баги при печати отчета в RTF Максимка DAX: Функционал 1 22.09.2009 22:18
Как обойти ограничение на количество полей сортировки в DS отчета? Dronas DAX: Программирование 11 30.07.2009 10:19
Не идет выгрузка отчета в Excel. Слабая машина. asabin DAX: Администрирование 27 29.06.2005 10:48

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:35.