Respuestas de foro creadas
-
AutorEntradas
-
Javier Ader
Participanteque aparezca vacio es lo común, ese campo lo tenes que setear vos… a no ser que te estés refiriendo a que no te permite seleccionar ninguna condición de IVA en la lista desplegable? Esto es, en la lista desplegable, te aparecen las opciones?
Tal vez este pasando esto último y en es caos no sabría decirte ya que yo siempre use el instalador automático y las categorías venían siempre cargadas correctamete.Javier Ader
Participantemmm me parece que estas intentando reimportar cosas que ya fueron importadas antes. En el screenshot que pones,justo la entidad que se muestra tiene el tilde “Importar” que creo que no tiene un nombre muy conveniente ya que el tilde significa que ya fue importado (debería ser llamado “Importado”); lo que tiene el tilde simplemente no se van a importar hagas lo que hagas. Verifica de los cerca de 400 registros para importar que tenes ahi cuales tiene el tilde Importar; me parece que todos lo van a tener….
Igual, hace esto: ejecuta de nuevo el proceso de Importación (no desde Cargar Archivos, si no desde Importar Entidades Comerciales) y elegí la opción “eliminar importaciones anteriores” (esta opción justamente lo que hace es eliminar las campor en la tabla temporal que estan marcados como “ya importados”; dicho sea de paso, esta opción aunque mete un poco de miedo es segura; usala siempre que puedas para que no te ante mostrando importaciones anteriores). Despues de esto, la ventana de Importación, según mi hipotesis, no te debería mostrar ningún registro. Si es asi, ahora si anda a cargar Archivos y repetis la carga del cvs…. despues de esto, deberías tenes todos los nuevos registros a importar en Importar Entidades comerciales (el Importar debería estar destildado para todos ya que todavía no fueron importados)PD : no se como abras modificado el formato de importación… pero NO deberías especificar campo relacionado con el tilde Importar (ese campo es usado internamente solamente para evitar reimpotar cosas viejas; y no esta pensado para que lo setees desde el CVS)
Javier Ader
ParticipanteBuenas. Seguís con el problema con la P320F? Porque hace unos días configure un emulador (supongo que estamos usando el mismo; casi seguro que por los datos de inicializacion que pusiste) y el spooler justamente para esa impresora y no me tiro ningún problema (usando la versión 10.3, pero supongo que no hubo cambios desde la versión anterior sobre los drivers). La clase que implementa el driver es org.openXpertya.print.fiscal.hasar.HasarPrinterP320F ; si el metodo no esta definido ahí, tiene que estar obligatoriamente definido es su superclase (si no, no compila…).
El problema que planteaste tal vez no venga por “Formato no valido” si no mas bien por “Faltan datos del estado fiscal o general del controlador” (tal vez no estaba inicalizado, tal vez fue que quisiste facturar sin iva habiendo inicializado la impresora como responsable inscripto…)
Probaste el spooler desde fuera de Liberyta? Tene en cuenta, que el emulador se cierra después de cierto tiempo, y una vez que lo reinicias, por alguna razón tambíén tenes que reiniciar el spooler (me paso…). Para probarlo independientemente lo que hice fue usar el programa sndcmd. Te pongo lo que hice bajo windows
-inicio el emulador para que use el port virutal COM4
-lo inicializo y lo pongo a “escuchar” (“abrir puerto” creo que es la opción del menú)[este punto no se si va antes que el anterior… o tal vez no traiga diferencias..]
-arranco el spooler, bajo windows wspooler para que use es port COM
wspooler -p 4 -k
(puede que te salte el firewall; desbloquealo)
-ya en este punto el spooler se comunica con el emulador; te debe mostrar unas comandos recibidos en el “log” del emulador
-le envio las ordenes al spooler para que imprima un documento no fiscal en la impresora:
sndcmd.exe -p 1600 -t 127.0.0.1 DNF.330
El archivo DNF.330 esta dentro del zip que se descarga de hasar; el sndcmd también (pero este zip parece ser especifico al modelo P320F; probablemente haya pequeñas diferencias entre modelos en estos zips; esto es, baja el zip exacto).La primera vez que lo probé tarde mucho en llevar a cabo el último punto y al parecer el emulador se habia cerrado. Como te dije, reinicie el emulador y el spooler; reintente y anduvo todo ok (tanto en el log del emulador como en el del spooler se mostro todo ok). Después directamente facture desde libertya y de nuevo, todo ok.
PD : Me comento Antonio que estaban queriendo crear los drivers para las versiones nuevas de los controladores/impresoras hasar (le dije que para mi casi seguro son backward compatibles a nivel de protocolo con los versiones anteriores… pero bueno, habría que por lo menos testear los drivers actuales contra modelos nuevos); si me dicen la lista de modelos (en otro thread preferentemente) que están teniendo en cuenta, tal vez pueda aportar algo.
Javier Ader
ParticipanteMás allá de las imagenes son medio pequeñas no me pareció ver ningún error… Tenés que ir a la ventana de importación especifica de ECs (Importar Entidades Comerciales, si mal no recuerdo) y completar la importación (la importación es un proceso de dos pasos). En esta ventana te va a mostrar la ECs “listas” para importar; desde está ventana es desde donde realmente afectas a las entidades comerciales en el sistema (y lo que te muestra esta ventana es en realidad el producto de los “Cargar Archivos” anteriores).
Javier Ader
ParticipanteNo se para que estás intentando cambiar ese predeterminado (que yo sepa, no se trata de manera directa con las letra de los comprobantes en muchos lados…), pero si, como dice cognitiva es un bug en libertya (mínimo, pero bueno….), pero el error no te llega porque Postgres ve violada la restricción UNIQUE si no porque la libertya hace validaciones antes de guardar que son demasiado restrictivas (MLetraComprobante.beforeSave()); estas restricción tienen la misma finalidad de UNIQUE (por ej, que no haya 2 A para una misma companía), pero no chequea si en realidad cambiaste o no la letra y no distingue si estás haciendo una modificación o una inserción… Todo esto debe haber pasado medio por alto porque en general naide cambia algo de las letras de los comprobantes, a lo sumo se agregan nuevas.
En cualquier caso, y como dijo cognitiva, lo podes solucionar a nivel de sql.29 abril, 2010 a las 4:04 pm en respuesta a: Ejecutar proceso por cada linea, similar a callout #34440Javier Ader
ParticipanteBuenas, me meto jaja. No se si termino yo también de entender, pero si los campos son para “consulta” (e.d, no los vas a editar) y se genera un grupo de estos campos por cada fila entonces me imagino que no tenes que usar callouts (esos metodos se usan solo para producir cambios o validaciones en tiempo de edición) si no columans virtuales.
Ejecuta esta sentencia sql para ver ejemplos de tabla que tienen columanas virtuales y como se usanCode:select t.tablename,c.columnname, c.columnsql , c.* from
ad_column c
inner join ad_table t on (c.ad_table_id = t.ad_table_id)
where
c.columnsql is not null(fijate que lo que podes poner es casi cualquier sentencia sql que genere un solo valor; la complejidad es arbitraria siempre y cuando las referencias a las columnas de la “tabla madre” estén bien definidas; si no, te va a tirar un error semántico a nivel sql )
Ahora, estos columnas virtuales a su vez van a tener un representación visual via un campo (igual que cualquier otra columna); no lo chequie, pero me da la sensación que estos campos a su vez pueder ser modificados via callouts seteados en otras columnas no virtuales.
Por ej, digamos que Juguetes tiene dos columnas no virtuales Peso1 y Peso2; y queres un tercer valor solo visual que sea el PesoTotal = Peso1 + Peso2. Esto se hace a nivel de Tabla (en Libertya) agregando (a mano) una columna llamada PesoTotal y setenadole el valor en sql (Peso1 + Peso2) (si no eso no anduviese, probar con (Juguetes.Peso1 + Juguetes.Peso2) ). Esta columa la podes usar desde un pestaña que muestre los juguetes.
Ahora, esto creo que tiene el problema de que si el usuario modifica Peso1 o Peso2, el PesoTotal en la ventana no se va a recalcular hasta que salve la fila (pero cuando carge los Juguetes van a mostrar el valor correcto)…. si uno quisiese hilar fino, se le podría setear un callout un Peso1 y otro en Peso2 (o el mismo en los dos…) que vaya moficando “en vivo” el valor del campo PesoTotal (pero ojo, esto ultimo nunca lo probe y no se si los camos asociados a columnas virtuales se pueden modificar via callouts, pero casi seguro que si… es mas casi seguro que se esta haciendo con alguna de las columans virtuales que existen en uso).PD : Ojo, no se si es muy recomendable usar este tipo de cosas muy a la ligera… el valor de las columans virtuales se va a calcular por cada una de las filas que traigas; si el sql usadas en esta es muy complejo o trae muchos datos puede potencialmente hacerte ralentar mucho la carga inicial de la tabla (si es muy compleja, el servidor va tardar mucho en calcular; si es muy “grande” a nivel de datos, va a tardar mucho en poder enviarlos)
Javier Ader
ParticipanteGracias Franco y como siempre, es un gusto poder aportar algo a Libertya. En cuanto al acceso fuera de indice , de última y para andar por lo seguro, se podría incrementar solo sin no va a generar una excepcion en la proxima entrada al bucle
Code:else{if (payIdx < pagos.size() -1 ) payIdx++; else log.log(Level.SEVERE, "mmm no debería pasar");; sobraDelPago = null; }
Así en caso de no estar completamente seguros que de que no va generar una excepción, por lo menos nos evitamos agregar un nuevo error; dentro de ese bucle generar un ArrayIndexOutOfBoundsException debe ser una situación bastante desagradable (el remedio peor que la enfermedad)…. pero bueno, el while que esta justo antes no es tan “escrupuloso” e incrementa payIdx sin miramientos….
Saludos
PD : Programación defensiva vs código elegante, el viejo dilema…
26 abril, 2010 a las 7:41 pm en respuesta a: Posible bug en la versión del driver JDBC en uso #34435Javier Ader
ParticipantePuede ser pero tené en cuenta que el error (algo que no puse….) se muestra a nivel “fine” y que el error de la “falta de parametros” a nivel severe (este ultimo puede no estarte ocurriendo por otras razones; tal vez tu “try locally” en exeuteQuery() tiene éxito); y en los dos casos, con o sin error DB devuelve -1 (que como decís es correcto justo en el ejemplo, pero podría no serlo).
Si no me equivoco para que se muestren todos estos mensajes por consola habría que agregar un linea CLogMgt.setLevel(Level.ALL); al test justo debajo del org.openXpertya.OpenXpertya.startupEnvironment( true );
(yo la excepción la vi solo después de poner un breakpoint en el primer catch de CPreparedStatement.excecuteQuery())
Otra forma de verificar si Postgres 8.2 soporta este casting explicito sería directamente ejecutar desde pgAdmin o algún cliente consola la sentencia:
“SELECT C_BPartner_ID FROM Libertya.C_BPartner WHERE AD_OrgBP_ID=0”
Esa sentencia desde mi pgAmidn contra el server 8.3 me tira el mismo error semántico de castings que la excepción que en CPreparedStatement.Javier Ader
ParticipanteCreo que el instalador automático de Libertya tiene incluido un instalador de Postgres no es “tìpico” que vas a poder descargar desde el sitio de Postgres (entre otras cosas porque viene con la extensión Posgres que habilita pljava).
Al menos para la versión para XP (pero casi seguro que se aplica a la versión Vista) si abrís el instalador de Libertya como si fuese un archivo zip (usa cualquier descompresor; 7zip por ej) vas a ver que hay dos archivos que comienzan con nombre postgres (una grande, el instalador propiamente dicho de postgres; y otro chico; que instala pljava). Ejecutando el instalador obtenido de esta manera vas a instalar Postgres y sobre el final el mismo instalador va a detectar el otro pequeño y lo va a iniciar automáticamente, lo cual te va a preguntar si queres instaladr pljava.[mmm creo que funcionaba de esta manera… o había que ejecutar el instalador chico primero??? bueno proba jaja]25 abril, 2010 a las 5:11 am en respuesta a: Posible bug en la versión del driver JDBC en uso #34434Javier Ader
ParticipanteBueno, editenme el título si pueden porque el error no esta en el driver si no en Libertya (lo que me confudió es que CPreparedStatement.executeQuery() al fallar el primer intento por un error semántico de la query, lo reintenta, y antes de hacer esto clarea los parámetros y por lo tanto al reejecutarlo tira el error que puse antes; esto se da en la parte que dice Try Locally; dicho sea de paso es bastante dudoso que este código sea correcto…).
La sentencia “SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=? ” falla en el primer intento porque se setea el parámetro como int (PreparedStatement.setInt(int)), esto termina en un error en Postgres porque la columan AD_OrgBP_IP es de tipo character varying (no me pregunten por que…) y Postgres (al menos la versión que esta usando libertya 10.3) OBLIGA a un casting explicito entre int y character varying cuando el operador es “=” (dicho de otra manera; no tiene casting implícito entre estos dos tipos de datos). Probablemente bajo otros SMDB como Oracle esto este permitido.
Hay que remarcar que todo el código que vi que trata con este columna en particular de la tabla CBPartner asume que este columna es int y a veces string ….(a nivel de metadatos, la columna es de tipo Boton, asi que esto no trae problemas en este punto). Estos puntos si no me faltan algunos (es probable) son
MOrg.getLinkedC_BPartner_ID(): de donde viene el error que se muestra al completar una factura (pero que la factura en si misma se completa sin error)
BPartnerOrgLink.doIt(): ya que en este caso se llama a MBPartner.setAD_OrgBP_ID(int); pero en este caso el metodo es definido en MBPartner y no heredado de la clase generada automáticamente (ahí si correctamente, el tipo de esta columna es string)
BPartnerOrgUnLink.doIt(): usa un “mezcla” …. por un lado usa el getter de tipo int definido en MBPartner; pero al momento se “deslinkear” la entidad a una organización , usa el seter definido en X_C_BPartner (en realidad lo hace Java por sobrecarga de métodos; al ser llamado setAD_OrgBP_ID con parametro null el cual va a parar al seter dado en X_C_BPartner ya que este tiene parámetro string…)En los dos ultimos casos, la cosa creo que funciona; mal o bien, siempre se castea entre strigs e ints previo a las modificaciones en la base de datos (incluso si no se hiciese la conversión creo que funcionaria de todas maneras ya que los updates en PO no se hacen usando parametros de un prepared statement… creo…). Ahora, en el caso MOrg.getLinkedC_BPartner_ID() se falla….
No se cual será la solución correcta; si redefiniar la columna en base de datos a int y dejar de hacer la conversion de int a string en MBParnter (y que los dos procesos se modifiquen acordermente) o modificar MOrg.getLinkedC_BPartner_ID() para que no use un parámetro de tipo int si no de tipo string…
Si se optase por lo último MOrg.getLinkedC_BPartner_ID() podría quedar asi:Code:public int getLinkedC_BPartner_ID() {
//TEST: Comentar el siguinte if y la llave que cierra para que MOrg
// NO chacuie la entidad linkeada
if (m_linkedBPartner == null) {
//bug: se debe convertir getAD_Org_ID a string Y NO llamar directamente con
//el int. La columna AD_OrgBP_ID es de tipo character varying NO int
int C_BPartner_ID = DB.getSQLValue(null,
“SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=?”,
Integer.toString(getAD_Org_ID()) );if (C_BPartner_ID < 0) { // not found = -1 C_BPartner_ID = 0; } m_linkedBPartner = new Integer(C_BPartner_ID); } return m_linkedBPartner.intValue(); }
Lo testie y anda (la clave está en Integer.toString(getAD_Org_ID()) ). De paso, como está puesto en el primer comentario del código, no se si es muy correcto que se cachee la entidad asociada a un organización por obvias razones (si desde otro cliente se “deslinkea” o se “linkea” el cliente actual sigue viendo las cosas como antes…)
PD : gravedad del bug? ni idea, pero me parece que para el uso común no tiene grandes implicaciones (la entidad linkeada a una organización se usa para generar automáticamente “contra documentos”… un concepto para mi gusto muuuy esotérico jajaja y la verdad que no se si se usa en muchas instalaciones)
Javier Ader
ParticipanteHaaaa el tema es que la Configuración del libro de caja que viene preinstalada tiene asociada la organizacion “*” (que tiene id = 0). En el caso de las facturas, cuando la forma de pago es efectivo (independientemente de si esta tildada la opción de generar linea de caja) se chequea si hay una configuración de libro de caja para la organización “actual” (casi seguro que es con la que te logueaste); si no encuentra ninguna tira el NoCashBook. Esto te obliga a que por cada organizacion (sin contar a * que es epecial) tengas al menos una coniguración de libro de caja asociada y casi seguro un libro de caja abierto.
E.d, crea una nueva configuración de libro de caja para la organización y después crea un libro basada en esta.Javier Ader
ParticipanteBueno ahí lo probé con un libro de caja actual y no me tiro el NoCashBook…. destilando el generar “linea de libro” sigue pasando lo mismo.
Después verifico a nivel de código por donde puede venir.Javier Ader
ParticipanteSi… ahora que lo pienso un poco mejor, es seguro que es como decís. La otra es que no tenga abierto un libro de caja pero con una fecha que no es la actual; casi seguro que en ese caso tira error (de nuevo… tampoco lo testie jaja, pero a esto le tengo mas fe)
Javier Ader
ParticipantePero esta haciendo un factura de Proveedor (e.d esta pagando y por lo tanto sacando dinero del libro de caja)… asi que me parece que libro de caja no solo tiene que estar abierto si no que también tiene que tener efectivo. Si es esto último (algo que dicho sea de paso, no chequie…), creo que el sistema podría dar un mejor mensaje…
Javier Ader
ParticipanteMe parece que no existe tal configuración; pero si pode editar esos números manualmente. Creo que la idea de los mismos es básicamente permitirte mantener el orden visual (al traer la lineas de un pedido/remito/factura se traen ordenadas por ese campo); y el salto de 10 en 10 es por si deseas agregar un linea en el medio de otras dos (en el caso de los pedidos/remitos/facturas no tiene mucho sentido…). Estas secuencias de 10 en 10 están en varios otros lugares y la idea es la misma; permitir mantener una forma de orden.
-
AutorEntradas