CftClub.ru
Клуб специалистов ЦФТ-Банк

F.A

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
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||'ДВ', дата_начала_периода, дата_окончания_периода)


Насчет оптимальности/переключения контекста - вы не разработчик, не забивайте голову Smile
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    Ответить с цитатой
Полезность: Нет оценки
А еще бы хорошо уточнять версию ядра Smile
demmsnt
Участник


Вступление в Клуб: 18.12.2015
СообщениеПн Дек 21, 2015 16:55    Ответить с цитатой
Полезность: Нет оценки
Спасибо всем - буду изучать
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru