Mercator 7.3 ou ultérieur permet une gestion des ressources par demi-jours. Cette périodicité est automatiquement disponible dans le déroulant de l'onglet "Ressources" des fiches où la gestion des ressources est activée.
Dans les graphiques de Gantt, les périodes sont notées :
- 01/01/1900 AM : matin
- 01/01/1900 PM : après-midi
Dans les zones permettant la saisie directe d'un format "date-temps" (datetime), les périodes doivent être saisies comme suit :
- 01/01/1900 00:00 : matin
- 01/01/1900 12:00 : après-midi
Afin de faciliter le paramétrage de Mercator en relation avec cette fonctionnalité, 2 Xfonctions ont été ajoutées :
- XampmToTime : conversion d'une chaîne de caractères 01/01/1900 AM ou 01/01/1900 PM en format datetime 01/01/1900 00:00 ou 01/01/1900 12:00
- XtimeToAmpm : conversion d'un temps 01/01/1900 00:00 ou 01/01/1900 12:00 en chaîne de caratères 01/01/1900 AM ou 01/01/1900 PM
Les exemples donnés dans cette rubrique doivent être adaptés pour répondre à la gestion par demi-jours :
Dans l'exemple 1, il faut modifier le trigger TR_LIGNESV_RESS_STOCK_INS, en ajoutant ce bloc sous le bloc /* VERIFICATION QUE TOUTES LES RESSOURCES "HEURES" UTILISEES EXISTENT */
/* VERIFICATION QUE TOUTES LES RESSOURCES "DEMI-JOURS" UTILISEES EXISTENT */
select @info=rtrim(stock.s_modele)+' '+convert(char(10),inserted.moment1,103)+'-'+convert(char(10),inserted.moment2,103)
from inserted inner join STOCK on (inserted.id_article=stock.s_id)
cross join DEMIJOURS
left join RESS on (ress.module='STOCK') and (inserted.id_article=ress.id_sig) and (demijours.sequence=ress.moment1) where (stock.s_ress='D') and (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,stock.s_ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,stock.s_ress)) and (ress.id is null)
if @info is not null
begin
set @info='Ressource inexistante : '+@info+' !'
ROLLBACK TRAN RAISERROR ( @info,16,1 )
RETURN
end
et ce bloc sous le bloc /* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "HEURES" */
/* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "DEMI-JOURS" */
insert into RESSDATA (module,id_sig,id,id2,origine,q,couleur,texte)
select 'STOCK',inserted.id_article,ress.id,right(newid(),10),'V_'+inserted.id+inserted.journal+str(inserted.piece,10)+inserted.dl_id,inserted.q,dbo.type_v(inserted.id,inserted.journal,inserted.piece),dbo.tiers_v(inserted.id,inserted.journal,inserted.piece)
from inserted cross join DEMIJOURS inner join RESS on (ress.module='STOCK') and (inserted.id_article=ress.id_sig) and (demijours.sequence=ress.moment1)
where (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,ress.ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,ress.ress)) and (ress.ress='D') and (inserted.q<>0)
Dans l'exemple 2, il faut modifier le trigger TR_LIGNESV_RESS_PROJ_INS, en ajoutant ce bloc sous le bloc /* VERIFICATION QUE TOUTES LES RESSOURCES "HEURES" UTILISEES EXISTENT */
/* VERIFICATION QUE TOUTES LES RESSOURCES "DEMI-JOURS" UTILISEES EXISTENT */
select @info=rtrim(proj.p_nom)+' '+convert(char(10),inserted.moment1,103)+'-'+convert(char(10),inserted.moment2,103)
from inserted inner join PROJ on (inserted.id_projet=proj.p_id)
cross join DEMIJOURS
left join RESS on (ress.module='PROJ') and (inserted.id_projet=ress.id_sig) and (demijours.sequence=ress.moment1)
where (proj.p_ress='D') and (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,proj.p_ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,proj.p_ress)) and (ress.id is null)
if @info is not null
begin
set @info='Ressource inexistante : '+@info+' !'
ROLLBACK TRAN
RAISERROR ( @info,16,1 )
RETURN
end
et ce bloc sous le bloc /* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "HEURES" */
/* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "DEMI-JOURS" */
insert into RESSDATA (module,id_sig,id,id2,origine,q,couleur,texte)
select 'PROJ',inserted.id_projet,ress.id,right(newid(),10),'V_'+inserted.id+inserted.journal+str(inserted.piece,10)+inserted.dl_id,inserted.q_ress,dbo.type_v(inserted.id,inserted.journal,inserted.piece),inserted.texte
from inserted
cross join DEMIJOURS
inner join RESS on (ress.module='PROJ') and (inserted.id_projet=ress.id_sig) and (demijours.sequence=ress.moment1)
where (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,ress.ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,ress.ress)) and (ress.ress='D') and (inserted.q_ress<>0)
Dans l'exemple 3, il faut modifier le trigger TR_LIGNESA_RESS_DEST_INS, en ajoutant ce bloc sous le bloc /* VERIFICATION QUE TOUTES LES RESSOURCES "HEURES" UTILISEES EXISTENT */
/* VERIFICATION QUE TOUTES LES RESSOURCES "DEMI-JOURS" UTILISEES EXISTENT */
select @info=rtrim(dest.d_nom)+' '+convert(char(10),inserted.moment1,103)+'-'+convert(char(10),inserted.moment2,103)
from inserted inner join DEST on (inserted.id_destin=dest.d_id)
cross join DEMIJOURS left join RESS on (ress.module='DEST') and (inserted.id_destin=ress.id_sig) and (demijours.sequence=ress.moment1)
where (dest.d_ress='D') and (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,dest.d_ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,dest.d_ress)) and (ress.id is null)
if @info is not null
begin
set @info='Ressource inexistante : '+@info+' !'
ROLLBACK TRAN
RAISERROR ( @info,16,1 )
RETURN
end
et ce ce bloc sous le bloc /* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "HEURES" */
/* AJOUTS DES CONSOMMATIONS DE RESSOURCES PAR "DEMI-JOURS" */
insert into RESSDATA (module,id_sig,id,id2,origine,q,couleur,texte)
select 'DEST',inserted.id_destin,ress.id,right(newid(),10),'A_'+inserted.id+inserted.journal+str(inserted.piece,10)+inserted.dl_id,inserted.q_ress,inserted.atelier,inserted.designatio
from inserted
cross join DEMIJOURS
inner join RESS on (ress.module='DEST') and (inserted.id_destin=ress.id_sig) and (demijours.sequence=ress.moment1)
where (demijours.sequence>=dbo.ROUNDTIME(inserted.moment1,ress.ress)) and (demijours.sequence<=dbo.ROUNDTIME(inserted.moment2,ress.ress)) and (ress.ress='D') and (inserted.q_ress<>0)