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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.01.2014, 17:58   #1  
pavelt is offline
pavelt
Участник
 
3 / 12 (1) ++
Регистрация: 22.04.2004
Решение проблемы вывода строки длиннее 255 символов в текстовое поле Word
Столкнулся в который раз с проблемой. При выводе строки > 255 символов в ворд при записи в текстовое поле (не в закладку) вылетает ошибка. Решения нашел в сети два, оба с минусами.
Первое - заменить текстовое поле на закладку. Минус - нельзя задать отдельный шрифт для вставляемого текста.
Второе - разбить строку на строку 255 + "хвост" и делать в шаблоне кроме текстового поля сразу за ним еще закладку и писать "хвост" строки в нее. Минус - больше правки в коде.
Общий главный минус решений - надо править и шаблон и код везде.

Нашел решение, которое не обладает ни одним из этих минусов, надо просто переписать метод InsertFieldValue. При попытке вставить слишком длинный текст добавляем в документ на место текстового поля закладку и пишем текст в нее
Вместо старого
X++:
            if (field)
            {
                if (! this.insertValueInField(field, _anyVal))
                {
                    throw error(strfmt("@GEE6409", this.getApplicationName()));
                }
            }
Исправленный вариант
X++:
            if (field)
            {
/////////////////////////////////////////////// вставка //////////////////////////////////////////////////////////
                if(typeof(_anyVal) == Types::String && strlen(any2str(_anyVal)) > 255)
                {
                    comBookmarks = m_comDocument.bookmarks();
                    this.goToBookmark(_bookMark);
                    newBookmark = comBookmarks.Add(_bookmark);
                    newBookmarkRange = newBookmark.range();
                    try
                    {
                        newBookmarkRange.text(_anyVal);
                    }
                    catch(Exception::Error)
                    {
                        throw error(strfmt("@GEE6409", this.getApplicationName()));
                    }
                }
                else
/////////////////////////////////////////////// конец вставки ///////////////////////////////////////////////////////////
                if (! this.insertValueInField(field, _anyVal))
                {
                    throw error(strfmt("@GEE6409", this.getApplicationName()));
                }
            }
Профит - текст вставляется в закладку, но шрифт подтягивается из текстового поля. И навсегда забыть про эту ошибку.

Буду очень признателен, если мне укажут на дефекты решения, если таковые есть, или на более простой путь.
За это сообщение автора поблагодарили: slava (1), Dreadlock (1), Surevich (0).
Теги
word, ошибка, слишком длинная строка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Заказ. Форма "Разноска накладной"->Строки-> Поле "закрытие" ATimTim DAX: Функционал 2 30.11.2004 16:14
Не могу, а точнее не знаю, как вытащить текстовое поле из таблицы заказов на печать. zarik DAX: Программирование 2 25.10.2004 10:07
Проблемы - длинное поле из ODBC Hamster DAX: Программирование 2 21.10.2004 16:37
Журнал переноса->Строки->Поле "Количество" . Нужен "0" по умолчанию вместо ATimTim DAX: Функционал 5 26.06.2004 12:17
WHERE и текстовое поле SnowMan DAX: Программирование 9 20.10.2003 10:19

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:23.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.