Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Страницы: 123>>
Страница: 1 из 3
Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 03, September, 2010 11:02

Уважаемые системные администраторы и разработчики.

На портале [sourceforge.net] существует пользователь, под которым планируется вести все публичные разработки.
пользователь: irbis-gpntb-ru
пароль: http://irbis.gpntb.ru

Для регистрации был создан почтовый ящик на [gmail.com].
пользователь: irbis.gpntb.ru
пароль: http://irbis.gpntb.ru

Несколько рекомендаций по разработкам:
1. Если ваш проект написан на языке Delphi, то проведите адаптацию своего продукта под компилятор FPC (или IDE Lazarus). Тем самым мы не будем нарушать какие-либо права при разработке ПО. То же касается и других языков программирования. Для любого из них есть свободно распространяемые компиляторы и среды разработки.
2. Под каждый проект должна быть создана ветка в SVN. Для работы с SVN под Windows рекомендую использовать оболочку TortoiseSVN

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 04, September, 2010 12:10

Проект расширенных функций форматирования для Ирбис64
EX64

SVN-репозитарий: [exs64.svn.sourceforge.net]
Авторизация: та же, что для учетной записи SourceForge из первого сообщения
Как подключить: в архиве файл ex64.dll, который нужно положить в директорию сервера и рядом с клиентскими АРМами.
Как использовать: &uf('+8ex64,<имя функции>,<данные>')

2010-09-04: реализованы функции trim, file_exist, file_size
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,trim, пробелы в начале и конце ') >пробелы в начале и конце
&uf('+8ex64,file_exist,c:\boot.ini') >1
&uf('+8ex64,file_size,c:\boot.ini') >214


2010-12-19: реализована функция преобразования суммы числом в сумму прописью
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,summ_to_string,26432.32') >двадцать шесть тысяч четыреста тридцать два рубля 32 копейки
Пояснение: не стал реализовывать форматом, потому что получилось бы слишком громоздко и ресурсоёмко.



2010-12-24: реализована функция получения даты модификации файла. Результат в формате ГГГГММДДЧЧННСС
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,file_mdate,c:\image.jpg') >20100107100914
Примечание: функции получения даты создания и даты последнего доступа не сделал, поскольку они, оказывается, Windows-based. Получить из в среде Lazarus не получилось. Думаю, что даты модификации вполне хватит.


2011-08-14: реализована функция получения хэша MD5 от строки. Результат в нижнем регистре 32 символа
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,md5_string,password') >5f4dcc3b5aa765d61d8327deb882cf99

2011-09-15: реализована функция split, разбивающая строки на части. Если передана одна строка, то она считается разбиваемой и делится с использованием регулярного выражения [\.,;], т.е. разделителями будут являться точка, запятая и точка с запятой. Если же в качестве аргумента передано несколько строк, то первая считается регулярным выражением, которое определяет разделитель. Все остальные строки разбиваются последовательно этим регулярным выражением и на выходе функция возвращает результат разделения так же построчно. Каждый фрагмент на отдельной строке.
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,split,,'/'Привет, Гость.'/'Ты все еще не любишь Ирбис, а?'/'тогда мы идем к тебе!') >
Привет
 Гость.
Ты все еще не любишь Ирбис
 а?
тогда мы идем к тебе!
Пробелы в начале и конце строк нужно либо исключать, используя trim, либо писать более сложное регулярное выражением (что предпочтительнее). Т.е. переписав регулярное выражение из примера так
&uf('+8ex64,split,(, |,)'/'Привет, Гость.'/'Ты все еще не любишь Ирбис, а?'/'тогда вы идем к тебе!')
Мы получим результат без пробелов в начале строк.

2011-12-13: реализованы функции count и length. Count считает количество строк, переданных во входном параметре. Length выдает количество символов в строке. При этом поддерживается многострочный ввод. Т.е. если в length передано 3 строки, то ответом будет три строки, в каждой из которых будет находиться длина соответствующей строки.
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,count,первая'/'вторая'/'третья') >3
&uf('+8ex64,length,первая'/'вторая строка'/'третья строчка') >12
25
27

