__CREATE_QUERY("INSERT INTO co_%s_%s (deleted) VALUES (0)",
par_area, par_class)

__SQL_EXEC

__SQL_GET_INTEGER(new_id, "SELECT last_value FROM co_%s_%s_sqid", par_area, par_class)

puta_classes[0] = (char *) par_class;
puta_ids[0] = new_id;

cou_queueActionX( cnx, par_class, (const char **) puta_classes, puta_ids, CO_OP_CREATE, NULL);

// getting current values

__CREATE_QUERY("SELECT * FROM co_%s_%s WHERE id = %d",
par_area, par_class, new_id)

__SQL_GET_RESULT

puta_classes[0] = (char *) par_class;
puta_ids[0] = new_id;

nFields = cor_GetFieldCount(cnx, corec);
props = ap_palloc(p, 2 * nFields * sizeof(char*) + 1);

for (i = 0; i < nFields; i++)
{
props[2*i] = ap_pstrdup(p, cor_GetFieldName(cnx, corec, i));
props[2*i+1] = ap_pstrdup(p, cor_GetValue(cnx, corec, 0, i));
}
props[2*i]=NULL;

//cou_sendMessage(cnx, "we have props");

__CLEAR_RESULT
cou_queueActionXX( cnx, par_class, (const char **) puta_classes, puta_ids, CO_OP_UPDATE, (const char **) props);
cou_setReturnValue(cnx, &new_id, CO_INTEGER);

//setting ACL for current role
if(!dont_set_acl)
{
id_role = cnx->id_role;
check_security = cnx->check_security;
cnx->check_security = 0;
send_data = cnx->send_data;
cnx->send_data=0;
@co_call(par_area,par_class,"permissionOn", par_area=>par_area,par_class=>par_class,par_id=>new_id, id_permission=>6,id_role=>id_role);


cnx->send_data = send_data;
cnx->check_security = check_security;
}