Within a form action you can raise a WidgetActionExecutionError, passing the field name and an Invalid exception with the message you want to display. z3c.form will then take care of attaching the error to the right widget and rendering it so you don't have to do all the steps yourself.
For your code this would look like this:
from z3c.form.interfaces import WidgetActionExecutionError
@z3c.form.button.buttonAndHandler(_('Make Report'), name='report')
def report(self, action):
data, errors = self.extractData()
if errors:
self.status = "Please correct errors"
return
# Create sample item which we can consume in the page template
try:
self.output = make_report(self.context, self.request, data, filters=filters)
except zope.interface.Invalid as e:
raise WidgetActionExecutionError('target_field_name', e)
self.status = _(u"Report complete")
See http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#validating-in-action-handlers for another example.