Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
DLL для контроля кумуляции номеров
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 11, February, 2013 12:08

Предлагается небольшая динамическая библиотечка (DLL), подключаемая через &unifor('+8') и позволяющая упростить контроль кумуляции номеров журналов/газет. По сути она представляет собой набор операций над множествами натуральных чисел: сложение, перемножение (пересечение), вычитание (исключение) и обратное вычитание.

DLL содержит четыре экспортированные функции, каждая из которых представляет собой одну из вышеперечисленных операций:

* union – сложение. Результатом являются элементы, входящие хотя бы в одно из двух множеств.
Пример: &uf('+8iogunb,union,1,2|3,4')
Результат: 1-4

* intersect – умножение (пересечение). Результатом являются элементы, входящие в оба множества одновременно.
Пример: &uf('+8iogunb,intersect,1,2,3|2,3,4')
Результат: 2,3

* exclude – вычитание (исключение). Результатом являются элементы, входящие в первое множество, но не входящие во второе.
Пример: &uf('+8iogunb,exclude ,1-4|1,4')
Результат: 2,3

* missing – обратное вычитание. Результатом являются элементы, входящие во второе множество, но не входящие в первое.
Пример: &uf('+8iogunb,missing,1-100,105-200,203-360,201/202|1-365')
Результат: 101-104,361-365

Последняя операция позволяет автоматизировать контроль кумуляции номеров журналов за определенный год.

Как видно из примеров, запись множеств интуитивно понятна и соответствует соглашениям ИРБИС: значения перечисляются через запятую (в произвольном порядке) или указываются в виде диапазонов «от-до (включая)» (можно также через косую черту). Повторяющиеся значения игнорируются. Пробелы и нечисловые символы также игнорируются (Например, «1, 2спец, 3» эквивалентно «1,2,3»). Одно множество от другого отделяется вертикальной чертой.

Результат выдается в формате, совместимом с ИРБИС. Пустое множество выводится как пустая строка (из нуля символов).

DLL предназначена для ИРБИС64. Работоспособность DLL под ИРБИС32 не проверялась.

В прилагаемом архиве, кроме собственно исполняемого файла DLL, содержится проект для Delphi 7, который позволяет скомпилировать библиотеку самостоятельно.

Вложения: iogunb.zip (53.1KB)  
Re: DLL для контроля кумуляции номеров
Пользователь: S-presso (IP-адрес скрыт)
Дата: 12, February, 2013 23:16

amironov73
Очень рад, что появляется всё больше полезных пользовательских утилит для Ирбиса. Было приятно разобраться в Вашем коде. И хотя я не большой знаток Delphi, позволил себе немного модифицировать эту программу для реализации такой функции, как подсчёт количества экземпляров одного издания с учётом того, что инвентарные номера могут перечисляться через запятую или тире. Хотел сделать для этой цели собственный плагин для Ирбиса на C++ Builder в виде DLL, которая обращалась бы к Вашей библиотеке iogunb.dll для подсчёта общего количества элементов множества и вызывалась в пользовательском режиме из Каталогизатора с форматом записи (v910^b/) . Но объём полученного бинарного кода почему-то получается слишком большим, и библиотеку удаётся загрузить только из моего собственного АРМа "АльтерВвод". К тому же на каком-то этапе выполнения функции подсчёта из изменённой мной библиотеки iogunb.dll возникает исключение, и результат в виде числа не выдаётся. Всё, что получается у меня сделать, - это сформировать список инвентарных номеров. Если его затем через буфер обмена скопировать и перенести в текстовое поле программы, которую я поместил во вложение, она выдаст правильный результат. Но хотелось бы обойтись одним приложением. Может, Вы поможете мне сделать такой плагин на Delphi? (Практически весь код уже имеется во вложении, но я не очень хорошо ориентируюсь в Delphi, чтобы подключить эту программу как плагин).

Я вижу ещё одно возможное применение Вашей утилиты - она может помочь осуществлять поиск по инвентарным номерам, заданным в рамках диапазона (т.е. через тире). Только в Ирбисе вроде нет возможности задавать свои пользовательские функции для поиска? Попробую реализовать это пока что в своём АРМе.

Вложения: iogunb_Call.rar (189.2KB)   iogunb.dll (92KB)   CountCopies.dll (586.5KB)  
Re: DLL для контроля кумуляции номеров
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 13, February, 2013 11:37

Я посмотрю, что можно сделать…



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