Спасибо что хоть кто-то откликнулся...Вот смотрите есть код...
Code:
#include "stdafx.h"
#include "conio.h"
#include "saprfc.h"
#include "sapitab.h"
#include "string.h"
void main()
{
static RFC_OPTIONS rfc_opt;
static RFC_CONNOPT_R3ONLY rfc_connopt_r3only;
static RFC_PARAMETER exporting[2];
static RFC_PARAMETER importing[1];
static RFC_TABLE tables[1];
RFC_HANDLE handle;
RFC_RC rc;
char * exception_ptr;
ITAB_H ltab;
char lst[100];
char * lpt;
int line, lnr, len;
rfc_connopt_r3only.hostname = "ServerName";
rfc_connopt_r3only.sysnr = 1;
rfc_opt.client = "Client";
rfc_opt.user = "user";
rfc_opt.language = "E";
rfc_opt.password = "password";
rfc_opt.trace = 1;
rfc_opt.mode = RFC_MODE_R3ONLY;
rfc_opt.connopt = &rfc_connopt_r3only;
ltab = ItCreate( "buff", 100, 0, 0 );
importing[0].name = NULL;
exporting[0].name = "ZZ_INPUT_DOC_2_STEP2";
exporting[0].nlen = 20;
exporting[0].type = TYPC;
exporting[0].addr = ltab;
exporting[1].name = "6";
exporting[1].nlen = 1;
exporting[1].type = TYPC;
exporting[1].addr = ltab;
tables[0].name = "I_BUFF";
tables[0].nlen = 5;
tables[0].type = TYPC;
tables[0].ithandle = ltab;
tables[0].leng = 100;
exporting[0].name = NULL;
handle = RfcOpen( &rfc_opt );
if( handle == RFC_HANDLE_NULL )
{
printf("\nConnect error!");
}
else {printf("\nСonnect is OK!");}
rc = RfcCallReceive( handle,
"Z_ASM_MON_PERCH",
exporting,
importing,
tables,
&exception_ptr );
RfcClose( handle );
switch(rc)
{
case RFC_OK: printf("\nO.K.");break;
case RFC_FAILURE: printf("\nError occurred");break;
case RFC_EXCEPTION: printf("\nException raised");break;
case RFC_SYS_EXCEPTION: printf("\nSystem exception raised, connection closed");break;
case RFC_CALL: printf("\nCall received");break;
case RFC_INTERNAL_COM: printf("\nInternal communication, repeat (internal use only");break;
case RFC_CLOSED: printf("\nConnection closed by the other side");break;
case RFC_RETRY: printf("\nNo data yet (RfcListen or RfcWaitForRequest only)");break;
case RFC_NO_TID: printf("\nNo Transaction ID available");break;
case RFC_EXECUTED: printf("\nFunction already executed");break;
case RFC_SYNCHRONIZE: printf("\nSynchronous Call in Progress (only for Windows)");break;
case RFC_MEMORY_INSUFFICIENT: printf("\nMemory insufficient");break;
case RFC_VERSION_MISMATCH: printf("\nVersion mismatch");break;
case RFC_NOT_FOUND: printf("\nFunction not found (internal use only)");break;
case RFC_CALL_NOT_SUPPORTED: printf("\nThis call is not supported");break;
case RFC_NOT_OWNER: printf("\nCaller does not own the specified handle");break;
case RFC_NOT_INITIALIZED: printf("\nRFC not yet initialized");break;
case RFC_SYSTEM_CALLED: printf("\nA system call such as RFC_PING for connection test is executed");break;
case RFC_INVALID_HANDLE: printf("\nAn invalid handle was passed to an API call");break;
case RFC_INVALID_PARAMETER: printf("\nAn invalid parameter was passed to an API call or parameter length mismatch (expected and received) has been detected.");break;
case RFC_CANCELED: printf("\nAn rfc call has been canceled by user");break;
case RFC_CONVERSION: printf("\nAn error during conversion has been detected");break;
case RFC_INVALID_PROTOCOL: printf("\nThe received data has an unsupported format. e.g.: non unicode application receives data sended in unicode format");break;
}
lnr = ItFill( ltab );
if (lnr==0) printf("\nThere are no lines");
for ( line=1; line <= lnr; line++)
{
lpt = (char *) ItGetLine( ltab, line );
len = strlen(lpt);
memcpy( lst, (char *) ItGetLine( ltab, line ), len);
lst[len] = '\0';
printf( "%s\n", lst );
}
_getch();
}
Вызываемый ФМ Z_ASM_MON_PERCH(Import JOB_NAME, JOB_STEP; Export I_BUFF): вход два строковых параметра, на выходе внутренняя таблица...
RfcCallReceive отрабатывает и возвращает RFC_OK, но вот дальше lnr = ItFill( ltab ) возвращает 0. Если кто подскажет как происходит передача экспортируемой таблицы буду только рад или хотя бы где мои кривые руки допустили ошибку...не пройдите мимо, помогите