Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Комплектатор :  ИРБИС Irbis
 
Сложная сортировка для выходных форм
Пользователь: Viper (IP-адрес скрыт)
Дата: 23, April, 2008 17:09

Добрый день. Возникла такая проблема - делаю Инвентарную книгу, требуется, что бы записи отбирались по двум признакам: по виду документов(при сохранении записи в БД CMPL формируется признак VIDINV) и по номеру КСУ(причем не конкретному номеру, а по вхождению номера в интервал двух заданных через опросный лист номеров).
Действия были следующими:
1. В CMPL.SCH прописал поле 50(которое указываю в опросном листе для признака вида документа) и префикс "VIDINV="
2. в SELTABW.PAR описал свою таблицу с указанием таких данных:
-----------------------------------
TAB
0
invu.ws
v50,"^A"&unifor('G0/'v703),"^B"&unifor('G2/'v703),"^C"&unifor('G2/'v704)
-----------------------------------
где, invu.ws - мой опросный лист(там 3 поля вид документа и два поля для указания интервала номеров КСУ). 4-й строчкой формирую модельное поле 991 с тремя под полями (A, B, C, соответственно, год за который распечатываются КСУ, Номер КСУ начала периода распечатки, номер КСУ конца периода распечатки)
3. Переработал форму TAB4BSW, изменив количество столбцов.

Результат - "Нет результатов поиска"

Подскажите в чем проблема

Re: Сложная сортировка для выходных форм
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 23, April, 2008 22:57

А как вы изложили требование в формате ключа сортировки, который отвечает за отбор записей для формы и их сортировку?
Можно написать, например, так
1. Задан интервал КСУ определенного года
Формулирую требование взять в форму документ (из отобранных по основному поиску), у которого хотя бы один № КСУ попадает в интервал заданных в 991^B и 991^C, а год КСУ совпадает с 991^a:
if rsum((if p(v910) then if p(v910^u) then if val(&uf('G0/'v910^u))=val(&uf('Av991^a#1')) and val(&uf('G2/'v910^u))>=val(&uf('Av991^b#1')) and val(&uf('G2/'v910^u))<=val(&uf('Av991^c#1')) then '1;' else '0;' fi fi fi/))>0 then v200^a fi

2. Задан интервал инвентарных номеров
Формулирую требование взять в форму документ (из отобранных по основному поиску), у которого хотя бы один инвентарный номер попадает в интервал заданных в 991^A и 991^b:
if rsum((if p(v910) then if p(v910^b) then if val(v910^b)>=val(&uf('Av991^a#1')) and val(v910^b)<=val(&uf('Av991^b#1')) then '1;' else '0;' fi fi fi))>0 then v200^a fi

Подобный анализ нужно задать и в формате вывода КСУ и/или инв. номеров в форму (но уже, разумеется, без суммирования).



Редактировано 2 раз. Последний раз 24.04.2008 09:38 пользователем Дунаевская.

Re: Сложная сортировка для выходных форм
Пользователь: ochagova (IP-адрес скрыт)
Дата: 24, April, 2008 10:46

Замечание по формату:
v50,"^A"&unifor('G0/'v703),"^B"&unifor('G2/'v703),"^C"&unifor('G2/'v704)
Условный литерал "^A" должен быть привязан к полю, но не к функции. Т.е. в конструкции "^A"&unifor('G0/'v703) строка ^A формироваться не будет.

Re: Сложная сортировка для выходных форм
Пользователь: Viper (IP-адрес скрыт)
Дата: 14, May, 2008 16:13

добрый день! Следую выше указанному. В файл CMPL.PAR для своей таблице сделал запись:

TAB4BSW
0
invu.ws
v1v2

Отбор должен происходить по дате ввода. В опросном листе использую поля 1 и 2. Но результат один и тот же - Нет результатов поиска.
В файле SRW я задаю сортировку такую:

(if p(v910) then '^aB='if v910:'^b'then if v910^b.1='0'or val(v910^b.1)>0 then f(val(v910^b,' 0'),8,0) else v910^b.1,if v910^b*1 <>''then f(val(v910^b*1),7,0) fi fi else f(val(v910^h,' 0'),8,0) fi'^3'mhl,v910^b,if a(v910^b)then v910^h fi,mpl,'^1'ref(L(|KSU=|v910^u),v88^b*6.2|.|,v88^b*4.2|.|,v88^b.4),'^2'|(|v910^u|)|,'^7'v910^d,'^4'mfn,'^5'if v910:'^e'then f(val(v910^e,' 0'),0,2) else if val(&unifor('Av10^d#1'))>0 then f(val(&unifor('Av10^d#1'),' 0'),0,2) else &unifor('Av10^d#1') fi fi fi/)

Результат сортировки должен формироваться в заголовке сортировки - инветарная книга с отдельной строчкой таблицы на каждый экземпляр.

Подскажите пожалуста, в каких случаях выдается сообщение "Нет результатов поиска"

Re: Сложная сортировка для выходных форм
Пользователь: ochagova (IP-адрес скрыт)
Дата: 15, May, 2008 11:20

Последовательность такая: Если метки РЛ 1 и 2 и в файле cmpl.sch стоят спецпризнаки в 5-й колонке 3 и 4 (как в дистр. варианте), то исп-ся проефикс 6-й колонки (DP=). С этим префиксом составляется запрос: префикс добавляется ко всем предыдущим (к заданной) датам. Если ничего не находится, то вышепр-е сообщение. Вы уверены, что по данному префиксу у вас должны отобраться записи?

Re: Сложная сортировка для выходных форм
Пользователь: jaana (IP-адрес скрыт)
Дата: 26, June, 2008 14:03

я обнаружила, что у меня в инвентарной книге пустой результат поиска потому, что поле 910^b в БД комплектования не заполнено, а заполнено оно в основной билиотечной БД, в связи с этим вопрос, как мне заставить Ирбисную выходную форму искать в основной библиотечной БД?

Re: Сложная сортировка для выходных форм
Пользователь: ochagova (IP-адрес скрыт)
Дата: 27, June, 2008 11:04

Пользоваться теми формами, который имеются в АПМе Каталогизатор для БД каталога.

Re: Сложная сортировка для выходных форм
Пользователь: jaana (IP-адрес скрыт)
Дата: 04, July, 2008 15:20

со всем разобралась, кроме сортировки, Мне требуется, чтобы выходная форма из каталогизатора сортировала найденные записи по значению поля 910^b(инвентарному номеру, Пишу в табличном генераторе в поле сортировка val(v910^b): результат нулевой. Если писать просто v910^b, тосортировка получается неправильной, поскольку 2 идет после 19, затем 20, 21 и так далее.
Подскажите пожалуйста, что делать?
Заранее благодарю

Re: Сложная сортировка для выходных форм
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 06, July, 2008 13:18

(f(val(v910^b),N,0)/), где N - максимальная длина инв. номера

Re: Сложная сортировка для выходных форм
Пользователь: jaana (IP-адрес скрыт)
Дата: 11, July, 2008 11:24

спасибо, все работает



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