Do not let any software impress you!

Only let it convince your intellect.
Slider img 1
Do not look for a business paradise!

It is a waste of time.
Slider img 2
Only yourself can push you uphill.

There is no easy road to prizes.
Slider img 3
Productivity is the name of the game.

And you have to conquer it.
Slider img 4
As long as you understand it,

you will start to build your know-how.
Slider img 5
We can help with that.

We have the tools and the method.
Slider img 6
Procedure : AU_PPC_EXPERT

AutoScript

start_agent_info
   AgentName = "AU_PPC_EXPERT"
   AgentDescr = "Production Planning and Control Expert"
   AgentLanguage = ""
   __timer_interval = 0 {....define (in seconds) the timer interval for the wake up}
   __delete_on_termination = 0 {....1=the agent frees itself when terminates its task}
end_agent_info

start_action

    function = __params[1]
    scode    = __params[2]
    scode    = strcat(scode,"%")

    __create_html = 1
    __html_type = "DASHBOARD"    

    window_caption = "Production Planning"

    {........................................SUMMARY..................................}
    if (function = "SUMMARY") then

       id = 0

       {--------------------------------- Production Start Date ----------------------------}
       id = id + 1
       lab_caption[id] = "Production Start Date"
       start_sql "*" "KOSMOS"
         SELECT SDATE1, SDATE2, STIME1, STIME2
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = '0') AND (STIME > 0)
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)

       call TFirst(q)
       dd1 = TGetFld(q,"SDATE1")                                                        
       tt1 = TGetFld(q,"STIME1")

       call TLast(q)
       dd2 = TGetFld(q,"SDATE2")
       tt2 = TGetFld(q,"STIME2")

       val_caption[id] = dd1

       expand_collapse[id] = False
       expanded[id]        = False
       expand_height[id] = 0
       call FreeEmbSQL(q)

       {--------------------------------- Production Start Time----------------------------}
       id = id + 1
       lab_caption[id] = "Production Start Time"
       val_caption[id] = tt1

       expand_collapse[id] = False
       expanded[id]        = False
       expand_height[id] = 0

       {--------------------------------- Production Finish Date ----------------------------}
       id = id + 1
       lab_caption[id] = "Production Finish Date"
       val_caption[id] = dd2

       expand_collapse[id] = False
       expanded[id]        = False
       expand_height[id] = 0

       {--------------------------------- Production Finish Time ----------------------------}
       id = id + 1
       lab_caption[id] = "Production Finish Time"
       val_caption[id] = tt2

       expand_collapse[id] = False
       expanded[id]        = False
       expand_height[id] = 0

       {--------------------------------- Optimum Production Makespan in Days----------------------------}
       id = id + 1
       lab_caption[id] = "Optimum Production Makespan in Days"
       start_sql "*" "KOSMOS"
         SELECT SDATE1, SDATE2, STIME1, STIME2
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = "1") AND (STIME > 0)
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)

       call TFirst(q)
       dd1 = TGetFld(q,"SDATE1")
       tt1 = TGetFld(q,"STIME1")
       dd1 = DateToNum(dd1)
       tt1 = TimeToNum(tt1)

       call TLast(q)
       dd2 = TGetFld(q,"SDATE2")
       tt2 = TGetFld(q,"STIME2")
       dd2 = DateToNum(dd2)
       tt2 = TimeToNum(tt2)

       days0 = dd2 + tt2 - dd1 - tt1
       days0 = format("%.2f",days0)

       val_caption[id] = days0
       val_unit[id] = "Days"

       row_color[id]       = RGBToColor(193,255,132)
       expand_collapse[id] = True
       expanded[id]        = False
       expand_height[id] = 0
       expand_to_window[id]= True
       agent_function[id] = "GANTT_SCHED_OPT"
       agent_function_param1[id] = __params[2]
       call FreeEmbSQL(q)

       {--------------------------------- Production Makespan in Days----------------------------}
       id = id + 1
       lab_caption[id] = "Production Makespan in Days"
       start_sql "*" "KOSMOS"
         SELECT SDATE1, SDATE2, STIME1, STIME2
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = "0") AND (STIME > 0)
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)

       call TFirst(q)
       d1 = TGetFld(q,"SDATE1")
       t1 = TGetFld(q,"STIME1")
       d1 = DateToNum(d1)
       t1 = TimeToNum(t1)

       call TLast(q)
       d2 = TGetFld(q,"SDATE2")
       t2 = TGetFld(q,"STIME2")
       d2 = DateToNum(d2)
       t2 = TimeToNum(t2)

       days = d2 + t2 - d1 - t1
       days = format("%.2f",days)

       val_caption[id] = days
       val_unit[id] = "Days"

       row_color[id]       = RGBToColor(252,153,135)
       expand_collapse[id] = True
       expanded[id]        = False
       expand_height[id] = 0
       expand_to_window[id]= True
       agent_function[id] = "GANTT_SCHED"
       agent_function_param1[id] = __params[2]
       call FreeEmbSQL(q)

       {--------------------------------- Production Makespan in Hours----------------------------}
       id = id + 1
       lab_caption[id] = "Production Makespan in Hours"

       hours = days*24
       hours = format("%.2f",hours)

       val_caption[id] = hours
       val_unit[id] = "Hours"

       expand_collapse[id] = True
       expanded[id]        = True
       expand_height[id] = 0
       expand_to_window[id]= True
       agent_function[id] = "GANTT_SCHED"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Labor Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = "Labor Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SHHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours = days * 24
       hours = format("%.1f",hours)
       val_caption[id] = hours
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       {--------------------------------- Labor Setup Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = " Setup Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SHHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (AU_STEP_SCHED.ACTIVITY LIKE "setup%") AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours1 = days * 24
       hours1 = format("%.1f",hours1)
       val_caption[id] = hours1
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       {--------------------------------- Labor Production Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = " Production Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SHHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (AU_STEP_SCHED.ACTIVITY LIKE "prod%") AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours2 = days * 24
       hours2 = format("%.1f",hours2)
       val_caption[id] = hours2
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       {--------------------------------- Labor Setup Cost ----------------------------}
       id = id + 1
       lab_caption[id] = " Setup Labor Cost"
       cost1 = hours1 * 10
       cost1 = format("%.0f",cost1)
       val_caption[id] = cost1
       val_unit[id] = "Euros"

       {--------------------------------- Labor Production Cost ----------------------------}
       id = id + 1
       lab_caption[id] = " Production Labor Cost"
       cost2 = hours2 * 8
       cost2 = format("%.0f",cost2)
       val_caption[id] = cost2
       val_unit[id] = "Euros"

       {--------------------------------- Machine Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = "Machine Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SMHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours = days * 24
       hours = format("%.1f",hours)
       val_caption[id] = hours
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       {--------------------------------- Machine Setup Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = " Setup Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SMHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (AU_STEP_SCHED.ACTIVITY LIKE "setup%") AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours1 = days * 24
       hours1 = format("%.1f",hours1)
       val_caption[id] = hours1
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_SETUP"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Machine Production Hours Requirement ----------------------------}
       id = id + 1
       lab_caption[id] = " Production Hours Requirement"
       start_sql "*" "KOSMOS"
         SELECT SUM(SMHOURS) AS DAYS
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (AU_STEP_SCHED.ACTIVITY LIKE "prod%") AND (OPTIMUM_FLAG = "0")
       end_sql
       q = QueryByName()
       call TSetParam(q,"P",__params[2])
       call TExecute(q)
       days = TGetFld(q,"DAYS")
       hours2 = days * 24
       hours2 = format("%.1f",hours2)
       val_caption[id] = hours2
       val_unit[id] = "Hours"
       call FreeEmbSQL(q)

       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_PROD"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Machine Setup Cost ----------------------------}
       id = id + 1
       lab_caption[id] = " Setup Machine Cost"
       cost1 = hours1 * 10
       cost1 = format("%.0f",cost1)
       val_caption[id] = cost1
       val_unit[id] = "Euros"

       {--------------------------------- Machine Production Cost ----------------------------}
       id = id + 1
       lab_caption[id] = " Production Machine Cost"
       cost2 = hours2 * 8
       cost2 = format("%.0f",cost2)
       val_caption[id] = cost2
       val_unit[id] = "Euros"
       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "INCREMENTAL_WORKFORCE"
       agent_function_param1[id] = __params[2]


       {--------------------------------- Optimized Unused Machine Time in Hours----------------------------}
       id = id + 1
       lab_caption[id] = "Optimized Unused Machine Time in Hours"
       start_sql "*" "KOSMOS"
         SELECT AU_RESOURCE_GROUP
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = "1")
         GROUP BY AU_RESOURCE_GROUP
       end_sql
       q0 = QueryByName()
       call TSetParam(q0,"P",__params[2])
       call TExecute(q0)
       count0 = TRecordCount(q0)
       call TFirst(q0)
       unused = 0
       sum0 = 0
       days0 = 0                                                        
       for j = 1 to count0

         rg_id = TGetFld(q0,"AU_RESOURCE_GROUP")

         start_sql "*" "KOSMOS"
         SELECT SDATE1, SDATE2, STIME1, STIME2
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = '1')
         AND (AU_RESOURCE_GROUP = :R)
         ORDER BY AU_STEP_SCHED
         end_sql
         q = QueryByName()
         call TSetParam(q,"P",__params[2])
         call TSetParam(q,"R",rg_id)
         call TExecute(q)

         call TFirst(q)
         d1 = TGetFld(q,"SDATE1")
         t1 = TGetFld(q,"STIME1")
         d1 = DateToNum(d1)
         t1 = TimeToNum(t1)

         call TLast(q)
         d2 = TGetFld(q,"SDATE2")
         t2 = TGetFld(q,"STIME2")
         d2 = DateToNum(d2)
         t2 = TimeToNum(t2)
         call FreeEmbSQL(q)

         days = d2 + t2 - d1 - t1
         days0 = days0 + days

         sum = SelectFrom("SELECT SUM(STIME) FROM AU_STEP_SCHED WHERE (AU_PROCESS=",__params[2],") AND (AU_RESOURCE_GROUP=",rg_id,") AND (OPTIMUM_FLAG = '0')")
         sum0 = sum0 + sum

         unused = unused + days - sum

         call TNext(q0)
       next
       call FreeEmbSQL(q0)

       unused = unused * 24
       unused = format("%.2f",unused)

       sum0 = sum0 * 24
       days0 = days0 * 24

       val_caption[id] = unused
       val_unit[id] = "Hours"

       row_color[id]       = RGBToColor(193,255,132)
       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_GAP_OPT"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Optimized Usage of Machine Time ----------------------------}
       id = id + 1
       lab_caption[id] = "Optimized Usage of Machine Time"

       pc = 0+(days0-unused) / days0 * 100
       pc = format("%.1f",pc)

       val_caption[id] = pc
       val_unit[id] = "%"
       row_color[id]       = RGBToColor(193,255,132)
       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_GAP_OPT"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Unused Machine Time in Hours----------------------------}
       id = id + 1
       lab_caption[id] = "Unused Machine Time in Hours"
       start_sql "*" "KOSMOS"
         SELECT AU_RESOURCE_GROUP
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = '0')
         GROUP BY AU_RESOURCE_GROUP
       end_sql
       q0 = QueryByName()
       call TSetParam(q0,"P",__params[2])
       call TExecute(q0)
       count0 = TRecordCount(q0)
       call TFirst(q0)
       unused = 0
       sum0 = 0
       days0 = 0
       for j = 1 to count0

         rg_id = TGetFld(q0,"AU_RESOURCE_GROUP")        

         start_sql "*" "KOSMOS"
         SELECT SDATE1, SDATE2, STIME1, STIME2
         FROM AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :P) AND (OPTIMUM_FLAG = '0')
         AND (AU_RESOURCE_GROUP = :R)
         ORDER BY AU_STEP_SCHED
         end_sql
         q = QueryByName()
         call TSetParam(q,"P",__params[2])
         call TSetParam(q,"R",rg_id)
         call TExecute(q)

         call TFirst(q)
         d1 = TGetFld(q,"SDATE1")
         t1 = TGetFld(q,"STIME1")
         d1 = DateToNum(d1)
         t1 = TimeToNum(t1)

         call TLast(q)
         d2 = TGetFld(q,"SDATE2")
         t2 = TGetFld(q,"STIME2")
         d2 = DateToNum(d2)
         t2 = TimeToNum(t2)
         call FreeEmbSQL(q)

         days = d2 + t2 - d1 - t1
         days0 = days0 + days

         sum = SelectFrom("SELECT SUM(STIME) FROM AU_STEP_SCHED WHERE (AU_PROCESS=",__params[2],") AND (AU_RESOURCE_GROUP=",rg_id,") AND (OPTIMUM_FLAG = '0')")
         sum0 = sum0 + sum

         unused = unused + days - sum

         call TNext(q0)
       next
       call FreeEmbSQL(q0)

       unused = unused * 24
       unused = format("%.2f",unused)

       sum0 = sum0 * 24
       days0 = days0 * 24

       val_caption[id] = unused
       val_unit[id] = "Hours"

       row_color[id]       = RGBToColor(252,153,135)
       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_GAP"
       agent_function_param1[id] = __params[2]

       {--------------------------------- Usage of Machine Time ----------------------------}
       id = id + 1
       lab_caption[id] = "Usage of Machine Time"

       pc = 0+(days0-unused) / days0 * 100
       pc = format("%.1f",pc)

       val_caption[id] = pc
       val_unit[id] = "%"

       row_color[id]       = RGBToColor(252,153,135)
       expand_collapse[id] = True
       expand_to_window[id]= True
       expanded[id]        = True
       expand_height[id] = 0
       agent_function[id] = "GANTT_SCHED_GAP"
       agent_function_param1[id] = __params[2]

       lab_count = id
       return
    endif

    {.......................................INCREMENTAL_WORKFORCE................................}
    if (function = "INCREMENTAL_WORKFORCE") then     {keep}

       line_series = True
       title = strcat("Workforce Chart for Process ",__params[2])
       draw_type = "CHART"                                          
       y_count = 1
       show_legend = True

       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.AU_PROCESS, AU_STEP_SCHED.ACTIVITY, AU_STEP_SCHED.SWORKERS, AU_RESOURCE_LOG.STIME0, AU_RESOURCE_LOG.MODE
         FROM AU_RESOURCE_LOG INNER JOIN AU_STEP_SCHED ON AU_RESOURCE_LOG.AU_STEP_SCHED = AU_STEP_SCHED.AU_STEP_SCHED
         WHERE (AU_STEP_SCHED.AU_PROCESS = :PR)
         ORDER BY AU_RESOURCE_LOG.STIME0
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       msg = error_message(q)
       count1 = TRecordCount(q)

       i = 1
       sum1 = 0
       sum2 = 0
       call TFirst(q)
       for j = 1 to count1
         activ = TGetFld(q,"ACTIVITY")
         x[i] = TGetFld(q,"STIME0")
         y = TGetFld(q,"SWORKERS")
         mode = TGetFld(q,"MODE")
         if (activ = "setup") then
         y1[i] = sum1
         i = i + 1
         if (mode = "START") then
                 sum1 = sum1 + y
         endif
         if (mode = "STOP") then
                 sum1 = sum1 - y
         endif
         i1 = i - 1
         x[i] = x[i1]
         y1[i] = sum1
         i = i + 1
         endif

         call TNext(q)
       next
       call FreeEmbSQL(q)

       count = i - 1

       for i = 1 to count                                                        
         call trace("i=",i,", x=",x[i],", y=",y1[i])
       next

       color[1] = StringToColor("clBlue")
       color[2] = StringToColor("clRed")
       color[3] = StringToColor("clGreen")

       return
    endif

    {.......................................GET_ROLES_PARTICIPATION..........................}
    if (function = "GET_ROLES_PARTICIPATION") then         {keep}

       hbar_series = True
       title = "Count of Closed Activities per Role"
       draw_type = "CHART"
       y_count = 1
       show_legend = False

       start_sql "*" "KOSMOS"
         SELECT AU_STEP.RNAME AS RN, Count(AU_STEP.UNAME) AS CNT
         FROM AU_STEP INNER JOIN AU_POS ON AU_STEP.RNAME = AU_POS.POS_D
         WHERE (((AU_STEP.FINISHED)=1) AND ((AU_STEP.RNAME) Is Not Null Or (AU_STEP.RNAME)=''))
         AND ((AU_POS.DCODE) LIKE :C)
         GROUP BY AU_STEP.RNAME
         ORDER BY AU_STEP.RNAME
       end_sql
       q = QueryByName()
       call TSetParam(q,"C",scode)
       call TExecute(q)
       msg = error_message(q)
       count = TRecordCount(q)
       if (count = 0) then
         call FreeEmbSQL(q)
         return
       endif
       call TFirst(q)
       for i = 1 to count
         x[i] = TGetFld(q,"RN")
         y1[i] = TGetFld(q,"CNT")
         call TNext(q)
       next
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GET_ASSIGNED_ACTIVITIES..........................}
    if (function = "GET_ASSIGNED_ACTIVITIES") then

       line_series = True
       title = "Assigned Activities / Closed Activities and Activities Acumulated"
       draw_type = "CHART"
       y_count = 3
       line1 = "Assinged"
       line2 = "Closed"
       line3 = "Acumulated"
       show_legend = True
       left_axis_title = "Count of Activities"
       bottom_axis_title = "Days since the begining"

       start_sql "*" "KOSMOS"
         SELECT AU_STEP.ASSIGNED_AT_DATE, Count(AU_STEP.AU_STEP) AS CNT
         FROM AU_STEP INNER JOIN AU_POS ON AU_STEP.RNAME = AU_POS.POS_D
         WHERE ((AU_POS.DCODE Like :C) AND (AU_STEP.AU_PROCESS > 0))
         GROUP BY AU_STEP.ASSIGNED_AT_DATE
         ORDER BY AU_STEP.ASSIGNED_AT_DATE
       end_sql
       q = QueryByName()
       call TSetParam(q,"C",scode)
       call TExecute(q)
       count = TRecordCount(q)
       if (count = 0) then
         call FreeEmbSQL(q)
         return
       endif
       call TFirst(q)
       date1 = TGetFld(q,"ASSIGNED_AT_DATE")
       date2 = crDate
       date1_num = DateToNum(date1)
       date2_num = DateToNum(date2)
       array_dim = date2_num - date1_num

       if (array_dim > 0) then

         for i = 1 to array_dim+1
         x[i] = i
         y1[i] = 0
         y2[i] = 0
         y3[i] = 0
         next

         for i = 1 to count
         d1 = TGetFld(q,"ASSIGNED_AT_DATE")
         d = DateToNum(d1)
         d = d - date1_num

         y1[d+1] = TGetFld(q,"CNT")
