Delphi x MSProject
24/11/2009
0
exemplo:
DM1.QViewCronogramaItem.First;
While Not DM1.QViewCronogramaItem.Eof Do
Begin
x := MSProject.ActiveProject.Tasks.Add(DM1.QViewCronogramaItemNOMEITEMPROJ.AsString);
DM1.QViewCronogramaItem.Next;
End;
Hélio Marques
Posts
23/04/2012
Er Tassara
Estou tentando exportar dados de um SQL para o MSProject. Ví que você, há algum tempo atras, estava com o mesmo problema que eu. Só consegui exportar o nome da tarefa (os demais dados não são exportados, ocorre um erro). Se conseguiu avançar neste projeto, tem como você me dar umas dicas de como fazer esta exportação?
Grato.
Abs,
Er
24/04/2012
Hélio Marques
Este considera a identação caso tenha esta regra:
Procedure TFMSProject.PIdentacao(sItem:string; X:integer; bTem:boolean);
var i, iDef : integer;
begin
SPai := DM1.CDSSelecionadosCODIGOPAI.Value;
if (SPai SPaiAnt) and not (bTem) then
begin
iTamIndentAnt := iTamIndent;
iTamIndent := StrToInt(FloatToStr(length(SPai) / 2));
iDef := (iTamIndent - iTamIndentAnt);
try
if iDef > 0 then
for i := 1 to iDef do
MSProject.ActiveProject.Tasks[X].OutlineIndent
else
for i := 1 to (iDef * -1) do
MSProject.ActiveProject.Tasks[X].OutlineOutdent;
except
beep;
inc(iNumeroErro);
ReLog.SelAttributes.Color:= clRed;
RElog.Lines.append( Erro +FMaskNumero(iNumeroErro)+: Atenção! Nível do Item + sItem + está incorreto. Solucione no Cadastro da Planilha.);
end;
end;
SPaiAnt := SPai;
end;
Enviando datas:
procedure TFMSProject.PMsProjectDataRecursos(sItemLimpo : string; X : Integer);
var dDataINI, dDataFIM : TDateTime;
begin
PFechamento(True);
if Trim(DM1.CDSSelecionadosDTINIP.AsString) then
begin
dDataINI := DM1.CDSSelecionadosDTINI.AsDateTime;
if dDataINI 0 then
MSProject.ActiveProject.Tasks[X].Start := dDataINI;
end;
if Trim(DM1.CDSSelecionadosDTFINP.AsString) then
begin
dDataFim := DM1.CDSSelecionadosDTFINP.AsDateTime;
if dDataFim 0 then
if dPercentual > 0 then
MSProject.ActiveProject.Tasks[X].Finish := IncDay(dDataFim) // Incrementa a Duração por causo que o percentual altera na duração
else
MSProject.ActiveProject.Tasks[X].Finish := dDataFim;
end;
//sRecursos := nome do recurso 1[custo do recurso];nome do recurso 2[custo do recurso]...
MSProject.ActiveProject.Tasks[X].ResourceNames := sRecursos;
MSProject.ActiveProject.Tasks[X].PercentComplete := dPercentual;
if (dPercentual > 0) and (dDataFim 0)then
MSProject.ActiveProject.Tasks[X].Finish := dDataFim; // Reatualiza a Data Final. Porque o percentual altera
end;
04/05/2012
Er Tassara
while (not (cdsResAjustado.Eof)) do
begin
if cdsResAjustado.FieldByName(item).AsInteger > 26 then // Variável utilizada no programa - nada a ver
flagDeslocamento := true; // Variável utilizada no programa - nada a ver
Timer1.Enabled := false;
Task[i] := MSProject.ActiveProject.Tasks.Add(cdsResAjustado.FieldByName(servico).AsString); // Crio uma atividade baseada nome do "servico".
Task[i].Start := Task[i-1].Finish; // Informo que a data inicial desta tarefa é igual a data final da tarefa anterior
Duracao := Calcula_Duracao; // Função que retorna a duração da tarefa
Task[i].Duration := FloatToStr(Duracao);
Task[i].OutlineLevel := IntToStr(3); // Nível da atividade 1 - Mais alto nível - 5 - Mais baixo (igual a identação que você informou no seu código
if cdsResAjustado.FieldByName(item).AsInteger 4 then
begin
Task[i].ResourceNames := 1 Técnico; 1 Instalador; // Posso entrar também com os recursos da tarefa
if i > 9 then
Task[i].Predecessors := IntToStr(i-1);
end else
begin
Task[i].ResourceNames := Coordenador CMT;
//Task[i].Start := Task[i-1].Start;
end;
cdsResAjustado.Next;
Timer1.Enabled := true;
inc(i);
end;
Espero ter ajudado. Qualquer informação adicional, favor entrar em contato.
Abs,
Clique aqui para fazer login e interagir na Comunidade :)