I have the following select statement:

SELECT *
FROM service_details, service_header
WHERE
service_header.idrec = service_details.service_header_id
AND
service_header.document_status = 'Z'
AND
service_header.document_year = 2005
AND
service_details.idrec
NOT IN
(
SELECT received_idrec
FROM service_details, service_header
WHERE
service_header.idrec = service_details.service_header_id
AND
service_header.document_status = 'Z'
)

This works fine:

ServiceDocument document = new ServiceDocument();
ServiceDocumentItem documentItem = new ServiceDocumentItem();

ServiceDocumentItemCollection items = new ServiceDocumentItemCollection();

CMultiRetrieveCriteria mrc = new CMultiRetrieveCriteria();
           
mrc.addObjectToJoin(document, null, "");
mrc.addObjectToJoin(documentItem, document, "Items"

mrc.ReturnFullObjects = true;

CCriteriaCondition criteria = mrc.getNewCondition();
criteria.addSelectEqualTo(' document_year', 2005);
criteria.addSelectEqualTo('deocument_status','Z');

mrc.WhereCondition = criteria;

CCursor c = mrc.perform();
while(!c.EOF && c.hasElements())
{
CPersistentObject obj = (CPersistentObject)(new ServiceDocumentItem());
   
c.loadPersistentObject(ref obj);
   
items.Add(obj);

c.nextCursor();
}

The problem is that I do not know how to build the 'NOT IN sub criteria':

NOT IN
(
SELECT received_idrec
FROM service_details, service_header
WHERE
service_header.idrec = service_details.service_header_id
AND
service_header.document_status = 'Z'
)

Is it possible somehow (pseudo code):

CCriteriaCondition notIncriteria = mrc.getNewCondition();
notIncriteria.addSelectEqualTo(' document_year', 2005);
notIncriteria.addSelectEqualTo('deocument_status','Z');

mrc.AddSelectNotIn('received_idrec', notIncriteria);

service_details = ServiceDocuumentItems / ServiceDocumentItemCollection
service_header = ServiceDocumentItem

Thanks in advance

Sanjin