Äëÿ çàïóñêà äàííîãî ìàêðîñà íåîáõîäèìî ïåðåéòè â ðåæèì «Ïðîèçâîäñòâî»-«Ïëàí ïðîèçâîäñòâà», è âûáðàòü «Ïëàí èçãîòîâëåíèÿ».

 

Ìàêðîñ «Ðàñ÷åò ïîîïåðàöèîííîãî âðåìåíè íà÷àëà/êîíöà ðàáîò ñ ó÷åòîì ñìåííîñòè». Ïîçâîëÿåò èñïîëüçóÿ äàòû è âðåìÿ çàïóñêà ïîçèöèé ïëàíà èçãîòîâëåíèÿ è òðóäîåìêîñòè ïîðíîðìèðîâàííûå â òåõíîëîãè÷åñêèõ ïðîöåññàõ, ðàññ÷èòàòü è çàíåñòè äàòû è âðåìÿ çàïóñêà íà êàæäóþ îïåðàöèþ ÒÏ.

 

Sub FormMacro_TSTSMOperationTime(TCSActiveModule)    

'

' Âû÷èñëåíèå ïîîïåðàöèîííûõ äàò è âðåìåí íà÷àëà/îêîí÷àíèÿ ðàáîò ñ ó÷åòîì êîýôôèöèåíòà ñìåííîñòè

' ïî óïðîùåííîìó êàëåíäàðþ:

'

' 08-00  16-00  1 ñìåíà

' 16-00  24-00  2 ñìåíà

' 24-00  08-00  3 ñìåíà 

'

' Ñîîòâåòñòâåííî: 1 ñìåííàÿ ðàáîòà  8 ÷àñîâ 08-00 16-00

'                 2 ñìåííàÿ ðàáîòà 16 ÷àñîâ 08-00 24-00

'                 3 ñìåííàÿ ðàáîòà 24 ÷àñà  08-00 16-00

'

    Dim I,J,K      'Ñëóæåáíûå ïåðåìåííûå

    Dim IFirst     ' ID ïðåäûäóùåé ïîçèöèè ïëàíà

    Dim INext      ' ID ñëåäóþùåé ïîçèöèè ïëàíà

    Dim IFirstOP   ' ID ïðåäûäóùåé îïåðàöèè

    Dim INextOP    ' ID ñëåäóþùåé îïåðàöèè                                     

    Dim RowsCount  'Êîëè÷åñòâî âûäåëåííûõ çàïèñåé

    Dim msBM() 'Ìàññèâ ññûëîê íà âûäåëåííûå çàïèñè

    Dim Dz           'Äàòà çàïóñêà ïðåäûäóùàÿ

    Dim Dw          'Äàòà âûïóñêà ïðåäûäóùàÿ

    Dim Tr           'Òðóäîåìêîñòü ïðåäûäóùàÿ

    Dim Dz1         'Äàòà çàïóñêà ñëåäóþùàÿ

    Dim Dw1        'Äàòà âûïóñêà ñëåäóþùàÿ

    Dim Tmo        'Ìåæîïåðàöèîííîå âðåìÿ

    Dim CTmin    'Ñëóæåáíàÿ ïåðåìåííàÿ äëÿ âû÷èñëåíèÿ âðåìåíè â ìèíóòàõ

    Dim Sostav     'Ñîñòàâ èçäåëèÿ ïî ÏÑï

    Dim Tp           'ÒÏ èç êîëëåêöèè

    Dim IStr,JStr 'Ñëóæåáíàÿ ñòðîêîâàÿ ïåðåìåííàÿ

    Dim Sm           'Êîýôôèöèåíò ñìåííîñòè (êîëè÷åñòâî ñìåí â ñóòêè)

    Dim SmD        'Ñëóæåáíàÿ ïåðåìåííàÿ (êîëè÷åñòâî ñìåí ì-äó çàïóñêîì è âûïóñêîì)

