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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.01.2004, 11:19   #1  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Приветствую Вас...

При рытье в функциональности Документооборота Аксапты 3.0 выявилось следующее:

В Excel вставляем данные из шапки заказа (SaleTable) и строки заказа (SalesLine).

Проблема в следующем: Строки заказов вставляются в одни и те же ячейки - в итоге в документе Excel остается только последняя строка заказа... Можно ли как-нибудь это исправить??? (Перевод Каретки не помогает!)

Ну если начали, говорить об этом, то еще один вопрос... Вставляем тоже самое в Word - все ок - все сроки видны, НО Axapta не понимает закладки, созданные в Worde... Что можно с этим сделать???

Не исключаю, что мог что-нибудь сам упустить из вида, так как никакой документации у меня по этой функциональности к сожалению нет...

Спасибо за ответы, если такие будут
Старый 14.01.2004, 11:22   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо, den_ram.

Да, в вывести строчки в ecxel при помощи документооброта и у меня не получилось. Кто знает как вывести строчки в Excel?
__________________
полезное на axForum, github, vk, coub.
Старый 14.01.2004, 11:23   #3  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Что значит "не понимает закладки" в Ворде?
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 14.01.2004, 11:28   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
это значит, что пишешь закладки для строчек, а весь текст все равно выводится в первую закладку строчки таблицы.
__________________
полезное на axForum, github, vk, coub.
Старый 14.01.2004, 14:16   #5  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
А! это не победить, насколько я понимаю- откуда она заранее знает, сколько там будет строчек?
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 14.01.2004, 14:42   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
как откуда? из связанной таблицы... в ворде строчки то делает...
хорошо. постараюсь разобраться.
__________________
полезное на axForum, github, vk, coub.
Старый 14.01.2004, 21:19   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
На самом деле, сколько будет строчек она не знает (по крайней мере, не считает). Больше того, вывод в документ производится по полям, а не по записям (то есть, таблицы выводятся по столбцам, а не по строкам). Чтобы создать видимость разбивки на строки, Axapta вставляет мягкий перенос (soft line break) между различными значениями поля при выводе. Лучше всего это заметно при выводе документов в Word.

С Excel что-то напортачили они немного. Чуть-чуть поправив классы DocuActionCOM_Excel и DocuActionTrans можно добиться такого же поведения при создании документов Excel, как и при создании документов Word. Во-первых, в методе insertField класса DocuActionTrans нужно указать, чтобы перевод строки (soft line break) при переходе к новой записи вставлялся после уже выведенного значения, а не вместо него.
Блок перевода строки в оригинале:
Код:
if (first)
    first = false;
else
    this.insertSoftLineBreak();
Стоит исправить на:
Код:
if (first)
    first = false;
else {
    this.insertSoftLineBreak(curPos);
    curPos++;
}
В принципе, этим можно и ограничиться. Второе несоответствие заключается в том, что при выводе полей без указания закладок, они все выводятся в одно и то же поле. Гораздо логичней было бы выводить их в поля таблицы слева направо. Для этого можно перекрыть метод mainInsertField класса DocuActionCOM_Excel:
Код:
// MAXIM, Move right if no hard break
void mainInsertField(DocuField docuField, DocuRef docuRef)
{
    COM range;
   ;
    super(docuField, docuRef);

    if (!docuField.HardLineBreak) {
        range = sysExcelRange.comObject();
        range = range.offset(0,1);
        range.select();
        sysExcelRange.comObject(range);
    }
}
Приемлемого способа (в смысле, чтобы требовался минимум программирования) выводить данные связанных таблиц в различные строки таблицы я, к сожалению, также не нашел.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 15.01.2004, 09:43   #8  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Цитата:
Сообщение от Maxim Gorbunov
Блок перевода строки в оригинале:
Код:
if (first)
    first = false;
else
    this.insertSoftLineBreak();
Стоит исправить на:
Код:
if (first)
    first = false;
else {
    this.insertSoftLineBreak(curPos);
    curPos++;
}
В принципе, этим можно и ограничиться.
Максим, спасибо что порылся,

Я сделал изменение, о котором ты говорил, но у меня Excel как скидывал строки в одни и те же ячейки, так и скидывает...
Старый 15.01.2004, 11:46   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Maxim появится чуть позже.
__________________
полезное на axForum, github, vk, coub.
Старый 15.01.2004, 21:44   #10  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Maxim появился

Да, так и должно быть. То есть, в одну ячейку через символ перевода строки ("\r") будут слиты все отобранные значения одного поля (например, itemId из SalesLine). Сделать так, чтобы различные значения одного и того же поля выводились в разные ячейки мне не удалось. Указанный fix служит лишь для того, чтобы в ячейку выводились все отобранные значения, а не только последнее.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.01.2004, 12:21   #11  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Цитата:
Сообщение от Maxim Gorbunov
Maxim появился 

