Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Система ИРБИС в целом :  ИРБИС Irbis
 
Страницы: 123>>
Страница: 1 из 3
Версия 2006.1
Пользователь: Бродовский (IP-адрес скрыт)
Дата: 15, February, 2006 12:09

АРМ Книговыдача.
Реализована технология скоростной книговыдачи на основе радиометок RFID

Re: Версия 2006.1
Пользователь: Бродовский (IP-адрес скрыт)
Дата: 15, February, 2006 16:27

Предлагается новый форматный выход (UNIFOR), который позволяет вызывать функции из внешних DLL, - другими словами, предлагается возможность создания СОБСТВЕННЫХ ФОРМАТНЫХ ВЫХОДОВ.

Структура нового UNIFOR:

&unifor('+8<имя_DLL>,<имя_функции>,<передаваемые_данные>')

Пример:
...&unifor('+8test_dll,test_function1,',v200^a)... - (в вызываемую функцию передается заглавие)
..(&unifor('+8test_dll,test_function2,',v910)).... - (передаются повторения 910 поля)
..(&unifor('+8test_dll,test_function2,',&unifor('+0')))....(передается вся текущая запись)

Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру

(Pascal)
test_function1(buf1,buf2: Pchar; bufsize: integer): integer;

(C)
int test_function1(char *buf1, char *buf2, int bufsize)


где:
buf1 - передаваемые данные (входные)
buf2 - возвращаемые данные (выходные)
bufsize - размер выходного буфера (buf2)

(в ИРБИС64 данные передаются и возвращаются в UTF8)

Возврат функции: =0 - нормальное завершение; <>0 - ненормальное

Тем, кто желает это попробовать в ИРБИС32, могу передать тестовый FORMAT32.DLL

Что касается "событийности" отработки этого UNIFOR:
- достаточно включить его в autoin.gbl (например, в фиктивную конструкцию удаления несуществующего поля) и он безусловно будет отрабатывать в момент сохранения/корректировки записи;
- то же самое будет происходить, если включить его в <dbn>.fst
- если включить его в dbnflc.pft или иной формат ФЛК, он будет отрабатывать при ФЛК
и т.п.

Также не стоит забывать, что давно существует форматный выход для вызова внешней программы
&unifor('+2<командная_строка>')




Re: Версия 2006.1
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 15, February, 2006 18:35

Апладирую руками вверх стоя на носочках :)... СБЫЛОСЬ. Ну теперь Ирбис уже никому по функциональности не догнать (как наших фигуристов в парных выступлениях). Еще раз огромное спасибо.

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 21, February, 2006 16:08

В АРМе Каталогизатор предлагается новый режим - СТАТ.ФОРМЫ, предназначенный для получения двухмерных статистических форм (режим СТАТИСТИКА, который существует сейчас, предназначен для получения одномерных статистик)
Примером двухмерной стат.формы может являться таблица,в которой по горизонтали (колонки) учитывается дата ввода (с точностью до года), а по вертикали (строки) - виды документов. Такая таблица будет содержать статистику ввода различных видов документов по годам. И т.д.
Шаблоны стат.форм (размеры, верстка, постоянные тексты) задаются в виде шаблонов Excel.
Подробнее - в релизе.

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 21, February, 2006 16:14

В редакторе ISO-файлов предлагается вложенный инструмент для преобразования Excel-файлов в ISO - преобразование осуществляется на основе таблицы соответствия (колонка Excel - метка ISO), которая может создаваться "на лету" или загружаться из предварительно сохраненной.
По тому же принципу планируется создать инструменты для преобразования таблиц Access и DBF в ISO

Re: Версия 2006.1
Пользователь: Куделя (IP-адрес скрыт)
Дата: 22, February, 2006 10:38

Ну вот и дожили (почти). А ведь как долго об этом говорили "большевики" :)))

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 10, March, 2006 10:59