'     

    RowsCount = TCSActiveModule.SelectedRowsCount                   ' Çàïîìíèòü êîëè÷åñòâî âûäåëåííûõ çàïèñåé

    If RowsCount > 0 Then                                           ' Åñëè âûäåëåííûå çàïèñè åñòü, òî

    Sm=1                                                            ' Çàäàòü ïî óìîë÷àíèþ îäíó ñìåíó

    Sm=TCSApp.InputBox("Ââåäèòå êîýôôèöèåíò ñìåííîñòè","(1,2,3)",Sm)' Ââåñòè êîýôôèöèåíò ñìåííîñòè

    If Sm=1 Or Sm=2 Or Sm=3 Then                                    ' Åñëè êîýôôèöèåíò ñìåííîñòè ââåäåí ïðàâèëüíî, òî

        Redim msBM( RowsCount - 1 )                                 ' Îïðåäåëèòü íåîáõîäèìûé ðàçìàð ìàññèâà äëÿ çàïîìèíàíèÿ ññûëîê

                                                                    '

        For I = 0 To RowsCount - 1                                  ' Ïåðåáðàòü âûäåëåííûå çàïèñè ñïåöèôèêàöèè

            If TCSActiveModule.GotoSelectedRow(I) Then              ' Âñòàòü íà î÷åðåäíóþ âûäåëåííóþ çàïèñü

                msBM( I ) = TCSActiveModule.GetBookmark             ' È çàïîìíèòü åå â ìàññèâå

            End If                                                  '

        Next                                                        '

        TCSActiveModule.Refresh                                     ' Cáðîñèòü âûäåëåíèå 

        Call TCSActiveModule.GotoBookmark( msBM( 0 ) )              ' Ïîçèöèîíèðîâàòüñÿ íà ïåðâóþ çàïèñü âûäåëåíèÿ

'

' Îïðåäåëåíèå âðåìåíè íà÷àëà ðàáîò (äëÿ ïåðâîé çàïèñè)

'           

                If TCSActiveModule.Properties("WorkStart").IsNull Then        ' Åñëè òåêóùàÿ äàòà çàïóñêà íå çàíåñåíà 

                    Set Sostav = TCSApp.Manufacturing.ProductionBOMStructure( TCSActiveModule.Properties("PRODUCTIONBOM_ID").AsInteger, -1, TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger )'Âçÿòü ÏÑï

                   '   LogObject.ShowPropExplorer(Sostav)

                    Set Tp = Sostav.Properties("ProductionBOMProcess").AsIDispatch ' Âçÿòü ÒÏ ïîçèöèè ñîñòàâà ÏÑï

                      If Sostav.Properties("SCHEDULE_LAUNCH_DATE").IsNull Then     ' Åñëè ïëàíîâîé äàòû çàïóñêà íåò â ÏÑï

                        If Sostav.Properties("CALC_LAUNCH_DATE").IsNull Then       ' Ïîïûòàòüñÿ âçÿòü åå èç ðàñ÷åòíîé äàòû

                           II = Tp.Locate( "ID", TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger,0 )' Ïåðåéòè ê ñîîòâåòñòâóþùåé îïåðàöèè

                           IStr=" Îïåðàöèÿ: " + Tp.Properties("OPERATION_NUMBER").AsSafeString + " " + Tp.Properties("OPERATION_NOTE").AsSafeString + " " + Tp.Properties("OPERATION_NAME").AsSafeString

                           Dz=TCSApp.InputBox("Ââåäèòå äàòó çàïóñêà äëÿ",IStr,Dz)  ' Ââåñòè äàòó çàïóñêà âðó÷íóþ

                        Else                                                       '

                           Dz=Sostav.Properties("CALC_LAUNCH_DATE").AsDate         ' Âçÿòü èç ðàñ÷åòíîé äàòû     

                        End If                                                     '

                      Else                                                         '

                       Dz=Sostav.Properties("SCHEDULE_LAUNCH_DATE").AsDate         ' Âçÿòü èç ïëàíîâîé äàòû

                      End If                                                       '

                    Set Sostav = Nothing                                      ' Îñâîáîäèòü îáúåêò

                    Set Tp = Nothing                                          ' Îñâîáîäèòü îáúåêò

                    Call TCSActiveModule.Edit                                 ' Áåðåì çàïèñü íà ðåäàêòèðîâàíèå

                 TCSActiveModule.Properties("WorkStart").AsDate=Dz            ' Çàíåñòè òåêóùóþ äàòó

                 Call TCSActiveModule.SaveChanges                             ' Ñîõðàíèì, è åñëè ïðîèçîøëà

                 Call TCSActiveModule.CancelChanges                           ' îøèáêà, îòìåíèì âñå èçìåíåíèÿ

                Else                                                          '

                Dz=TCSActiveModule.Properties("WorkStart").AsDate             ' Âçÿòü òåêóùóþ äàòó çàïóñêà

                End If   

