Listo, solucionado.....
La función fDatos quedó así:
Código PHP:
function fDatos(contenedor,boton) {
ss = document.getElementById("reporte");
ss.style.display='none';
var objTbl = document.getElementById(contenedor);
var objErr = document.getElementById("estado");
if (boton == "grabar")
var url = "genreport.php";
if (boton == "producir")
var url = "procesa_repor.php";
if (boton == "buscar")
var url = "procesa_repor.php";
var qString;
if (boton != "grabar") {
cod = document.getElementById("codigo").value;
qString = "codigo="+cod+"&accion="+boton;
}
else {
grp = document.getElementById("grupos").value;
col = document.getElementById("cols").value;
qString = arma_queryString(grp,col,boton);
qString = qString+"&codigorep="+document.getElementById('codigo').value+"&nombre="+document.getElementById("nombre").value+"&subgrp=0";
}
ajax = nuevoAjax();
ajax.open("POST", url, true);
ajax.onreadystatechange = function() {
switch (ajax.readyState) {
case 0:
objTbl.innerHTML = 'Error 0. No se ha abierto la comunicación.';
break;
case 1:
objTbl.innerHTML="<img src='./imagenes/ajax-loader.gif'>"+" Procesando su peticion, un momento por favor...";
break;
case 2:
objTbl.innerHTML = 'Petición cargada, esperando respuesta del servidor...';
break;
case 3:
objTbl.innerHTML = '';
break;
case 4:
if (ajax.status == 200) {
if (boton == "buscar") {
document.getElementById("nombre").value = ajax.responseText;
ver = document.getElementById("resporte");
ver.style.display = 'none';
}
else {
ver = document.getElementById("formulario");
ver.style.display = 'block';
objTbl.innerHTML = ajax.responseText;
}
}
else
objTbl.innerHTML = 'Error 200';
break;
default:
break;
}
}
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(qString)
}
Lo que hice fue cambiar switch por if's y poner todo lo que tiene que ver con armar el queryString antes de crear el objeto ajax.
Que qué tiene que ver esto? ni idea.... pero ahí me cancionó la vaina
Ahora sí no creo que el patrón me eche

Mil Gracias por todo...