Столкнулся в который раз с проблемой. При выводе строки > 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()));
}
}
Профит - текст вставляется в закладку, но шрифт подтягивается из текстового поля. И навсегда забыть про эту ошибку.
Буду очень признателен, если мне укажут на дефекты решения, если таковые есть, или на более простой путь.