'               

'  Öèêë ïî çàïèñÿì ïîçèöèé ïëàíà

'                                                                    '

            IFirst=TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger   ' Ïðåäûäóùàÿ ïîçèöèÿ

            IFirstOP=TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger' Ïðåäûäóùàÿ îïåðàöèÿ

            K=0                                                               ' Ñ÷åò÷èê èçìåíåííûõ ýàïèñåé

            M=0                                                              ' Ñ÷åò÷èê ýàïèñåé äëÿ ïðîãðåññáàðà

        For I = 0 To RowsCount - 1                                            ' Èäòè ïî ìàññèâó ññûëîê

           Call TCSActiveModule.GotoBookmark( msBM( I ) )                     ' Ïîçèöèîíèðîâàòüñÿ íà òåêóùóþ çàïèñü

           INext=TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger     ' Ñëåäóþùàÿ ïîçèöèÿ

           INextOP=TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger  ' Ñëåäóþùàÿ îïåðàöèÿ

'

'  Ðàñ÷åò òðóäîåìêîñòè è çàíåñåíèå åå â ïëàí  LaborIntensity = Òïç + Òøò*Êîë-âî(ïî ïëàíó) + Òìî

'                                                                             '

               If TCSActiveModule.Properties("LaborIntensity").AsFloat=0 Then ' Åñëè òðóäîåìêîñòü íå çàíåñåíà

                 Set Sostav = TCSApp.Manufacturing.ProductionBOMStructure( TCSActiveModule.Properties("PRODUCTIONBOM_ID").AsInteger, -1, TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger )'Âçÿòü ÏÑï

                 Set Tp = Sostav.Properties("ProductionBOMProcess").AsIDispatch ' Âçÿòü ÒÏ ïîçèöèè ñîñòàâà ÏÑï           

                 II = Tp.Locate( "ID", TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger,0 )' Ïåðåéòè ê ñîîòâåòñòâóþùåé îïåðàöèè

                 Tr=Tp.Properties("SetupTime").AsFloat                        ' Òïç  

                 Tr=Tr+(Tp.Properties("TimePerPiece").AsFloat * TCSActiveModule.Properties("QUANTITY").AsFloat)' Òøò*Êîë-âî(ïî ïëàíó)

                 Tr=Tr+Tp.Properties("InterOperationTime").AsFloat            ' Òìî

                 Call TCSActiveModule.Edit                                    ' Áåðåì çàïèñü íà ðåäàêòèðîâàíèå

                 TCSActiveModule.Properties("LaborIntensity").AsFloat=Tr      ' Âçÿòü òåêóùóþ òðóäîåìêîñòü â ÷àñàõ

                 Call TCSActiveModule.SaveChanges                             'Ñîõðàíèì, è åñëè ïðîèçîøëà

                 Call TCSActiveModule.CancelChanges                           'îøèáêà, îòìåíèì âñå èçìåíåíèÿ

               Else                                                           ' Åñëè çàíåñåíà

                Tr=TCSActiveModule.Properties("LaborIntensity").AsFloat       ' Âçÿòü òåêóùóþ òðóäîåìêîñòü â ÷àñàõ

               End If                                                         '

'                                                                             

'   Îïðåäåëåíèå âðåìåíè íà÷àëà è îêîí÷àíèÿ ðàáîò

