Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Комплектатор :  ИРБИС Irbis
 
Страницы: 12>>
Страница: 1 из 2
автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 26, October, 2009 06:44

Здравствуйте!
Я уже задавала этот вопрос, но он до сих пор остался открытым. Подскажите, пожалуйста, возможно ли сделать автосчетчик для поля идентификатор читателя в формате: номер_чит_билета**/текущий_год, подобно тому, как это реализовано в АРМе "Комплектатор" в поле номер КСУ поступления.Искала как это сделано там, пока не нашла на форуме запись о том, что механизм формирования номера КСУ зашит в код. Вот у меня и родился вопрос это вообще можно реализовать посредством языка форматирования?

**номер читательского билета каждый год меняется. Т.е. приходит первый читательв 2009 году, соответственно номер у него будет 1/2009, второй - 2/2009 и т.д

Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 26, October, 2009 11:04

Вы можете сами это организовать, например:
1. заводите запись читателя с идентификатором MAXREADER
2. выставляете начальное значение, например, в поое 22 - 1/2009
3. Сделайте инверсию, например - 22 0 if v30: 'maxreader' then "MAXI="v22 fi
4. В лист ввода поля 30 подцепите ввод по словарю: MAXI=
5. добавьте в autoin.gbl RDR строки, увеличивающие номер в записи AXREADER:

CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
1

&uf('G0/',v1001)

REP
1
1
f(val(v1)+1,0,0)
XXXXXXXXXXXXXXXXXXX
IF
if val(v1)>val(&uf('G0/',v22)) then '1' fi
REP
22
1
v1,&uf('G1/',v22)

FI
DEL
1001
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
END

Re: автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 27, October, 2009 08:05

>3. Сделайте инверсию, например - 22 0 if v30: 'maxreader' >then "MAXI="v22 fi
>4. В лист ввода поля 30 подцепите ввод по словарю: MAXI=

По 3му пункту: это нужно внести в файл rdr.fst в описание поля 22?
по 4му: в редакторе РЛ полей в файле rdr.ws для поля 30 выбрать режим ввода 2 и вдополнительную информацию внести MAXI=. Если так, то что делать со стоящим там ,RI=,

Пробовала,не работает, если я, конечно, все правильно делала :) Может это как-нибудь связано с использованием формат-программы uf? версия у нас 2006.2



Редактировано 1 раз. Последний раз 27.10.2009 08:08 пользователем whim.

Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 27, October, 2009 15:39

> По 3му пункту: это нужно внести в файл rdr.fst в
> описание поля 22?
- ДА
> по 4му: в редакторе РЛ полей в файле rdr.ws для
> поля 30 выбрать режим ввода 2 и вдополнительную
> информацию внести MAXI=. Если так, то что делать
> со стоящим там ,RI=,
- вместо ,RI=, поставьте ,MAXI=,
> Пробовала,не работает
- На каком этапе не работает? Префикс MAXI= в словаре появился? При вводе идентификатора словарь подается? При сохранении в записи MAXREADER увеличивается значение N/2009?

Re: автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 28, October, 2009 03:50

Добрый день!

При вводе идентификаторв словарь открывается, но он пустой
При сохранении в записи MAXREADER значение не увеличивается
Прикрепляю скриншоты rdr.fst и rdr.ws

Вложения: RDR_fst.JPG (58.9KB)   RDR_ws.JPG (58.2KB)  
Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 28, October, 2009 10:42

Во-первых, ошиблись в FST - не сделали переход на др.стр., т.е.
..."SB"v22,/,if.....
Во-вторых, покажите, что у вас в записи MAXREADER

Re: автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 28, October, 2009 11:17