Во время проведения школы ИРБИС в Днепропетровске (1-3 марта) возникло предложение (Рудзский Л.З) - в АРМе Каталогизатор, по аналогии с режимом заимствования из ЛИБНЕТ, создать режим заимствования из БД под управлением Web-ИРБИС, что даст возможность организовать корпоративную работу между пользователями ИРБИС. Планируем включить этот режим в версию 2006.1

Re: Версия 2006.1
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 10, March, 2006 11:32

Я так и не понял, чем не нравится подключение через DBNAM2.mnu удаленной базы?

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 10, March, 2006 11:58

Во-первых, это возможно только для ИРБИС64, а речь идет и о ИРБИС32
И во-вторых, не все пользователи ИРБИС64 захотят открывать свои сервера "наружу"

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 13, March, 2006 10:11

А как же ИРБИС32? А также ИРБИС64 - если его не захотят открывать "наружу"?

Re: Версия 2006.1
Пользователь: Рудзский Л.З. (IP-адрес скрыт)
Дата: 17, March, 2006 13:07

Куделя писал, про импорт из Exel и т.д.

Ну вот и дожили (почти). А ведь как долго об этом говорили "большевики" :)))

Полностью поддерживаю эмоции...

Фантастика!

И конечно, спасибо за принятие в работу предложений от участников

"Школы" в Днепропетровске

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 06, April, 2006 15:32

Новые сервисы в АРМе Каталогизатор.

- Возможность ОТМЕЧАТЬ поля в РЛ ввода - с целью их последующего удаления или копирования в буферную запись. Соответствующие команды появились во всплывающем (по правой кнопке мыши) меню в области ввода. Возможна групповая отметка полей при нажатой клавише SHIFT.
- Сортировка повторяющихся полей с подполями при табличном вводе - путем клика по названию колонки (подполя). (При этом отменяется вызов мультиввода двойным кликом по названию колонки - остается F3)
- Возможность вызова всплывающего меню команд ввода нажатием клавиши F8 в поле ввода.
- В ПОСЛЕДОВАТЕЛЬНОМ ПОИСКЕ в окне СВОБОДНЫЙ ПОИСК предлагается список формулировок последовательного поиска из ПОСТОЯННЫХ ЗАПРОСОВ

Готов для тестирования редактор ISO-файлов с возможностью конвертирования Excel-файлов в ISO - желающие могут обращаться (alio@gpntb.ru)

Re: Версия 2006.1
Пользователь: Галина Николаевна, Саратов (IP-адрес скрыт)
Дата: 10, April, 2006 09:43

Александр Иосифович, Вы исполнили мою мечту - конвертацию из Excel.
Огромное Вам спасибо. Я по подполям разобрала в Excel, добавила поля
некоторые (например, рабочий лист, вид документа), конвертировала
редактором ISO-файлов, загрузила в ИРБИС64.

Все это заняло минут 15-20. Конвертировала таблицу, содержащую 1000 журналов проекта МАРС, из файла *.xls в ИРБИС64.

Получилась БД журналов МАРС, где содержится информация о библиотеке, которая "расписывает" журнал, не надо в интернете искать, деньги будем экономить...

Можно применить для преобразования таблиц Microsoft Word, если их сначала перенести в Excel. Это позволит у нас, например, начать оформлять заказы в ИРБИС64, т.к. исполнитель никак не может "оторваться" от технологии таблиц Microsoft Word...

Для преобразования таблицы Excel редактором ISO-файлов необходимо выполнить некоторые дополнительные действия, чтобы после конвертации не обращаться к глобальной корректировке (впрочем, кому как удобнее):

1) преобразовать таблицу, добавив значения подполей (например, ^A), для этого можно использовать функцию Сцепить();

2) добавить дополнительно столбцы-поля (подполя), например, рабочий лист, вид, тип документа.


Re: Версия 2006.1
Пользователь: Анонимный пользователь (IP-адрес скрыт)
Дата: 17, April, 2006 10:26

Удаление полей в Каталогизаторе:
1. из каждой записи по отдельности или одно поле удаляется из всех записей? Видимо, первое
2. удаляется содержание поля или оно само, даже если оно пустое? В последнем случае это будет редактирование/создание РЛ. Видимо, тоже первое

