OK! Это самая первая статья в разделе посвященном DOP. В свое время, обратился ко мне человек, не знакомый с DOPом, по поводу зависшей квитанции. Чего с ней можно поделать, как ее убрать, а то достала она телефонисток. Да и работать мешает, в конце концов! Сколько можно?! А я в то время знал про самый подходящий, в этой ситуации, макрос GETALL. Мол, показывает все ожидающие квитанции по конкретному SOTRACE. Круто! Только одна загвоздка есть: - применить результаты работы макроса на практике, лично для меня, проблематично (по крайней мере - раньше было).
>GETALL:ZYXW
TKT# POINTER #REC STAT POS# TKTHD_STATUS TKT STATE
1 0042 0710:6A2A 0004 BUSY 4 CUT THROUGH CALL HELD
2 0086 0700:12DA 0004 BUSY 6 SET UP SET UP POS
3 0094 0700:7514 0004 BUSY 4 SET UP CALL HELD
4 00A3 0720:BA88 0004 BUSY 4 CONVERSATION CALL HELD
Такое впечатление, что вся нужная информация ушла сквозь пальцы. Ну, знаете вы, после запуска макроса, номер квитанции (его же надо еще перевести из одной системы в другую), позицию знаете, состояние квитанции. Уже не мало! Согласен. Но без определенных навыков искать вам и искать нужную квитанцию.
Обладая определенной эрудицией, можно догадаться что макрос как-то связан с макросом GETALL. Так оно и есть! За основу взят именно макрос GETALL (ну, а чего поделаешь? Описанием SSMки не обладаем, приходится пользоваться тем, что есть). Только, в отличие от GETALL, выводятся другие поля, т.к. макрос заточен под одну задачу (что не мешает его использовать не по назначению). Нужен он для сброса "зависших" квитанций. Алгоритм прост (хотя и не проверен мною на практике до конца, т.к. случая, просто, не представилось):
REM MAC GETA Если макрос уже в памяти - убираем его
DEF MAC GETA и определяем новый макрос (собственно, начало тела макроса)
IF '%0' = '' А запустили с параметром, или без?
WRI 'GIVE NA OF SOTRACE: ',& Ага! Без!
DEF .NA=%Q Присваиваем переменной .NA полученное от пользователя значение
ELSE иначе...
DEF .NA=%0 .NA у нас становится равной параметру, с которым запускали макрос
ENDIF Окончание выражения IF [тыры-пыры-растопыры] END
ACT .NA Активируем контрольный элемент
:SCB -70T,,NODISP ;FFQTZP4A С помощью макроса получаем информацию для дальнейшей работы
AD .CALL_REF=(WOR LWA+2):0 ;Z_CALL_REF_ARRAY Начинаем пользоваться полученной информацией
AD .TKT_PTRS=(WOR LWA+2):30DC ;Z_TKT_PTR_TAB К сожалению, остается только догадываться
AD .BASE=WOR (WOR LWA+2):4E2C ;Z_BASE_OP_CALL_NBR о назначении этих переменных.
AD .I=0,.ST=0,.REF=0,.SEQ=1,.STATE=0,.PTR=FFFF:FFFF,.POS=FFFF
AD .PTRA=FFFF:FFFF,.J=0,.PTRB=FFFF:FFFF,.P
WRI 'POS# A SUB # B SUB # TKT STAT ADDRES CALL STA ADDRES' Выводим заголовок будующей таблицы
COUNT 250T Поехали считать до 250-ти. Почему? Спросите что по-легче!
.ST =BYT .CALL_REF+6
.REF=WOR .CALL_REF
IF .ST <> 0
BAS=H Переходим на вывод в шестнадцетиричной форме
.PTR =POI(.TKT_PTRS+(.REF*4)+4) Получаем адрес PROCESS-RECORD
.STATE=BYT .PTR+36T Получаем TICKET STATE
.POS=WOR .PTR+62 Получаем номер позиции, на которой ведется обработка
IF .POS <>FFFF Если позиция предстваляет из себя чего-нибудь осмысленное
WRI .POS,' ',& выводим номер позиции
ELSE в другом случае
WRI ' ',& выводим пробелы
ENDIF
.PTRA=POI(.PTR) Получаем адрес A_SUBSCRIBER RECORD
.PTRB=POI(.PTRA) Получаем адрес B_SUBSCRIBER RECORD
BAS=A Переходим на вывод в формате ASCII
COU 12T;OUTPUT A# Далее выводим номер абона А
WRI BYT .PTRA+48T+.J,&
.J=.J+1
ENDC
.J=0
WRI ' ',&
COU 12T;OUTPUT B# Далее выводим номер абона Б
WRI BYT .PTRB+34T+.J,&
.J=.J+1
ENDC
.J=0
IF .STATE > 11T Если TICKET STATE есть что-то не обычное
WRI ' ???? ',& мы удивляемся
ELSE
BAS=H
WRI ' ',.STATE,' ',& иначе выводим состояние квитанции
ENDIF
WRI ' ',(.PTR+36T),& и заодно, адрес, по которому его можно найти
.STATE=BYT .PTR+39T
IF .STATE > 10T принимаемся за CALL STATE OF TICKET
WRI ' ???? ',& история повторяется
ELSE
BAS=H
WRI ' ',.STATE,' ',&
ENDIF
WRI ' ',(.PTR+39T)
.SEQ=.SEQ+1
ENDIF
.I=.I+1
.CALL_REF=.CALL_REF+8
ENDC
EM Макросу конец!
Иформация к размышлению: | Ticket State (состояние квитанции)
|
И еще про макросы, наболело. Сколько раз меняли пакет, столько раз переписывали библиотеки макросов. Ну неужели сложно в RoboCopy поставить нужную отметку, или вообще убрать эти файлы из пакета? Надоело потом искать свои макросы на дисках и заново помещать их в библиотеки. Сервис, блин, за собственные деньги! |
Хочу сказать спасибо инженерам сервис центра за оказанную помощь (правда, собственным макросом они поделились, когда уже все было сделано).
Максим Осташов
Размещено на www.s12most.mailru.com 7 апреля 2001
Есть вопросы или дополнения, конструктивная критика? Пишите!