| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		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    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Спасибо всем - буду изучать | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |