Большое всем спасибо, разобрался. Получился вот такой код:
Это так наброски, код еще не оптимизировал.
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);
|