Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
demmsnt Участник
Вступление в Клуб: 18.12.2015
|
Пт Дек 18, 2015 12:25  F.A |
|
Полезность: Нет оценки
|
Добрый день господа. Подскажите где можно поглядеть спецификацию функции F.A
Справочник разработчика прошу не предлагать, я обычный экономист и не имею доступа к Администратору.
Я сейчас тяну остатки через f.a('И'||ID||'Н'.... , а мне сейчас понадобились обороты. И еще. Я в поиске увидел сообщение, что делать:
select C_1, f.a('И'||ID||'Н'.... неоптимально так, как происходит переключение контекста. Но я не пойму как мне сначала выбрать все без f.a а потом пополнить данными. Если кто знает как буду благодарен. |
|
 |
prankster Профи
Вступление в Клуб: 22.08.2014
|
Пт Дек 18, 2015 13:01  Re: F.A |
|
Полезность: 2
|
demmsnt пишет: | Добрый день господа. Подскажите где можно поглядеть спецификацию функции F.A
Справочник разработчика прошу не предлагать, я обычный экономист и не имею доступа к Администратору.
Я сейчас тяну остатки через f.a('И'||ID||'Н'.... , а мне сейчас понадобились обороты. И еще. Я в поиске увидел сообщение, что делать:
select C_1, f.a('И'||ID||'Н'.... неоптимально так, как происходит переключение контекста. Но я не пойму как мне сначала выбрать все без f.a а потом пополнить данными. Если кто знает как буду благодарен. |
Код: |
/*-----------------------------------------------------------------
Возвращает информацию о характеристиках лицевого счета, зависящую
от выписки (из массива "Выписка по счету").
Внимание!!! Функция в ходе разработки. Действуют только пункты, отмеченные "*"
а) PAR имеет формат 'АXV'
======================================================================================
* где А - номер л/c ('000467001') по основному плану счетов (если он уникальный) или
--------------------------------------------------------------------------------------
ВНИМАНИЕ! т.к. на уникальность номера проверки нет, использование по номеру запрещено! 18/03/2006
--------------------------------------------------------------------------------------
* id л/c с предшествующей буквой И ('И154987') или
* id массива выписки (колонка С_ARC_MOVE л/c) с предшествующей буквой В
======================================================================================
X - показатель:
Сальдо (остаток):
* 'С' или '' - "Стандартное" (Актив < 0, Пассив > 0)
* 'c' - соотв.виду счета > 0, овердрафт < 0
(для активно-пассивных счетов - аналогично 'C')
* 'А' или 'а' - Актив > 0, Пассив = 0
* 'П' или 'п' - Пассив > 0, Актив = 0
Оборот:
* 'Д' - по Дебету за интервал дней
'д' - по Дебету за произвольный интервал
* 'К' - по Кредиту за интервал дней
'к' - по Кредиту за произвольный интервал
* 'М' - максимальный оборот (Дт или Кт) за интервал дней
* 'м' - максимальный оборот (Дт или Кт) за произвольный интервал
Количество документов:
'Е' - прошедших по Дт за период
'Р' - прошедших по Кт за период
V - признак "в валюте / в национальном покрытии":
* 'В' или '' - в валюте (в т.ч. в национальной)
* 'Н' - в национальном покрытии
б) Если требуется вычисление сальдо, то
* D1: дата, по состоянию на которую требуется значение.
* - Если дата не указана, то в качестве даты используетс
глобальная переменная D данного пакета (см. процедуру SET_DATE_CALC).
* - Если дата имеет значение NULL, то текущее состояние.
Внимание! Режим реализован только для получения стандартного сальдо 'С'
по номеру счета или по ID счета.
в) Если требуется вычисление оборота, то
* D1, D2: интервал, за который требуется значение по правилу "С ДО".
* - Если дата D1 не указана, то в качестве даты используется
глобальная переменная D данного пакета.
- Если дата D1 имеет значение NULL, то текущий операционный день.
* - D2 по умолчанию (или если она задана как NULL) равна концу дня D1.
* - Для оборота за интервал дней часы и минуты в D1, D2 игнорируются.
D_STORNO - дата дополнительного учета сторнирующих документов ("точка зрения").
Должна быть больше D1, D2.
NULL (умолчание) => нет дополнительного учета сторнирующих документов
COR_ID - id массива архива коррекции (колонка c_arc_corr л/c).
Его имеет смысл задавать только при наличии D_STORNO (не NULL) и
только при задании id массива выписки ('В...') в первом параметре -
но также не обязательно, а только для повышения производительности
(если задан id массива выписки, но не задан COR_ID - full scan по счетам)
ACTION - действие, которое необходимо выполнить на параметром ACT_PAR:
'И' - исключить при расчете оборотов проводки с корресп.счетами похожими
на шаблоны, перечисленные в стороке ACT_PAR. ВНИМАНИЕ! Шаблоны
должны быть разделены запятыми
'В' - включить при расчете оборотов ТОЛЬКО проводки с корресп.счетами похожими
на шаблоны, перечисленные в стороке ACT_PAR. ВНИМАНИЕ! Шаблоны
должны быть разделены запятыми
'П' - при расчете оборотов исключить проводки переоценки
при любом другом значении параметра, а также при его отсутствии, ограничение
на корреспондирующие счета не накладываетс
ACT_PAR - строка, используется для передачи параметров для действия ACTION
MULTICURR - признак расчета оборотов по мультивалютным документам:
'+' - рассчитывать обороты только по мультивалютным документам
'-' - рассчитывать обороты по всем документам, исключая мультивалютные
при любом другом значении параметра, а также при его отсутствии, ограничение
по мультивалютным документам не накладывается
DEPART - ID подразделения, по которому будутрассчитаны обороты (подразделение счета корреспондента)
=================================================================*/
|
То есть обороты можно так же считать:
Код: |
-- Кредитовый оборот в валюте счета
[F].a('И'||ID_счета%id||'КВ', дата_начала_периода, дата_окончания_периода)
-- Дебетовый оборот в валюте счета
[F].a('И'||ID_счета%id||'ДВ', дата_начала_периода, дата_окончания_периода)
|
Насчет оптимальности/переключения контекста - вы не разработчик, не забивайте голову  |
|
 |
demmsnt Участник
Вступление в Клуб: 18.12.2015
|
Пт Дек 18, 2015 14:03   |
|
Полезность: Нет оценки
|
Огромное спасибо - именно то, что надо. |
|
 |
demmsnt Участник
Вступление в Клуб: 18.12.2015
|
Пт Дек 18, 2015 14:07   |
|
Полезность: Нет оценки
|
А. Насчет оптимальности. Я как, бы не разработчик, хотя опыт программирования с 98 года. Дело в том, что я с помощью SQL тяну из ИБСО данные по счетам чтоб потом обрабатывать их и создавать отчеты которых НЕТ в стандартной системе. В частности я тяну остатки на дату по тысячам счетов и это занимает минут 20-час. Если я смогу сократить эту операцию до 5 минут это приведет к тому, что коллеги будут уходить с работы в 6 часов, а не в 10.
Мнеб пример - дальше я пойму или ссылку на документацию Оракл с примерами. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Дек 18, 2015 16:46   |
|
Полезность: Нет оценки
|
Вот так м.б. немного быстрее (вместо ID счета подставлять реквизит Выписка)
F.A('В'||to_char(<AC_FIN.ARC_MOVE>)||'СВ' |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Пн Дек 21, 2015 08:13   |
|
Полезность: 1
|
Volod пишет: | Вот так м.б. немного быстрее (вместо ID счета подставлять реквизит Выписка)
F.A('В'||to_char(<AC_FIN.ARC_MOVE>)||'СВ' |
А ещё быстрее использовать специализированные функции f.a_saldo и f.a_turn
Код: | /*
Функция a_saldo возвращает остаток по лицевому счёту.
Предназначена для использования в запросах, в циклах внутри курсоров, которые имеют соединение с AC_FIN
Аналогична вызову f.a('В/И'|| ... || 'С/с/А/а/П/п' || 'Н/В', дата)
*/
function a_saldo
/* получение остатка по счёту на указанную дату */
( p_date date
/* Дата, на которую нужно получить остаток */
, p_acc ref [AC_FIN]
/* Ссылка на лицевой счёт AC_FIN%id */
, p_move ::[RECORDS]%collection%type
/* Идентификатор коллекции выписки AC_FIN.ARC_MOVE */
, p_summary ref [AC_FIN]
/* Ссылка на сводный лицевой счёт AC_FIN.ACC_SUMMARY */
, p_status ref [COM_STATUS_PRD]
/* Ссылка на обощённый статус AC_FIN.COM_STATUS */
, p_vid ref [TYPE_ACC]
/* Ссылка на вид лицевого счёта AC_FIN.VID */
, p_cur number
/* Остаток по счёту в ин.валюте AC_FIN.SALDO */
, p_nat number
/* Остаток по счёту в нац.валюте AC_FIN.SALDO_NT */
, p_saldo_type varchar2
/* Тип возвращаемого остатка - символ С/с/А/П
- 'С' - "Стандартное" (Актив < 0, Пассив > 0)
- 'c' - соотв.виду счета > 0, овердрафт < 0 (для активно-пассивных счетов - аналогично 'C')
- 'А' или 'а' - Актив > 0, Пассив = 0
- 'П' или 'п' - Пассив > 0, Актив = 0
*/
, p_in_nat boolstring
/* Признак - возвращать суммe в нац.валюте (true) или в ин.валюте (false) */
)
/* возвращает остаток по лицевому счёту */
return number;
pragma restrict_references (a_saldo, wnds);
/*
Функция a_saldo_short возвращает остаток по лицевому счёту.
Предназначена для использования в запросах, в циклах внутри курсоров, которые не имеют соединения с AC_FIN
*/
function a_saldo_short
/* получение остатка по счёту на указанную дату */
( p_date date
/* Дата, на которую нужно получить остаток */
, p_acc ref [AC_FIN]
/* Ссылка на лицевой счёт AC_FIN%id */
, p_saldo_type varchar2
/* Тип возвращаемого остатка - символ С/с/А/П
- 'С' - "Стандартное" (Актив < 0, Пассив > 0)
- 'c' - соотв.виду счета > 0, овердрафт < 0 (для активно-пассивных счетов - аналогично 'C')
- 'А' или 'а' - Актив > 0, Пассив = 0
- 'П' или 'п' - Пассив > 0, Актив = 0
*/
, p_in_nat boolstring
/* Признак - возвращать суммe в нац.валюте (true) или в ин.валюте (false) */
)
/* возвращает остаток по лицевому счёту */
return number;
pragma restrict_references (a_saldo_short, wnds);
/*
Функция a_turn возвращает оборот по лицевому счёту.
Предназначена для использования в запросах, циклах внутри курсоров, которые имеют соединение с AC_FIN
Аналогична вызову f.a('В/И'|| ... || 'Д/д/К/к' || 'Н/В', дата1, дата2)
*/
function a_turn
/* получение оборота по счёту за указанный период */
( p_beg date
/* Дата, начало периода */
, p_end date
/* Дата, конец периода */
, p_acc ref [AC_FIN]
/* Ссылка на лицевой счёт AC_FIN%id */
, p_move ::[RECORDS]%collection%type -- Содержимое реквизита AC_FIN.ARC_MOVE
/* Идентификатор коллекции выписки AC_FIN.ARC_MOVE */
, p_summary ref [AC_FIN] -- Содержимое реквизита AC_FIN.ACC_SUMMARY
/* Ссылка на сводный лицевой счёт AC_FIN.ACC_SUMMARY */
, p_status ref [COM_STATUS_PRD] -- Содержимое реквизита AC_FIN.COM_STATUS
/* Ссылка на обощённый статус AC_FIN.COM_STATUS */
, p_dt boolstring
/* Признак - считать дебетовый оборот (true) или кредитовый (false) */
, p_nat boolstring
/* Признак - возвращать суммe в нац.валюте или в ин.валюте */
)
/* возвращает оборот по лицевому счёту */
return number;
pragma restrict_references (a_turn, wnds);
/*
Функция a_turn_short возвращает оборот по лицевому счёту.
Предназначена для использования в запросах, циклах внутри курсоров, которые не имеют соединения с AC_FIN
*/
function a_turn_short
/* получение оборота по счёту за указанный период */
( p_beg date
/* Дата, начало периода */
, p_end date
/* Дата, конец периода */
, p_acc ref [AC_FIN]
/* Ссылка на лицевой счёт AC_FIN%id */
, p_dt boolstring
/* Признак - считать дебетовый оборот (true) или кредитовый (false) */
, p_nat boolstring
/* Признак - возвращать суммe в нац.валюте или в ин.валюте */
)
/* возвращает оборот по лицевому счёту */
return number;
pragma restrict_references (a_turn_short, wnds); |
а вот пример:
Код: |
select acc(...)
in ::[AC_FIN]
where 1=1
and (f.a_saldo(P_BEG_DATE + 1, acc, acc.[ARC_MOVE], acc.[ACC_SUMMARY], acc.[COM_STATUS], acc.[VID], acc.[SALDO], acc.[SALDO_NT], 'С', true) != 0
or f.a_turn(P_BEG_DATE, P_END_DATE, acc, acc.[ARC_MOVE], acc.[ACC_SUMMARY], acc.[COM_STATUS], true, true) != 0
or f.a_turn(P_BEG_DATE, P_END_DATE, acc, acc.[ARC_MOVE], acc.[ACC_SUMMARY], acc.[COM_STATUS], false, true) != 0
)
|
|
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пн Дек 21, 2015 10:49   |
|
Полезность: Нет оценки
|
А еще бы хорошо уточнять версию ядра  |
|
 |
demmsnt Участник
Вступление в Клуб: 18.12.2015
|
Пн Дек 21, 2015 16:55   |
|
Полезность: Нет оценки
|
Спасибо всем - буду изучать |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|