Да, так и должно быть. То есть, в одну ячейку через символ перевода строки ("\r") будут слиты все отобранные значения одного поля (например, itemId из SalesLine). Сделать так, чтобы различные значения одного и того же поля выводились в разные ячейки мне не удалось. Указанный fix служит лишь для того, чтобы в ячейку выводились все отобранные значения, а не только последнее.
А толку-то??? Они и так выводились... совершенно точно... Только они перетираются - и смысл тогда их выводить, если все равно в Экселе останется только последнее значение???
Неужели нельзя вставить комманду экселю переходить на следующую ячейку вниз... типа клавиши Enter???
Старый 16.01.2004, 12:35   #12  
Wamr_imported is offline
Wamr_imported
Участник
 
101 / 10 (1) +
Регистрация: 08.01.2004
Прошу прощение, что выдвигаю непроверенную гипотезу.

Есть такая функция в Excel "Текст по столбцам". Так вот она сохраняет настройки от последнего применения. И это иногда приводит к интересным эффектам при попытке вставки текста через буфер обмена (разбиение текста с " на несколько столбцов).

Может быть, можно задать в её параметрах, что '\r' является окончанием строки и тогда Excel начнет автоматом переходить на новую строку?
Старый 16.01.2004, 14:49   #13  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Хм... Сначала начал писать ответ, что нифига не возможно выводить данные в разные строчки, а потом решил проверить....

Оказывается МОЖНО!

Все, что нужно сделать, это вместо того блока, который я рекомендовал изменить в методе insertField класса [b]DocuActionTrans, вставить HardLineBreak. То есть, следующий код:
Код:
if (first)
    first = false;
else
    this.insertHardLineBreak();
Все, как говорится, пользуйтесь.

Большое спасибо den_ram и Wamr за идею.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.01.2004, 14:50   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Единственное дополнение: после такой модификации желательно не использовать вывод полей в документы без закладок. То есть, при настройке Типа Документа в Axapta следует указывать закладки для всех выводимых полей.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 19.01.2004, 11:52   #15  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Большое спасибо всем, принявшим участие в данном обсуждении, за нахождение решения поставленной проблемы!
Старый 19.01.2004, 14:10   #16  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Эээ... у меня еще одна проблема...

Шаблоны не присоединяются... Создаю в Excel шаблон - прикрепляю его к документу... Когда создаю уже сам документ... он на чистом листе , а не на листе с моими комментариями из шаблона... Затереться они не могли!
Старый 19.01.2004, 14:19   #17  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Known problem, как говорится...

При настройке типа документа поставьте галочку "Проверка таблицы" (см. рисунок).
Изображения
 
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 19.01.2004, 14:54   #18  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Есть контакт Действительно забыл поставить...
Еще раз спасибо
Старый 19.01.2004, 16:14   #19  
Den Ram is offline
Den Ram
Columbus IT
Columbus IT
 
29 / 17 (1) ++
Регистрация: 26.09.2003
Дааа... чувствую эта тема никогда не закроется

Подскажите, пожалуйста, как указывать ячейки на другом листе - отличном от изначального? Ссылка вида Лист1!а5 не помогает... Закладка тоже не помогает... Аксапта видит закладки только на текущей странице шаблона...
Я понимаю, что есть выход сделать все на одном листе!

Но может быть есть какой-то выход и в ссылки можно прописать в другой лист...
Старый 20.01.2004, 12:53   #20  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Немного покопался... Да, по человечески (без программирования) сделать это нельзя. Но, можно немного доработать напильником.

Немного теории для начала. В интерфейсах Excel есть два метода для выбора Range: один в интерфейсе Worksheet (range выбирается в контексте листа книги Excel), другой в интерфейсе Application (range можно выбирать вообще как угодно, хоть из другого файла). Так вот, в документообороте Axapta используется первый метод, но приложив минимум усилий можно заставить его использовать второй.

Во-первых, надо написать обертку для второго метода. В класс SysExcelApplication добавьте абстрактный метод range:
Код:
abstract public SysExcelRange range(str _rangeName = '')
{
}
В расширяющие его классы тоже добавьте этот метод. В SysExcelApplication_2000:
Код:
public SysExcelRange range(str _rangeName = "")
{
    return SysExcelRange::construct(MSOfficeVersion::Office2000,
                                    _rangeName ? 
                                        application.range(_rangeName) : 
                                        application.range());
}
В SysExcelApplication_XP:
Код:
public SysExcelRange range(str _rangeName = "")
{
    return SysExcelRange::construct(MSOfficeVersion::OfficeXP,
                                    _rangeName ? 
                                        application.range(_rangeName) : 
                                        application.range());
}
Теперь завершающий штрих. Нужно заставить класс DocuActionCOM_Excel использовать правильный метод выбора range. Для этого в методе gotoBookmark исправьте
Код:
sysExcelRange = sysExcelWorksheet.range(bookmark);
на
Код:
sysExcelRange = sysExcelApplication.range(bookmark);
В принципе, это все, но есть один маленький нюанс: можно выделять только range, который расположен на активном листе. Выделение range осуществляется методом range.select, поэтому лучше избавиться от его вызовов. Если Вы исправляли метод mainInsertField так, как я рекомендовал в одном из предыдущих постов, то там как раз есть вызов range.select и его следует убрать. Еще один вызов range.select есть в методе insertHardLineBreak. Его тоже лучше убрать.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 


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

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

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