Функции предварительной обработки, используемые в таблицах

В настроечной таблице существует поле – Функции предварительной обработки. Это поле обрабатывается аналогично полю Функция приема, только не в момент приема в таблицу, а в момент корректировки содержимого соответствующего столбца основной таблицы.

Функции предварительной обработки вызываются:

Если мы "проходим" таблицу по Enter (то есть в режиме корректировки), то программа допускает попадание на поле, которому необходима предварительная обработка, без вызова функций предварительной обработки, но, как только пользователь попытается изменить поле, тут же запускается механизм предварительной обработки.

Механизм предварительной обработки отключается режимом CTRL+A+A.

В качестве функций предварительной обработки могут вызываться обычные функции печати (приема), которые конечно имеют смысл в данном контексте.

В настоящий момент существует всего две специализированных функции предварительной обработки:

Параметры для этих функций задаются так:

КЛЮЧ1:ЗНАЧЕНИЕ_КЛЮЧА1 [,КЛЮЧ2:ЗНАЧЕНИЕ_КЛЮЧА2...]

Допустимые ключи:

У функции CLASSIF можно указать дополнительный ключ S:имя функции в этом случае при корректировке справа в поле ввода появится кнопка вызова справочника, при нажатии на которую вызывается скриптовая функция указанная после S:

параметры скриптовой функции (&buffer,bufsize,handle,&C_Params), где:

   // buffer - буфер для измененного текста
   // bufsize - его размер
   // handle - дескриптор edit окна где происходит ввод
   // C_Params - структура CLASSIF_PARAMS, в составе которой содержатся все ключи
                                           перечисленные в CLASSIF:
                                           struct CLASSIF_PARAMS
{ 
   char FuncName[32];   // имя функции
   char NF[260];        // параметр функции, имя файла таблицы справочника
   char KF[11];         // параметр функции, ключевое поле
   int PX,PY,DX,DY;     // параметры функции, координаты и размеры окна
   long pTabl;          // указатель на текущую таблицу
   int N_Fld,N_Rcr;     // номер столбца и строки редактируемой ячейки
   int WinX,WinY;       // абс. координаты левого верхнего угла где желательно вывести справочник 
};
  

В качестве примера есть функция SRef в файле funcrw.s, которая вызывает простой справочник заданного ключом NF:

Т. е. к примеру если мы хотим подключить к полю таблицы "код улицы" справочник T_GUIDE\street.tab то в функцию предварительной обработки для этого поля следует написать: CLASSIF(S:SRef, NF:T_GUIDE\street.tab).

Для задания значения ключей разделителей ",;" используются буквосочетания: ЗПТ - , ТЗПТ - ; .

[Примечание]

Замечания по заполнению таблицы функцией PARCER:

  • если в таблице меньше строк, чем в матрице, то в таблицу будут добавлены дополнительные строки (чтобы вошла вся матрица);

  • z-поля таблицы не заполняются (пропускаются);

  • если в матрице столбцов больше, чем полей в таблице, то лишние столбцы из матрицы игнорируются.