Hello,
I have a hybrid Product_Item Set whereby the product file has 1 unique key for the product number, and the item file has the key product number + serial number. In that way I can have multiple serial numbers for the same item. The form for this looks and works great.
However, the rub is that when I go to invoice, I can pull up and select the product with the corresponding serial, but for some reason, it always only finds the first serial number, regardless of which one I selected with no errors.
I know the problem is in the "CanSave" event which is below. Can I get a set of eyes to look at what's going wrong with the find in tbl_1 in looking for the Product_ID + serial_number .
dim tbl as p
dim tbl_1 as p
tbl = table.open("product",FILE_RW_SHARED)
tbl_1= table.open("items",FILE_RW_SHARED)
'1st Pass for Product File Set the table order to the key expression
dim itbl as p
dim key_expr as c
key_expr = "Product_Id"
if key_expr = "" then
ui_msg_box("Error","Key expression cannot be blank. Edit the Action and specify the Key expression.")
end
end if
dim key_value as c
key_value = "" +a5_eval_expression("=Invoice_Items->Product_Id",local_variables())
itbl = tbl.order(key_expr,".t.")
'Determine the data type that the key expression returns
dim data_type as c
if tbl.eval_valid(key_expr) then
data_type = typeof(tbl.eval(key_expr))
else
ui_msg_box("Error","Key expression is not valid: '"+key_expr+"'",UI_STOP_SYMBOL)
tbl.close()
end
end if
find_result = tbl.fetch_find(convert_type(key_value,data_type))
'Was the find successful?
'Evaluate the key value for the current record and compare it with the key value that was searched for...
current_key = tbl.eval(key_expr)
if current_key <> key_value then
ui_msg_box("Error","Record to update not found. Could not find record with key value: '" + key_value+"'.",UI_STOP_SYMBOL)
tbl.close()
end
end if
if tbl.is_record_locked() = .t. then
ui_msg_box("Error","Cannot edit Product record because it is locked by another user, or in another session.",UI_STOP_SYMBOL)
tbl.close()
end
end if
' End of the First
'**********************************
'2nd Pass for Product File Set the table order to the key expression
dim itbl_1 as p
dim key_expr_1 as c
key_expr_1 = "Product_Id + Serial_Number"
if key_expr_1 = "" then
ui_msg_box("Error","Key expression cannot be blank. Edit the Action and specify the Key expression.")
end
end if
dim key_value_1 as c
key_value_1 = "" +a5_eval_expression("=Invoice_Items->Product_Id",local_variables())
itbl_1 = tbl_1.order(key_expr_1,".t.")
'Determine the data type that the key expression returns
dim data_type_1 as c
if tbl_1.eval_valid(key_expr_1) then
data_type_1 = typeof(tbl_1.eval(key_expr_1))
else
ui_msg_box("Error","Key expression is not valid: '"+key_expr_1+"'",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
find_result = tbl_1.fetch_find(convert_type(key_value_1,data_type_1))
'Was the find successful?
'Evaluate the key value for the current record and compare it with the key value that was searched for...
current_key = tbl_1.eval(key_expr_1)
if current_key <> key_value_1 then
ui_msg_box("Error","Record to update not found. Could not find record with key value: '" + key_value_1+"'.",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
if tbl_1.is_record_locked() = .t. then
ui_msg_box("Error","Cannot edit Item record because it is locked by another user, or in another session.",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
' End of the Second
'**********************************
'Check and see if tool to be issued is greater than tool signed
if tbl.Qty_IN_STO - v_quantity < 0 then
msgbox("Quantity in StocK Cannot be Less Than Zero , Please Correct Qty or Delete Tool")
cancel()
tbl.close()
end
end if
IF tbl_1.Next_load_test_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Load Test Overdue",<<%dlg%
{region}
Tool Load Test is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Load Test Overdue")
close_if_exists("Tool Load Test Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
IF tbl_1.Next_calibration_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Calibration Overdue",<<%dlg%
{region}
Tool Calibration is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Calibration Overdue")
close_if_exists("Tool Calibration Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
IF tbl_1.Next_service_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Service Overdue",<<%dlg%
{region}
Tool Service is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Service Overdue")
close_if_exists("Tool Service Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
tbl.close()
tbl_1.close()
end
I have a hybrid Product_Item Set whereby the product file has 1 unique key for the product number, and the item file has the key product number + serial number. In that way I can have multiple serial numbers for the same item. The form for this looks and works great.
However, the rub is that when I go to invoice, I can pull up and select the product with the corresponding serial, but for some reason, it always only finds the first serial number, regardless of which one I selected with no errors.
I know the problem is in the "CanSave" event which is below. Can I get a set of eyes to look at what's going wrong with the find in tbl_1 in looking for the Product_ID + serial_number .
dim tbl as p
dim tbl_1 as p
tbl = table.open("product",FILE_RW_SHARED)
tbl_1= table.open("items",FILE_RW_SHARED)
'1st Pass for Product File Set the table order to the key expression
dim itbl as p
dim key_expr as c
key_expr = "Product_Id"
if key_expr = "" then
ui_msg_box("Error","Key expression cannot be blank. Edit the Action and specify the Key expression.")
end
end if
dim key_value as c
key_value = "" +a5_eval_expression("=Invoice_Items->Product_Id",local_variables())
itbl = tbl.order(key_expr,".t.")
'Determine the data type that the key expression returns
dim data_type as c
if tbl.eval_valid(key_expr) then
data_type = typeof(tbl.eval(key_expr))
else
ui_msg_box("Error","Key expression is not valid: '"+key_expr+"'",UI_STOP_SYMBOL)
tbl.close()
end
end if
find_result = tbl.fetch_find(convert_type(key_value,data_type))
'Was the find successful?
'Evaluate the key value for the current record and compare it with the key value that was searched for...
current_key = tbl.eval(key_expr)
if current_key <> key_value then
ui_msg_box("Error","Record to update not found. Could not find record with key value: '" + key_value+"'.",UI_STOP_SYMBOL)
tbl.close()
end
end if
if tbl.is_record_locked() = .t. then
ui_msg_box("Error","Cannot edit Product record because it is locked by another user, or in another session.",UI_STOP_SYMBOL)
tbl.close()
end
end if
' End of the First
'**********************************
'2nd Pass for Product File Set the table order to the key expression
dim itbl_1 as p
dim key_expr_1 as c
key_expr_1 = "Product_Id + Serial_Number"
if key_expr_1 = "" then
ui_msg_box("Error","Key expression cannot be blank. Edit the Action and specify the Key expression.")
end
end if
dim key_value_1 as c
key_value_1 = "" +a5_eval_expression("=Invoice_Items->Product_Id",local_variables())
itbl_1 = tbl_1.order(key_expr_1,".t.")
'Determine the data type that the key expression returns
dim data_type_1 as c
if tbl_1.eval_valid(key_expr_1) then
data_type_1 = typeof(tbl_1.eval(key_expr_1))
else
ui_msg_box("Error","Key expression is not valid: '"+key_expr_1+"'",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
find_result = tbl_1.fetch_find(convert_type(key_value_1,data_type_1))
'Was the find successful?
'Evaluate the key value for the current record and compare it with the key value that was searched for...
current_key = tbl_1.eval(key_expr_1)
if current_key <> key_value_1 then
ui_msg_box("Error","Record to update not found. Could not find record with key value: '" + key_value_1+"'.",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
if tbl_1.is_record_locked() = .t. then
ui_msg_box("Error","Cannot edit Item record because it is locked by another user, or in another session.",UI_STOP_SYMBOL)
tbl_1.close()
end
end if
' End of the Second
'**********************************
'Check and see if tool to be issued is greater than tool signed
if tbl.Qty_IN_STO - v_quantity < 0 then
msgbox("Quantity in StocK Cannot be Less Than Zero , Please Correct Qty or Delete Tool")
cancel()
tbl.close()
end
end if
IF tbl_1.Next_load_test_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Load Test Overdue",<<%dlg%
{region}
Tool Load Test is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Load Test Overdue")
close_if_exists("Tool Load Test Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
IF tbl_1.Next_calibration_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Calibration Overdue",<<%dlg%
{region}
Tool Calibration is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Calibration Overdue")
close_if_exists("Tool Calibration Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
IF tbl_1.Next_service_date < date()then
ok_button_label = "&OK"
cancel_button_label = "&Cancel"
varC_result = ui_dlg_box("Tool Service Overdue",<<%dlg%
{region}
Tool Service is Overdue...Press OK to Continue Tool Issue.
{endregion};;
{line=1,0};
{region}
<*15=ok_button_label!OK> <15=cancel_button_label!CANCEL>
{endregion};%dlg%,<<%code%
IF a_dlg_button = "OK" THEN
ui_modeless_dlg_close("Tool Service Overdue")
close_if_exists("Tool Service Overdue")
'tbl.close()
END IF
IF a_dlg_button = "CANCEL" THEN
'do nothing, let the dialog close
cancel()
'tbl.close()
END IF
%code%)
'end
END IF
tbl.close()
tbl_1.close()
end
Comment