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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2006, 12:16   #1  
Ardak is offline
Ardak
Участник
 
48 / 11 (1) +
Регистрация: 13.07.2006
Помогите пожалуйста, как организовать выгрузку в MS Project?
Старый 06.07.2006, 18:23   #2  
Vukmut_imported is offline
Vukmut_imported
Участник
 
9 / 10 (1) +
Регистрация: 11.01.2005
Цитата:
Сообщение от Ardak Посмотреть сообщение
Помогите пожалуйста, как организовать выгрузку в MS Project?
Слишком широко поставлена задача.

По этому примерно такой ответ:

В справочной системе к Microsoft Project есть описание объектной модели Microsoft Project.
Попробуйте начать с неё.

Также Вам помогут темы форума, посвященные интеграции с Microsoft Office.
Старый 07.07.2006, 21:51   #3  
rootadmin is offline
rootadmin
Участник
Аватар для rootadmin
 
224 / 10 (1) +
Регистрация: 25.03.2003
Адрес: Москва
По карйней мере сразу видно несколько вариантов:
1. Через текстовые файлы
2. Через подключение по ОЛЕ
3. Через SQL таблицы (если MS Project в SQL-е конечно)
4. Через какой-либо еще файл, в который можно что-то выгрузить из Навижна и который поймет Проджект
__________________
С уваженем,
rootadmin
Старый 17.07.2006, 16:20   #4  
kgenius is offline
kgenius
Участник
 
98 / 10 (1) +
Регистрация: 27.10.2004
5. ctrl+c & ctrl+v
:-)))
Старый 18.07.2006, 18:30   #5  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Цитата:
Сообщение от kgenius Посмотреть сообщение
5. ctrl+c & ctrl+v
:-)))

6. Через "бумажный разъем"
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 17.08.2006, 11:44   #6  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
На самом деле в последнее время достали комменты в форуме, типа "..через бумажный разъем.." или "..ты что тупой? Читай help (или MSDN, или документацию)..". Господа, давайте будем конструктивны: если можете подмочь - пишите комменты, если нет идите... (чуть не выругался..) дальше по форуму. На самом деле вариант с использованием базы SQL представляется наиболее удобным, если точно знаешь, что перехода на новую версию MSProject не ожидается. А вообще я сейчас пытаюсь работать с помощью Automation Server'а: Microsoft Project 11.0 Object Library - стандартного COM-компонента MSProject (в моём случае - 2003). Я даже нарыл кое-какие исходники для VB, которые в принципе должны работать и в Nav, только вот столкнулся с такой проблемой: в VB примере используется такой метод (или функция, или что-то ещё) - Nothing. Исходный код выглядит так:

Public pjApp As New MSProject.Application

pjApp = CreateObject("MSProject.Application")
pjApp.Visible = True
pjApp = Nothing

Nav-код я представил так:
//MSPApp = DataType: Automation; Subtype: 'Microsoft Project 11.0 Object Library'.Application
CLEAR(MSPApp);
IF NOT CREATE(MSPApp, TRUE) THEN BEGIN
MESSAGE('Не установлен MS Project!');
EXIT;
END ELSE
MSPApp.Visible(TRUE);

Вроде всё путём должно быть, только реально, когда запускаешь код на исполнение в результате окошко Project'а моргает на экране и сразу закрывается. Вот я и думаю: скорее всего это этот Nothing имеет какое-то значение... потому как если посмотреть свойство MSApp.Projects через C/AL Symbol Menu, то можно увидеть [VAR NOTHING Projects := ] Projects([VAR NOTHING Projects])... тоже Nothing... Что это? Ответьте кто-нибудь? Только прошу, если хотете меня отправить читать help по VB - то лучше не пишите ничего...
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
За это сообщение автора поблагодарили: mira (1).
Старый 17.08.2006, 12:23   #7  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
а Project потом остается открытым? В диспетчере задач его видно?

Кстати, а что если в конце еще поставить CLEAR(MSPApp); ? Думаю глюк в этом
Старый 17.08.2006, 13:05   #8  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
2 Fordewind: Project закрывается при таком представлении, потому как MSPApp объявлена локальной переменной функции. И после отработки функции он хлопается сразу. В диспетчере его ессно нет. Кстати, я разобрался и с Nothing. CLEAR(MSApp) - есть ни что иное как аналог VB-строки: pjApp = Nothing. Кстати, для интереса, попробуйте объявить переменную MSPApp = DataType: Automation; Subtype: 'Microsoft Project 11.0 Object Library'.Application, как глобальную переменную в форме или в кодеюните. ;-)
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 17.08.2006, 13:17   #9  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от Likefire Посмотреть сообщение
CLEAR(MSApp) - есть ни что иное как аналог VB-строки: pjApp = Nothing.
Это я и имел ввиду. Просто не понимал зачем это в конце ставить. Потому и решил, что это баг.
Цитата:
Сообщение от Likefire Посмотреть сообщение
Кстати, для интереса, попробуйте объявить переменную MSPApp = DataType: Automation; Subtype: 'Microsoft Project 11.0 Object Library'.Application, как глобальную переменную в форме или в кодеюните. ;-)
хм.. объявил на форме... ничего в глаза не бросилось. А у вас что вышло?
Старый 01.09.2006, 17:25   #10  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от Fordewind Посмотреть сообщение
хм.. объявил на форме... ничего в глаза не бросилось. А у вас что вышло?
При сохранении объекта выдает ошибку. Цитировать не буду, но скриншот в прикреплении. Моя переменная объявлена под именем PROJECTAPPL...
Изображения
 
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 04.09.2006, 08:44   #11  
Ardak is offline
Ardak
Участник
 
