Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис    FTP-сервер
Часто задаваемые вопросы (FAQ) :  ИРБИС Irbis
Исключительно важный раздел форума, который необходимо прочитать всем, кто только начинает работать с Ирбисом. Если ваши знания не так широки, как вам хотелось бы, тогда обязательно прочитайте этот раздел. Если вы не нашли, что искали, то воспользуйтесь поиском по форуму, и, скорее всего, вы найдете ответ на свой вопрос среди существующих сообщений. 
"контекстно-независимые" глобальные переменные
Пользователь: lybs (IP-адрес скрыт)
Дата: 10, December, 2020 14:41

Добрый день! Скажите, пожалуйста, есть ли в Ирбисе возможность создавать так сказать контекстно-независимую глобальную переменную, которая всегда, в любом повторении любой повторяющейся группы, как и за пределами повторяющейся группы, выдаёт конкретное значение, которое ей присвоено? Так скажем константу, выдающую фиксированное значение вне зависимости от повторяющихся групп, до следующего её переопределения.
Скажем, если я в Dephi присваиваю значение переменной i:=1; то в любом вызове (неважно где, в цикле или нет), будет выдаваться 1. Хотелось бы, чтобы в Ирбисе была такая же возможность.

Re: "контекстно-независимые" глобальные переменные
Пользователь: Gena (IP-адрес скрыт)
Дата: 10, December, 2020 15:00

В формате можно:
1. обращаться к параметрам ини-файла
2. использовать значения данных из других записей и других баз (например, так работает механизм присваивания максимальных номеров инвентарей, формирования номера чит.билета и т.д.)
3. Можно читать и писать данные во внешний файл
4. Если в печатных формах, то там можно использовать глобальные переменные, которые инициализируются в файле сортировке - это перед работой с самой записью, так что к ним можно обращаться из записей

AVD System, Техническая поддержка, [www.open4u.ru]

Re: "контекстно-независимые" глобальные переменные
Пользователь: lybs (IP-адрес скрыт)
Дата: 10, December, 2020 18:19

Только с помощью таких лишних телодвижений можно?
Почему нельзя в непосредственно в языке сделать такую возможность. Чтобы переменная вела себя в повторяющихся группах также, как, например, MFN?

Когда мы пишем
(MFN ' ' v907 /)

У нас выходит

0000000001 ^CПК^A20200320^B1
0000000001 ^CКТ^A20200714^BАКА
0000000001 ^CКР^A20201105^BССК

При этом MFN присутствует в каждом повторении. Хотелось бы, чтобы в Ирбисе была возможность использовать переменные, по поведению в повторяющихся группах аналогичные MFN. Что мешает реализовать такую возможность?

Re: "контекстно-независимые" глобальные переменные
Пользователь: Gena (IP-адрес скрыт)
Дата: 11, December, 2020 06:28

Это вполне возможно. Вот пример:

&uf('+7w1#<ЗНАЧЕНИЕ ПЕРЕМЕННОЙ>'),
(if p(v910) then &uf('ag1#1'), v910^b fi/)

AVD System, Техническая поддержка, [www.open4u.ru]

Re: "контекстно-независимые" глобальные переменные
Пользователь: snoozamoorooed (IP-адрес скрыт)
Дата: 30, December, 2020 05:11

Добрый день.
Вы можете попробовать новую серверную часть ирбис.
Она сейчас поставляется для тестирования как расширение, то есть вам к вашему ирбису понадобится положить несколько исполняемых файлов.
В ней новый язык форматов, все что есть в ирбисе там работает и есть дополнения.
Для вашего случая подойдут обычные переменные (в стиле cisis).
Переменные бывают строковые и числовые, их по 10 штук (e0 - e9 и s0 - s9) и они видны "насквозь", то есть на любом уровне вложенности форматов и даже внутри формата при вызовах REF или unifor 6.
Также переменные не зависят от повторяющихся групп.
Примеры.
Цикл с помощью числовой переменной.
e0:=0,
while (e0 < 10)
(
e0 := e0 + 1,
f(e0,0,0),/,
)

Более сложный пример
s0 := (':::'),
e0 := 0,
while (e0 < 20)
(
e0 := e0 + 1,
/*пропуск итераций
if e0 = 10 or e0 = 11 then continue fi,
/*выход из цикла
if e0 = 18 then exit fi,
/*конкатенация
s0 := (s0,'-',f(e0,0,0))
)
s0,/,
/*обрезание лишних символов
ltrim(s0,':-'),#,
/*переносим значение в глобальную переменную
g1 := (replace(ltrim(s0,':-'),'-',#)),
(g1,'<<<',/)

Если хотите, могу вам дать редактор форматов для изучения возможностей



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