<function name="rpcf_service_report" id="0x3002"> <input> <integer name="user_id" default="0" /> <integer name="account_id" default="0" /> <integer name="group_id" default="0" /> <integer name="apid" default="0" /> <integer name="time_start" /> <integer name="time_end" default="now()" /> </input> <output> <integer name="accounts_count"/> <for name="j" from="0" count="accounts_count"> <integer name="atr_size" /> <set dst="atr_size_array" src="atr_size" dst_index="j" /> <for name="i" from="0" count="atr_size"> <integer name="account_id" array_index="j,i" /> <string name="login" array_index="j,i" /> <integer name="discount_date" array_index="j,i" /> <integer name="discount_period_id" array_index="j,i" /> <double name="discount" array_index="j,i" /> <string name="service_name" array_index="j,i" /> <integer name="service_type" array_index="j,i" /> <string name="comment" array_index="j,i" /> </for> </for> </output> </function>
function rpcf_service_report($user_id=0,$account_id=0,$group_id=0,$apid=0,$time_start,$time_end) { //3002 $ret=array(); if (!$this->connection->urfa_call(0x3002)) { print "Error calling function ". __FUNCTION__ ."\n"; return FALSE; } $packet = $this->connection->getPacket(); $packet->DataSetInt($user_id); $packet->DataSetInt($account_id); $packet->DataSetInt($group_id); $packet->DataSetInt($apid); $packet->DataSetInt($time_start); $packet->DataSetInt($time_end); $this->connection->urfa_send_param($packet); if ($x = $this->connection->urfa_get_data()) { $ret['accounts_count'] = $x->DataGetInt(); for ($i=0;$i<$ret['accounts_count'];$i++) { // $x = $this->connection->urfa_get_data(); if($user_id) $x = $this->connection->urfa_get_data(); $services['atr_size'] = $x->DataGetInt(); for($j=0;$j<$services['atr_size'];$j++){ $x = $this->connection->urfa_get_data(); $services['atr_size_array'][$j]['account_id'] = $x->DataGetInt(); $services['atr_size_array'][$j]['login'] = $x->DataGetString(); $services['atr_size_array'][$j]['discount_date'] = $x->DataGetInt(); $services['atr_size_array'][$j]['discount_period_id'] = $x->DataGetInt(); $services['atr_size_array'][$j]['discount'] = $x->DataGetDouble(); $services['atr_size_array'][$j]['service_name'] = $x->DataGetString(); $services['atr_size_array'][$j]['service_type'] = $x->DataGetInt(); $services['atr_size_array'][$j]['comment'] = $x->DataGetString(); } $ret['services'][]=$services; } // $this->connection->urfa_get_data(); } return $ret; } ///// у меня заработало вот так: function rpcf_service_report($param) { //0x3021 $ret = array(); if (!$this->connection->urfa_call(0x3021)) { print "Error calling function ". __FUNCTION__ ."\n";return FALSE; } $packet=$this->connection->getPacket(); $packet->DataSetInt( $param['user_id'] ); $packet->DataSetInt( $param['account_id'] ); $packet->DataSetInt( $param['group_id'] ); $packet->DataSetInt( $param['apid'] ); $packet->DataSetInt( $param['t_start'] ); $packet->DataSetInt( $param['t_end'] ); $this->connection->urfa_send_param($packet); if( $x = $this->connection->urfa_get_data() ){ $ret['accounts_count'] = $x->DataGetInt(); for ( $i=0 ; $i < $ret['accounts_count'] ; $i++ ) { $services['atr_size'] = $x->DataGetInt(); for( $j=0 ; $j < $services['atr_size'] ; $j++ ){ $services['atr_size_array'][$j]['account_id'] = $x->DataGetInt(); $services['atr_size_array'][$j]['login'] = $x->DataGetString(); $services['atr_size_array'][$j]['full_name'] = $x->DataGetString(); $services['atr_size_array'][$j]['discount_date'] = $x->DataGetInt(); $services['atr_size_array'][$j]['discount_period_id'] = $x->DataGetInt(); $services['atr_size_array'][$j]['discount'] = $x->DataGetDouble(); $services['atr_size_array'][$j]['service_name'] = $x->DataGetString(); $services['atr_size_array'][$j]['service_type'] = $x->DataGetInt(); } $ret['services'][]=$services; } } return $ret; }