Показать сообщение отдельно
Старый 21.02.2008, 18:20   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Post
Если у кого-то возникнет похожая проблема, то решение найдено (не прошло и года ). Основные причины следующие:

1. При передаче значений, отличных от целочисленных, в методы объектов Word желательно оборачивать их в класс COMVariant(). Т.е. передавать в качестве параметра не строку, а объект.

Следует обратить внимание на методы создания нового документа на базе шаблона и работу с полями Word.

Например, создание документа на базе шаблона:

X++:
    COM         comDocuments;
    COMVariant  varTemlateName;
    ;

(...)

            if (_template)
            {
                varTemlateName = new COMVariant(COMVariantInOut::IN, COMVariantType::VT_BSTR);
                varTemlateName.bStr(_template);
                m_comDocument = comDocuments.Add(varTemlateName);
            }
            else
            {
                m_comDocument = comDocuments.Add();
            }

(...)

2. Следует избегать сложных "вложенных" функций с включением обращений к свойствам Com объектов.

Например, высока вероятность ошибки при использовании такого синтаксиса

X++:
if (str2num(m_comApplication.version()) >= 9)
Однако еще не было ошибок в таком синтаксисе

X++:
numVersion = str2num(m_comApplication.version());
if (numVersion >= 9)

Короче, на терминалке "халява" - не проходит. Необходимо более строго следить за синтаксисом.
За это сообщение автора поблагодарили: russ (1), kashperuk (5), Logger (5), alex55 (1), plumbum (1).