FoxPro/Visual FoxPro - Scan que comprueba y llena un campo

 
Vista:
sin imagen de perfil
Val: 15
Ha disminuido 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Scan que comprueba y llena un campo

Publicado por Arturo (7 intervenciones) el 09/10/2018 22:20:41
vfp

Quisiera hacer un scan en el cual sume Dzscan siempre y cuando coincida con el PO y line de la linea seleccionada, y si el resultado es igual a Dzorder llene el campo complete con una "T" de lo contrario con una "F"; el codigo que tengo es:
1
2
3
4
5
6
SCAN
xpo=ALLTRIM(curyear.po)
xline=curyear.line
SUM(dzscan) to xsum for po=xpo and line=xline
IIF(xsum=curyear.dzorder,curyear.complete="T",curyear.complete="F")
ENDSCAN

pero a la hora de ejecutarlo no hace ningun cambio, Alguien que me pueda ayudar con esto porfa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Scan que comprueba y llena un campo

Publicado por Abel (286 intervenciones) el 10/10/2018 16:12:59
Lo que hace tu código es
1. con SCAN inicia leyendo en la tabla en el primer registro;
2. Toma valores del registro activo de po y de line (que por cierto, veo que siempre es 10, ¿para que tomarlo?;
3. Usa SUM para sumar según el criterio dado y aquí radica el problema; que al hacer SUM saltará registro en registro hasta alcanzar el final de la tabla sumando solo cuando encuentre el criterio dado; pero quedará al final de la misma y el siguiente salto de SCAN será fuera de la tabla y termina.
4. EL IIF que tienes no hace nada; debería estar escrito así;
curyear.complete = IIF(xsum=curyear.dzorder,.T.,.F.)
aunque noto que usas T y F como caracter; si tu campo "complete" es booleano, debes indicar así .T. o .F., mientras que si no lo es está bien así como lo haz escrito "T" o "F".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Scan que comprueba y llena un campo

Publicado por Abel (286 intervenciones) el 11/10/2018 18:51:35
Disculpa Arturo pero no te he respondido a tu consulta; déjame sugerirte lo siguiente:

Select 0
Select po, Sum(dzscan) As suma From curyear Into Cursor csrPo Order By po Group By po
Index On po Tag po

Select curyear
Set Relation To po Into csrPo

Scan
Replace curyear.Complete With Iif(curyear.dzorder=csrPo.suma,.T.,.F.)
Endscan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 15
Ha disminuido 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Scan que comprueba y llena un campo

Publicado por Arturo (7 intervenciones) el 11/10/2018 19:35:24
Me funciono bien, sin embargo no toma en consideracion la columna "Line", no siempre es 10 hay ocaciones que la PO es la misma pero tiene linea 10, 20, 30, etc. podrias conciderar la columna linea tambie?

De igual forma me seria de mucha ayuda si me explicas como funciona tu comando ya que soy nuevo en vfp.

Mil gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel
Val: 642
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Scan que comprueba y llena un campo

Publicado por Abel (286 intervenciones) el 12/10/2018 17:06:08
Select 0
Select po, line, Sum(dzscan) As suma From curyear Into Cursor csrPo Order By po Group By po,line
Index On po+transform(line) Tag po

Select curyear
Set Relation To po+transform(line) Into csrPo

Scan
Replace curyear.Complete With Iif(curyear.dzorder=csrPo.suma,.T.,.F.)
Endscan

1. la primera parte del código crea una tabla cursor (que es una tabla volátil, es decir desaparecera al cerrarla o apagar el sistema, o sea que es temporal) con 3 campos po, line y suma (que es la suma de valores según criterios de agrupación)
2. Se indexa sobre campos po+line.
3. se relaciona la tabla activa curyear mediante el indice de la tabla anterior, lo que permite que al moverte dentro de una tabla se mueva a su equivalente de la tabla cursor automáticamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar