Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
"АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: S-presso (IP-адрес скрыт)
Дата: 28, March, 2013 19:06

Вашему вниманию предлагается программное средство, позволяющее по-новому задействовать такое наследие АРМ Каталогизатор, как прежний режим печати каталожных карточек ("Корректировка -> Печать КК"). Как известно, при стандартном применении этот режим задействует OLE-объект Microsoft Word версий 97-2003, который (Word) обязательно должен быть установлен на машине клиента. Более того, в новых версиях Windows при попытке использования этого режима - даже при наличии соответствующей версии офисного пакета - может возникать ошибка. Сами разработчики отказались от поддержки этого режима в новых версиях. Что ж, это не мешает нам использовать эту унаследованную опцию, тем более что она позволяет самому пользователю при желании задавать собственную программу печати. Именно этой возможностью мы и воспользуемся для того, чтобы реализовать на базе старого забытого (хотя и не всеми) режима новый подключаемый плагин - "АльтерПечать КК". Теперь для печати карточек в этом режиме вам не потребуется какой-либо сторонний текстовый редактор, поскольку практически все его возможности могут быть реализованы в самом плагине. Вы также можете попробовать реализовать свой собственный плагин на базе этой функции. Правда, стоит учитывать тот факт, что когда создавался режим "Печать КК", в ИРБИСе ещё не существовало механизма вызова внешних плагинов с передачей и возвратом из них записи, так что достаточно затруднительно реализовать на основе этого режима что-либо значительное, позволяющее производить изменения с текущей записью. Тем не менее на заре ИРБИСа это был, можно сказать, единственный путь для реализации таких плагинов (см. [irbis.gpntb.ru]) Сама запись передаётся в пользовательскую программу в формате ALL через буфер обмена Windows. Соответственно, чтобы применять к ней какие-либо функции форматирования (что очевидно для печати КК), её сначала надо оттуда считать и поместить в буфер Ирбиса, используя IRBIS64_CLIENT.DLL. То есть всё надо делать "ручками", но, как мы увидим, это не так уж плохо, поскольку позволяет на ходу изменять параметры форматирования карточки (в новом режиме печати такой возможности нет).

Я включил сюда весь проект данного плагина на C++ Builder с его исходными текстами, а также необходимый для работы компонент Dream RichEditor. Именно он позволяет создавать интерфейс неплохого текстового редактора, не пользуясь никакими OLE-объектами. К сожалению, компонент ныне заброшен его создателями и найти в Интернете какую-либо информацию по его использованию сейчас затруднительно, поскольку сайт разработчиков больше не функционирует. Всё, что сохранилось, - это справочный файл (который я тоже разыскал не без труда) и демонстрационный пример, шедший в комплекте. Почему именно этот компонент, а не какой-либо другой?

Во-первых, несмотря на некоторую недоработанность и глючность, он содержит целый набор полезных модулей, которые по отдельности найти трудно (речь идёт о средах программирования Delphi и C++ Builder). Это и парсер и импорт-экспорт RTF, и поддержка регулярных выражений, и поддержка WYSIWYG для печати, за которую, например, создатель библиотеки компонентов RichView просит сумму, почти в десять раз превышающую стоимость его базового решения для жителей СНГ (880 рублей).

Во-вторых, сам статус abandonware компонента Dream RichEditor позволяет нам применять его для создания нашего учебного проекта модуля печати карточек. Теперь в принципе каждый пользователь-разработчик сможет при желании сделать доработку этого режима для собственных нужд, пользуясь моим опытом работы с этим компонентом. Поэтому я призываю разработчиков Ирбиса не убирать окончательно кнопку и пункт меню "Печать КК". Ведь в загружаемых с их помощью программах совсем не обязательно вызывать старые форматы, основанные на языке форматирования абзаца - [irbis.gpntb.ru]. Можно с тем же успехом вызывать и все выходные RTF-форматы. Другое дело, что у меня это пока не получилось (просто не знаю, как обрабатывать в своей программе файл !!kk.srw и ему подобные), поэтому в моей программе пока можно только посмотреть на список этих форматов для ККsmiling smiley (он соответствует списку выходных форматов для режима "Сервис -> Печать").

На текущий момент реализовано не так уж много функций. Можно выбирать из списка режим работы для текущей записи (которая была передана в программу через буфер обмена). Это либо "Старый режим" (он пока стоит по умолчанию, потому что хотя бы частично работает - выводит вид карточки в поле текстового редактора), либо "Новый режим" (который тоже будет поддерживаться, если разработчики мне в этом помогут), либо "Статьи из оглавления". Последний режим позволяет печатать карточки на отдельные пункты оглавления (обычно это статьи из сборников научных работ). Здесь из одного списка выбирается нужное поле (922 или 330), а из другого - требуемое повторение поля (пункт оглавления), при выборе которого в окне текстового редактора сразу появляется требуемое представление карточки. Собственно, я и начал писать эту программу ради подобной функции (надоело всё время копировать в буфер обмена нужную статью из списка, выдаваемого штатными выходными форматами для карточек).

Вот примерный внешний вид приложения:

Для того, чтобы приложение могло вызываться из АРМ Каталогизатор в режиме "Печать КК", необходимо изменить следующие параметры в секции [Main] файла конфигурации irbisc.ini:

