예제 #1
0
// set whether the app loads on AutoCAD startup or not.
bool getStartUpLoad()
{
    char appKey[1024];
    wsprintf(appKey, "%s\\Applications\\%s", acrxProductKey(), gAppSubKey);
    return (0 != (AcadApp::kOnAutoCADStartup & RegGetInt(HKEY_CURRENT_USER, appKey, "LOADCTRLS")));
}
예제 #2
0
// 취소함수
int	CTranCmn::fnAPP_CancelProc(int CancelCode, char *pCancelMsg, char *pCancelMsg2, char *pCancelMsg3, int CancelScrNum)
{
MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc:"				\
													"CancelCode[%d], "				\
													"CancelProcNum[%d], "			\
													"CancelDepRejectFlg[%d], "		\
													"m_pDevCmn->TranStatus[%d],"	\
													"CancelScrNum[%d]",	
													 CancelCode, 
													 CancelProcNum, 
													 CancelDepRejectFlg,
													 m_pDevCmn->TranStatus,
													 CancelScrNum);

	int		DelaySec = 1;
	int		nBrmStepErr = DEV_NONE;
	int		nDeviceStatusSave = DEV_NONE;
	
	if(m_pDevCmn->fnSCR_GetCurrentLangMode() == KEB_MODE)  // Cancel Msg 한글 표시 #N0174
		m_pDevCmn->fnSCR_SetCurrentLangMode(KOR_MODE);

/////////////////////////////////////////////////////////////////////////////
//	Main호출시
/////////////////////////////////////////////////////////////////////////////
	if (m_pDevCmn->TranStatus == TRAN_IDLE)						// Return단계고려?
		return T_CANCEL;

/* //#0002
	if (m_pDevCmn->TranStatus == TRAN_STATUS)					// Return단계고려?
		return T_CANCEL;
*/
/////////////////////////////////////////////////////////////////////////////
//	기본금지처리
/////////////////////////////////////////////////////////////////////////////
	if (CancelProcNum == 0)										// 첫실행시만
	{
		m_pDevCmn->fnAPL_CheckDeviceAction(DEV_BRM);			// 동작완료처리 : 2003.11.06
		m_pDevCmn->fnCSH_CloseShutter();						// 닫기
/******************************************************************************************/
		if(m_pProfile->DEVICE.MachineType == U3100K) //#N0138
		{
			//예외처리 -> #N0138
			nDeviceStatusSave = m_pDevCmn->DeviceStatus;
			m_pDevCmn->fnAPL_CheckDeviceAction(DEV_BRM);			// 동작완료처리  //-> 한네트 특이 사양 검토
			
			if (m_pDevCmn->DeviceStatus != nDeviceStatusSave)
			{
				MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc - Old nDeviceStatusSave (%x), m_pDevCmn->DeviceStatus (%x)", nDeviceStatusSave, m_pDevCmn->DeviceStatus);		
				m_pDevCmn->DeviceStatus = nDeviceStatusSave;
			}

			if (!m_pDevCmn->fnBRM_GetMaterialInfo() & BRM_IN_CSM)
			{
				if (m_pDevCmn->BrmCsmIn & BRM_IN_CSM)
				{
					MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc - Old BrmCsmIn (%d), fnBRM_GetMaterialInfo (%d)", m_pDevCmn->BrmCsmIn, m_pDevCmn->fnBRM_GetMaterialInfo());		
					CancelWithSendFlg = TRUE;
				}
			}
			m_pDevCmn->BrmCsmIn = FALSE;
		}
/******************************************************************************************/

		m_pDevCmn->fnAPL_CheckDeviceAction(DEV_UCM);			// 동작완료처리
		m_pDevCmn->fnUCM_CloseShutter();						// 닫기
		m_pDevCmn->fnAPL_DeviceEnDisable(DEV_MCU | DEV_PBM, DISABLE);	// 장치투입모드설정 
		m_pDevCmn->fnLGT_SetFlicker(KU_ALL_FLICKER, FLICKER_OFF);		// Flicker설정(인덱스,값) 
	}

