Silvio,
Could you try this code ?
It should be a good starting
Could you try this code ?
It should be a good starting
function Main()
local aFlds := {{"IdNumber","C",4,0},{"Date","C",8,0},{"AfterNoon","L",1,0}}
local el , i
//DELETE FILE "Umbrella.dbf"
//DELETE FILE "Umbrella.cdx"
IF ! File("Umbrella.dbf")
  DbCreate("Umbrella",aFlds)
END
IF ! File("Umbrella.cdx")
  USE UMBRELLA
  INDEX ON FIELD->IdNumber+Date+IIF(FIELD->AfterNoon,"1","0") TAG "IdNumber"
  //INDEX ON Date+Field->IdNumber+IIF(FIELD->AfterNoon,"1","0") TAG "Date"
  // With one seek we can check for a date AND Idnumber
  CLOSE ALL
END
USE UMBRELLA SHARED
IF RECCOUNT() == 0
  BuildTestData()
END
OrdSetFocus("IDNumber")
TestFree("0001" , CTOD("10/07/2009") , .F. , CTOD("21/07/2009") , .T.) // Number umbrella , from date , Not afternoon , to date , afternoon
return nil
***********************************************************************************
INIT PROCEDURE InitUmbrella()
******************************
ANNOUNCE RDDSYS Â Â Â Â Â Â Â Â Â Â Â Â Â // This line must not change
REQUEST DBFCDX Â Â Â Â Â Â Â Â Â Â Â Â Â // Causes DBFNTX RDD to be linked in
rddSetDefault( "DBFCDX" ) Â Â Â Â Â Â Â Â // Set up DBFNTX as default driver
SET(_SET_AUTOPEN, .T. )
SET DATE FRENCH
RETURN
//----------------------------------------------------------------------------//
PROC BuildTestData()
**************************
LOCAL aData := {} , el
AADD(aData,{"0001","20090711",.F.})
AADD(aData,{"0001","20090711",.T.})
AADD(aData,{"0001","20090712",.F.})
AADD(aData,{"0001","20090712",.T.})
AADD(aData,{"0002","20090718",.F.})
AADD(aData,{"0002","20090718",.T.})
AADD(aData,{"0002","20090719",.F.})
AADD(aData,{"0002","20090719",.T.})
FOR EACH el IN aData
  DBAPPEND()
  IF NETERR()
    EXIT
  END
  FOR i := 1 TO FCOUNT()
    FieldPut(i,el[i])
  NEXT
  UNLOCK
NEXT
RETURN
//-----------------------------------------------------------------------------//
FUNC TestFree(IdNumber , FromDate , FromNoon , ToDate , ToNoon)
***************************************************
LOCAL Date , lNoon
LOCAL el , Txt , i
LOCAL nCount := IIF(FromNoon,1,2)
LOCAL aFree[0]
IF ToDate > FromDate
  nCount += (ToDate-FromDate-1)*2
  nCount += IIF(ToNoon,2,1)
END
Date := FromDate
Txt := ""
FOR i := 1 TO nCount
  IF lNoon == nil
    lNoon := FromNoon
  ELSE
    IF ! lNoon
      Date += 1
    END
  END
  IF ! DBSEEK(IdNumber+DTOS(Date)+IIF(lNoon,"1","0"))
    Txt += (el := DTOC(Date)  + IIF(lNoon," After"," Before")) + CRLF
    AADD(aFree,el)
  END
  lNoon := ! lNoon
NEXT
? Txt
RETURN aFree