Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Ср Май 18, 2011 14:27  вопрос по работе с массивами |
|
Полезность: Нет оценки
|
Здравствуйте.
Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов. |
|
 |
pas Профи
Вступление в Клуб: 20.11.2007
|
Ср Май 18, 2011 16:30   |
|
Полезность: Нет оценки
|
Смотри: AC_FIN.ARC_MOVE |
|
 |
omela Участник со стажем
Вступление в Клуб: 01.07.2008
|
Ср Май 18, 2011 21:33  Re: вопрос по работе с массивами |
|
Полезность: Нет оценки
|
tarasov-es пишет: | Здравствуйте.
Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов. |
Код: |
for (
select x
( af : ref_acc
, x.[DOC] : docum
) in ::[RECORDS], (::[AC_FIN] : af)
where af.[ARC_MOVE] = x%collection
and af.[MAIN_V_ID] { тут про ваш счет или набор счетов: =, like '%', in () и т.п. }
) loop
....
end loop;
|
_________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:. |
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 05:35  Re: вопрос по работе с массивами |
|
Полезность: Нет оценки
|
omela пишет: | tarasov-es пишет: | Здравствуйте.
Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов. |
Код: |
for (
select x
( af : ref_acc
, x.[DOC] : docum
) in ::[RECORDS], (::[AC_FIN] : af)
where af.[ARC_MOVE] = x%collection
and af.[MAIN_V_ID] { тут про ваш счет или набор счетов: =, like '%', in () и т.п. }
) loop
....
end loop;
|
|
Большое спасибо. Все получилось.
Подскажите, что обозначает символ процента и вообще конструкция x%collection? |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Чт Май 19, 2011 06:14   |
|
Полезность: Нет оценки
|
Цитата из справки по PL/Plus
Цитата: | В языке PL/Plus определены дополнительные операторы для работы с объектами языка – это модификаторы. Они распознаются по символу ‘%’. Краткое описание модификаторов приводится ниже.
· %id - возвращает строковое представление значения ссылки (уникального идентификатора экземпляра – ID), к которой применен. Возвращаемый тип – строка.
· %class - возвращает короткое имя ТБП экземпляра, по ссылке на который применен. Возвращаемый тип – строка. В качестве параметра может принимать логическую константу, определяющую режим возникновения исключения в случае отсутствия экземпляра по значению ссылки (true – исключение есть, false – исключения нет), если параметр не указан, то исключение не возникнет.
· %state - возвращает короткое имя состояния (STATE_ID) экземпляра, по ссылке на который применен. Конструкции также может быть присвоено значение нового состояния экземпляра. При этом в качестве параметров можно указать короткое имя операции перехода в новое состояние (если такая операция существует) в виде строкового выражения и признак проверки прав пользователя на переход, осуществляющий изменение состояния, в виде логического выражения. Причем если второй параметр не указан, то такой проверки не происходит.
· %collection - возвращает идентификатор коллекции (COLLECTION_ID), которой принадлежит экземпляр. Возвращаемый тип – коллекция экземпляров ТБП, совпадающего с типом экземпляра, к которому применен модификатор. Как и для любой коллекции, эту конструкцию можно использовать для поиска экземпляров по логическому условию в операторах FOR/LOCATE. Конструкции также может быть присвоено значение новой коллекции. При этом экземпляр автоматически переместится в эту коллекцию.
· %classname - возвращает полное имя ТБП экземпляра, по ссылке на который применен. Возвращаемый тип – строка.
· %statename - возвращает полное имя состояния экземпляра, по ссылке на который применен. Возвращаемый тип – строка.
· %classparent - возвращает короткое имя родительского ТБП по отношению к типу экземпляра, по ссылке на который применен модификатор. Возвращаемый тип – строка. |
|
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 06:55   |
|
Полезность: Нет оценки
|
А подскажите, есть ли
в PL/PLUS что то вроде left join
как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+) |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Чт Май 19, 2011 07:02   |
|
Полезность: 1
|
tarasov-es пишет: | А подскажите, есть ли
в PL/PLUS что то вроде left join
как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+) |
Код: | AND A5_1.C_KL_KT#1#2 = A8_1.ID[b](true)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(true) |
|
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 07:06   |
|
Полезность: Нет оценки
|
prog пишет: | tarasov-es пишет: | А подскажите, есть ли
в PL/PLUS что то вроде left join
как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+) |
Код: | AND A5_1.C_KL_KT#1#2 = A8_1.ID[b](true)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(true) |
|
не работает. сообщение об ошибке говорит что
A9_1.ID(true) не имеет индексов. |
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 07:11   |
|
Полезность: Нет оценки
|
tarasov-es пишет: | А подскажите, есть ли
в PL/PLUS что то вроде left join
как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+) |
Код: | (select
a(a.[summa]:summ,
a.[date]:c_date,
a.[DT]:is_d,
md.[sum]:dt_summ,
cl_v.[name]:cl_v_name,
cl_r.[name]:cl_r_name)
in
::[RECORDS],
([MAIN_DOCUM]:md),
([CLIENT]:cl_v),
([CLIENT]:cl_r) all
where
a%collection = acc.[ARC_MOVE]
and a.[DOC]=md
and acc.[CLIENT_V]=cl_v
and acc.[CLIENT_R]=cl_r
) |
and acc.[CLIENT_R]=cl_r - должен сработать как бы
and acc.[CLIENT_R]=cl_r(+) вот так... |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Чт Май 19, 2011 07:41   |
|
Полезность: Нет оценки
|
так попробуйте
Код: | and acc.[CLIENT_R]=cl_r%id(true) |
|
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 07:45   |
|
Полезность: Нет оценки
|
prog пишет: | так попробуйте
Код: | and acc.[CLIENT_R]=cl_r%id(true) |
|
так получается ошибка нежелательное присвоение... |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Чт Май 19, 2011 07:52   |
|
Полезность: Нет оценки
|
это предупреждение. забейте. |
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 07:57   |
|
Полезность: Нет оценки
|
prog пишет: | это предупреждение. забейте. |
не получается так. запрос ничего не возвращает |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Чт Май 19, 2011 08:08   |
|
Полезность: Нет оценки
|
полный текст запроса в студию |
|
 |
tarasov-es Участник со стажем
Вступление в Клуб: 18.05.2011
|
Чт Май 19, 2011 08:31   |
|
Полезность: Нет оценки
|
Код: | (select
a(a.[summa]:summ,
a.[date]:c_date,
a.[DT]:is_d,
md.[sum]:dt_summ,
cl_v.[name]:cl_v_name--,
--cl_r.[name]:cl_r_name
)
in
::[RECORDS],
([MAIN_DOCUM]:md),
([CLIENT]:cl_v)--,
--([CLIENT]:cl_r)
all
where
a%collection = acc.[ARC_MOVE]
and a.[DOC]=md
and acc.[CLIENT_V]=cl_v
--and acc.[CLIENT_R]%id=cl_r%id(false)
) |
acc - входящий параметр - фин счет
acc.[cl_v] - ссылка на контакт - владелец
acc.[cl_r] - ссылка на контакт - клиент для расчета(бывает не всегда)
в таком виде запрос возвращает выписку по счету.
если убрать комментарии то запрос ничего не вернет |
|
 |
|