/////////////////////////////////////////////////////////////////////////////
// 현금/수표부 잔류정보 TRACE처리
/////////////////////////////////////////////////////////////////////////////
MsgDump(TRACE_FREE_MODE, "Log", __FILE__, __LINE__, "CANCEL처리시 잔류확인[%2.2X:%2.2X:%2.2X]", 
													m_pDevCmn->fnCSH_GetMaterialInfo(), 
													m_pDevCmn->fnUCM_GetMaterialInfo(UCM_DEPOSIT),
													m_pDevCmn->fnUCM_GetMaterialInfo(UCM_WITHDRAW));
/////////////////////////////////////////////////////////////////////////////
//	고객거래외호출시처리
/////////////////////////////////////////////////////////////////////////////

	if (m_pDevCmn->TranStatus != TRAN_TRAN)			// 거래처리아님
	{

		if ((!m_pDevCmn->fnAPL_GetAvailErrorDevice(DEV_MAIN)) &&// 사용하고장애난장치구하기
			(!m_pDevCmn->fnAPL_CheckError()))					// 장애검지유
			m_pDevCmn->fnAPL_ClearError();						// 장애정보초기화
	
		
		if (m_pDevCmn->TranStatus == TRAN_OPEN)
		{
			if (pCancelMsg)
				m_pDevCmn->fnSCR_DisplayStringArray(1, pCancelMsg,  "\n");
			m_pDevCmn->fnSCR_DisplayScreen(701);
			Delay_Msg(DelaySec * 5000);

MsgDump(TRACE_CODE_MODE, "log", __FILE__, __LINE__, "fnSCR_DisplayStringArray1[%s]", pCancelMsg);
		}

		fnAPP_TerminateProc(T_CANCEL);							// 종료함수
	}

	
	if (m_pDevCmn->TranStatus == TRAN_TRAN)			// 거래처리아님
	{
		
		if (m_pDevCmn->fnAPL_GetAvailErrorDevice(m_pDevCmn->DeviceStatus) == DEV_CSH)
		{
			if(TranProc == TRAN_WITH)
			{
				nBrmStepErr = RegGetInt(_REGKEY_DEVICE, "BRM_WITH_STEP",0);
				if(nBrmStepErr == 1)
					fnAPP_WithErrSumProc(1); //계수장애
				else
				if(nBrmStepErr == 3)
					fnAPP_WithErrSumProc(2); //셔터장애

				RegSetInt(_REGKEY_DEVICE, "BRM_WITH_STEP",0);
			}
			else
			if(TranProc == TRAN_DEP)
			{
				nBrmStepErr = RegGetInt(_REGKEY_DEVICE, "BRM_DEP_STEP",0);
				if(nBrmStepErr == 1)
					fnAPP_DepErrSumProc(1); //입금계수장애
				else
				if(nBrmStepErr == 2)
					fnAPP_DepErrSumProc(2); //입금수납장애

				RegSetInt(_REGKEY_DEVICE, "BRM_DEP_STEP",0);
			}
		}
	}

/////////////////////////////////////////////////////////////////////////////
//	에러정보가져오기
/////////////////////////////////////////////////////////////////////////////
	m_pDevCmn->fnAPL_CheckError();								// 장애검지
