This page describes the CheckBox, CheckBoxList, CheckComboBox and ComboBox formula events. Their change formulas run for side effects; their Result values cannot accept, reject or undo a value change. Only the ComboBox OnGetHint Result is used.
Common argument limitation: These controls use component-specific formula executors that do not populate the normally expected Argument_EventName, Argument_SenderName and Argument_SenderID variables. Do not rely on those values.
Despite its name, the CheckBox default formula runs after the new value has already been written to the component, other components have been notified and the DBForm has been marked as changed. It runs before recalculation and before OnAfterChange. The same order is used on desktop and web.
Result: Ignored. The formula cannot block or revert the change. It is stored as the component's default DB_FORMULA and has no separate NeedResult metadata.
Example: Record that the first change hook has run.
CIP_SetRuntimeVariable("CheckBoxBeforeChange", Now());Runs after OnBeforeChange and the following recalculation. Its Result is ignored and NeedResult=False. The calculated Result is not copied to CurScriptResult.
Example: Record completion of the CheckBox change sequence.
CIP_SetRuntimeVariable("CheckBoxAfterChange", Now());On desktop, this event runs after the edited checkbox row has been committed locally and before the link records are later saved to the database. Argument_DataID is the main DBForm record ID, Argument_SrcDataID is the current source-row ID, Argument_LinkDataID is the existing link-record ID or empty for a new link, and Argument_RecordChecked is the new checked state.
Web limitation: Web click, check-all and uncheck-all actions also run the formula, but the web executor populates none of these four event-specific arguments. The formula must not depend on them when the form is used on web.
Result: Ignored and cannot prevent the later database save.
Example: On desktop, remember the most recently checked source row.
if Argument_RecordChecked then
CIP_SetRuntimeVariable("LastCheckedSourceID", Argument_SrcDataID);Runs after the comma-separated ID list has been written, the component has signalled a change and the first recalculation has completed. On desktop, the control's change notification starts this sequence. On web, individual check actions only update the displayed summary; the value and formula are processed when the drop-down closes or when the selection is cleared.
Result: Ignored. A valid formula is followed by a second recalculation. The component executor leaves its success flag True even on formula failure, so the second recalculation can also run after an error.
Example: Record when the selection list is committed.
CIP_SetRuntimeVariable("CheckComboChanged", Now());The name is misleading: the new value has already been written, other components notified and the form marked as changed before this formula runs. It precedes only recalculation and OnChange.
Result: Ignored; NeedResult=False. It cannot prevent the change.
Example: Record entry into the ComboBox change sequence.
CIP_SetRuntimeVariable("ComboBeforeChange", Now());Runs after the first recalculation; a successful formula is followed by a second recalculation. Its Result is ignored and is not copied to CurScriptResult. On web, six ID-based entry types overwrite the previous internal value with the inherited AsDouble result of zero before normal update processing. This can suppress change detection for zero or NULL values.
Example: Record completion of the ComboBox formula.
CIP_SetRuntimeVariable("ComboChanged", Now());Runs when the component's Hint is requested. The text form of its Result becomes the Hint and NeedResult=True. If the formula fails, the resulting Hint is empty and the localized, configured and entry-tooltip fallback chain is not used.
Execution frequency: A desktop refresh requests the Hint once. A web refresh requests it separately for the ComboBox and its information label, so a formula with side effects can run twice.
Example: Provide a fixed instruction.
Result := "Select a value";