Я уже нашла в чем была ошибка прочитала в мануалах в приложении 5, что надо создать словарь заново после правки ТВП, помогло, правда выдавал не совсем то, что нужно было. Затем исправила ошибку про которую вы мне написали (Спасибо :)) в словаре появилось значение 1/2009, но теперь при создании новой записи оно не увеличивается на единицу,т.е при регистрации нового читателя открываю словарь, а там одно значение 1/2009 и при сохранении записи MAXREADER значение n/2009 не увеличивается



Редактировано 2 раз. Последний раз 29.10.2009 09:08 пользователем whim.

Вложения: rdr.TXT (92 bytes)  
Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 29, October, 2009 11:10

Во-первых, в строке
22 0 if v30: 'maxreader' >then "MAXI="v22 fi
знак ">" лишний, убрать.
Во-вторых, если вы взяли задание для autoin через буфер, то проверьте концы каждой строки - там пробелы, уберите их. Задание autoin загрузите в таблицу глобальной и проверьте на месте ли все новые операторы.

Re: автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 29, October, 2009 11:16

>Во-первых, в строке
>22 0 if v30: 'maxreader' >then "MAXI="v22 fi
>знак ">" лишний, убрать.
У меня там и не было лишнего знака

Re: автосчетчик
Пользователь: whim (IP-адрес скрыт)
Дата: 30, October, 2009 03:16

>Во-вторых, если вы взяли задание для autoin через буфер, то >проверьте концы каждой строки - там пробелы, уберите их.

Действительно, лишние пробелы там были, исправила, все работает :)
Спасибо Вам огромное :)

Re: автосчетчик
Пользователь: Serega89 (IP-адрес скрыт)
Дата: 16, April, 2010 05:17

Добрый день.
Сделал все как тут написано, все работает, но не могу разобраться с увелечение номера на единицу.

Нужно чтобы номер был 190001, 190002,190003...

ИРБИС 64 2009.1

Заранее, спасибо.

Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 16, April, 2010 10:01

Что именно вы сделали и что у вас не так происходит?

Re: автосчетчик
Пользователь: Serega89 (IP-адрес скрыт)
Дата: 16, April, 2010 10:41

Я сделал следующее:

Пользователь: ochagova (IP-адрес скрыт)
Дата: 26, October, 2009 11:04

Вы можете сами это организовать, например:
1. заводите запись читателя с идентификатором MAXREADER
2. выставляете начальное значение, например, в поое 22 - 1/2009
3. Сделайте инверсию, например - 22 0 if v30: 'maxreader' then "MAXI="v22 fi
4. В лист ввода поля 30 подцепите ввод по словарю: MAXI=
5. добавьте в autoin.gbl RDR строки, увеличивающие номер в записи AXREADER:

CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
1

&uf('G0/',v1001)

REP
1
1
f(val(v1)+1,0,0)
XXXXXXXXXXXXXXXXXXX
IF
if val(v1)>val(&uf('G0/',v22)) then '1' fi
REP
22
1
v1,&uf('G1/',v22)

FI
DEL
1001
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
END



Но по моему, счетчик увеличивается на единицу даже тогда, когда существующая запись просто корректируеся. И мне надо чтобы номера были не 1/2009, 2/2009... , а 190001, 190002...
Я в autoin.gbl записал просто

CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
REP
22
1

f(rsum(v22';1'),0,0)


Счетчик вроде бы работает, но при сохранении выдает сообщение Дублетный инв. номер 1, т.е. одинаковый номер с MAXREADER.
но увелечение на 1 происходит.

Дак вот вопрос:
1) Как сделать чтобы при корриктеровке существующей записи номер не увеличивался
2)Как сделать чтобы Не выходила ошибка

Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 16, April, 2010 18:06

Во-перрвых, номер поля 22 это неудачно, т.к. в словаре это поле по одному префиксу с полем 30. Так что берем поле, напр. 70. Во-сторых, надо поставит условие - менять поле 70, если пришел номер больше его.
CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
1
XXXXXXXXXXXXXXXXXXX
if v1001<>'' then f(val(v1001)+1,0,0) fi
XXXXXXXXXXXXXXXXXXX
IF
if val(v1)>val(v70) then '1' fi
REP
70
1
v1