2011-12-17: реализованы функции load, save и app_path. Load читает файл по пути, указанном в параметре построчко и возвращает в ответ. Если в начале пути находится символ !, то считается, что файл в кодировке ANSI и он перед выводом преобразовывается в UTF-8. Save сохраняет переданные строки в файл, имя которого указано в первой строке. Так же если в имени файла первый символ !, тогда все строки перед сохранением преобразовываются из UTF-8 в ANSI. Save возвращает 0 если файл не найден после сохранения (произошла какая-то ошибка) или 1, если файл найден. App_path возвращает путь (с закрывающим обратным слешем), в котором находится исполняемое приложение. Обычно это рабочая директория сервера, если формат выполняется на стороне сервера.
Ссылка: [sourceforge.net]
Пример использования:
&uf('+8ex64,load,!.\DATAI\Deposit\di.mnu') >1
Инверсия фамилии и инициалов не допускается
2
Число слов в фамилии (откорректировать число)
*****
&uf('+8ex64,save,!.\mymnu.mnu'#'value'#'Описание валуя'#'*****'#) >1
&uf('+8ex64,app_path') >d:\irbis64_server\IRBIS64\

2012-02-11: функция split возвращала строки закавычеными. Исправлено. Функция trim теперь умеет работать с набором строк, как и split.
Ссылка: [sourceforge.net]

2012-02-22: Добавлена функция uri2file. функция принимает данные, зашифрованные URI (%FF) и сохраняет их в расшифрованном виде в файл. Путь сохранения файла указывается в первой строке входных данных. Если путь пустой, то используется путь .\autosave\<YYYYMMDD>\, который будет отсчитан от корневой директории сервера ИРБИС64. Второй строкой идет имя файла. Имя может быть задано маской:
MD5 - MD5-хэш зашифрованных данных (32 символа)
YYYY - текущий год (4 цифры)
MM - номер текущего месяца (2 цифры)
DD - текущий день месяца (2 цифры)
HH - текущий час (2 цифры)
NN - текущие минуты (2 цифры)
SS - текущие секунды (2 цифры)
В третьей строке указывается путь, который будет добавлен к имени сохраненного файла. Четвертая строка - метки подполей, в которых нужно вернуть сведения о сохраненном файле. Если строка пустая, тогда функция возвращает путь до файла без каких-либо меток. Строка может содержать до 3 символов. 1й символ - метка подполя для имени файла (по умолчанию i), 2й символ - метка подполя для размера файла в байтах (по умолчанию s), 3й символ - дата последней модификации файла в формате ГГГГММДДЧЧННСС (по умолчанию d). Если в позиции символа стоит пробел, берется метка по умолчанию. Если в позиции символа указан - (минус), соответствующие данные не возвращаются. Пятая строка - непосредственно URI-шифрованная строка, которую нужно расшифровать и сохранить в файл.
Самое разумное использование - в операции автоввода. Если имеются данные, прикрепляемые к записи подобным методом (метод ввода 12 с параметром 3), тогда мы может сохранить файл любого размера на сервере в доступную для веба (к примеру) папку, а в запись сохранить только публичную ссылку на ресурс. При этом сотрудник может не заботиться о том, куда файл сохраняется и не запоминать публичные (а иногда очень длинные) пути на файлы.
Ссылка: [sourceforge.net]
Пример использования:
Содержимое поля 10000 в прикрепленном файле
&uf('+8ex64,uri2file,d:\files\'#'md5.'v10000^a#'http://localhost/files/'#' -t'#v10000^b)
>^ihttp://localhost/files/d6da56fa854103f20e05a87ee20c7a8f.jpg^t20120222122700



Редактировано 19 раз. Последний раз 22.02.2012 13:01 пользователем Панев Максим.

Вложения: 10000.txt (1.1KB)  
Re: Пользовательские программные разработки для Ирбис
Пользователь: LiLi (IP-адрес скрыт)
Дата: 20, December, 2010 11:04

Максим, спасибо огромное!
Очень нужная функция "Преобразование суммы числом в сумму прописью".

Елена, КрЦНТИБ Красноярской ж.д.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Куделя (IP-адрес скрыт)
Дата: 20, December, 2010 12:10

Кстати: добавил бы еще возврат даты создания и даты модификации файла, было бы очень хорошо
И еще бы вот это - про что говорили на ЛИБКОМе:
====
Функция проверки работоспособности ссылки на сетевой ресурс.
Аргумент
URL
Возврат
0 (ресурс недоступен в принципе, т.е. либо проблемы с сетью, либо сервер не отвечает)
или
код состояния HTTP. Цель: удобство при каталогизации интернет-ресурсов (можно сделать проверку правильности ввода данных). Организация периодических проверок состояния ссылок.
====

Иркутская ОГУНБ
ИРБИС64.21Турбо
WebИРБИС-PHP

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 20, December, 2010 12:25

2LiLi.
Всегда пожалуйста. Рад что пригодилось.

2Куделя.
Дату модификации и создания добавлю. Про доступность ресурса помню. Уже делал 3 подхода. С наскока не получается. Не хочу использовать какие-либо компоненты. Пытаюсь сделать на сокетах. Как реализую, так сразу отпишу.

По поводу проверок ввода. Эту функцию категорически не рекомендую к использованию в Online (думается мне), поскольку она очень затратна по времени. Разве что для периодических проверок.



Редактировано 1 раз. Последний раз 20.12.2010 12:27 пользователем Панев Максим.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Куделя (IP-адрес скрыт)
Дата: 20, December, 2010 12:44

Панев Максим написал(а):
-------------------------------------------------------
> Про доступность ресурса помню. Уже делал 3 подхода. С
> наскока не получается. Не хочу использовать
> какие-либо компоненты. Пытаюсь сделать на сокетах.
> Как реализую, так сразу отпишу.

Ух, ты. Спасибо. Я уж думал забыл. Всем брать с Панева пример: "мужик сказал - мужик делает" ;)

> По поводу проверок ввода. Эту функцию
> категорически не рекомендую к использованию в
> Online (думается мне), поскольку она очень
> затратна по времени. Разве что для периодических
> проверок.

Да конечно. Оно только в таком разрезе и предполагалось. Раз в месяц или квартал "ночной прогон" с сопутствующей глобальной вносящей данные о проверке.

Иркутская ОГУНБ
ИРБИС64.21Турбо
WebИРБИС-PHP

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 24, December, 2010 13:56

Добавил дату модификации файла.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Lavrinovich (IP-адрес скрыт)
Дата: 21, June, 2011 13:46

"Мдя". Однако они (разработки) есть только у АСК и у Вас, глубокоуважаемый Максим Васильевич!
Возможные причины того, что их так мало:
1.Delphi не в моде, хотя "прибамбасы" можно писать на чем угодно.
2.В ИРБИСе уже и так есть все, что нужно, и даже все, что только можно придумать. Особенно с учетом постоянных и многочисленных доработок, в том числе по идеям участников форума. Например, я до сих пор горжусь своими старыми идеями типа DebilSearch. Никак не сравнить в этом отношении с МАРК-SQL.
Не считая (почти) отдельных продуктов типа Корректора.



Редактировано 2 раз. Последний раз 23.06.2011 03:47 пользователем Lavrinovich.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Lavrinovich (IP-адрес скрыт)
Дата: 23, June, 2011 03:46

Не совсем ясно, зачем расширять функции форматирования. Тем более что юнифоры и так плодятся...



Редактировано 1 раз. Последний раз 23.06.2011 03:49 пользователем Lavrinovich.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 23, June, 2011 13:25

У каждого есть свои "бантики", которые хотелось бы видеть в работе и в программе...

Re: Пользовательские программные разработки для Ирбис
Пользователь: Lavrinovich (IP-адрес скрыт)
Дата: 17, July, 2011 00:38

Но все-таки какой вывод? ЯФ нужно:
- расширить?
- упразднить ("юнифоры это рудимент")?
- упростить вплоть до возврата к ЯФ ISIS?



Редактировано 2 раз. Последний раз 20.10.2011 09:45 пользователем Lavrinovich.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 14, August, 2011 17:39

Добавил MD5 для строки

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 14, September, 2011 12:48

Написал функцию, которая позволяет скопировать заданную строку заданное количество раз. Фактически я составляю не строку, а повторение строк, так как разделяю скопированные строки символом перехода на новую строку. Делаю это для того, что бы можно было печатать заданное кол-во формуляров на безинвентарные книги (статус U), фактически я формирую с повторения поля строку, а потом размножаю ее столько раз, сколько мне нужно. В редакторе форматов все отрабатывает нормально, и я получаю нужное мне количество одинаковых строчек. Но когда пытаюсь выполнить печать формуляров в каталогизаторе, то выходит или один формуляр, или вообще ошибка.

Вот функция:

function Replicate(buf1,buf2: Pchar; size: integer): integer;
var
k:integer;
txt, txt2:string;
kol:integer;
index:integer;
begin

index := Pos(',', String(buf1));
if index = 0 then
kol := 1
else
kol := strtoint(Copy(String(buf1), 1, index - 1));

if index = 0 then
txt2 := String(buf1)
else
txt2 := Copy( String(buf1), index + 1, 255);

txt := txt2;
for k:=2 to kol do txt := txt +#13+ txt2;
StrLCopy(buf2,pchar(String(txt)),size);
Result:=0;
end;


Вот формат:

&uf('+8test_dll,Replicate,'&uf('av991^C#1')','mfn'^1б/у - '&uf('av991^D#1')'^2'&uf('av991^E#1')' грн.' )

Прикрепляю саму длл и переделланый мною формуляр. Там в опросном листе надо указать Кол-во формуляров для печати.

Подскажите, из-за чего может такое происходить

Вложения: KKF.rar (154.7KB)  
Re: Пользовательские программные разработки для Ирбис
Пользователь: Alio (IP-адрес скрыт)
Дата: 14, September, 2011 15:24

Не совсем понял строку
txt2 := Copy( String(buf1), index + 1, 255);
Когда надо взять строку до конца, лучше
txt2 := Copy( String(buf1), index + 1, length(String(buf1)));

Но дело не в этом..
Ваша DLL стоит и на клиенте и на сервере? Ведь формат может выполняться и там и там.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 14, September, 2011 15:25

Кстати, меня всегда интересовала фраза "и там, и там". В каких случаях форматы отрабатывают на клиенте, а в каких на сервере?

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 14, September, 2011 15:33

По поводу длинны строки - спасибо, это я на автомате сделал.
ДЛЛ стоит и у клиента, и у сервера.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 14, September, 2011 15:35

Да, и еще. Повторение строки не сложно сделать и форматом. Почему было принято решение писать функцию?

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 14, September, 2011 15:37

Потому что для меня оказалось проще написать функцию, а не формат. Максим, как именно сделать повторение строки заданное количество раз? С глобальной я еще представляю, а в чистом виде форматом...

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 15, September, 2011 19:21

Добавил split по регулярному выражению.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 15, September, 2011 19:30

Хм, та же фигня как и у Гены. В редакторе форматов все работает (я про split), а в Каталогизаторе пусто. Версия 2010.1d6.

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



Редактировано 2 раз. Последний раз 15.09.2011 20:14 пользователем Панев Максим.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, September, 2011 10:04

Gena написал(а):
-------------------------------------------------------
> По поводу длинны строки - спасибо, это я на
> автомате сделал.
> ДЛЛ стоит и у клиента, и у сервера.
По поводу НЕисполнения этого формата в Каталогизаторе...
Попробуйте следующее:
Поставьте в самом начале этого формата ФОРМАЛЬНУЮ конструкцию, которая приводила бы к тому, что формат будет обязательно выполняться на сервере. Что-нибудь вроде
REF(1,''),<Ваш формат>
и расскажите, что получится...

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 16, September, 2011 11:14

Запустил клиента на серверной машине. Формат отработал.
Запустил клиента на локальной машине. Формат не работает.
Добавил перед форматом ref(1,''). На клиентской машине все работает.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, September, 2011 11:23

Панев Максим написал(а):
-------------------------------------------------------
> Запустил клиента на серверной машине. Формат
> отработал.
> Запустил клиента на локальной машине. Формат не
> работает.
Значит у Вас на клиенте - рядом с АРМом - не стоит Ваша DLL

> Добавил перед форматом ref(1,''). На клиентской
> машине все работает.



Редактировано 1 раз. Последний раз 16.09.2011 11:25 пользователем Alio.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 16, September, 2011 11:26

Блин, и правда. Старая версия библиотеки была. Извиняюсь.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, September, 2011 11:40

"От оно как, Михалыч, от оно как...!"

Проверил, получил интересный результат. Как я писал выше, мне нужно получить заданное количество формуляров. Для этого я размножаю строку сортировки столько раз, сколько было указанно в опросном листе. В редакторе форматов строка размножается, а на печать идет только один формуляр. Хотя! Когда я в секции заголовка, где собственно и формируется текстовая часть формуляра, использую свою функцию, то на карточку вполне корректно выходит размноженный текст.


[HeaderNumber]
1
*****
[HeaderFormat]
,(if p(v1) then if p(v1^1) then if &uf('Ag234#1')<>'' then &uf('Ag234#1') fi,'\tab \fs26\b 'if v1^1:'б/у' then 'б/у' else v1^1 fi '\b0 \ql \par \fs20',&unifor('D,@',v1.10,',@!!kk8f'),|. - |v1^2 ,&uf('+8test_dll,Replicate,5,Gena'),&uf('+7W234#\page ') fi fi/),&unifor('!'),
*****
[KeyOptions]
250
1
&uf('+7W7777#'),&uf('+7W7777#'....),if &uf('av991^C#1')<>'' then REF(1,''),&uf('+8test_dll,Replicate,'&uf('av991^C#1')','mfn'^1б/у - '&uf('av991^D#1')'^2'&uf('av991^E#1')' грн.' )else (g7777/) fi/
6
0
MFN
*****


Выходит ОДНА карточка такого вида:

б/у
Ф3(4Фр)8
П 77
Прицкер, Д. П.
Жорж Клемансо [Текст]. - 316 с. - М., 1983. - 12 грн.GenaGenaGenaGenaGena



Я же пытаюсь просто размножить множественный ключ сортировки... Почему не выходит именно с ним, ведь в обычных формах все работает корректно?!



Редактировано 2 раз. Последний раз 16.09.2011 11:41 пользователем Gena.

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, September, 2011 12:52

Может ли играть роль символ перехода на новую строку? Я использовал код перевода каретки #13

Re: Пользовательские программные разработки для Ирбис
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, September, 2011 13:02

Имеет. Табличные формы - это RTF-форматы. Для перехода на другую строку надо использовать команду '\par '

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, September, 2011 13:19

В самой табличной форме да, согласен полностью! А в ключе сортировки?

Re: Пользовательские программные разработки для Ирбис
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, September, 2011 14:24

В ключе сортировки - нет
В заголовках - да

Re: Пользовательские программные разработки для Ирбис
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, September, 2011 14:32

Тогда я совсем не понимаю, почему на выходе получается одна карточка, а не столько, сколько получается строк из формата ключа сортировки.

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


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