Normalmente el mensaje debería ser diferente. debería indicar "unknow column name" o algo así, y no "columna '' no válida".
Pero la cosa parece relativamente simple: Si la columna "período" está presente en todas las tablas que se piden, el error está en la tabla derivada "c", porque no se está pidiendo que también devuelva ese campo:
Código MySQL:
Ver original a.Zona,
a.numero,
a.nombre,
a.variedad,
a.tmestimadas tmrecepcionadas,
b.potrero,
b.hassembradas superficie,
b.v1_rendimiento rdtoesperado,
(b.v1_rendimiento * b.hassembradas) tmestimadas,
c.nrocontrato,
c.rut
ag_Contrato a
INNER JOIN Ag_Visitaterreno v
ON a.numero
= v.nrocontrato
AND a.periodo
= v.periodo
(SELECT nrocontrato
, rut
, periodo
, Sum(cantidad
) Total
GROUP BY nrocontrato
, rut
) c
ON a.periodo
= c.periodo
AND a.nroprecontrato
= b.numero
a.periodo = $temporada
Cuando generas una tabla derivada en el FROM por medio de una subconsulta, tienes que indicar en esa subconsulta que devuelva todos los campos que se van a usar luego, y el ON siguiente está pidiendo precisamente el campo "periodo" de la tabla "Ag_recepcion2011".