'         

           If INext=IFirst Then                                                       ' Åñëè íîìåíêëàòóðà ïðåæíÿÿ

               If INextOP=IFirstOP Then                                        ' Åñëè îïåðàöèÿ ïåðâàÿ

                If TCSActiveModule.Properties("WorkStart").IsNull Then        ' Åñëè òåêóùàÿ äàòà íà÷àëà ðàáîò íå çàíåñåíà 

                        Set Sostav = TCSApp.Manufacturing.ProductionBOMStructure( TCSActiveModule.Properties("PRODUCTIONBOM_ID").AsInteger, -1, TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger )'Âçÿòü ÏÑï

                        Set Tp = Sostav.Properties("ProductionBOMProcess").AsIDispatch ' Âçÿòü ÒÏ ïîçèöèè ñîñòàâà ÏÑï

                          If Sostav.Properties("SCHEDULE_LAUNCH_DATE").IsNull Then     ' Åñëè ïëàíîâîé äàòû çàïóñêà íåò â ÏÑï

                            If Sostav.Properties("CALC_LAUNCH_DATE").IsNull Then       ' Ïîïûòàòüñÿ âçÿòü åå èç ðàñ÷åòíîé äàòû

                           II = Tp.Locate( "ID", TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger,0 )' Ïåðåéòè ê ñîîòâåòñòâóþùåé îïåðàöèè

                           IStr=" Îïåðàöèÿ: " + Tp.Properties("OPERATION_NUMBER").AsSafeString + " " + Tp.Properties("OPERATION_NOTE").AsSafeString + " " + Tp.Properties("OPERATION_NAME").AsSafeString

                           Dz1=TCSApp.InputBox("Ââåäèòå äàòó çàïóñêà äëÿ",IStr,Dz)     ' Ââåñòè äàòó çàïóñêà âðó÷íóþ

                            Else                                                       '

                           Dz1=Sostav.Properties("CALC_LAUNCH_DATE").AsDate            ' Âçÿòü èç ðàñ÷åòíîé äàòû     

                            End If                                                     '

                          Else                                                         '

                           Dz1=Sostav.Properties("SCHEDULE_LAUNCH_DATE").AsDate        ' Âçÿòü èç ïëàíîâîé äàòû

                          End If                                                       '

                    Set Sostav = Nothing                                      ' Îñâîáîäèòü îáúåêò

                    Set Tp = Nothing                                          ' Îñâîáîäèòü îáúåêò

                Else                                                          '

                Dz1=TCSActiveModule.Properties("WorkStart").AsDate             ' Âçÿòü òåêóùóþ äàòó çàïóñêà

                End If   

                  CTmin=Tr*60                                 ' Òðóäîåìêîñòü â ìèíóòàõ

                  Dw1=DateAdd ("n",CTmin,Dz1)                 ' Äàòà âûïóñêà

               Else                                           ' Åñëè îïåðàöèÿ ñëåäóþùàÿ    

                  Dz1=Dw                  ' Ñëåäóþùàÿ äàòà(âðåìÿ) çàïóñêà=ïðåä.äàòà(âðåìÿ)âûïóñêà.Ìåæîïåðàöèîííîå âðåìÿ ó÷òåíî â òðóäîåìêîñòè

                  CTmin=Tr*60                                 ' Òðóäîåìêîñòü â ìèíóòàõ

                  Dw1=DateAdd ("n",CTmin,Dz1)                 ' Ñëåäóþùàÿ äàòà(âðåìÿ) âûïóñêà=äàòà(âðåìÿ)çàïóñêà+òðóäîåìêîñòü

               End If                                         '

           Else                                               ' Åñëè ñìåíèëàñü íîìåíêëàòóðà

               IFirst=INext                                   ' Ïåðâàÿ çàïèñü íîìåíêëàòóðû

               IFirstOP=INextOP                               ' Ïåðâàÿ îïåðàöèÿ

                If TCSActiveModule.Properties("WorkStart").IsNull Then                 ' Åñëè òåêóùàÿ äàòà íà÷àëà ðàáîò íå çàíåñåíà 

                        Set Sostav = TCSApp.Manufacturing.ProductionBOMStructure( TCSActiveModule.Properties("PRODUCTIONBOM_ID").AsInteger, -1, TCSActiveModule.Properties("PRODBOM_STRUCTUREITEM_ID").AsInteger )'Âçÿòü ÏÑï

                        Set Tp = Sostav.Properties("ProductionBOMProcess").AsIDispatch ' Âçÿòü ÒÏ ïîçèöèè ñîñòàâà ÏÑï

                          If Sostav.Properties("SCHEDULE_LAUNCH_DATE").IsNull Then     ' Åñëè ïëàíîâîé äàòû çàïóñêà íåò â ÏÑï

                            If Sostav.Properties("CALC_LAUNCH_DATE").IsNull Then       ' Ïîïûòàòüñÿ âçÿòü åå èç ðàñ÷åòíîé äàòû

                           II = Tp.Locate( "ID", TCSActiveModule.Properties("PRODBOM_MNFPROCESSITEM_ID").AsInteger,0 )' Ïåðåéòè ê ñîîòâåòñòâóþùåé îïåðàöèè

                           IStr=" Îïåðàöèÿ: " + Tp.Properties("OPERATION_NUMBER").AsSafeString + " " + Tp.Properties("OPERATION_NOTE").AsSafeString + " " + Tp.Properties("OPERATION_NAME").AsSafeString

                           Dz1=TCSApp.InputBox("Ââåäèòå äàòó çàïóñêà äëÿ",IStr,Dz)     ' Ââåñòè äàòó çàïóñêà âðó÷íóþ

                            Else                                                       '

                           Dz1=Sostav.Properties("CALC_LAUNCH_DATE").AsDate            ' Âçÿòü èç ðàñ÷åòíîé äàòû     

                            End If                                                   '

                          Else                                                         '

                           Dz1=Sostav.Properties("SCHEDULE_LAUNCH_DATE").AsDate        ' Âçÿòü èç ïëàíîâîé äàòû

                          End If                                                      '

                    Set Sostav = Nothing                                    ' Îñâîáîäèòü îáúåêò

                    Set Tp = Nothing                                          ' Îñâîáîäèòü îáúåêò

                Else                                                                    '   

                Dz1=TCSActiveModule.Properties("WorkStart").AsDate                     ' Âçÿòü òåêóùóþ äàòó çàïóñêà

                End If                                                                '

               CTmin=Tr*60                                                   ' Òðóäîåìêîñòü â ìèíóòàõ

               Dw1=DateAdd ("n",CTmin,Dz1)                       ' Äàòà âûïóñêà

           End If                                                                      '