/////////////////////////////////////////////////////////////////////////////
//	취소처리횟수제한
/////////////////////////////////////////////////////////////////////////////
	switch (CancelProcNum)										// 취소함수N번실행변수
	{
		case	0:
			CancelProcNum = 1;
			CancelProcCount = m_pProfile->TRANS.ProcCount[0];	// 취소처리전진행번호 
			break;

		case	1:
			CancelProcNum = 2;
			fnAPP_CancelProc2(CancelCode, pCancelMsg, pCancelMsg2, pCancelMsg3, CancelScrNum);	
																// 취소함수2
			break;

		case	2:
			CancelProcNum = 3;
			fnAPP_CancelProc3(CancelCode, pCancelMsg, pCancelMsg2, pCancelMsg3, CancelScrNum);	
																// 취소함수3
			break;

		case	3:
			CancelProcNum = 4;
			fnAPP_CancelProc4(CancelCode, pCancelMsg, pCancelMsg2, pCancelMsg3, CancelScrNum);	
																// 취소함수4
			break;

		default:
			if (!m_pDevCmn->fnAPL_CheckError())					// 장애검지유
			{
				if (!CancelWithProcFlg)							// 취소출금처리Flg : 출금취소가 아닌경우만 처리
					fnAPP_ErrorTranProc();						// 거래장애정보설정
			}
			if (!m_pDevCmn->fnAPL_CheckError())					// 장애검지유
			{
				fnAPP_SendMakeManageSend(FALSE);				// 송신전문작성(관리부 Send)

			}

			if (   TranCode2 == TRANID_7210 || TranCode2 == TRANID_7220 || TranCode2 == TRANID_7260 
				|| TranCode2 == TRANID_7230 || TranCode2 == TRANID_7250 || TranCode2 == TRANID_7380 
				|| TranCode2 == TRANID_4370 || TranCode2 == TRANID_4390 || TranCode2 == TRANID_4310
				|| TranCode2 == TRANID_4330 || TranCode2 == TRANID_4350 || TranCode2 == TRANID_4320
				|| TranCode2 == TRANID_4340 || TranCode2 == TRANID_7200 || TranCode2 == TRANID_4410 || TranCode2 == TRANID_7530) 
			{
				m_pDevCmn->fnAPL_PrintJnlInfo(GetSprintf("END  :01OOOOOOOOOOOO<<=====<<=====<<=====<<<<"));
			}

			fnAPP_TerminateProc(T_CANCEL);						// 취소종료
			break;
	}

/////////////////////////////////////////////////////////////////////////////
//	수표정보초기화처리
/////////////////////////////////////////////////////////////////////////////
	if (!CancelCheckClearFlg)									// 수표정보초기화Flg
	{
		CancelCheckClearFlg = TRUE;
		if ((TranProc == TRAN_WITH)					&&			// 출금
			(Asc2Int(Accept.CheckMoney, 8) != 0)	&&			// 수표출금
			(TranSend)								&&			// 거래전송
			(!m_pDevCmn->fnAPL_CheckError()))					// 장애검지유
		{
			m_pDevCmn->fnAPL_SetNumberOfOutCheck(0, 0);			// 출금수표매수초기화
		}
	}