KKKOLEpriz=0
KKKPrintProg=AlterPrint.exe



Редактировано 1 раз. Последний раз 21.07.2013 10:58 пользователем S-presso.

Вложения: АльтерПечать КК.rar (289.7KB)   AlterPrint.exe (1.46MB)   Dream.RichEditor.v1.2.SP1.rar (1.58MB)  
Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: Gena (IP-адрес скрыт)
Дата: 29, March, 2013 15:40

Я вот одного не понимаю. Если все равно для подхватывания формата и расформатирования записи вам нужна клиентская библиотека, то почему не сделать все сразу в виде модуля и подключить как USERMODE? Я не против вашей разработки, я не понимаю зачем ее притягивать именно к этому режиму? Есть готовый интерфейс обращения к серверу Ирбиса, есть механизм отработки форматов и расформатирования заданной выходной формы. Вы можете спокойно использовать стандартные готовые формы.

Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: S-presso (IP-адрес скрыт)
Дата: 29, March, 2013 16:25

Цитата:
Gena
Я вот одного не понимаю. Если все равно для подхватывания формата и расформатирования записи вам нужна клиентская библиотека, то почему не сделать все сразу в виде модуля и подключить как USERMODE?

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

Меня больше интересует другое. Как заставить программу обрабатывать файлы типа !!kk.srw? Вроде не встречал нигде описания этого формата. А без него новые выходные форматы RTF я просто не знаю, как выводить - там весь формат собирается по кусочкам из нескольких файлов PFT на основе того, что описано в файле .SRW.

Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: Gena (IP-адрес скрыт)
Дата: 29, March, 2013 16:31

Через клиентский интерфейс. Функция:

9.1 Формирование выходной табличной формы

function IC_print(Adbn,Atab,Ahead,Amod,Asexp: Pchar; Amin,Amax: integer; Aseq,Amfnlist: Pchar; answer: Pchar; abufsize: integer): integer;

Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: S-presso (IP-адрес скрыт)
Дата: 29, March, 2013 17:19

Спасибо, а то само название "табличная форма" как-то сбивало с толку. А пример использования функции не можете привести? Например, если я хочу её вызвать для формата !!KK_O, какие ещё параметры, кроме имени самого этого файла, имени базы данных и списка MFN я должен передать? И ещё: алгоритм прохождения файла .SRW "для человека" можно где-нибудь узнать?

Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: S-presso (IP-адрес скрыт)
Дата: 19, April, 2013 12:00

Выкладываю новую версию программы с исправленными ошибками. Убран отдельный режим печати карточек на выбранный пункт оглавления, вместо него теперь предлагается выбирать соответствующий формат из выпадающего списка "Вид КК". Таким образом, содержимое редактируемого окна текста для карточек на отдельную статью теперь формируется не самой программой, а специальным форматом. Примерный образец файла PFT прилагается - чтобы программа смогла обнаружить нужный формат, этот файл должен иметь вид !kk*.pft и быть внесённым в меню форматов КК (файл PFTW.MNU). В данном случае в него были добавлены следующие строчки:

!kk330_pt
Карточка на отдельную статью

Снимок экрана программы, демонстрирующий выбор нужных значений из выпадающих списков, соответствующих формированию КК на отдельные статьи:





Редактировано 1 раз. Последний раз 21.07.2013 11:23 пользователем S-presso.

Вложения: АльтерПечать КК.rar (1.6MB)   !kk330_pt.pft (4.8KB)   PFTW.MNU (2.1KB)  
Re: "АльтерПечать КК" - пользовательская доработка на основе старого режима печати карточек
Пользователь: S-presso (IP-адрес скрыт)
Дата: 21, July, 2013 11:44

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




Для того, чтобы моя программа могла запускаться из Каталогизатора, нужно изменить значения для следующих двух параметров конфигурационного файла irbisc.ini (секция [Main]):

KKKOLEpriz=0
KKKPrintProg=AlterPrint.exe

Саму программу AlterPrint.exe и библиотеку irbis64_client.dll (и то, и другое вы найдете во вложении) надо поместить в каталог, из которого запускается Ирбис (по умолчанию - C:\IRBIS64). Теперь при выборе в меню "Корректировка" Каталогизатора команды "Печать КК" всегда будет запускаться эта программа с уже переданным в нее содержимым текущей записи. Файл PFTW.MNU необходимо поместить во вложенную папку Datai\Deposit.

Чтобы можно было задействовать в программе новый формат карточки на отдельную статью, надо скопировать файл !kk330_pt.pft в ту же папку Datai\Deposit, а в файл PFTW.MNU добавить следующие строки (либо воспользоваться приложенной версией этого файла):

!kk330_pt
Карточка на отдельную статью

Теперь в первом слева выпадающем списке программы AlterPrint надо выбрать пункт "!kk330_pt - Карточка на отдельную статью" (если воспользоваться приложенным файлом PFTW.MNU, этот пункт должен стоять четвертым по порядку). Надо также проследить, чтобы во втором выпадающем списке был выбран пункт "Форматы записи" (с табличными форматами, которым соответствует файл TABW.MNU, я работать еще не научился). В третьем выпадающем списке программы (он находится ниже) перечислены все пункты оглавления. Выбираем нужный нам пункт, и программа выведет карточку на него.

Вложения: АльтерПечать КК.rar (719.5KB)  


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