Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Администратор :  ИРБИС Irbis
 
Метод ввода 14
Пользователь: Gena (IP-адрес скрыт)
Дата: 11, May, 2011 13:54

Начал эксперименты по работе с этим методом ввода данных в рабочий лист. Но из описания многое не понял. Вот что по этому методу приводится в документации.

Метод ввода 14 - ввод с помощью режима (функции) пользователя. В этом случае ДОП.ИНФ - <имя DLL>,<имя функции>,<формат> (аналогично передаче данных для &unifor(‘+8…)). При этом <формат> может указываться тремя способами:
- @<имя формата>
- непосредственный формат
- * - в этом случае в качестве исходного данного в функцию передается значение текущего поля/подполя ввода.


Таким образом получаем следующее заполнение полей в Редакторе РЛ и Справочников для вызова функции Test_Function4 из библиотеки test_dll.dll и передачи в нее текущего поля:
Режим ввода - 14
Доп. инф-ция - test_dll,Test_Function4,*

к стати, не забываем о том, что регистр в названии функции играет роль - указываем функцию строго в том виде, как она прописана в DLL

на этом этапе все понятно.

прописал в Редакторе РЛ и Справочников, зашел в Каталогизатор, кликнул по созданному полю - форма из DLL загрузилась, в Лейбле вывелось значение того, что было в поле. Тоесть передача в форму произошла нормально.

А вот дальше не понятно...