/////////////////////////////////////////////////////////////////////////////
//	연속거래여부처리
/////////////////////////////////////////////////////////////////////////////
//	Accept.SerialCount = 0;
//	Accept.SerialTranFlag = FALSE;
/////////////////////////////////////////////////////////////////////////////
//	화면처리
/////////////////////////////////////////////////////////////////////////////
	if (((m_pDevCmn->fnAPL_GetAvailDevice(DEV_SPR)) && (m_pDevCmn->fnSPR_GetMaterialInfo()))	||	// 명세표존재
		((m_pDevCmn->fnAPL_GetAvailDevice(DEV_MCU)) && (m_pDevCmn->fnMCU_GetMaterialInfo()))	||	// 카드존재
		((m_pDevCmn->fnAPL_GetAvailDevice(DEV_PBM)) && (m_pDevCmn->fnPBM_GetMaterialInfo())))		// 통장존재
		DelaySec = 1;											// 매체존재시대기

	if (CancelScrNum)
	{
		if ((CancelScrNum == 763)	||							// 카드-해당거래불가
			(CancelScrNum == 765)	||							// 통장-해당거래불가
			(CancelScrNum == 764)	)							// 작외선-해당거래불가
		{
			m_pDevCmn->fnSCR_DisplayString(1, MenuTbl[MenuIndex].MenuScrName);
		}

		m_pDevCmn->fnSCR_DisplayScreen(CancelScrNum);			// 지정화면출력
		Delay_Msg(DelaySec * 3000);
	}
	else 
	{
		int		ScrNum = 701;									// 안내화면(5Line)
		
		// 장애인ATM 지원거래중 취소될 때는 아래 음성을 모두 Play 가능하도록 Delay를 늘린다.
		if (m_pDevCmn->EarPhoneInserted == TRUE)				// 장애인ATM
			DelaySec = 5;

		switch (CancelCode)
		{
			case	T_CANCEL:									// 취소선택
				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    거래가 취소 되었습니다");
					m_pDevCmn->fnSCR_DisplayString(4, "    처음부터 다시 하여 주십시오");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please try again");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);

				break;

			case	T_TIMEOVER:									// 시간초과
				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    시간이 초과 하였습니다");
					m_pDevCmn->fnSCR_DisplayString(4, "    처음부터 다시 하여 주십시오");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please try again");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);

				break;
			
			case	T_INPUTOVER:								// 입력횟수초과
				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    입력 횟수를 초과 하였습니다");
					m_pDevCmn->fnSCR_DisplayString(4, "    처음부터 다시 하여 주십시오");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please try again");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);

				break;
			
			case	T_INPUTERROR:								// 입력자료이상
				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    입력자료 이상 발생");
					m_pDevCmn->fnSCR_DisplayString(4, "    [상황실: 1577 - 4655] 문의하여 주십시오.");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please try again");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);
				break;
			
			case	T_ERROR:									// 장애발생(기기장애메세지)
				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    장애가 발생 하였습니다");
					m_pDevCmn->fnSCR_DisplayString(4, "    잔액을 확인하여 주십시오");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please check your account balance");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);
				break;

			case	T_SENDERROR:								// 2003.11.07
			case	T_RECVERROR:
//				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
//				else
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
				
				if ((TranProc == TRAN_WITH)		||				// 출금
					(TranProc == TRAN_TRANS)	||				// 이체
					(TranProc == TRAN_DEP)		||				// 입금
					(TranProc == TRAN_HIPASS))					// 하이패스	#N0266
				{
					if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
						m_pDevCmn->fnSCR_DisplayString(3, "    잔액을 확인하여 주십시오");
					else
						m_pDevCmn->fnSCR_DisplayString(3, "Please check your account balance");
				}
				else 
				{
					if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
						m_pDevCmn->fnSCR_DisplayString(3, "    처리중 장애가 발생하였습니다");
					else
						m_pDevCmn->fnSCR_DisplayString(3, "Your transaction has been cancelled");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);
				break;
			
			case	T_PROGRAM:									// 프로그램이상장애발생(전산부문의)

				if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "안      내");
					m_pDevCmn->fnSCR_DisplayString(2, "    프로그램 이상 발생");
					m_pDevCmn->fnSCR_DisplayString(4, "    [상황실: 1577 - 4655] 문의하여 주십시오.");
				}
				else
				{
//					m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					m_pDevCmn->fnSCR_DisplayString(2, "Your transaction has been cancelled");
					m_pDevCmn->fnSCR_DisplayString(4, "Please check your account balance");
				}
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 1000);
				
				break;		
			case	T_MSG:										// 취소발생(메세지처리)
				if ((pCancelMsg)	||
					(pCancelMsg2)	||
					(pCancelMsg3))
				{
//					if (m_pDevCmn->fnSCR_GetCurrentLangMode() == KOR_MODE)
//						m_pDevCmn->fnSCR_DisplayString(1, "안      내");
//					else
//						m_pDevCmn->fnSCR_DisplayString(1, "[Information]");
					if (pCancelMsg)
						m_pDevCmn->fnSCR_DisplayString(2, pCancelMsg);
					if (pCancelMsg2)
						m_pDevCmn->fnSCR_DisplayString(3, pCancelMsg2);
					if (pCancelMsg3)
						m_pDevCmn->fnSCR_DisplayString(4, pCancelMsg3);
					
					m_pDevCmn->fnSCR_DisplayScreen(ScrNum, K_5_WAIT);
					m_pDevCmn->fstrSCR_GetKeyString();						
//					m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
//					Delay_Msg(DelaySec * 5000);
				}
				break;
			case	T_DISMSG:	// 취소발생(메세지처리)
				if (pCancelMsg)
					m_pDevCmn->fnSCR_DisplayStringArray(1, pCancelMsg,  "\n");
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(DelaySec * 5000);
MsgDump(TRACE_CODE_MODE, "log", __FILE__, __LINE__, "fnSCR_DisplayStringArray1[%s]", pCancelMsg);
				break;
			case	T_HOSTMSG:
