Seems to me your function moves the record point in the table your adding a record to. I'd suggest you use a more robust key routine that uses a lookup table of keys, or change to use GUIDs.
Jim Booth and Steve Sawyer suggested a routine that's classic in Effective techniques. There's also an example in the solutions.
OPEN DATABASE HOME() + "Samples\Tastrade\Data\tastrade"
MODIFY procedure
Look for the newid() function.
>Here is that function.
>
>
>FUNCTION NewID()
> LPARAMETERS tlcKeyField, tlnFieldSize
>
> LOCAL lnNumberOfRecords, cx, i, key
>
> IF EOF()
> lnNumberOfRecords = RECCOUNT()
> IF lnNumberOfRecords = 0
> RETURN REPLICATE("A", tlnFieldSize)
> ENDIF
> GO lnNumberOfRecords
> cx = &tlcKeyField
> SKIP 1
>
> FOR i = LEN(cx) TO 1 STEP -1
> IF !SUBSTR(cx, i, 1) = 'Z'
> key = SUBSTR(cx, 1, i-1) ;
> + IIF((BETWEEN(ASC(SUBSTR(cx, i, 1)), 48, 121)), ;
> CHR(ASC(SUBSTR(cx, i, 1)) +1), "A") ;
> + REPLICATE("A", LEN(cx)-i)
> i = 1
> ENDIF
> ENDFOR
>
> RETURN key
> ENDIF
>
>ENDFUNC
>
>
>In DefaultValue function call is: NewID("cid_child", 5)
>
>>Hi, Boban-
>>
>>>I have found out why error happens.
>>
>>Well, you've narrowed down where the source of the problem is...
>>
>>>In a ChildTable table I have field with DefaultValue which is UDF that returns value for that field.
>>>When I issue APPEND BLANK then it goes to that function to retrieve value for field and at the end of function on RETURN lcValue (value for field) error happens.
>>>
>>>When I removed UDF for DefaultValue it works, but I need that function for DefaultValue.
>>>I notice that sometimes error happens and sometimes it let me to append with my value from UDF.
>>
>>It's impossible for me to even guess, not knowing what your UDF does. You'll need to look into that code to see what it does.