입금 예정일 + 입금예정 금액이 있는데 반해
들어온 금액은 partial로 어느게 어느것인지 모르게 들어 온 case가 있습니다.
1.일단 들어온 사람들 목록을 다음
2.들어온것 목록으로 만듭니다.
3.입금 예정 목록을 만듭니다.
1의 조건으로 while을 만듬 !Eof
2의 조건값을 가져와서 while로 만듬 !Eof
3의 조건값을 가져와소 while로 만듬 .t.
2의 금액을 3의 값을 빼고 남으면
3의 다음으로 넘거감
3의 값이 더 많으면 2의 남은 값을 기억하고
2의 다음 값으로 skip
2값을 3과 계속 비교
이런식으로 프로그램을 만들어 해결했습니다 ㅠㅠ
KMPAY->( dbGotop() )
oMeter := TDrMeta():New( "Converting...", "Wait...", KMPAY->( RecCount() ) )
WHILE !KMPAY->(Eof())
cQuery := "select * from m_pay where J_NO = " + ALLTRIM( KMPAY->J_NO ) + " and pay_code='001' order by pay_code2,pay_date"
::oPayDb:Query( cQuery,,,,,.f.)
oMeter:SetData( ++nCounter )
KMPAY2->(OrdScope( 0, KMPAY->J_NO ))
KMPAY2->(OrdScope( 1, KMPAY->J_NO ))
KMPAY2->(dbGotop())
WHILE !KMPAY2->(Eof())
nMoney := KMPAY2->J_MONEY
nInMoney := 0
WHILE .T.
//kmpay2->(dr_browse())
//::oPayDb:Browse()
IF nMoney - (::oPayDb:PAY_MONEY - nInMoney) >= 0
::oPayDb:PAY_IN_MONEY := ::oPayDb:PAY_MONEY
::oPayDb:PAY_IN_DATE := KMPAY2->J_DATE
nMoney := nMoney - (::oPayDb:PAY_MONEY - nInMoney)
nInMoney := 0
::oPayDb:update()
::oPayInDb:Blank()
::oPayInDb:CITY_CODE := "002"
::oPayInDb:J_NO := KMPAY->J_NO
::oPayInDb:PAY_CODE := ::oPayDb:PAY_CODE
::oPayInDb:PAY_CODE2 := ::oPayDb:PAY_CODE2
::oPayInDb:PAY_NAME := ::oPayDb:PAY_NAME
::oPayInDb:PAY_IN_DATE := KMPAY2->J_DATE
::oPayInDb:PAY_IN_MONEY := ::oPayDb:PAY_MONEY
::oPayInDb:PAY_BANK := KMPAY2->J_BANK
::oPayInDb:PAY_SENDER := KMPAY2->J_NAME
::oPayInDb:Insert()
::oPayDb:Skip()
ELSE
nInMoney += nMoney
KMPAY2->(dbSkip())
nMoney := KMPAY2->J_MONEY
ENDIF
IF nMoney == 0
EXIT
ENDIF
IF KMPAY2->(Eof())
EXIT
ENDIF
ENDDO
KMPAY2->( dbSkip() )
ENDDO
IF nInMoney > 0
KMPAY2->( dbSkip(-1) )
::oPayDb:PAY_IN_MONEY := nInMoney
::oPayDb:PAY_IN_DATE := KMPAY2->J_DATE
::oPayDb:update()
::oPayInDb:CITY_CODE := "002"
::oPayInDb:J_NO := KMPAY->J_NO
::oPayInDb:PAY_CODE := ::oPayDb:PAY_CODE
::oPayInDb:PAY_CODE2 := ::oPayDb:PAY_CODE2
::oPayInDb:PAY_NAME := ::oPayDb:PAY_NAME
::oPayInDb:PAY_IN_DATE := KMPAY2->J_DATE
::oPayInDb:PAY_IN_MONEY := nInMoney
::oPayInDb:PAY_BANK := KMPAY2->J_BANK
::oPayInDb:PAY_SENDER := KMPAY2->J_NAME
::oPayInDb:Insert()
ENDIF
KMPAY->( dbSkip() )
ENDDO
oMeter:End()