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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2006, 15:09   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
ComWordDocument_RU
Добрый День!

Хочу сформировать отчет на базе вордовского шаблона. Структура отчета следующая - есть акт содержащий заголовок и строки, и мне надо этот акт на каждой итерации выводить в один текущий документ word, т.е. получится в одном вордовском файле будет много актов. Акт содержит заголовок м строки.

Как реализовать один акт я знаю -- воспользовавшись методами insertValue в загловочной части и tableInsertValue в строках.

А вот как реализовать вывод нескольких актов?

upd: Оговорку поправил, Спасибо!

Последний раз редактировалось DreamCreator; 02.06.2006 в 15:22.
Старый 02.06.2006, 15:59   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Копированием.

Я так понимаю, что один акт - это одна таблица. Создай в шаблоне документа Word сразу 2 одинаковых таблицы. Заполнение начинай со второй. Надо новый акт, создаешь новую таблицу, как копию первой в конце листа. По окончании формирования документа удаляешь уже не нужную первую таблицу.

Какие для этого нужны команды посмотри через запись макроса.
Старый 02.06.2006, 16:43   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Другой вариант: открывать два шаблона сразу (или шаблон и пустой документ) - данные вносим в один из них и копируем в другой. Чтобы не заморачиваться с очисткой просто переоткрываем шаблон
__________________
Axapta v.3.0 sp5 kr2
Старый 02.06.2006, 16:50   #4  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Подскажите пожалуйста как скопировать?
Старый 02.06.2006, 18:08   #5  
Writer is offline
Writer
Участник
 
42 / 11 (1) +
Регистрация: 27.12.2001
Адрес: Москва
Цитата:
Сообщение от DreamCreator
Подскажите пожалуйста как скопировать?
Сначала необходимо выделить участок копирования в нужном документе. Для всего документа писал следующие методы:
Код:
//select all document ([Ctrl] + [A])
void selectAll()
{
    COM         аctiveWindow;
    COM         selection;

    try
    {
        selection = m_comApplication.selection();
        selection.WholeStory();
    }

    catch(exception::Error)
    {
         checkFailed(strFmt("@SYS19306", funcName()));
    }

    if (selection)
        selection.finalize();

}
Затем копирую:
Код:
//copy select range ([Ctrl] + [C])
void copy()
{
    COM         аctiveWindow;
    COM         selection;

    try
    {
        selection = m_comApplication.selection();
        selection.Copy();
    }

    catch(exception::Error)
    {
         checkFailed(strFmt("@SYS19306", funcName()));
    }

    if (selection)
        selection.finalize();

}

Теперь для нужного COM обекта Word делаю вставку:
Код:
//paste copy buffer ([Ctrl] + [V])
void paste()
{
    COM         аctiveWindow;
    COM         selection;

    try
    {
        selection = m_comApplication.selection();
        selection.Paste();
    }

    catch(exception::Error)
    {
         checkFailed(strFmt("@SYS19306", funcName()));
    }

    if (selection)
        selection.finalize();
}
И не забывайте про то, что если вставку нужно сделать в определенном месте документа, а не на текущей позиции курсора, переместите курсов в это место перед вставкой.
За это сообщение автора поблагодарили: DreamCreator (1).
Старый 05.06.2006, 09:30   #6  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо!
Старый 06.06.2006, 16:11   #7  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от DreamCreator
Спасибо!
Я в свое время нашел, на мой взгляд очень красивый вариант:
Файл шаблона, содержит ОДИН документ. Сначала создается новый файл на основе этого шаблона, заполняется, а когда надо создать еще один документ в этом же файле просто делается вставка в него....того же файла шаблона .... и аккуратно появляется еще один, например Акт
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 14.11.2008, 13:39   #8  
fur-lined is offline
fur-lined
Участник
Аватар для fur-lined
1C
 