MsgDump(TRACE_CODE_MODE, "log", __FILE__, __LINE__, "fnSCR_DisplayStringArray1[%s]", pCancelMsg2);
				if (pCancelMsg)
					m_pDevCmn->fnSCR_DisplayStringArray(1, pCancelMsg);
				m_pDevCmn->fnSCR_DisplayScreen(ScrNum);
				Delay_Msg(5000);
				break;

			default:
				break;
		}
	}

/////////////////////////////////////////////////////////////////////////////
//	송신전전문작성
/////////////////////////////////////////////////////////////////////////////
//	if ((!TranSend)			&&									// 거래전송무 V01-00-00-#301
//		(!CancelDepSendFlg)	)
//	{
//		if (!AddSerialFlg)										// 일련번호증가무
//		{
//MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc::입금거래중 거래전송무시 거래일련번호 증가처리");
//			AddSerialFlg = TRUE;								// 일련번호증가유
//			m_pDevCmn->fnAPL_AddSerialNo();						// 거래일련번호증가
//		}
//MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc::입금거래중 거래전송무시 송신전문 편집만 처리");
//		fnAPP_SendMake(FALSE);									// 송신전문작성만
// 	}
	
/////////////////////////////////////////////////////////////////////////////
//	매체인자및방출처리
/////////////////////////////////////////////////////////////////////////////
	if (!CancelPrintFlg)										// 취소인자Flg
	{
		CancelPrintFlg = TRUE;
		if ((!m_pDevCmn->fnAPL_CheckError())	||				// 장애검지유
			(!CancelKCashSendFlg)				||				// K-CASH장애
			((EMVReadFlg)						&&				// EMV Read
			 (TranSend))						)
		{
			fnAPD_CardEmbossScan();								// 카드엠보스스캔
			fnAPD_CardImprint(TRUE);							// 카드임프린트

// 지급성거래일 경우(CancelWithSendFlg : Set(FALSE)) 장애가 검지되더라도 이곳에서 장애명세표를 인자할 필요는 없다.
// 명세표의 인자는 Cancel-#3에서 그 처리를 하여도 문제가 없을 것으로 사료된다.
// 그러나 지급성이 아닌경우(CancelWithSendFlg : TRUE)에는 이곳에서 장애명세표를 인자하여야 한다.
// 좀더 신중한 검토를 필요로 한다.
// 입금취소플래그와 출금취소플래그를 같이 처리하여야 한다. 하나로 인해서 다른 하나가 영향받지 않도록...
MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc::취소플래그[%d/%d]", CancelWithSendFlg, CancelDepSendFlg);
//			if (((TranProc == TRAN_WITH) && (!CancelWithSendFlg)) ||
//				((TranProc == TRAN_DEP)  && (!CancelDepSendFlg))  )
			if ((TranProc == TRAN_WITH) && (!CancelWithSendFlg))// V01-00-00-#301
			{
				;												// 출금취소/입금취소시 장애미인자
			}
//t			if ((CancelWithSendFlg)	||							// 취소출금전송Flg(초기:실행무)
//t				(CancelDepSendFlg)	)							// 취소입금전송Flg
			else
			{
				JnlPrintFlg = FALSE;							// 저널인자무
				fnAPP_PrintError(DEV_JPR);						// 장애인자(저널)

				if (SlipPrintFlg)								// 명세표인자유
				{
					fnAPD_MaterialRetract(DEV_SPR);				// 회수후장애명세표지원
					SlipPrintFlg = FALSE;						// 명세표인자무
					fnAPD_CheckDeviceAction(DEV_SPR);			// 동작완료검지&장애검지
				}

//2012.01.11 Kim.Gi.Jin
//				fnAPP_PrintError(DEV_SPR);
//				fnAPD_CheckDeviceAction(DEV_SPR);				
			}
		}
		else
		{
			JnlPrintFlg = FALSE;								// 저널인자무
			if (((TranProc == TRAN_DEP && TranProcSave != TRAN_E_TICKET )		&&					// 입금  #N0142 전자상품권 입금 취소 명세표 방출x
				 (!CancelDepPrintFlg)	))//	||				// 취소입금인자Flg(초기:실행무)
// 				((TranProc == TRAN_TRANS)	&&					// 송금
// 				 (TranSend)				)	)					// 수취조회
			{
				CancelDepPrintFlg = TRUE;
				fnAPD_CardEmbossScan();							// 카드엠보스스캔
				fnAPD_CardImprint(TRUE);						// 카드임프린트
																// 취소인자(저널)
				if (CashInCountFlg && AddSerialFlg) //#0021 -> #0059
				{
					fnAPP_PrintCancel(DEV_SPR);						// 취소인자(명세표)
					fnAPD_CheckDeviceAction(DEV_SPR);				// 동작완료검지&장애검지
				}
				fnAPP_PrintCancel(DEV_JPR); //#0059
			}
			else
			if (TranSend)										// 거래전송유
			{
				fnAPD_CardEmbossScan();							// 카드엠보스스캔
				fnAPD_CardImprint(TRUE);						// 카드임프린트
				fnAPP_PrintCancel(DEV_JPR);						// 취소인자(저널)
			}
		}
	}
	