Re: Версия 2006.1
Пользователь: Бродовский (IP-адрес скрыт)
Дата: 11, May, 2006 16:49

Создана группа дополнительных (технических) форматных выходов
&unifor('+9T<исх.данные>...
где T - тип подкоманды, принимает значения:
0 - вернуть номер текущего повторения в повторяющейся группе
1 - вернуть имя файла из полного пути/имени (ExtractFileName)
2 - вернуть путь из полного пути/имени (ExtractFilePath)
3 - вернуть расширение из полного пути/имени (ExtractFileExt)
4 - ExtractFileDrive
5 - вернуть длину исходной строки
6 - вернуть фрагмент строки
+96A*SSS.NNN#<строка>
A - направление: 0 - с начала строки; 1 - с конца
SSS - смещение
NNN - кол-во символов
7 - вернуть строку в верхнем регистре
9 - групповая установка глобальных переменных (для ИРБИС-Навигатора). Исходная строка закодирована через URLEncode (&unifor('+3E....). После раскодировки рассматривается как список строк(TStringList.Text). Каждая строка этого списка имеет структуру:
NNN#<значение_глобальной_переменной_NNN>

Re: Версия 2006.1
Пользователь: Анонимный пользователь (IP-адрес скрыт)
Дата: 15, May, 2006 11:12

> Шаблоны стат.форм (размеры, верстка, постоянные тексты) задаются в виде шаблонов Excel.

То есть выходные формы создаются и редактируются в Excel?
Получается, что мое старое предложение об АРМ Статистика не нужно, т. к. его заменяет Excel.

Кстати, давно не слышно о планах А.С.К. о разработать свою ISIS-Statistica...



Отправка отредактированного (15-05-06 13:06)

Re: Версия 2006.1
Пользователь: Синяков Роман (IP-адрес скрыт)
Дата: 16, May, 2006 16:07

А как можно получить новый irbis64.dll чтобы опробовать работу unifor('+8???

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, May, 2006 16:20

Пишите письмо на alio@gpntb.ru

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 18, May, 2006 12:40

По поводу проблем с unifor('+8... при вызове DLL, написанных на С/C++.

Проблема решена (будут откорректированы format32.dll и irbis64.dll).
Чтобы не нарушать преемственности, предлагается ввести следующую опцию.
При вызове DLL, написанной на С/С++ перед ее именем ставить *
Например:
&unifor('+8*test_dll,Test_Function1,..... - если test_dll.dll написана на С/С++

&unifor('+8test_dll,Test_Function1,..... - если test_dll.dll написана на Pascal или на чем-то еще...


Жду отзывов...

Re: Версия 2006.1
Пользователь: Синяков Роман (IP-адрес скрыт)
Дата: 18, May, 2006 16:43

Я не совсем понимаю, насколько мне изсестно dll - имеет стандартный вид, хоть на чем вы ее написали, в этом то и ее преимущество, что я могу использовать чужие библиотеки и мне абсолютно не важно как оно написано было, почему вы делаете разделение на вызов dll написанной на C и на Pascal, А если я напишу DLL на VisualBasic, вы для VB другой чтоли символ придумаете????

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 18, May, 2006 17:22

Вы действительно можете не задумываясь обращаться к любым DLL, если у Вас есть соответствующие файлы описания (прототипов) - *.pas, *.h И т.д. В случае unifor('+8 - все обстоит по другому. DLL вызывается динамически (LoadLibrary) и далее соответствующая функция (GetProcAdress) - в этом случае надо знать, на чем написана DLL, от этого зависит порядок передачи параметров (слева направо - Pascal или справо налево - С/С++). Если Вы будете вызывать DLL, о которой Вы ничего не знаете, - попробуете два варианта: со звездочкой и без нее.

Re: Версия 2006.1
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 18, May, 2006 17:29

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

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 18, May, 2006 17:44

Для вызова pascal-dll используется директива умолчания (REGISTER) и в этом случае звездочка при вызове не нужна
Для вызова C-dll и ему подобных используется диреткива STDCALL и в этом случае нужна звездочка.
Хотя можно и наоборот - для этого и предложил обсуждение.

Re: Версия 2006.1
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 18, May, 2006 18:24

Ну так вы и сами все знаете. Ту же директиву STDCALL можно использовать и при написании функций на Delphi. Тогда получится единый механизм обращения ко всем функциям.

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 18, May, 2006 18:32

Панев Максим написал(а):
-------------------------------------------------------
> Ну так вы и сами все знаете. Ту же директиву
> STDCALL можно использовать и при написании функций
> на Delphi. Тогда получится единый механизм
> обращения ко всем функциям.
Ничего подобного - с директивой STDCALL нельзя обратиться к Pascal-DLL...

Re: Версия 2006.1
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 18, May, 2006 19:45

А если приведенный выше пример записать в исходниках библиотеки так:
Цитата:
function Test_Function1(buf1,buf2: Pchar; size: integer): integer;stdcall;
begin
StrLCopy(buf2,Pchar(String(buf1)+'1111'),size);
Result:=1;
end;

или так

Цитата:
function Test_Function1(buf1,buf2: Pchar; size: integer): integer;cdecl;
begin
StrLCopy(buf2,Pchar(String(buf1)+'1111'),size);
Result:=1;
end;
???

У меня просо нет этой последней длл, чтобы попробовать. Но почему-то я очень сомневаюсь, что

Цитата:
с директивой STDCALL нельзя обратиться к Pascal-DLL
правда.

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 19, May, 2006 10:04

Разумеется, разработчик собственной DLL может объявить так
function Test_Function1(buf1,buf2: Pchar; size: integer): integer;stdcall;
может так
function Test_Function1(buf1,buf2: Pchar; size: integer): integer;cdecl;
а может так
function Test_Function1(buf1,buf2: Pchar; size: integer): integer;


Но я (разработчик unifor('+8...) не могу же это регламентировать (не говоря уже о том, что это может быть "давно" сделанная DLL)



Редактировано 1 раз. Последний раз 19.05.2006 10:05 пользователем Alio.

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 19, May, 2006 10:27

Не дождался отзыва от коллег из МИФИ (говоря о преемственности, имел в виду, что они уже что-то сделали на основе предварительной версии &unifor('+8...). Поэтому после внутреннего обсуждения приняли противоположное решение, а именно:

Для СТАНДАРТНОГО вызова функции из внешней DLL надо применять конструкцию
&unifor('+8<DLL_NAME>,<FUNCTION_NAME>,....
Для вызова по Pascal-правилам надо писать
&unifor('+8*<DLL_NAME>,<FUNCTION_NAME>,....

Здесь же хочу напомнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL (т.е. большие и маленькие буквы различаются)

Re: Версия 2006.1
Пользователь: Alio (IP-адрес скрыт)
Дата: 19, May, 2006 12:10

Кто желает потестировать новую конструкцию &unifor('+8... (на 32 и 64) - обращайтесь на alio@gpntb.ru

Re: Версия 2006.1
Пользователь: Vladimir Kim (IP-адрес скрыт)
Дата: 19, May, 2006 12:48

Здравствуйте!

Искренне благодарю Вас за внимание к проблеме dll на С++! Правда актуальность этой проблемы конкретно для нас сейчас уже не высока - мы уже практически доделали проект по печати ШК на Delphi 7.

Что касается нового unifor(+8, поддерживащего dll на C++ - пришлите, пожалуйста, и мы с удовольствием его обкатаем!

PS: По опыту использования unifor(+8 могу сказать чего остро не хватает - нет возможности передать через этот unifor в свою Функцию результат работы какого-нибудь pft (кроме unifor(0)). Или может быть такая возможность есть, да я просмотрел ее случайно?

С уважением, Владимир Ким
---------------------------
Инженер-программист НБ МИФИ

Страницы: 123>>
Страница: 1 из 3


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