48 / 11 (1) +
Регистрация: 13.07.2006
Большое всем спасибо, разобрался. Получился вот такой код:
Это так наброски, код еще не оптимизировал.

CREATE(Appl);
Appl.Projects.Add;
Appl.Visible(TRUE);
LN:=0;
JBL.RESET;
JBL.SETRANGE("Job No.",CurrentJobNo);
JBL.SETCURRENTKEY(LineNo);
Job.GET("Job No.");
Appl.SelectTaskField(LN,'Name');
Appl.SetTaskField('Name',Job.Description);
Appl.SetTaskField('Start',FORMAT(TODAY));
Appl.SetTaskField('Finish',FORMAT(TODAY));
Appl.SetTaskField('Notes',CurrentJobNo);
Line:=1;

LN:=1;
IF JBL.FIND('-') THEN
Stage:='';
Task:='';

IF JBL.FIND('-') THEN
REPEAT
IF Stage<>JBL."Phase Code" THEN
BEGIN
Phase.GET(JBL."Phase Code");
Appl.SelectTaskField(LN,'Name');
Appl.SetTaskField('Name',Phase.Description);
Appl.SetTaskField('Outline Level',FORMAT(2));
Appl.SetTaskField('Notes',JBL."Phase Code");
Stage:=JBL."Phase Code";
Line+=1;
END;
IF Task<>JBL."Task Code" THEN
BEGIN
TTask.GET(JBL."Task Code");
Appl.SelectTaskField(LN,'Name');
Appl.SetTaskField('Name',TTask.Description);
Appl.SetTaskField('Outline Level',FORMAT(3));
Appl.SetTaskField('Notes',JBL."Task Code");
Task:=JBL."Task Code";
Line+=1;
END;
IF SubTask<>JBL."Step Code" THEN
BEGIN
TSubTask.GET(JBL."Step Code");
Appl.SelectTaskField(LN,'Name');
Appl.SetTaskField('Name',TSubTask.Description);
IF FORMAT(Appl.ActiveProject.ProjectStart)>FORMAT(JBL."Starting Date") THEN
Appl.ActiveProject.ProjectStart:=FORMAT(JBL."Starting Date");
Appl.SetTaskField('Start',FORMAT(JBL."Starting Date"));
Appl.SetTaskField('Finish',FORMAT(JBL.EndDate));
Appl.SetTaskField('Outline Level',FORMAT(4));
Appl.SetTaskField('Notes',JBL."Step Code");
Appl.SetTaskField('Text1',JBL."Work Type Code");
SubTask:=JBL."Step Code"
END;

JBL.CALCFIELDS(Quantity);
JBL.CALCFIELDS(JBL."Re-planned Quantity");
IF JBL.Chargebility=TRUE THEN
Appl.SetTaskField('Work',FORMAT(JBL.Quantity))
ELSE
Appl.SetTaskField('Work',FORMAT(JBL.Quantity+JBL."Re-planned Quantity"));

IF (JBL."Legacy Type"=0) AND (JBL.Parent<>'') THEN
IF JBL.Shift<>0 THEN Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'SS+'+FORMAT(JBL.Shift)+'d')
ELSE Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'SS');

IF (JBL."Legacy Type"=1) AND (JBL.Parent<>'') THEN
IF JBL.Shift<>0 THEN Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'FS+'+FORMAT(JBL.Shift)+'d')
ELSE Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'FS');

IF (JBL."Legacy Type"=2) AND (JBL.Parent<>'') THEN
IF JBL.Shift<>0 THEN Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'FF+'+FORMAT(JBL.Shift)+'d')
ELSE Appl.SetTaskField('Predecessors',FORMAT(StrToInt(JBL.Parent)+Line)+'FF');

CASE JBL.Type OF
JBL.Type::Resource:
BEGIN
Res.GET(JBL."No.");
Res.TESTFIELD(Blocked,FALSE);
Appl.SetTaskField('Resource Names',Res.Name);
END;
JBL.Type::Item:
BEGIN
Item.GET(JBL."No.");
Appl.SetTaskField('Resource Names',Item.Description);
END;
JBL.Type::"G/L Account":
BEGIN
GLAcc.GET(JBL."No.");
GLAcc.CheckGLAcc;
GLAcc.TESTFIELD("Direct Posting",TRUE);
Appl.SetTaskField('Resource Names',GLAcc.Name);
END;
JBL.Type::"Group (Resource)":
BEGIN
ResGr.GET(JBL."No.");
Appl.SetTaskField('Resource Names',ResGr.Name);
END;
END;
LN:=1;
UNTIL JBL.NEXT=0;
MESSAGE('Ok');
CLEAR(Appl);
За это сообщение автора поблагодарили: mira (1).
 


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

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

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