Me da error la función SIinm en el pie de subformulario.

En un Formulario tengo un subformulario llamado “SubformularioProductos” en el cual tengo en el pie del mismo un control que quiero que me sume y reste los campos que os detallo al final y divida el resultado de las unidades entre 24 o 12, según el valor del campo “CajaTipo”, que es un combo de lista de valores: “Caja de 24 uni.” Y “Caja de 12 uni.”. Este control del pie del subformulario lo llamo “txtCajas”, que lo llamaré en el formulario principal =Nz([SubformularioProductos].[Formulario]![txtCajas];0) para que me calcule el total de las unidades en cajas según el formato de estas.

Esta es la sintaxis que he puesto, pero está claro que algo he hecho mal. Los campos están escritos correctamente.

=Suma(SiInm([CajaTipo]="Caja de 24 uni.";[CantidadRecibida]-[CantidadVendida]-[Mermas]/24; SiInm([CajaTipo]="Caja de 12 uni."; [CantidadRecibida]-[CantidadVendida]-[Mermas]/12; 0)))

2 respuestas

Respuesta
1

Podrías suministrar algunas imagen del formulario y subformulario.

En el transcurso de mañana intentaré enviártelo. Muchísimas gracias por tu interés. 

Hola, te envío lo mismo que a otro compañero que me ha solicitado una imagen del formulario, espero que se vea bien. El formulario funciona perfectamente, como puedes ver en el pie del subformulario ya hay un control que me suma las unidades y que luego llamo al mismo control en el formulario principal, en Stock del Producto. Lo que quiero con esto es transformar las unidades en cajas según el TipoCaja del cuadro combinado. Arriba de Stock del Producto he puesto a modo de prueba con el borde resaltado el control que llama  al campo en cuestión que se llama txtCajas. Muchas gracias! Buenos días!

En mi caso utilizo funciones para realizar estos cálculos, te proponga analices este código haber si te funciona:

Crear esta funcion dentro del subformulario

Cambia el nombre de la tabla tbl_movimiento por tu tabla

Function n_cajas AS Double

  dim int_divisor AS Integer

  if Me.CajaTipo="Caja de 12 uni." THEN
    int_divisor=12
  else
   int_divisor=24
  endif

   n_cajas=nz(DSUM("[CantidadRecibida] -[CantidadVendida]-[Mermas]","tabla_moviento"),0)/int_divisor
'---------------------------
En el campo txtCajas ....en la pestaña Datos Valor Predeterminado colocas ---> =n_cajas()
'---------------------
En los evento Después de Actualizar de los campos CantidadRecibida así como en CantidadVendida y Mermas Colocas Call n_cajas().

Me. Requery
Me.txtCajas.Recal

Te recomiendo en lo posible no usar Silnm() o IIF() para realizar cálculos.

Respuesta
1

Vamos por partes. Tal como lo has puesto te hará la diferencia entre Cantidadrecibida - cantidadvendida, menos las mermas pero éstas últimas divididas por 24. Tendrías que poner

([cantidadrecibida]-[cantidadvendida]-[mermas])/24

Por otro lado, no dices si el combinado con el número de cajas está en el formulario o en el subformulario. Importante

¿Puedes poner una imagen del formulario y subformulario?

Pondré a lo largo del día imágenes. El combo está en el subformulario. Muchas gracias!

Hola Icue, no sé si lo verás bien. El formulario funciona perfectamente, como puedes ver en el pie del subformulario ya hay un control que me suma las unidades y que luego llamo al mismo control en el formulario principal, en Stock del Producto. Lo que quiero con esto es transformar las unidades en cajas según el TipoCaja del cuadro combinado. Arriba de Stock del Producto he puesto a modo de prueba con el borde resaltado el control que llama  al campo en cuestión que se llama txtCajas. Muchas gracias! Buenos días!

Lamentablemente, mi ordenador es un portátil y como la pantalla es pequeña, casi no distingo los detalles. Por eso prefiero mandarte un ejemplo.

No le hagas caso a los nombres, lo que importa es la idea. Verás que hay un subformulario al que he llamado Movimientos que depende de la tabla del mismo nombre y un formulario al que he llamado Existencias(por llamarle algo) donde ves que hay dos cuadros de texto, uno para cajas de 24 y otro para cajas de 12.

Si en el subformulario eliges un producto y un tipo de caja cuando anotes una cantidadrecibida y pulses enter, en el cuadro de texto correspondiente del formulario te va apareciendo la suma acumulada del número de cajas que hay de cada tipo. Como puedes ver, no hace falta nada en el pie del subformulario. En el evento después de actualizar del cuadro de texto CantidadRecibida así como en CantidadVendida y Mermas le tengo puesto

DoCmd. RunCommand acCmdSaveRecord
If TipoCaja = "Caja de 12" Then
Me.Parent!caja12 = DSum("nz([cantidadrecibida])-nz([cantidadvendida])-nz([mermas])", "movimientos", "id=" & Me.Id & " and tipocaja=""Caja de 12""") / 12
Else
Me.Parent!caja24 = DSum("nz([cantidadrecibida])-nz([cantidadvendida])-nz([mermas])", "movimientos", "id=" & Me.Id & " and tipocaja=""Caja de 24""") / 24
End If

De todas formas, si quieres, repito, si quieres, haz una copia de las tablas y el formulario, con dos o tres registros INVENTADOS a [email protected] , lo miro y te digo. Si lo haces, en el asunto del mensaje pon tu alias Javier, ya que si no sé quien me escribe ni los abro

Te lo agradezco mucho, por tu tiempo y tu sabiduría. Lo pondré en práctica cuando tenga un momento y ya te comentaré. Gracias de nuevo!

PD. Me esfuerzo cada día por aprender un poco más.

Javier.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas