Äëÿ çàïóñêà äàííîãî ìàêðîñà íåîáõîäèìî ïåðåéòè â ðåæèì «Ïðîèçâîäñòâî»-«Ïëàí ïðîèçâîäñòâà», è âûáðàòü «Ïëàí èçãîòîâëåíèÿ».
Ìàêðîñ «Ðàñ÷åò ïîîïåðàöèîííîãî âðåìåíè íà÷àëà/êîíöà ðàáîò ñ ó÷åòîì ñìåííîñòè». Ïîçâîëÿåò èñïîëüçóÿ äàòû è âðåìÿ çàïóñêà ïîçèöèé ïëàíà èçãîòîâëåíèÿ è òðóäîåìêîñòè ïîðíîðìèðîâàííûå â òåõíîëîãè÷åñêèõ ïðîöåññàõ, ðàññ÷èòàòü è çàíåñòè äàòû è âðåìÿ çàïóñêà íà êàæäóþ îïåðàöèþ ÒÏ.
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 '
! Ñì. òàêæå: