Power Builder - insertar valor a un campo de una DW dependiendo de otro

   
Vista:

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier javier.licencias@gmail.com (64 intervenciones) el 16/05/2014 23:55:31
Hola buenas tardes amigos, haber si alguien me pudiera ayudar con un código para poder mejorar mi programa que utilizo en mi pequeño negocio.
Tengo poco con el Increíble Power Builder y casi no he utilizado los comandos IF, y tengo mi DW de captura, así como otro para hacer el corte, los campos se llaman reg(campo autoincrement), nombre, costo, comisión y quisiera que al sacar el reporte la comisión se calcule automáticamente dependiendo del campo “costo”, solo manejo 5 productos uno cuesta 100, otro cuesta 200, y así hasta 500, y no se como hacer mi codigo para que calcule lo siguiente:

IF campo “costo”=100 then comisión= 10.00
IF campo “costo”=200 then comisión= 15.00
IF campo “costo”=300 then comisión= 20.00
(se que así no es la programación pero ustedes me entienden jeje).

A ver si pudieran ayudarme, ya sea con IF o a lo mejor con CASE (tampoco sé cómo usarlo).

Saludos
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 19/05/2014 16:47:01
Hola Javier.

No explicas exactamente lo que deseas hacer, pero si lo que quieres simplemente es asignar la comisión dependiendo de la variable costo:
1
2
3
4
5
6
7
8
9
If Costo = 100 Then
   Comision=1000
 
ElseIf Costo = 200 Then
  Comision=15000
 
Else Costo = 300 Then
  Comision=20000
End If

Otra forma:
1
2
3
4
5
6
7
8
9
Choose Case Costo
  Case 100
       Comision=10000
  Case 200
       Comision=15000
 
  Case Else
      Comision=20000
Choose End

Lo mejor de Powerbuilder es utilizar los DW, así que prueba creando uno para hacer esto.

Uno de los campos sería el Costo y la comisión puedes hacer que se calcule de forma automática, dependiendo de este campo. Utilizando una expresión para el un campo calculado.

Saludos.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 19/05/2014 23:52:00
asi es, simplemente quiero autoasignar la comision dependiendo del costo....le intente con las condiciones IF y CHOOSE CASE asi como las pones en tus 2 ejemplos pero me mostró errores de tipos de variables, y es que no se si antes se deban declarar variables y todo eso (ya que no soy muy bueno para eso).

por otra intente creando un campo computado con varios if y si me funciona correctamente, ahora lo que quiero hacer es en el evento open de la ventana de captura poner un codigo para que lo que contenga el campo conpute_1 se ponga en mi campo llamado "comision", o lo que es lo mismo: comision= compute_1, y de esa manera puedo guardar todos los cambios en mi bd, como puedo hacer ese codigo?

saludos
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 20/05/2014 00:03:31
Si estás usando campos computados, supongo que usas un DataWindow.

Lo que debes hacer sería no asignar en el Open de la ventana, sino en el itemchanged del DW, poner un código similiar a este:

If dwo.name = 'costo' Then
Object.Comision[row]=Compute_1
AcceptText()
End if
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 20/05/2014 01:36:58
ok si manejo datawindow... ya entre a mi ventana, ahi seleccione el DW y en el evento itemchanged le puse tu codigo, pero al guardar los cambios me sale el error: "undefined variable: compute1".

Tambien intente poniendole comillas asi: Object.Comision[row]="Compute_1" , y asi si me deja guardar pero en el momento de ejecutar mi aplicacion me sale el error: Type mismatch accesing external object property comision at line 2 in itemchanged event of object dw_1 of w_capturalibre.

Que podrá ser?
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 20/05/2014 23:04:48
no le habia entendido a tu respuesta jeje, si manejo datawindow y en lugar de campo computado quisiera un codigo o expresion para que en el campo que se llama "comision" se calcule automaticamente dependiendo del costo, si me dijeras como es esa expresion? y en que evento la puedo poner? saludos y muchas gracias por batallar y ayudar a este principiante jeje...