FI
DEL
1001
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
END
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX

Re: автосчетчик
Пользователь: Serega89 (IP-адрес скрыт)
Дата: 19, April, 2010 05:15

Спасибо, все получилось

Re: автосчетчик
Пользователь: Serega89 (IP-адрес скрыт)
Дата: 15, September, 2010 05:11

Добрый день!
Опять вспыл этот вопрос.
После того как импортировали студентов в БД RDR счетчик перестал работать.Последний номер видно, но увелечение на 1 не происходит. Если я опустошаю БД, создаю заново читателя MAXREADER, счетчик работает, а после импорта из текстового файла данных о студентах, снова перестает работать.
У студентов рабочий лист RDRU, поле 30 пустое. У сотрудников(где и должен работать счетчик) рабочий лист RDR.

ИРБИС 64, 2009.1
Заранее благодарен.

Re: автосчетчик
Пользователь: Gena (IP-адрес скрыт)
Дата: 15, September, 2010 11:25

Импорт нужно делать с включенным автовводом, именно он вызывает команды из Аутоин.гбл

Re: автосчетчик
Пользователь: Serega89 (IP-адрес скрыт)
Дата: 17, September, 2010 08:25

Gena, спасибо, Вы почти были правы.
Оказалось что импорт набо было сделать наоборот с ВЫКЛЮЧЕННЫМ автовводом. Сейчас все стало работать

Re: автосчетчик
Пользователь: Gena (IP-адрес скрыт)
Дата: 17, September, 2010 08:40

Я не в том порядке задачу понял. Но суть остается одной.

Re: автосчетчик
Пользователь: Grey (IP-адрес скрыт)
Дата: 22, June, 2011 15:44

Пытаюсь настроить автосчетчик, при вводе идентификатора словарь подается с значением записанным в записи MAXREADER, но при попытке сохранить запист выдает ошибку "Ошибка при выполнении автоввода" и значение в записи MAXREADER не увеличивается. Где искать ошибку? Версия Ирбис 2010.1

Вложения: autoin.gbl (11.5KB)   Rdr.fst (11.1KB)   RDR.WS (2KB)  
Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 23, June, 2011 14:04

Исправила явные ошибки в блоке CORREC. Если вы пишите операторы не в интерфейсе, то соблюдайте структуру операторв - ADD,REP,CHA,DEL. Вы ее нарушили в нескольких местах. По смыслу не проверяла.

Вложения: autoin.gbl (11.5KB)  
Re: автосчетчик
Пользователь: Grey (IP-адрес скрыт)
Дата: 27, June, 2011 12:13

ochagova написал(а):
-------------------------------------------------------
> Исправила явные ошибки в блоке CORREC. Если вы
> пишите операторы не в интерфейсе, то соблюдайте
> структуру операторв - ADD,REP,CHA,DEL. Вы ее
> нарушили в нескольких местах. По смыслу не
> проверяла.

Спасибо. Смысл подправил сам :)

Re: автосчетчик
Пользователь: Lavrinovich (IP-адрес скрыт)
Дата: 19, October, 2011 07:49

Из досужего любопытства. Как это "писать не в интерфейсе"? Не в интерфейсе Delphi, что ли? А как? Когда-то слышал, что можно программировать и на бумажке. Но это если и было, то в довиндовую эпоху.

Re: автосчетчик
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 24, October, 2012 21:25

А возможно ли осуществить глобальную корректировку другой БД из текущей?
Например, для хранения максимального значения идентификатора создать запись в отдельной технологической БД (TECHN) и при сохранении записи в БД RDR, сделать соответсвующую корректировку записи в БД TECHN.

Re: автосчетчик
Пользователь: Gena (IP-адрес скрыт)
Дата: 24, October, 2012 21:32