call trace("ass d1=",d1,", cnt=",y1[d+1])
         call TNext(q)
         next
         call FreeEmbSQL(q)

         start_sql "*" "KOSMOS"
         SELECT AU_STEP.FINISHED_AT_DATE, Count(AU_STEP.AU_STEP) AS CNT
         FROM AU_STEP INNER JOIN AU_POS ON AU_STEP.RNAME = AU_POS.POS_D
         WHERE ((AU_POS.DCODE Like :C) AND (AU_STEP.AU_PROCESS > 0) AND (AU_STEP.FINISHED=1))
         GROUP BY AU_STEP.FINISHED_AT_DATE
         ORDER BY AU_STEP.FINISHED_AT_DATE
         end_sql
         q1 = QueryByName()
         call TSetParam(q1,"C",scode)
         call TExecute(q1)
         count = TRecordCount(q1)
         call TFirst(q1)

         for i = 1 to count
         d1 = TGetFld(q1,"FINISHED_AT_DATE")
         d = DateToNum(d1)
         d = d - date1_num

         y2[d+1] = TGetFld(q1,"CNT")

         call TNext(q1)
         next
         call FreeEmbSQL(q1)

         for i = 1 to array_dim+1
         if (i = 1) then
                 y3[i] = y1[i] - y2[i]
         elseif (i > 1) then
                 y3[i] = y3[i-1] + y1[i] - y2[i]
         endif
