SELECT 	DISTINCTROW 
	[02CASSA].DATA, 
	[01CLIENTE].NOME, 
	[01CLIENTE].COGNOME, 
	[03SERVIZIOPRODOTTO].NOMESERVIZIO, 
	[03SERVIZIOPRODOTTO].COSTOSERVIZIO, 
	[03SERVIZIOPRODOTTO].NOMEPRODOTTO, 
	[03SERVIZIOPRODOTTO].COSTOPRODOTTO
FROM (01CLIENTE  
	INNER JOIN            02CASSA ON [01CLIENTE].[IDCLIENTE] = [02CASSA].[IDCLIENTE]) 
	INNER JOIN 03SERVIZIOPRODOTTO ON [02CASSA].[IDCASSA]     = [03SERVIZIOPRODOTTO].[IDCASSA]
GROUP BY 
	[02CASSA].DATA, 
	[01CLIENTE].NOME, 
	[01CLIENTE].COGNOME, 
	[03SERVIZIOPRODOTTO].NOMESERVIZIO, 
	[03SERVIZIOPRODOTTO].COSTOSERVIZIO, 
	[03SERVIZIOPRODOTTO].NOMEPRODOTTO, 
	[03SERVIZIOPRODOTTO].COSTOPRODOTTO
HAVING 
((
	([02CASSA].DATA)  >=[Maschere]![QUERYNOMEDATA]![DataInizio] AND 
	([02CASSA].DATA)  <=[Maschere]![QUERYNOMEDATA]![DataFine])  AND 
     (([01CLIENTE].NOME)   =[Maschere]![QUERYNOMEDATA]![NOME])      AND 
     (([01CLIENTE].COGNOME)=[Maschere]![QUERYNOMEDATA]![COGNOME]
));
Questa NON E' esattamente una query su "COGNOME" 
Per capire dove sta' il problema, DEVI iniziare con una SEMPLICE "SELECT"
SELECT 
    [01CLIENTE].NOME, [01CLIENTE].COGNOME 
FROM 01CLIENTE 
WHERE 
    [01CLIENTE].COGNOME="...cognome..."
e poi aggiungere, un po' alla volta, le rimanenti parti, fino a capire QUANDO e DOVE compare il problema.