//	if ((!CancelWithSendFlg)	||								// 취소출금전송Flg(초기:실행무)
//		(!CancelDepSendFlg)	)									// 취소입금전송Flg(초기:실행무)
	if (!CancelWithSendFlg)										// 취소출금전송Flg(초기:실행무) V01-00-00-#301
	{
		if (((TranProc == TRAN_WITH)				&&			// 출금
			 (TranSend)								&&			// 거래전송
			 (!m_pDevCmn->fnAPL_CheckError()))		||			// 장애검지유
			((TranProc == TRAN_WITH)				&&			// 출금
			 (EMVReadFlg)							&&
			 (TranSend))							)
		{
			if (SlipPrintFlg)									// 명세표인자유
			{
				fnAPD_MaterialRetract(DEV_SPR);					// 회수(고객1명세표)
				SlipPrintFlg = FALSE;							// 명세표인자무
				fnAPD_CheckDeviceAction(DEV_SPR);				// 동작완료검지&장애검지
			}
		}
//		else
//		if (((TranProc == TRAN_DEP)			||					// 입금	V01-00-00-#301
//			 (TranCode == TC_RFCASH))		&&					// 교통카드현금충전
//			(!m_pDevCmn->fnAPL_CheckError()))					// 장애검지유
//		{
//			if ((SlipPrintFlg)		&&							// 명세표인자유
//				(!CancelDepSendFlg)	)
//			{
//				fnAPD_MaterialRetract(DEV_SPR);					// 회수(고객1명세표)
//				SlipPrintFlg = FALSE;							// 명세표인자무
//				fnAPD_CheckDeviceAction(DEV_SPR);				// 동작완료검지&장애검지
//			}
//		}
	}
//	else														// 2004.02.16
//	if (!CancelKCashSendFlg)									// 복구거래Flg(초기:실행무)
//	{
//		if (SlipPrintFlg)										// 명세표인자유
//		{
//			fnAPD_MaterialRetract(DEV_SPR);						// 회수(고객1명세표)
//			SlipPrintFlg = FALSE;								// 명세표인자무
//			fnAPD_CheckDeviceAction(DEV_SPR);					// 동작완료검지&장애검지
//		}
//	}

	// 출금현금회수시지원코딩부분
	// 입금현금수납시지원코드이부분
	if (((TranProc == TRAN_DEP)		&&	// 입금송수신장애시
		 (!m_pDevCmn->fnAPL_CheckError())							&&	// 수납처리 : 주택사양 2002.04.30
		 ((memcmp(m_pDevCmn->CurErrBuff.ErrorCode, "771", 3) == 0)	||
		  (memcmp(m_pDevCmn->CurErrBuff.ErrorCode, "88", 2) == 0)))	)
	{
		fnAPP_SumProc(2);										// 입금집계
		fnAPD_CheckDepositStore(TRUE);							// 수표입금수납
		fnAPD_CashDepositStore(TRUE);							// 현금입금수납
	}

	CStringArray strTempRetractArray;
	char	StrBuff[256] = {0,};
	