call trace("d=",i,", y1=",y1[i],", y2=",y2[i],", y3=",y3[i])
         next

         count = array_dim+1
       endif

       return
    endif

    {.......................................GANTT_SCHED_OPT..........................}
    if (function = "GANTT_SCHED_OPT") then

       gantt_series = True
       title = strcat("Optimum Scheduled Activities for Process : ",__params[2])
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True
                                                                                        
       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (OPTIMUM_FLAG = "1")
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()              
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       for i = 1 to count
         color[i] = TGetFld(q,"COLOR_ID")
         y[i] = TGetFld(q,"AU_RESOURCE_GROUP")
         descr[i] = TGetFld(q,"GTITLE")
         hint[i] = TGetFld(q,"OREASON")

         d1 = TGetFld(q,"SDATE1")
         d2 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME1")
         t2 = TGetFld(q,"STIME2")

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)
         d1[i] = d1 + t1
         d2[i] = d2 + t2

         call TNext(q)
       next
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GANTT_SCHED..........................}
    if (function = "GANTT_SCHED") then

       gantt_series = True
       title = strcat("Scheduled Activities for Process : ",__params[2]," (Restrictions)")
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True

       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (OPTIMUM_FLAG = '0')
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       for i = 1 to count
         color[i] = TGetFld(q,"COLOR_ID")
         y[i] = TGetFld(q,"AU_RESOURCE_GROUP")
         descr[i] = TGetFld(q,"GTITLE")
         hint[i] = TGetFld(q,"OREASON")

         d1 = TGetFld(q,"SDATE1")
         d2 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME1")
         t2 = TGetFld(q,"STIME2")

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)
         d1[i] = d1 + t1
         d2[i] = d2 + t2

         call TNext(q)
       next
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GANTT_SCHED_SETUP..........................}
    if (function = "GANTT_SCHED_SETUP") then

       gantt_series = True
       title = strcat("Scheduled Setup for Process : ",__params[2])
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True

       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (ACTIVITY LIKE 'setup%') AND (OPTIMUM_FLAG = '0')
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       for i = 1 to count
         color[i] = StringToColor("clRed")
         y[i] = TGetFld(q,"AU_RESOURCE_GROUP")
         descr[i] = TGetFld(q,"GTITLE")
         hint[i] = TGetFld(q,"OREASON")

         d1 = TGetFld(q,"SDATE1")
         d2 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME1")
         t2 = TGetFld(q,"STIME2")

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)
         d1[i] = d1 + t1
         d2[i] = d2 + t2

         call TNext(q)
       next
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GANTT_SCHED_PROD.........................}
    if (function = "GANTT_SCHED_PROD") then

       gantt_series = True
       title = strcat("Scheduled Production for Process : ",__params[2])
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True

       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (ACTIVITY LIKE 'prod%') AND (OPTIMUM_FLAG = '0')
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       for i = 1 to count
         color[i] = StringToColor("clLime")
         y[i] = TGetFld(q,"AU_RESOURCE_GROUP")
         descr[i] = TGetFld(q,"GTITLE")
         hint[i] = TGetFld(q,"OREASON")

         d1 = TGetFld(q,"SDATE1")
         d2 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME1")
         t2 = TGetFld(q,"STIME2")

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)
         d1[i] = d1 + t1
         d2[i] = d2 + t2

         call TNext(q)
       next
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GANTT_SCHED_GAP.........................}
    if (function = "GANTT_SCHED_GAP") then

       gantt_series = True
       title = strcat("Unused Times for Process : ",__params[2])
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True

       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (OPTIMUM_FLAG = '0')
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       off = 0
       for i = 1 to count

         rg_id1 = TGetFld(q,"AU_RESOURCE_GROUP")
         d1 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME2")
         str1 = strcat(d1,t1)

         call TNext(q)
         d2 = TGetFld(q,"SDATE1")
         t2 = TGetFld(q,"STIME1")
         str2 = strcat(d2,t2)

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)

         rg_id2 = TGetFld(q,"AU_RESOURCE_GROUP")

         dif_rg = rg_id2-rg_id1
         dif_tim = d2+t2-d1-t1

         if (dif_rg = 0) and (str1 <> str2) then

         off = off + 1

         color[off] = StringToColor("clBlue")
         y[off] = rg_id1
         descr[off] = strcat("Station ",y[off])
         descr[off] = TGetFld(q,"GTITLE")
         d1[off] = d1 + t1
         d2[off] = d2 + t2

         endif

       next
       count = off
       call FreeEmbSQL(q)

       return
    endif

    {.......................................GANTT_SCHED_GAP_OPT.........................}
    if (function = "GANTT_SCHED_GAP_OPT") then

       gantt_series = True
       title = strcat("Optimized Unused Times for Process : ",__params[2])
       bottom_axis_title = "Time"
       left_axis_title = "Machinery"
       draw_type = "CHART"
       y_count = 1
       show_legend = True
                                                                
       start_sql "*" "KOSMOS"
         SELECT AU_STEP_SCHED.*, AU_RESOURCE_GROUP.GTITLE
         FROM AU_STEP_SCHED INNER JOIN AU_RESOURCE_GROUP
         ON AU_STEP_SCHED.AU_RESOURCE_GROUP = AU_RESOURCE_GROUP.AU_RESOURCE_GROUP
         WHERE (AU_PROCESS= :PR) AND (OPTIMUM_FLAG = '1')
         ORDER BY AU_STEP_SCHED
       end_sql
       q = QueryByName()
       call TSetParam(q,"PR",__params[2])
       call TExecute(q)
       count = TRecordCount(q)

       call TFirst(q)
       off = 0
       for i = 1 to count

         rg_id1 = TGetFld(q,"AU_RESOURCE_GROUP")
         d1 = TGetFld(q,"SDATE2")
         t1 = TGetFld(q,"STIME2")
         str1 = strcat(d1,t1)

         call TNext(q)
         d2 = TGetFld(q,"SDATE1")
         t2 = TGetFld(q,"STIME1")
         str2 = strcat(d2,t2)

         d1 = DateToNum(d1)
         d2 = DateToNum(d2)
         t1 = TimeToNum(t1)
         t2 = TimeToNum(t2)

         rg_id2 = TGetFld(q,"AU_RESOURCE_GROUP")

         dif_rg = rg_id2-rg_id1
         dif_tim = d2+t2-d1-t1

         if (dif_rg = 0) and (str1 <> str2) then

         off = off + 1

         color[off] = StringToColor("clBlue")
         y[off] = rg_id1
         descr[off] = strcat("Station ",y[off])
         descr[off] = TGetFld(q,"GTITLE")
         d1[off] = d1 + t1
         d2[off] = d2 + t2

         endif

       next
       count = off
       call FreeEmbSQL(q)

       return
    endif


end_action