52 / 14 (1) ++
Регистрация: 08.11.2006
Братцы, может кто знает как програмно перейти на следующую строку (перевод каретки) в документе Word?
Стоит задача вывести в цикле несколько однотипных строк..
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса
Старый 14.11.2008, 13:43   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Selection.TypeParagraph, получив перед этим Selection, разумеется.
И вообще, есть такая классная штука, как запись макроса, и в ворд, и в ексель. Пускаете запись, что-то делаете, что не знаете как спрограммировать, и получаете макрос, с требуемым вам кодом.

Последний раз редактировалось Eldar9x; 14.11.2008 в 13:49.
За это сообщение автора поблагодарили: fur-lined (1).
Старый 14.11.2008, 14:40   #10  
fur-lined is offline
fur-lined
Участник
Аватар для fur-lined
1C
 
52 / 14 (1) ++
Регистрация: 08.11.2006
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Selection.TypeParagraph, получив перед этим Selection, разумеется..
Как получить то?
X++:
        ?ctiveWindow = m_comDocument.activeWindow();
        selection    = ?ctiveWindow.selection();
        selection.TypeParagraph();
Не получается..
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса
Старый 14.11.2008, 16:22   #11  
fur-lined is offline
fur-lined
Участник
Аватар для fur-lined
1C
 
52 / 14 (1) ++
Регистрация: 08.11.2006
X++:
        selection   = m_comApplication.selection();
        selection.TypeParagraph();
Тоже не работает..
Неужели никто не знает как определить местонахождение курсора?
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса
Старый 14.11.2008, 17:37   #12  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от fur-lined Посмотреть сообщение
X++:
        selection   = m_comApplication.selection();
        selection.TypeParagraph();
Тоже не работает..
Неужели никто не знает как определить местонахождение курсора?
Добрый день, код выводит 11111, переводит каретку и выводит 22222
X++:
static void WordTest(Args _args)
{
  ComWordDocument_RU   doc;
  Com                  d, w, s;
  ;
  doc              = new ComWordDocument_RU();
  doc.newFile('',true);
  d = doc.getComDocument();
  w = d.activewindow();
  s = w.selection();
  s.typetext('11111');
  s.typeparagraph();
  s.typetext('22222');
}
За это сообщение автора поблагодарили: fur-lined (1).
Старый 14.11.2008, 17:43   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
вот так, например, или класс ComOfficeDocument_RU, дописать, чтобы m_comApplication получить:
X++:
static void Job4(Args _args)
{
    ComWordDocument_RU  comApi;
    Com                 doc;
    Com                 app;
    Com                 sel;
    ;

    comApi = new ComWordDocument_RU();

    comApi.newFile();

    doc = comApi.getComDocument();
    
    // получим m_comApplication
    app = doc.Application(); 

    comApi.visible(true);

    sel = app.selection();
 
    sel.typeText("dfdfd");
    sel.TypeParagraph();
    sel.TypeParagraph();
    sel.typeText("fgfggf");
}
За это сообщение автора поблагодарили: fur-lined (1).
Старый 14.11.2008, 18:40   #14  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
NewLine('\n')
Цитата:
Сообщение от fur-lined Посмотреть сообщение
Братцы, может кто знает как програмно перейти на следующую строку (перевод каретки) в документе Word?
Стоит задача вывести в цикле несколько однотипных строк..
Предложу еще 1 вариант: добавить символ '\n' к выводимому тексту
X++:
static void ComWordNewLine(Args _args)
{
    ComWordDocument_RU  comWord ;
    #define.NewLine('\n')
    ;
    
    comWord = new ComWordDocument_RU() ;
    comWord.newFile( '', false ) ;
    
    comWord.selectionInsertValue( '1111' + #NewLine ) ;
    comWord.selectionInsertValue( '2222' + #NewLine + #NewLine) ;
    comWord.selectionInsertValue( '3333' ) ;
    comWord.visible( true ) ;
}
За это сообщение автора поблагодарили: fur-lined (1).
Теги
word, com-объект, шаблон

 


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

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

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