Предусмотрена передача в вызываемую функцию пользователя двух специальных опций: первой - определяющей тип ввода: 2 - индивидуальный (по клавише F2) или 3 - групповой (по клавише F3), и второй – определяющей номер текущего повторения текущего поля. Опции передаются через выходной буфер buf2 (не путать с buf1, в котором передается результат форматирования – см. описание &unifor('+8...) в Приложении 4): в первом байте – первая опция, начиная со второго байта – вторая.
Предусматривается два кода возврата:
2 – возвращаемая строка (первая или единственная) является новым значением текущего поля/подполя;
3 – возвращаемые строки являются новыми повторениями текущего по-ля, если оно повторяющееся (в противном случае предполагается код возврата 2)


У меня в DLL есть такая функция, вызывающая форму:

function Test_Function4(buf1,buf2: Pchar; size: integer): boolean;
begin
Form3 := TForm3.Create(Application);
Form3.Label1.Caption := StrPas(buf1);
Result := (Form3.ShowModal = mrOk);
Form3.Free;

end;

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

Re: Метод ввода 14
Пользователь: Alio (IP-адрес скрыт)
Дата: 11, May, 2011 15:22

Во-первых, важное дополнение (которое, к сожалению, не попало в документацию:
Предусмотрены следующие коды возврата вызываемой функции
0 - никакие данные не возвращаются, текущая запись остается без изменений;
1 - возвращается новая версия записи ЦЕЛИКОМ (строго в формате &uf('+0'));
2 и 3 - (как сказано в документации)

По существу вопроса.
Result должен иметь одно из четырех (указанных выше) значений или быть меньше нуля (что будет рассматриваться как ошибка ввода)

А сообственно результирующие данные ввода должны содержаться в буфере buf2

Re: Метод ввода 14
Пользователь: Gena (IP-адрес скрыт)
Дата: 11, May, 2011 17:20

Александр Иосифович, помогите разобраться:

1. У меня форма вызывается только при условии, что вызывающая функция имеет тип BOOLEAN при типе INTEGER вызываться форма отказывается. Вот пример двух функций. По первой форма вызывается, а по второй нет:

function Test_Function4(buf1,buf2: Pchar; size: integer): boolean;
begin
Form3 := TForm3.Create(Application);
Form3.Edit1.text := StrPas(buf1);
Form3.Label1.Caption := StrPas(buf1);
Result := (Form3.ShowModal = mrOk);
StrLCopy(buf2,Pchar(form3.Edit1.text),size);
Form3.Free;
end;

function Test_Function5(buf1,buf2: Pchar; size: integer): integer;
begin
Form3 := TForm3.Create(Application);
Form3.Edit1.text := StrPas(buf1);
Form3.Label1.Caption := StrPas(buf1);
Result := 2;
StrLCopy(buf2,Pchar(form3.Edit1.text),size);
Form3.Free;
end;

Из-за этого получается передача только значений 0 и 1.


2. Я вызываю форму функцией. А после этого мне нужно произвести операции над данными и передать их в Ирбис. Но ведь изменения я буду делать уже вне вызывающей функции... Как же тогда передать ей значение buf2?

Re: Метод ввода 14
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 11, May, 2011 17:36

1. Начать нужно с того, что во второй форме вообще нет функции отображения формы! ShowModal кто будет делать?

2. Почему это изменения будут вне вызывающей функции? Ты же используешь ShowModal, а не Show.

Re: Метод ввода 14
Пользователь: Gena (IP-адрес скрыт)
Дата: 11, May, 2011 18:37

Максим, спасибо :) Теперь понял. Действительно так все работает.



Редактировано 1 раз. Последний раз 11.05.2011 19:03 пользователем Gena.

Re: Метод ввода 14
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, May, 2011 16:35

Александр Иосифович, хотел бы еще раз уточнить про код возврата:

0 - внешнее приложение ничего не возвращает. Я так понимаю, чтот код нужен для тех случаев, когда все действия происходят во внешнем вызываемом приложении(формирование отчета, отправка почты, анализ/статистика)

1 - запись возвращается целиком и полностью заменяется. Значит этот код возврата автоматически накладывает ограничения на то, что указанно в поле "доп инф-ция", там должно быть указанно, что передается запись целиком, а не поле или какой-либо формат.
В том случае, если требуется не добавить поле, а заменить нужно использовать этот режим?

2 - происходит ЗАМЕНА текущего поля/подполя. Тоесть работа с одним повторением.

а вот с последним так и не понял:

3 - происходит ЗАМЕНА или ДОБАВЛЕНИЕ новых значений текущего поля?

Re: Метод ввода 14
Пользователь: Alio (IP-адрес скрыт)
Дата: 16, May, 2011 17:30

Gena написал(а):
-------------------------------------------------------
> Александр Иосифович, хотел бы еще раз уточнить про
> код возврата:
>
> 0 - внешнее приложение ничего не возвращает. Я так
> понимаю, чтот код нужен для тех случаев, когда все
> действия происходят во внешнем вызываемом
> приложении(формирование отчета, отправка почты,
> анализ/статистика)
>
> 1 - запись возвращается целиком и полностью
> заменяется. Значит этот код возврата автоматически
> накладывает ограничения на то, что указанно в поле
> "доп инф-ция", там должно быть указанно, что
> передается запись целиком, а не поле или
> какой-либо формат.
> В том случае, если требуется не добавить поле, а
> заменить нужно использовать этот режим?
Именно так. Это самый гибкий способ. Поскольку в ДОП.ИНФ указывается формат для передачи данных, то передавать можно все что угодно: можно всю запись, например через &uf('+0') - и соответственно также возвращать данные, делая при этом с записью в своем модуле все, что угодно: добавлять, заменять и т.д.

>
> 2 - происходит ЗАМЕНА текущего поля/подполя.
> Тоесть работа с одним повторением.
>
> а вот с последним так и не понял:
>
> 3 - происходит ЗАМЕНА или ДОБАВЛЕНИЕ новых
> значений текущего поля?
ДОБАВЛЕНИЕ.

Re: Метод ввода 14
Пользователь: Gena (IP-адрес скрыт)
Дата: 01, November, 2011 16:59

Александр Иосифович, а этот метод ввода работает только в Ирбис32? У меня в ирбис 64 все запускается корректно, а в Ирбис 32 2006.2 напрочь отказывается стартовать, хотя через +8 окно отображается



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