'          

'   Êîððåêòèðîâêà äàòû ñ ó÷åòîì êîýôôèöèåíòà ñìåííîñòè       

'          

         If Sm=1 Or Sm=2 Then                                 ' Êîððåêòèðîâêà äàòû âûïóñêà â çàâèñèìîñòè îò ñìåííîñòè

         CTmin=DateDiff("n",Dz1,Dw1)                          ' Âçÿòü ðàçíîñòü ì-äó äàòàìè âûïóñêà è çàïóñêà â ìèíóòàõ

         SmD=INT(CTmin/(480))                                 ' Êîëè÷åñòâî öåëûõ ñìåí ì-äó äàòàìè âûïóñêà è çàïóñêà

         L=INT(SmD/Sm)                                        ' Êîëè÷åñòâî öåëûõ äíåé ñ ó÷åòîì êîýôôèöèåíòà ñìåííîñòè

         CTmin=(L*1440)+ (CTmin-(L*Sm)*480)                   ' Äîáàâî÷íûå ìèíóòû=Êîëè÷åñòâî ìèíóò â öåëûõ äíÿõ + îñòàâøååñÿ âðåìÿ â ñëåäóþùåé ñìåíå

         Dw1=DateAdd ("n",CTmin,Dz1)                          ' Ñëåäóþùàÿ äàòà(âðåìÿ) âûïóñêà=äàòà(âðåìÿ)çàïóñêà + Äîáàâî÷íûå ìèíóòû

         End If                                               '

'

'   Çàíåñåíèå âðåìåí â ïëàí