ya sea esa opcion o la otra (la que puse hasta abajo, que tengo un campo compute_1 y solo quiero copiar el contenido de ese campo a mi campo que se llama "comision".
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 20/05/2014 23:16:40
Para eso estamos Javier.

Bueno, entonces estas usando un DW.

Veamos, el error que te da es porque yo estoy inventando los nombres de las campos que supongo estás usando. Pero básicamente lo que debes hacer es:
Tienes un DW con los siguientes campos:
Costo
Compute_1
Comision

El Costo es un campo abierto para edición del usuario y puede escoger entre los valores (1, 2, 3, 4, 5).
El campo Compute_1, tiene una expresión la cual te da como resultado la comisión, con algo como esto:
If(Costo=1, 10000, If(Costo=2, 15000, If(Costo=3, 20000, 30000)))
El campo Comisión es el que se desea que se actualice en la base de datos.


Ahora bien, en el evento itemchanged del datawindows debes preguntar si el campo que se está editando es el "Costo", si es así, debes asignar la comisión, según el campo Compute_1.

De nuevo con el código que te di arriba:
1
2
3
4
If dwo.name = 'costo' Then
   Object.Comision[row]=Compute_1
   AcceptText()
End If

Cuando consultas por el dwo.name, el valor siempre viene en minúsculas.

Saludos.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 21/05/2014 06:11:20
Todo va bien, tengo mi campo compute_1 el cual me calcula perfectamente las condiciones, el problema es cuando en el itemchange del DW pongo el codigo:

1
2
3
4
If dwo.name = 'costo' Then
Object.Comision[row]=Compute_1
AcceptText()
End If

Al momento de que pongo ese codigo e intento guardar los cambios me da el error:
Warning: C0014: Undefined variable: compute_1
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 21/05/2014 22:14:02
Sí, perdón, lo correcto debiera ser:

Object.Comision[row]=Object.Compute_1[row]

Saludos.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 22/05/2014 07:09:18
a Ok ahora si ya no me muestra error, pero al ejecutar mi programa sigue habiendo peros jeje:

Ahora cuando en el campo COSTO capturo un valor, en el campo COMISION no pasa nada, pero cuando nuevamente en el campo COSTO pongo otro valor, entonces el campo COMISION si se actualiza pero me trae el valor que capture anteriormente, y así sucesivamente, siempre en el campo COMISION me trae la comision del producto anterior y no el que le corresponde a ese producto.


Otra pregunta sobre lo mismo:
En el campo COMISION no se pueden poner las condiciones que puse en el campo computado?= If(Costo=1, 10000, If(Costo=2, 15000, If(Costo=3, 20000, 30000))) ?? y de esa manera eliminar el campo computado y eliminar la condición que iguala la comision con el campo computado.?

haber si me pudieras ayudar con cualquiera de las 2 opciones.

Saludos y muchísimas gracias por tu tiempo y apoyo.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 22/05/2014 09:21:13
acabo de intentar con la condicion CHOOSE CASE de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
If dwo.name = "costo" Then
choose case object.costo[row]
	case 100
	.accepttext()
OBJECT.COMISION[ROW]=10
case 200
	OBJECT.COMISION[ROW]=15
	accepttext()
case 300
	OBJECT.COMISION[ROW]=20
	accepttext()
end choose
end if

Pero pasa lo mismo que en mi comentario anterior:
=======================================
(Ahora cuando en el campo COSTO capturo un valor, en el campo COMISION no pasa nada, pero cuando nuevamente en el campo COSTO pongo otro valor, entonces el campo COMISION si se actualiza pero me trae el valor que capture anteriormente, y así sucesivamente, siempre en el campo COMISION me trae la comision del producto anterior y no el que le corresponde a ese producto.)
=======================================
abra algo mal en mi programa o faltara algo para que se actualice el campo comision en cuanto doy tab o cambio de campo ???

Saludos
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 22/05/2014 15:58:28
Si, correcto, el funcionamiento del programa es el correcto. El error lo cometí yo, inocentemente.

Resulta que en el campo Object.Costo[row] el valor que se va a mostrar en el momento de la ejecución de ItemChanged es el valor actual, que para el caso sería el anterior, porque aun no se a aceptado. Pero hay una variable de parámetro en la que se encuentra el valor actual, "data".

Intenta de esta forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
If dwo.name = "costo" Then
choose case Integer(data)
	case 100
	.accepttext()
OBJECT.COMISION[ROW]=10
case 200
	OBJECT.COMISION[ROW]=15
	accepttext()
case 300
	OBJECT.COMISION[ROW]=20
	accepttext()
end choose
end if
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 22/05/2014 20:24:57
muy bien, ahora siiiiii funciona, muchisimas gracias!!!
solo una ultima cosa, no te mencione que algunos de mos productos tienen centavos, entonces cuando en costo pongo el valor, no hace nada el campo comision.

case 201.89
object.comision[row]=15
accepttext()

asi tengo mi codigo, acaso las condicines case no funcionan cuando hay decimales? o hay que hacer algo mas?

saludos y muchas gracias por todo!!
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 22/05/2014 20:28:49
Cambia el Choose Case Integer(data)

Por un Choose Case Decimal(data)

Saludos.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 22/05/2014 22:24:17
negativo, al cambiarlo como mencionas sale el error:

unknown function name: decimal
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 22/05/2014 22:34:38
Eso sucede porque no es decimal sino dec(), la función correcta.
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

insertar valor a un campo de una DW dependiendo de otro

Publicado por Javier (64 intervenciones) el 22/05/2014 22:43:29
Ok eso era, ahora si todo correcto, y pregunta finalizada jeje, muchas gracias, me falta un buen manual de power builder me pondre a buscarlo.


Muchos saludos
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