Конечно. Есть оператор CORREC, которому задется не только поисковый термин для поиска записи, но и база, в которой его искать. Если запись по поисковому термину находится, то вы получаете возможность выполнить ЛЮБУЮ корректуру найденной записи.

Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 29, October, 2012 13:52

Эту запись можно создать и в самой БД RDR. Этот вариант описывался на форуме. Реальный вариант: в БД RDR заведена запись, в которой в поле 30 записано MAXREADER, а в поле 32 выставлен первый номер, начиная с которого... В файле autoin.gbl БД RDR добавляются операторы ниже. В результате при сохранении любой записи номер в MAXREADER увеличивается.

CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
1
XXXXXXXXXXXXXXXXXXX
if v1001<>'' then f(val(v1001)+1,0,0) fi
XXXXXXXXXXXXXXXXXXX
IF
if val(v1)>val(v32) then '1' fi
REP
32
1
v1

REP
32
1
if val(&uf('+95',v32))=1 then '00000' else if val(&uf('+95',v32))=2 then '0000' else if val(&uf('+95',v32))=3 then '000' else if val(&uf('+95',v32))=4 then '00' else if val(&uf('+95',v32))=5 then '0' fi fi fi fi fi,v32

FI
DEL
1001
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
END
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
При вводе читателя поле 30 не заполняется, а формируется автоматически из autoin.gbl, в котором в начале стоит оператор

ADD
30

if a(v30) then &uf('DRDR,!RI=MAXREADER!,v32') fi

Re: автосчетчик
Пользователь: Mila__ (IP-адрес скрыт)
Дата: 05, April, 2013 02:48

здравствуйте!
У нас сформирован автосчетчик 200001, 200002 и т.д. Счетчик работает, но при сохранении выдает сообщение: ошибка ФЛК записи:Дублетный идентификатор и ссылку дает на запись номера MAXREADER.
Каким образом можно устранить эту ошибку??
Заранее спасибо!

Re: автосчетчик
Пользователь: Mila__ (IP-адрес скрыт)
Дата: 05, April, 2013 04:33

ошибка ФЛК.
у нас стоит ИРБИС32 2006.1

Вложения: 1.JPG (69.5KB)  
Re: автосчетчик
Пользователь: ochagova (IP-адрес скрыт)
Дата: 05, April, 2013 10:16

Ошибка в том, что вы вводите идентификатор, который уже есть в записи 13. Устранить - вводить другой идентификатор.
Автосчетчик - это сугубо ваш механизм и не всем понятно о чем речь. Если запись 13 - это та запись откуда берется очередной идент-р, то измените этот номер в записи 13.

Re: автосчетчик
Пользователь: Mila__ (IP-адрес скрыт)
Дата: 08, April, 2013 06:13

так дело в том что, 13 запись это запись maxreader, при сохранении читателю присваивается идентификатор, а maxreader увеличивается на 1..но выходит каждый раз такая ошибка, может быть надо как -то в контроле флк убрать условие которое проверяет на дублетность..
maxreader построен след образом:
CORREC
'*'
v30
'RI=MAXREADER'
XXXXXXXXXXXXXXXXXXX
DEL
1
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
1
XXXXXXXXXXXXXXXXXXX
&uf('G22',v1001)
XXXXXXXXXXXXXXXXXXX
REP
1
1
f(val(v1)+1,0,0)
XXXXXXXXXXXXXXXXXXX
IF
if val(v1)>val(&uf('G22',v22)) then '1' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
REP
22
1
if &uf('+95'v1)='1' then '20000'v1 else if &uf('+95'v1)='2' then '2000'v1 else if &uf('+95'v1)='3' then '200'v1 else if &uf('+95'v1)='4' then '20'v1 else '2'v1 fi fi fi fi
XXXXXXXXXXXXXXXXXXX
FI
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1001
*
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
END

Страницы: 12>>
Страница: 1 из 2


Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.