Pues la logica que te di deberia servirte, si el cruce no lo hace bien revisa el orden en que estas leyendo las tablas…pero tienes que recorrer una y luego ir a leer en la otra tabla si ese registro existe !! hazle un debug a ver que sale…suerte ahi !!
mmm al parecer estas obviando las posiciones de los pedidos de venta t_vbak contiene posiciones o son solo datos de cabecera?? recuerda que t_vbrpk al parecer es de posición (o es una tabla interna con ambos datos), por lo que puede pasar que un pedido de ventas no todas sus posiciones estén facturadas.
Para mi tú lógica debiera ir así
Primero obtenemos todas facturas creadas asociadas a pedido de ventas para esto es necesario contar con todas las posiciones de los pedidos consultados.
Select * from vbfa
Into table it_mvbfa
For all entries in t_vbak
Where vbelv = t_vbak-vbeln (pedido de ventas)
and posnv = t_vbak-posnr (posición ped.vtas)
and vbtyp_v = ‘M’. (tipo de documento siguiente M= factura)
If sy-subrc eq 0. (se encontraron registros)
Loop at t_vbak.
Read table it_mvbfa with key vbelv = t_vbak-vbeln
posnv = t_vbak-posnr.
If sy-subrc ne 0. (no se encontró registro)
Appende t_vbak to t_ne_vbrp. (mando el registro a la tabla de los pedidos no facturados).
Endif.
Endloop.
Else. (ningún pedido tiene facturas aún)
Append t_vbak to t_ne_vbrp.
Endif.
Ojo eso si debes cerciorarte que las facturas de la tabla it_mvbfa no están anuladas (vbrk-fksto) o que estén contabilizadas (vbrk-rfbsk), eso depende del requerimiento.
muchas gracias @enattes, la verdad toda la mañana he pasado ocupado en otras cosas mas de procesos y hasta ahorita me voy sentando realmente en mi escritorio para seguir con este reporte. Viendo un poco tengo un par de dudas, el “for all entries” para que se utiliza? soy pollo en esto :(. Ahora, tengo entendido que esto es para sacar en una tabla interna la data, los pedidos que no han sido facturados (es nueva tabla para mi por cierto la VBFA) y faltaria solamente realizar las operaciones en base a la nueva tabla T_NE_VBRP, estoy bien vdd?
Debes leer el manual, está la definicion de esa sentencia, estas en abap por arriba, solicita los manuales de abap y asi nos ayudamos entre todos.
Usa el buscador, hay muchos temas de esa sentencia. Es normal que tengas dudas empezando, apoyate en la comunidad, sin dejar de lado la lectura del manual.
si, queria solicitar uno pero me hacen falta completar con un requisito minimo (hacer 10 comentarios en post que no sean propios) y tampoco voy a comentar por comentar y llegar a la meta jajajaja el problema es que aqui hablan ya terminos avanzados y uno que esta emepzando es bien dificil meter la cuchara. Muchas gracias de igual manera.
El for all entries es una sentencia que se utiliza para obtener la data de una tabla (en este caso vbfa) usando como parametros de entrada todos los registros de una tabla en particular (en este caso t_vbak), en otras palabras en la sentencia se buscan todas las facturas generadas (se obtienen de la tabla vbfa y se “guardan” en la it_mvbfa) de los pedidos contenidos en la tabla interna t_vbak con los parametros descritos.
Como te dije el parrafo anterior lo que obtienes en la tabla it_mvbfa serán todas las facturas creadas de los pedidos, por lo tanto para saber que pedidos de venta NO han sido facturados es que realizamos el loop al t_vbak (recorremos uno a uno todos los registros), luego con ese registro leemos nuestra tabla interna con las facturas creadas por esos registros, si no se encontraron registros (sy-subrc ne 0) significa que el registro no esta facturado y ese lo reservamos en una tabla distinta que es la que contiene todos los pedidos de ventas no facturados.
Esto te funcionará siempre y cuando la tabla t_vbak tenga registros por posición. debes cerciorarte que las facturas dentro de la tabla it_mvbfa están contabilizadas y además no están anuladas (ambos campos se encuentran en la tabla VBRK).