Возможность отметки записей полезна для выполнения следующих операций:
Отметка пользователем записей реализуется при помощи следующих controls:
Кроме этого, пользователю могут быть предоставлены еще две функции:
Обычно, доступ пользователю к этим двум функциям предоставляется не при помощи кнопок, а через меню (так как они редко используются).
Конечно, сами отмеченные записи выделяются в listbox-e при помощи специальных меток и/или цветом.
Список отмеченных записей находится в специальном файле или queue. Например, файл списка отмеченных товаров:
TLIST
FILE,DRIVER('TOPSPEED'),NAME('TList'),CREATE,PRE(tli)
TCode_key KEY(+tli:TCode),OPT,NOCASE,PRIMARY
Number_key KEY(+tli:Number),DUP,OPT,NOCASE
RECORD RECORD
Number ULONG
! Порядковый номер в
списке отмеченных
TCode STRING(13) !
Уникальный код товара
Quant DECIMAL(13.3) !
Количество товара
Price DECIMAL(13.2) ! Цена
товара
END
END
Вся поддержка работы с отмеченными
записями реализована в виде control-шаблона TListButtons,
который размещает в окне нужные control-ы и
вставляет соответствующий код.
#!===================================================================
#CONTROL (TListButtons, 'Кнопки Отметки товаров'), PROCEDURE
#!===================================================================
CONTROLS
STRING(@n6),AT(155,4),FONT(,,0800000H,),USE(LOC:RecordsTList),LEFT
BUTTON,AT(,,16,16),MSG('Отметить/сн<255>ть
отметку товара'),TIP('Отметить/сн<255>ть отметку'),|
USE(?Button_Tag),ICON('ROMB.ICO')
BUTTON,AT(18,0,16,16),MSG('Очистить список
отмеченных товаров'),TIP('Очистить список
отмеченных'),|
USE(?Button_ClearTag),ICON('NO_ROMB.ICO')
BUTTON,AT(18,0,16,16),MSG('Инвертировать отметки
товаров документа'),TIP('Инвертировать отметки'),|
USE(?Button_InvTag),ICON('INVERS.ICO')
BUTTON,AT(18,0,16,16),MSG('Отметить товары по
фильтру'),TIP('Отметить товары по фильтру'),|
USE(?Button_FiltTag), ICON('FILTER.ICO')
BUTTON,AT(18,0,16,16),MSG('Импорт из списка
отмеченных товаров'),TIP('Импорт отмеченных
товаров'),|
USE(?Button_Import), ICON('IMPORT.ICO')
END
#!
#! ----- Локальные переменные -----
#LOCALDATA
LOC:RecordsTList LONG(0)
#ENDLOCALDATA
#!
#DISPLAY ('')
#DISPLAY ('Кнопки отметки товаров.')
#DISPLAY ('')
#DISPLAY ('Название поля кода товара:')
#PROMPT ('Поле товара:', @s20), %TowField, REQ, DEFAULT('tt2:TCode')
#DISPLAY ('')
#DISPLAY ('Название процедуры инвертирования:')
#PROMPT ('Процедура Инвертирования:', PROCEDURE), %InvTagProc, REQ,
DEFAULT('InvTag_TTN')
#DISPLAY ('')
#DISPLAY ('Название процедуры фильтрации:')
#PROMPT ('Процедура Фильтрации:', PROCEDURE), %FilterTagProc,
DEFAULT('FilterTag_TTN')
#DISPLAY ('')
#DISPLAY ('Название процедуры Импорта:')
#PROMPT ('Процедура Импорта:', PROCEDURE), %ImportTagProc,
DEFAULT('ImportTag_TTN')
#DISPLAY ('')
#!
#ATSTART
#DECLARE (%ButtonTag)
#FOR (%Control), WHERE(%ControlInstance = %ActiveTemplateInstance)
#SET (%ButtonTag, %Control)
#ENDFOR
#DECLARE (%ButtonClearTag)
#FOR (%Control), WHERE(%ControlInstance = %ActiveTemplateInstance)
#SET (%ButtonClearTag, %Control)
#ENDFOR
#DECLARE (%ButtonInvTag)
#FOR (%Control), WHERE(%ControlInstance = %ActiveTemplateInstance)
#SET (%ButtonInvTag, %Control)
#ENDFOR
#DECLARE (%ButtonFiltTag)
#FOR (%Control), WHERE(%ControlInstance = %ActiveTemplateInstance)
#SET (%ButtonFiltTag, %Control)
#ENDFOR
#ENDAT
#!
#! ----- Beginning of Procedure, After Opening Files
#AT (%AfterFileOpen)
LOC:RecordsTList = RECORDS( TList )
#ENDAT
#!
#! ---- Кнопка Button_Tag -----
#AT (%ControlPostEventHandling, '?Button_Tag', 'Accepted')
tli:TCode = %TowField
get( TList, tli:TCode_key )
if errorcode()
clear( tli:Record, 1 )
set( tli:Number_key, tli:Number_key )
previous( TList )
if errorcode()
Num# = 1
else
Num# = tli:Number + 1
.
clear( tli:Record )
tli:Number = Num#
tli:TCode = %TowField
add( TList )
else
delete( TList )
.
LOC:RecordsTList = RECORDS( TList )
ForceRefresh = True
do RefreshWindow
POST( EVENT:ScrollDown, ?Browse:1 )
#ENDAT
#!
#! ---- Кнопка Button_ClearTag ----
#AT (%ControlPostEventHandling, '?Button_ClearTag', 'Accepted')
setCursor( cursor:Wait )
empty( TList )
setCursor()
LOC:RecordsTlist = RECORDS( TList )
ForceRefresh = True
do RefreshWindow
SELECT( ?Browse:1 )
#ENDAT
#!
#! ----- Кнопка Button_InvTag ----
#AT (%ControlPostEventHandling, '?Button_InvTag', 'Accepted')
%InvTagProc
LOC:RecordsTlist = RECORDS( TList )
ForceRefresh = True
do RefreshWindow
SELECT( ?Browse:1 )
#ENDAT
#!
#! ----- Кнопка Button_FiltTag -----
#AT (%ControlPostEventHandling, '?Button_FiltTag', 'Accepted')
#IF(%FilterTagProc <> '')
%FilterTagProc
LOC:RecordsTlist = RECORDS( TList )
ForceRefresh = True
do RefreshWindow
SELECT( ?Browse:1 )
#ENDIF
#ENDAT
#!
#! ----- Кнопка Button_Import -----
#AT (%ControlPostEventHandling, '?Button_Import', 'Accepted')
#IF(%ImportTagProc <> '')
%ImportTagProc
LOC:RecordsTlist = RECORDS( TList )
ForceRefresh = True
do RefreshWindow
SELECT( ?Browse:1 )
#ENDIF
#ENDAT
#!
Кнопка "Инвертировать отметки"
вызывает процедуру %InvTagProc,
которая инвертирует отметки записей в данной
таблице:

После нажатия на кнопку "ОК" , процедура инвертирования выполняет инвертирование отметок товаров (выводя при этом progressbar), причем если установлен признак "Копировать Количество" то в список отмеченных товаров записывается также Количество и Цена отмеченных товаров.
Кнопка "Импорт из списка отмеченных"
вызывает процедуру %ImportTagProc,
которая вставляет список отмеченных товаров в
данную таблицу:

Кнопка "Отметить по фильтру"
вызывает процедуру %FilterTagProc,
которая выполняе отметку товаров в соответствии
с заданными условиями отбора записей. Напимер
по условиям, показанным на этом примере, быдут
отмечены товары в названии которых имеется
подстрока "Canon" с положительным
остатком на участке номер 1:
