Не соображу как сделать суммирование по фирме

Страницы: 1
RSS
Не соображу как сделать суммирование по фирме, есть простой портфель с колонками идентификатор, торговый счет, вариационная маржа.
 
есть простой портфель с колонками идентификатор, торговый счет, вариационная маржа.
Хотелось бы добавить строку с итоговой суммой вариационной маржи по фирме (идентификатору)
PORTFOLIO_EX dost;
DESCRIPTION сумма маржи;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS
PROGRAM
delete_all_items()
n=get_number_of("FUTURES_CLIENT_LIMITS")
for i fr om 1 to  n
limit = get_item("FUTURES_CLIENT_LIMITS", i)
add_item(i, lim it)
end for

END_PROGRAM

PARAMETER FIRMID;
PARAMETER_TITLE Идентификатор фирмы;
PARAMETER_DESCRIPTION Идентификатор фирмы;
PARAMETER_TYPE STRING(12 8) ;
END
PARAMETER TRDACCID;
PARAMETER_TITLE Торговый счет;
PARAMETER_DESCRIPTION Торговый счет;
PARAMETER_TYPE STRING(12 8) ;
END

PARAMETER VARMARGIN;
PARAMETER_TITLE Вариационная маржа;
PARAMETER_DESCRIPTION Вариационная маржа;
PARAMETER_TYPE NUMERIC(14,2);
END

END_PORTFOLIO_EX


Код
 



Код
[/CODE][CODE]
Код
[/CODE][CODE]
Код
[/CODE][CODE]
Код
[/CODE][CODE]
Код
[/CODE][CODE] 
 
Здравствуйте.

Если мы правильно поняли, то в таблице ограничений может быть более одного уникального кода фирмы. В таком случае требуется алгоритм группировки по фирмам, например, можно реализовать так (в последних строках программируемой таблицы будут суммарные значения в разрезе фирм, строки отличаются от остальных пустым торговым счётом):


Код
PORTFOLIO_EX dost;
DESCRIPTION сумма маржи;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
USE_CASE_SENSITIVE_CONSTANTS;
PROGRAM
delete_all_items()

items_counter=1
vm_map=CREATE_MAP()
firmid_map=CREATE_MAP()
prev_value=""


n=get_number_of("FUTURES_CLIENT_LIMITS")
for i fr om 1 to n
 limit = get_item("FUTURES_CLIENT_LIMITS", i)
 add_item(i, limit)

 IF prev_value!=GET_VALUE(limit,"FIRMID") AND i>1
 items_counter=items_counter+1
 END IF

 
 IF i<2
 vm_map=SET_VALUE(vm_map,items_counter,GET_VALUE(limit,"VARMARGIN"))
 firmid_map=SET_VALUE(firmid_map,items_counter,GET_VALUE(limit,"FIRMID"))
 ELSE
 vm_map=SET_VALUE(vm_map,items_counter, GET_VALUE(limit,"VARMARGIN")+GET_VALUE(vm_map,items_counter))
 firmid_map=SET_VALUE(firmid_map,items_counter,GET_VALUE(limit,"FIRMID"))

 END IF

 prev_value=GET_VALUE(limit,"FIRMID")
 
end for

for i fr om n+1 to n+items_counter
limit=SET_VALUE(limit, "VARMARGIN", GET_VALUE(vm_map, i-n))
limit=SET_VALUE(limit, "FIRMID", GET_VALUE(firmid_map, i-n))
limit=SET_VALUE(lim it, "TRDACCID", "")
add_item(i, lim it)
end for


END_PROGRAM

PARAMETER FIRMID;
PARAMETER_TITLE Идентификатор фирмы;
PARAMETER_DESCRIPTION Идентификатор фирмы;
PARAMETER_TYPE STRING(128) ; 
END
PARAMETER TRDACCID;
PARAMETER_TITLE Торговый счет;
PARAMETER_DESCRIPTION Торговый счет;
PARAMETER_TYPE STRING(128) ; 
END

PARAMETER VARMARGIN;
PARAMETER_TITLE Вариационная маржа;
PARAMETER_DESCRIPTION Вариационная маржа;
PARAMETER_TYPE NUMERIC(14,2);
END

END_PORTFOLIO_EX
 
 
Прошу прощения, добавлю: это только пример, он будет правильно работать только в случае, если данные по таблице ограничений в хранилище клиентского места отсортированы по полю Фирма. В противном случае следует использовать более сложные алгоритмы группировки.
Страницы: 1
Читают тему
Наверх