MsgDump(TRACE_CODE_MODE, "Log", __FILE__, __LINE__, "fnAPP_CancelProc::미수취플래그[%d/%x/%5.5s]", TranProc, MenuAvail, m_pDevCmn->CurErrBuff.ErrorCode);
	if ((TranProc == TRAN_WITH)										&&
		(!m_pDevCmn->fnAPL_CheckError())							&&
		(memcmp(m_pDevCmn->CurErrBuff.ErrorCode, "01102", 5) == 0)	&&
		((m_pDevCmn->AtmDefine.CashHandler == OKI_SET)				||
		 (m_pDevCmn->AtmDefine.CashHandler == HBRM_SET)				||
		 (m_pDevCmn->AtmDefine.CashHandler == BRM_SET))				)
	{
//		fnAPD_MoneyRetract();
		m_pDevCmn->DeviceAutoOff = 0;							// 자동축퇴가 난 Device = Set
		m_pDevCmn->DeviceLoss = DEV_NONE;						// 분실정보초기화
		m_pDevCmn->ForceDownFlag = FALSE;						// 강제Down변수 

		if (m_pDevCmn->fnCSH_GetMaterialInfo())					// 매체잔류정보구하기
		{
			if (m_pProfile->DEVICE.MachineType == U8100)
				m_pDevCmn->fnBRM_Reset(TRUE); 
			else
			{
				m_pDevCmn->fnCSH_Initialize();
			}
			
		}
		m_pDevCmn->fnAPL_CheckDeviceAction(DEV_CSH);			// 동작대기및장애검지
		Delay_Msg(2000);										// 검지대기(2000ms)
																// 회수내역대기
		m_pDevCmn->fnAPL_CheckDeviceAction(DEV_CSH);			// 동작대기및장애검지

		if (Asc2Int(Accept.Money, 8))
		{
			SplitString(m_pDevCmn->fstrCSH_GetRetractResult(), ",", strTempRetractArray);

			GetTime(StrBuff);
			sprintf(ShuData[0], "%2.2s:%2.2s:%2.2s", &StrBuff[0], &StrBuff[2], &StrBuff[4]);
			sprintf(ShuData[1], "[미수취 회수내역]");
			sprintf(ShuData[2], "미수취금액  :%d", Asc2Int(Accept.Money, 8));
			sprintf(ShuData[3], " (현금:%d,수표:%d)", Asc2Int(Accept.CashMoney, 8), Asc2Int(Accept.CheckMoney, 8));
			sprintf(ShuData[4], "회수된내역  :%d", Asc2Int(strTempRetractArray[0]));
			sprintf(ShuData[5], "총계수매수  :%d", Asc2Int(strTempRetractArray[1]));
			sprintf(ShuData[6], "만원권매수  :%d", Asc2Int(strTempRetractArray[2]));
			sprintf(ShuData[7], "오천원권매수:%d", Asc2Int(strTempRetractArray[3]));
			sprintf(ShuData[8], "천원권매수  :%d", Asc2Int(strTempRetractArray[4]));
			sprintf(ShuData[9], "불명권매수  :%d", Asc2Int(strTempRetractArray[5]));


			if (Asc2Int(Accept.Money, 8) == Asc2Int(strTempRetractArray[0]))
			{
				m_pDevCmn->ForceDownFlag = FALSE;
				sprintf(ShuData[10], "미수취 회수내역 정상임");
			}
			else
			{
				m_pDevCmn->ForceDownFlag = TRUE;
				sprintf(ShuData[10], "미수취 회수내역 불일치!!");
			}
			fnAPD_JnlPrint(TRUE);
		}
	}

	fnAPP_CancelProc(T_CANCEL);
	return T_CANCEL;
}