'

         Call TCSActiveModule.Edit                            'Áåðåì çàïèñü íà ðåäàêòèðîâàíèå

         If TCSActiveModule.Properties("WorkEnd").IsNull Then ' Åñëè äàòà âûïóñêà âîîáùå íå çàäàíà 

           TCSActiveModule.Properties("WorkEnd").AsDate=TCSApp.StringToDate(Dw1)

           TCSActiveModule.Properties("WorkStart").AsDate=TCSApp.StringToDate(Dz1)

           K=K+1                                              '

         Else                                                 '

           If Dz1 > TCSActiveModule.Properties("WorkEnd").AsDate Then 'Åñëè ïîëó÷èëàñü äàòà çàïóñêà > òåêóùåé äàòû âûïóñêà 

           TCSActiveModule.Properties("WorkEnd").AsDate=TCSApp.StringToDate(Dw1)

           TCSActiveModule.Properties("WorkStart").AsDate=TCSApp.StringToDate(Dz1)

           K=K+1

           Else                                               ' Åñëè ïîëó÷èëàñü äàòà çàïóñêà <= òåêóùåé äàòû âûïóñêà

           TCSActiveModule.Properties("WorkStart").AsDate=TCSApp.StringToDate(Dz1)

           TCSActiveModule.Properties("WorkEnd").AsDate=TCSApp.StringToDate(Dw1)

           K=K+1

           End If                                             ' ×òîáû äàòû çàíîñèëèñü ïðàâèëüíî

         End If

         Call TCSActiveModule.SaveChanges                     'Ñîõðàíèì äàííûå, è åñëè ïðîèçîøëà

         Call TCSActiveModule.CancelChanges                   'îøèáêà, îòìåíèì âñå èçìåíåíèÿ

           Dz=Dz1                                             ' Ñäåëàòü òåêóùóþ äàòó çàïóñêà ïðåäûäóùåé

           Dw=Dw1                                             ' Ñäåëàòü òåêóùóþ äàòó âûïóñêà ïðåäûäóùåé

              If M=0 Then IStr="|"                            '

              If M=10 Then IStr="/"                            ' Îòðèñîâàòü

              If M=20 Then IStr="--"                           ' êðàñèâûé

              If M=30 Then                                     ' ïðîãðåññ

                  IStr="\"                                    '

                  M=0                                         '

              End If                                          '

              M=M+1                                           '

           JStr="Ñòðîêà " & CStr(I + 1) & " èç " & CStr(RowsCount)

           Call TCSApp.ShowProgressMessage(JStr, IStr)        '

        Next                                                  ' Âçÿòü íîâóþ çàïèñü

           Call TCSApp.HideProgressMessage                    ' Ñêðûòü ïðîãðåñc

        For I = 0 To RowsCount - 1                            ' Èäòè ïî ìàññèâó ññûëîê

            Call TCSActiveModule.GotoBookmark( msBM( I ) )    ' Ïîçèöèîíèðîâàòüñÿ íà òåêóùóþ çàïèñü

            TCSActiveModule.CurrentRowSelected = True         ' Âåðíóòü âûäåëåíèå ñòðîêè

        Next                                                  '

        Call TCSApp.ShowMessageBox("Ñîîáùåíèå", "Äàòû ðàññ÷èòàíû äëÿ " + Cstr(K) + " çàïèñåé")

        If K=0 Then

          Call TCSApp.ShowMessageBox("Ñîîáùåíèå", "Ëèáî ðàñ÷åò óæå áûë ñäåëàí, ëèáî ïåðåêëþ÷èòåñü â ðåæèì, ïîçâîëÿþùèé ðåäàêòèðîâàíèå")

        End If

    Else 

        Call TCSApp.ShowMessageBox("Ñîîáùåíèå", "Ââåäèòå ïðàâèëüíûé êîýôôèöèåíò ñìåííîñòè: 1,2,3 ! ")

    End If   

    Else                                                      ' Åñëè âûäåëåííûõ çàïèñåé íåò

        Call TCSApp.ShowMessageBox("Ñîîáùåíèå", "Âûäåëèòå çàïèñè äëÿ êîòîðûõ íåîáõîäèìî âû÷èñëèòü äàòû")

    End If                                                    '

End Sub                                                       '

 

! Ñì. òàêæå:

17.3 Â ðåæèìå «Ïðîèçâîäñòâî»