instalación, cambio, actualización de versión magma .net

39
Cambio/actualización de versión Magma .NET Contenido Falta......................................................................4 Instalación................................................................4 Procedimiento............................................................4 Puertos..................................................................4 Firewall.................................................................4 Lista de funciones a probar..............................................6 Prueba del proformador................................................. 6 Prueba de analizadores................................................. 7 Problemas con Impresiones Crystal......................................7 Problemas con Impresiones DevExpress..................................10 Posibles problemas surgidos de otras instalaciones......................11 Verificar licencias.....................................................12 Archivo licNet.mgm.................................................... 12 Consulta de control de licencias......................................13 Actualización V5 a V6...................................................13 Instalación y configuración del ClickOnce...............................14 Programación..............................................................14 Servicios...............................................................14 Arroba en los parámetros.............................................. 14 Ingreso por teclado en Mayusculas.....................................14 Formularios de Mantenimiento............................................15 Formularios de Reportes.................................................15 Código en formularios, proceso y analizadores...........................15 LOG viejo:............................................................ 15 Página 1

Upload: manuel-asuncion

Post on 14-Apr-2015

134 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: Instalación, Cambio, actualización de versión Magma .NET

Cambio/actualización de versión Magma .NET

ContenidoFalta.........................................................................................................................................................................4

Instalación................................................................................................................................................................4

Procedimiento......................................................................................................................................................4

Puertos.................................................................................................................................................................4

Firewall.................................................................................................................................................................4

Lista de funciones a probar..................................................................................................................................6

Prueba del proformador..................................................................................................................................6

Prueba de analizadores....................................................................................................................................7

Problemas con Impresiones Crystal.................................................................................................................7

Problemas con Impresiones DevExpress........................................................................................................10

Posibles problemas surgidos de otras instalaciones..........................................................................................11

Verificar licencias...............................................................................................................................................12

Archivo licNet.mgm........................................................................................................................................12

Consulta de control de licencias.....................................................................................................................13

Actualización V5 a V6.........................................................................................................................................13

Instalación y configuración del ClickOnce..........................................................................................................14

Programación.........................................................................................................................................................14

Servicios.............................................................................................................................................................14

Arroba en los parámetros..............................................................................................................................14

Ingreso por teclado en Mayusculas................................................................................................................14

Formularios de Mantenimiento.........................................................................................................................15

Formularios de Reportes....................................................................................................................................15

Código en formularios, proceso y analizadores..................................................................................................15

LOG viejo:.......................................................................................................................................................15

LOG nuevo:.....................................................................................................................................................16

Debug:............................................................................................................................................................16

Includes Nuevos.............................................................................................................................................16

Página 1

Page 2: Instalación, Cambio, actualización de versión Magma .NET

Herramientas de programación.....................................................................................................................16

Crystal Reports...................................................................................................................................................17

DevExpress.........................................................................................................................................................17

Como poner un subreporte:...........................................................................................................................17

Como ponerles ZoomIn..................................................................................................................................18

Como traducir los encabezados.....................................................................................................................18

Como recuperar un valor de la tabla principal:..............................................................................................18

Como recuperar el valor de una fórmula:......................................................................................................18

Como verificar que un campo tenga valor:....................................................................................................18

Como ocultar un subreporte si no tiene datos:..............................................................................................18

Como ocultar un campo:................................................................................................................................19

Como dar formato a un campo:.....................................................................................................................19

Como poner un importe en letras:.................................................................................................................19

Seguridad...............................................................................................................................................................23

Consulta que controla la seguridad....................................................................................................................23

Mantenimiento......................................................................................................................................................24

Higiene de la base de datos...............................................................................................................................24

Formularios Importantes.......................................................................................................................................24

Empleados..........................................................................................................................................................24

Libro Mayor........................................................................................................................................................24

Proformador......................................................................................................................................................24

Provincias.......................................................................................................................................................24

Factura...............................................................................................................................................................25

FacturaAutom....................................................................................................................................................25

Factura_Clientes................................................................................................................................................25

Factura Electrónica.............................................................................................................................................25

Instalación......................................................................................................................................................25

Configuración.................................................................................................................................................26

Certificado......................................................................................................................................................27

Errores conocidos..................................................................................................................................................27

Serialization........................................................................................................................................................27

Problema........................................................................................................................................................27

Página 2

Page 3: Instalación, Cambio, actualización de versión Magma .NET

Solución..........................................................................................................................................................28

Chequeo de sintaxis...........................................................................................................................................29

Problema........................................................................................................................................................29

Solución..........................................................................................................................................................29

Página 3

Page 4: Instalación, Cambio, actualización de versión Magma .NET

Falta1. Documentar el logo de la empresa en analizadores y default en reportes.2. runtime de crystal 10.5 ver mail del 12/3/12 de carlosS3. Distintas maneras de configurar el String de conexión para la metabase.

Instalación

Procedimiento1. Realizar la instalación en un entorno de pruebas.

a. Restaurar un backup de producción sobre la base de pruebas.b. Ejecutar el script (si lo hay) sobre la base de pruebas.c. Verificar el archivo de licencias.d. Ejecutar el update sobre el ambiente DESA.e. Probar todas las funciones que se indican en el punto siguiente sobre la base de pruebas.

2. Si todas las pruebas son positivas, realizar la instalación sobre el ambiente de producción.a. Bajar el servicio para evitar que entren los usuarios durante la instalación.b. Ejecutar el script (si lo hay) sobre la base de producción.c. Verificar el archivo de licencias.d. Ejecutar el update sobre el ambiente de producción.e. Probar todas las funciones que se indican en el punto siguiente sobre la base de producción

estando conectado por terminal al servidor.3. Ejecutar el CLICKONCE

a. Probar todas las funciones que se indican en el punto siguiente sobre la base de producción estando conectado desde una máquina cliente.

b. Verificar que se hayan actualizado las versiones de lo recientemente instalado.4. En V6 instalar en el cliente el Microsoft Framework versión 4 extended.

a. Para saber si está instalado hay que verificar la existencia de la siguiente carpeta: “C:\Windows\Microsoft.NET\Framework\v4.0.30319”

b. Para bajarlo:

http://www.microsoft.com/en-us/download/details.aspx?id=17718

PuertosVerificar el cliente\common.config y el Servidor\ remotingChannels.configEn los dos archivos tiene que decir el puerto. El estándar es el 6000 pero se puede usar cualquiera.

FirewallHay que agregar el puerto con el que se comunica el cliente y el servidor de magma. Ver configuración de puertos.

Página 4

Page 5: Instalación, Cambio, actualización de versión Magma .NET

Página 5

Page 6: Instalación, Cambio, actualización de versión Magma .NET

Lista de funciones a probar1. Editar un registro en un mantenimiento simple. Por ej. Monedas.2. Probar los servicios más comunes en una transacción. Por ej. iniGrilla del 3. Probar el Proformador. Crear una nueva proforma de horas y gastos.4. Facturar la proforma.5. Probar analizadores si es posible con código incrustado (posición de titulares)6. Crear una factura IP.7. Ejecutar el balance.8. Mandar a imprimir algo en devexpress o en crystal9. Ver que funcione el clickOnce entrando a la página.

Prueba del proformador1. Tomar en el entorno real los datos de una proforma que todavía no se haya facturado.

SELECT cod_pro_job, cod_tit, cod_tit_fac, fecha_cierre, tot_aux_cab1, * FROM cpt_cabproformasWHERE fec_doc = '20110715' and nro_trans = 1326021

2. Proformarla desde el psaproformador.exe dentro del entorno de pruebas.3. Corroborar que los importes del campo tot_aux_char1 sean iguales en las 2 bases.

Otra prueba es hacer el circuito completo:

1. Tomar un deal con un cliente que tenga algo pendiente:

select distinct cod_tit, cod_tit_fac, s.cod_pro_job from sa_hs_gs as s inner join ct_pro_job as d on s.cod_pro_job = d.cod_pro_job order by fecha_mod desc

2. Generar la proforma.Con proformas ANEXAS

Cree una nueva proforma para el deal 4221 y le puse que tenía proformas anexas y en el nro de primer proforma le dejé el número que me trajo (20505)Cree la segunda proforma para el deal 4677, le puse que tenía proformas anexas y en el nro le puse 20505.

Página 6

Page 7: Instalación, Cambio, actualización de versión Magma .NET

Por último cree una proforma para el deal 4968 le puse que tenía proformas anexas, en el nro le puse 20505 y al poner el tilde en la casilla "Es proforma principal" me trajo el importe total de la sumatoria de las 3 proformas.

Al momento de facturar, todas las líneas involucradas salen con el mismo número de agrupación. Las marqué todas y se emitió una única factura y confirmé que el write up/off queda en el deal principal de cada una de las proformas.

Prueba de analizadoresSi muestra el resultado ya alcanza.

Pedir por lo menos con 2 valores diferentes para verificar que tome los parámetros y traiga resultados diferentes.

Problemas con Impresiones Crystal

CrystalDecisionsSi da el error de abajo hay que instalar runtime de crystal 10.5 que se baja de: ftp://www.magmapsa.com/Crystal%2010.5%20x64%20y%20x32/

Y reiniciar el servicio!

An exception of type 'System.IO.FileNotFoundException' occurred and was caught.-------------------------------------------------------------------------------03/12/2012 14:52:22Type : System.IO.FileNotFoundException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Message : Could not load file or assembly 'CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.Source : Magma.Tools.ReportesYProcesos.Business.CrystalHelp link : FileName : CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304FusionLog : WRN: Assembly binding logging is turned OFF.To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.

Página 7

Page 8: Instalación, Cambio, actualización de versión Magma .NET

Note: There is some performance penalty associated with assembly bind failure logging.To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

Data : System.Collections.ListDictionaryInternalStack Trace : Server stack trace: at Magma.Tools.ReportesYProcesos.Business.Crystal.ReporteEjecucionCrystal.PrepararReporteCrystal(ReporteOProceso argReporte) at Magma.Tools.ReportesYProcesos.ServiceInterfaces.ReportesYProcesosHandler.PrepararReporteCrystal(ReporteOProceso argReporte) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Magma.Tools.ReportesYProcesos.Interfaces.IReportesYProcesosHandler.PrepararReporteCrystal(ReporteOProceso argReporte) at Magma.Tools.ReportesYProcesos.UIPC.ReporteEjecucionUIPC.PrepararReporteCrystal(ReporteOProceso argReporte) at Magma.Tools.ReportesYProcesos.UIC.ReporteEjecucionWin._Preparar(CampoUIColeccion argCamposUI) at Magma.Tools.ReportesYProcesos.UIC.ReporteEjecucionWin.PrepararAsync(MGFormularioUI argFormulario, Array argValores, Array argDescCombos, BackgroundWorker argBackgroundWorker, DoWorkEventArgs argEventArgs) at Magma.Tools.Ejecucion.UIC.FormularioEjecucion._bgw_DoWork(Object sender, DoWorkEventArgs e)

Como saber si está instalado el crystalEn la máquina cliente, ejecutar el MGCliUtils, abrir carpeta,

Camino RepVer el parámetro general donde están todos los rpts. Se llama camino_rep_net.

CrufMTools.dllEn lugar de mostrar el reporte de Crystall muestra el internet explorer con un error asqueroso.Para que funcione hay que instalar en la c:\windows\system32 de la máquina cliente la CrufMTools.dll. Creo que no hace falta registrarla.

DNSCrystalSi sale el siguiente error es que está mal configurado el dns. Ver el parámetro general DNSCrystal.

---------------------------Nota de Cobro Propiedad Intelectual---------------------------Error al actualizar información de conexión a la base de datos para el reporte.---------------------------OK ---------------------------

ZoomIn error al setear el parámetroPara poner el zoomin ver en este mismo documento en: Crystal Reports

1. Da error porque pasa el nro_trans con separador de miles (pasó en Mitrani después de convertir a V6)

Carlos va a remplazar la dll.

2. En claro pasó esto:

Ha ocurrido un error al setear el parámetro o fórmula 'Zoomin' al valor ''"C:\Program Files\Magma.NET\Cliente\MGExplorer.exe" -F ' +{@Formulario} + ';Visualizacion;nro_trans=' +

Página 8

Page 9: Instalación, Cambio, actualización de versión Magma .NET

GlinkclsFormatosNroSinPuntos({@NroTrans}) + ' -L 67eec796-1966-4e7b-9387-4b8b5ecc28f1''.Verifique que sea un parámetro o fórmula válida para el reporte.

Carlos reempazó la Magma.Tools.ReportesYProcesos.Business.Crystal.dll

ZoomIn no hace nadaPara poner el zoomin ver en este mismo documento en: Crystal Reports

Al hacer click sobre los campos no hace nada. (pasó en Mitrani después de convertir a V6)

Puede faltar fórmula trans ó param gral camino_zoominEn ejecución antes de asignar pregunta:If argReportDocument.ExisteFormula("Zoomin") And argReportDocument.ExisteFormula("Formulario") And argReportDocument.ExisteFormula("NroTrans")

Como encontrar todas las llamadas a las funciones GLink de la CrufMtools1. Instalar el programa FileSeekSetup-2.0.4.exe (http://www.fileseek.ca/Download/)2. Buscar las que tengan contenido Glink adentro de cada rpt

Probar el CrystallLa idea sería poder probar los siguientes casos:

Reporte Normal de formulario Reporte desde servicio de impresión (con preview y sin preview, osea impresión directa). Reporte con subreports Zooming Funciones Glink que van en la CrufMtools.dll por ejemplo la que convierte importe en letras.

o GlinkclsAritmeticaPotencia o GlinkclsBaseDatoConsultaSQL o GlinkclsBaseDatoFormatoFecha o GlinkclsBaseDatoQuitaDatoString o GlinkclsFormatosFechaString

Página 9

Page 10: Instalación, Cambio, actualización de versión Magma .NET

o GlinkclsFormatosNombreMes o GlinkclsFormatosNroSinPuntos o GlinkclsPeriodosDiasHabiles o GlinkclsPeriodosMinutosAHorasDec o GlinkNum2StrMontex o GlinkTotalesAcumular o GlinkTotalesInicializaro GlinkTotalesMostrarTotales

Ejemplos de reemplazos:Glink Funciones standardtotext(GlinkclsFormatosNroSinPuntos(day(CurrentDate))) + "/" + totext(GlinkclsFormatosNroSinPuntos (month(CurrentDate))) + "/" + totext(GlinkclsFormatosNroSinPuntos (year(CurrentDate)))

ToText(CurrentDate, “dd/MM/yyyy”)

"Página "+trim(GlinkclsFormatosNroSinPuntos (PageNumber))+" de "

"Página "+trim(ToText(PageNumber,0))+" de "

totext(GlinkclsFormatosNroSinPuntos(day(CurrentDate))) + "/" + totext(GlinkclsFormatosNroSinPuntos (month(CurrentDate))) + "/" + totext(GlinkclsFormatosNroSinPuntos (year(CurrentDate))) + " " + totext(CurrentTime) + " - " + " Usuario: " + {@Usuario} + " - Base: " + {@BaseDatos}

ToText(CurrentDate, “dd/MM/yyyy”) + " " + totext(CurrentTime) + " - " + " Usuario: " + {@Usuario} + " - Base: " + {@BaseDatos}

GlinkTotalesAcumular ({S_Posicion.cod_moneda_mov}, {ct_monedas.simbolo_moneda}, ToText ({@ImpOriginal}) + ';' + ToText ({S_Posicion.imp_mov_mo}), RecordNumber, 4)

WhilePrintingRecords;//EvaluateAfter ({@SumaPorMoneda});Global StringVar Array Monedas;Global StringVar Array SimboloMonedas;Global NumberVar Array TotalesPorMoneda;

Local NumberVar i;Local StringVar Salida:="";For i:=1 To Ubound(Monedas) Do( Salida:=Salida + SimboloMonedas[i] + " " + Cstr(TotalesPorMoneda[i]) + Chr(10) + Chr(13));Salida

GlinkTotalesInicializarWhilePrintingRecords;GlinkTotalesMostrarTotales (1, 2, RecordNumber)GlinkclsFormatosNroSinPuntos ({S_HORAS_PEND.Cliente}) & " " & rtrim({S_HORAS_PEND.nom_tit})

toText({S_HORAS_PEND.Cliente}, 0) & " " & rtrim({S_HORAS_PEND.nom_tit})

GlinkNum2StrMontex ({cpf_movbcos.imp_mov_mo}, True)+" **"

ToWords ({cpt_cabgenac.imp_tot_mo})No se el tema del idioma

Problemas con Impresiones DevExpress

Página 10

Page 11: Instalación, Cambio, actualización de versión Magma .NET

Zoom In - La conversión de la cadenaSi da el error de abajo al hacer click en el renglón para que abra el detalle:

System.Exception: The following error occurred when the script in procedure xrLabel3.OnPreviewClick: La conversión de la cadena "NRO_TRANS" en el tipo 'Integer' no es válida.

Es porque está faltando el onBeforePrint con la inicialización del tag como lo explico más abajo.

Zoom In - No se encuentra el miembro público 'Row'System.Exception: The following error occurred when the script in procedure xrLabel3.OnPreviewClick: No se encuentra el miembro público 'Row' en el tipo 'String'.

Es porque está escrito en V5 y no en V6 como lo explico más abajo.

Posibles problemas surgidos de otras instalaciones1. Me faltaron campos que tendrían que haber estado, estaban en la base de prueba y no en la real para el

proformador. Correr el Migrar2. La carpeta PA no da los permisos a los usuarios y por eso no levanta.3. Me faltó correr el updateclickOnce4. Baje el bo y se fue a la mierda el PA5. Los clientes tuvieron que correr 2 veces la actualización6. los clientes tienen que ser administradores del equipo. Si pasa esto hay que hablar con farol porque el

problema está en el archivo Magma.NET\Publish\UpdateManual.vb. Comentario de Farol: Lo único que hacía para lo cual requería el permiso es que guardaba un valor en el registro y como lo hacía en la clave HKLM, necesitaba ese permiso. Pero no necesitamos más ese valor por lo tanto comenté esa línea y ahora te funciona bien.

7. Error en la MGCalculadora:a. Msscript b. Mghost32

c: Windows syswow64>regsvr32 msscript.ocx

Página 11

Page 12: Instalación, Cambio, actualización de versión Magma .NET

Esto da porque no tenes permisos de administrador aunque seas administrador. Tenes que levantar el cmd con el botón de la derecha run as administrator y volver a ejecutar el regsvr32.

Puede no estar copiado el MGHost32.exe en la carpeta servidor o puede que no sea la versión correcta. Hablarlo directamente con Carlos Sanz.---------------------------Generacion de Notas de Cobro ---------------------------Retrieving the COM class factory for component with CLSID {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} failed due to the following error: 80040154.---------------------------OK ---------------------------

Está mal la versión del mghost32.

8. The device is not ready.Este error me dio en el PAWIN de claro.Ver a donde apunta esto:SELECT valor_gral FROM mt_param_grales WHERE param_gral='Camino_logo_rep'

9. No aparece el logo de magma en el menú inicio dentro de Magma sino dentro de la carpeta Microsoft.

El "???.vbproj" es el archivo que tenes que editar

Y agregar una línea después de donde dice:

<ProductName>Magma.NET</ProductName>

Que diga:

<PublisherName>Magma</PublisherName>

Guardás y ejecutás "ActualizarClickonce.bat"

Página 12

Page 13: Instalación, Cambio, actualización de versión Magma .NET

10. No connection could be made because the target machine actively refused it <ip:port>

Paré el servicio de magma. Verifiqué que en el task manager se baje (tardo 30 segundos + o - ) inicié de nuevo y salió andando.

Verificar licencias

Archivo licNet.mgmPara controlar las licencias usa un archivo encriptado que se llama servidor\licNet.mgm

Lo arma Carlos Sanz con la mac address del servidor. Para obtener los datos hay que ejecutar el comando de DOS:

ipconfig /all >c:\agg.txt

y enviarle el archivo resultante por mail a Carlos.

El archivo licNet.mgm tiene un formato parecido al que se copia abajo. Si se lo modifica de cualquier manera, deja de funcionar. Los parámetros que hay que controlar son la mac address del servidor y la cantidad de licencias por subsistema.También pueden dejarse usuarios que no se consideran dentro de las licencias por ser el usario que ejecuta el servicio pero no es un usuario real.

t µwÄÎ4#’IþBÎB'ÞßØ#Êsñ� iŒ„°¦¦Ñ™Òo^ñSÁ²aŠøGó2ƒ¡lëVú…cö3Ë÷-ž"¬Ô;� � � � �¦âûJAÈôËñÿð'òjnÚˆ/-AoùãÀêó5ŸçLÚ©‰µª~hS*AÈŸ^¶3�<?xml version="1.0"?><LicensesData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Subsystems> <LicensesSubsystemsData> <SubSystem>BackOffice</SubSystem>

<Server>00-14-38-50-12-E6</Server>

<Licenses>15</Licenses> <Expiration>0001-01-01T00:00:00</Expiration> <CheckUsersInDifferentTerminals>true</CheckUsersInDifferentTerminals> <SpecialUsers>

<string>magmatools</string> </SpecialUsers> </LicensesSubsystemsData> <LicensesSubsystemsData> <SubSystem>PA</SubSystem> <Server>00-14-38-50-12-E6</Server>

<Licenses>90</Licenses> <Expiration>0001-01-01T00:00:00</Expiration> <CheckUsersInDifferentTerminals>true</CheckUsersInDifferentTerminals> <SpecialUsers>

<string>magmatools</string> </SpecialUsers> </LicensesSubsystemsData>

Página 13

Page 14: Instalación, Cambio, actualización de versión Magma .NET

</Subsystems></LicensesData>

Consulta de control de licenciasEsta consulta obtiene si un usuario 'carlos' tiene una licencia válida.La subconsulta dice como se obtienen los usuarios con licencia, toma los primeros N que dice el archivo, ordenados por fecha. La cantidad de usuarios que dice la licencia se cambia en la subconsulta donde dice TOP

SELECT count(*) FROM gl_usuarios WHERE usuario = 'carlos' AND usuario IN( SELECT TOP (57) usuario FROMgl_usuarios, mg_permisos_gen WHEREgl_usuarios.usuario = mg_permisos_gen.sujeto ANDmg_permisos_gen.licencia = 'S' AND mg_permisos_gen.valor_permiso = 'S' AND mg_permisos_gen.objeto = 'mgexplorer'AND NOT gl_usuarios.usuario IN ('usuariosespeciales')ORDER BY gl_usuarios.fecha_alta)

Consulta para analizador de licenciasPrimera versión colgada del mg_permisos_gen.

select ROW_NUMBER() OVER (ORDER BY u.fecha_alta), * from mg_permisos_gen p

join gl_usuarios u on u.usuario = p.sujeto

where p.licencia = 'S' AND p.valor_permiso = 'S' AND p.objeto = 'mgexplorer'AND NOT u.usuario IN ('magma')order by u.fecha_alta

Actualización V5 a V6ALTER TABLE mg_reportes ADD version char(16)ALTER TABLE gl_fm_oper ADD ejecuta_pos char(10)

Instalación y configuración del ClickOnce1. Poner el archivo publish.exe bajo el directorio raíz de Magma.Net (c:\magma.net5, por ej.)2. Ejecutar publish.exe3. Ver si hay que renombrar paths en los archivos .vbs (donde dice const K_PATH).

Debe tener bien los paths de instalación a donde se halla instalado la aplicación.Ej:

const K_PATH="c:\magma.net5\publish"cambiarlo x const K_PATH="c:\program files\magma.net\publish"

También hay que verificarlo en actualizarclickonce.bat.4. En el ClickOnce-Incrementa-Revision-Number.vbs tiene que decir

f1 = es el user … \MGCliente.vbproj.user"f2 = lo mismo pero con un 2 atrás …\MGCliente.vbproj.user2"f3 = es el html original … \Publish\Publish.htm"f4 = es el html definitivo … \Publish\bin\Debug\MGClient.publish\Publish.htm"

5. En archivo MGCliente.vbprojEn 3 lugares dice TERO, hay que poner la máquina con directorio virtual, que casi siempre es la misma del magmaservice

6. Hacer Web Sharing de directorio Magma.NET5\Publish\bin\debug\MGCliente.publish (Botón derecho, sharing… aparece solapa web sharing)

Página 14

Page 15: Instalación, Cambio, actualización de versión Magma .NET

*ponerle nombre de vbproj = ej MGCliente5 [http://tero/MGCliente]* Si este directorio no está, correr ActualizarClickOnce que lo crea

7. ir a iis, en MGCliente5*Directory Security/Edit../ enable annonymous access*Documents remover los nombres que haya y agregar publish.htm

8. para que el cliente se lo instale, pasarles el directorio virtualhttp://.... (el mismo que dice el vbproj

9. contraseña al ejecutar click once la primera vez magmamagma

Programación

Servicios

Arroba en los parámetrosSi como parámetro de un servicio hay que poner arroba, generalmente para las direcciones de mail, hay que reemplazarlo por un char(64) porque si no lo toma como un campo de la pantalla.

Ej: select * from tabla where campo like '%' + CHAR(64) +'accenture.com'

Ingreso por teclado en MayusculasSi por ejemplo el usuario tiene que ingresar el código de empresa assa y queres que salga ASSA, en la máscara de entrada solo poner el símbolo mayor >

Formularios de MantenimientoVer en gdrive\Magma\Formularios - Pruebas generales para aprobar un formulario.gdoc

Ver en gdrive\Magma\Formularios - Configuración de servicios.gdoc

Formularios de ReportesEspecíficamente en la conversión de V4 a V5/6 hay que reemplazar los imports de todos los reportes y fuentes en general.

Los que tienen código incrustado hay que cambiar:Dice Debe decirMagma.BO.Business.ReportesYProcesos.ComponenteBase

Magma.Tools.Extensiones.Business.ReportesYProcesos.ComponenteBase

Imports SystemImports System.DataImports System.CollectionsImports Microsoft.VisualBasic

Imports Magma.BO.Entities.ReportesYProcesosImports Magma.Core.DataServices

Imports SystemImports System.DataImports System.CollectionsImports Microsoft.VisualBasic

Imports Magma.Tools.Core.Business.Cultures.LiteralsImports Magma.Tools.Core.Business.DataServices

Página 15

Page 16: Instalación, Cambio, actualización de versión Magma .NET

Imports Magma.Core.Common.ExceptionsImports Magma.Core.Cultures.LiteralsImports Magma.Core.Common.DataServices.TypeFormatImports Magma.Core.Common.SecurityImports Magma.Core.Security

Imports Magma.Tools.Core.Common.DataServices.TypeFormatImports Magma.Tools.Extensiones.Entities.ReportesYProcesosImports Magma.Tools.Extensiones.Business.ReportesYProcesosImports Magma.Tools.Extensiones.Business.ReportesYProcesos.HelperImports Magma.Tools.Core.Common.Security

Imports Magma.Core.Common.Exceptions Imports Magma.Tools.Core.Common.Exceptions

Código en formularios, proceso y analizadores

LOG viejo:Primero hay que declarar las variables privadas:

Private _idRp As Integer Private _componente As String Private _usuario As String Private _terminal As String

Después, para manejar más fácil la función declarar esto:

Private Sub _Loguear(ByVal argMensaje As String) Loguear(_idRp, _componente, _usuario, argMensaje) End Sub

Dentro de la función principal (Ejecutar) cargar las variables

_idRp = Helper.ObtenerValorCampo(argCamposUI, "id_rp") _componente = Helper.ObtenerValorCampo(argCamposUI, "componente") _usuario = Helper.ObtenerValorCampo(argCamposUI, "usuario_mod") _terminal = CType(Thread.CurrentPrincipal, MagmaPrincipal).Terminal.Substring(0, 4)

Para loguear algo:

_Loguear("No Hay Registros")

LOG nuevo:Para loguear algo:

Loguear("No Hay Registros")

Debug:debug.AgregarLinea("com " & drInserto("com_mov"))debug.Apagar

Includes Nuevos

Imports SystemImports System.DataImports System.Collections

Página 16

Page 17: Instalación, Cambio, actualización de versión Magma .NET

Imports Microsoft.VisualBasic

Imports Magma.Tools.Core.Business.Cultures.LiteralsImports Magma.Tools.Core.Business.DataServicesImports Magma.Tools.Core.Common.DataServices.TypeFormat ‘ToSQLImports Magma.Tools.Extensiones.Entities.ReportesYProcesosImports Magma.Tools.Extensiones.Business.ReportesYProcesosImports Magma.Tools.Extensiones.Business.ReportesYProcesos.Helper ‘ObtenerValorCampo 'ObtenerNombreTemporal 'BorrarTablaTemporalImports Magma.Tools.Core.Common.SecurityImports Magma.Tools.Core.Common.Exception‘MagmaExceptionImports Magma.Tools.Util.Common.Datos ’NotDBNull 'EsVacioImports Magma.Tools.core.Common.DataServices ’ SQLCommand SQLParameters

Herramientas de programaciónComo obtener las condiciones específicas de una tabla.

Dim hashFiltros As Hashtable = ArmarCondicionesFiltrosPorTabla(argCamposUI) If hashFiltros.ContainsKey("cpf_contabilidad") Then If argCondicionesSQL.Trim <> "" Then argCondicionesSQL &= " AND " argCondicionesSQL &= hashFiltros("cpf_contabilidad") End If

Como meter una fecha de un parámetro en una consulta.

Dim fechaCobranza As DatefechaCobranza = Helper.ObtenerValorCampo(argCamposUI, "fec_hasta")sqlText = " INSERT INTO " & tablaTemp & " (cod_empl, imp_hs_cobradas, " & _

" hs_cobradas, nro_doc) " & _ " SELECT cod_empl, SUM(total_fact_USD+fact_hs_adic), " & _ " SUM(total_hs_fact+total_hs_adic), nro_doc " & _ " FROM v_rep_horas " & where & _ " AND v_rep_horas.fec_doc <= '" & fechaCobranza & "' " & _ " GROUP BY cod_empl, nro_doc"

SQL.EjeCmd (sqlText)

Como verificar si un campo está vacio. La función EsVacio está en Magma.Tools.Util.Common.Datos

If (Not EsVacio(argCamposUI("fec_fin").Valor)) AndAlso CDate(argCamposUI("fec_fin").Valor) < CDate(dr("fec_finq")) Then

fecFin = CDate(argCamposUI("fec_fin").Valor)Else

fecFin = CDate(dr("fec_finq"))End If

Como validar los parámetros antes de ejecutar:

Lanzar excepciones.

Crystal Reports

Como ponerles ZoomInEl reporte tiene que tener una fórmula en blanco que se llame zoomin.

Página 17

Page 18: Instalación, Cambio, actualización de versión Magma .NET

Cada campo al que se le quiera agregar el zoom tiene que tener la propiedad de hipervínculo así:

Poner en la fórmula del hipervínculo, la fórmula @zoomin. El resto lo maneja solo el motor. En la tabla base del reporte tienen que estar los campos Formulario y nro_trans.

DevExpress

Como poner un subreporte:

En el reporte principalLos parámetros que se van a pasar al subreporte deben estar en el SELECT del origen de datos.Tanto los parámetros como los campos del script deben estar escritos en mayúsculas.Pasar los parámetros:Public Sub ActualizarValorParametro (ByVal sender As Object, ByVal argNomFormula As String, ByVal argValor As String) CType(sender.ReportSource, Magma.TOOLS.ReportesYProcesos.UIC.DevExp.rptMagmaBaseStdSR).Formulas(argNomFormula) = argValorEnd Sub

Private Sub Profesionales_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)

If GetCurrentColumnValue("COD_PRO_JOB") <> Nothing then ActualizarValorParametro (sender, "NRO_TRANS", GetCurrentColumnValue("NRO_TRANS")) ActualizarValorParametro (sender, "COD_PRO_JOB", GetCurrentColumnValue("COD_PRO_JOB")) ActualizarValorParametro (sender, "COD_TIT", GetCurrentColumnValue("COD_TIT"))

end if

End Sub

En el subreporteLos campos que se unen al reporte principal deben estar en el SELECT del origen de datos.Tanto los parámetros como los campos del script deben estar escritos en mayúsculas.

Private Sub MGHsFacturadasProvincias_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)

sender.FilterString = " NRO_TRANS = " & Sender.Report.Formulas("NRO_TRANS") & " AND COD_TIT = " & Sender.Report.Formulas("COD_TIT") & " AND COD_PRO_JOB = '" & Sender.Report.Formulas("COD_PRO_JOB") & "' "End Sub

Private Sub MGHsFacturadasProvincias_AfterPrint(ByVal sender As Object, ByVal e As System.EventArgs)

Página 18

Page 19: Instalación, Cambio, actualización de versión Magma .NET

sender.filterString =""End Sub

Como ponerles ZoomInPrivate Sub xrLabel24_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)' **** Zoomin ****sender.Tag = GetCurrentRow()' **** Zoomin ****End Sub

Private Sub xrLabel24_PreviewClick(ByVal sender As Object, ByVal e As DevExpress.XtraReports.UI.PreviewMouseEventArgs)' **** Zoomin ****sender.Report.Zoomin(e.Brick.Value.Row("NRO_TRANS"), e.Brick.Value.Row("FORMULARIO"))'sender.Report.Zoomin(e.Brick.Value("NRO_TRANS"), e.Brick.Value("FORMULARIO"))' **** Zoomin **** End SubEn V5 va sin el .Row después del Value pero en V6 es obligarorio.Para que funcione, tienen que estar los 2, el BeforePrint y el PreviewClick

Zoomin a manoPrivate Sub _Zoomin(ByVal sender As Object,ByVal argNroTrans As String, ByVal argFormulario As String)        Dim mistr As String = ""

        Try            '23/07/10 The given key was not present in the dictionary. al ejecutar zooming mdr,            'si no existe parámetro camino zooming, ejecuto mgexplorer local            If sender.Report.Formulas.ContainsKey("__appPathDX") Then

                mistr = sender.Report.Formulas("__appPathDX")

            Else

                mistr = "MGExplorer.exe"

            End If

            mistr &= " -F " & argFormulario.ToString.Trim & ";Visualizacion;nro_trans=" & argNroTrans

            If sender.Report.Formulas.ContainsKey("__sessionID") Then

                mistr &= " -L " & sender.Report.Formulas("__sessionID").ToString.Trim

            End If           

            Shell(mistr, AppWinStyle.NormalFocus)

        Catch ex As Exception

            Dim ex1 As New Exception(ex.Message & ControlChars.CrLf & mistr, ex)

            Throw ex1

        End Try

 

    End Sub

Como traducir los encabezadosdbo.Traducir('Totales Cliente-Cuenta', D.lenguaje) AS TtotCliCta,(ver la función traducir en la base de EBV)

Como recuperar un valor de la tabla principal:GetCurrentColumnValue("IMP_MOV_ING")

Página 19

Page 20: Instalación, Cambio, actualización de versión Magma .NET

Como recuperar el valor de una fórmula:sender.Text = sender.Report.Formulas("Empresa")

Como verificar que un campo tenga valor: If GetCurrentColumnValue("IMP_MN") = Nothing then

Como dar formato a un texto:sender.text = String.format("{0:n0}", GetCurrentColumnValue("IMP_GS"))

Como ocultar un subreporte si no tiene datos:Imports System.DataDim imprimeDirecta As Boolean = TruePrivate Sub OnBeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)

Dim ds As DataSet = CType(sender.Report.DataSource, DataSet)If Not ds.Tables("Detalle_M_OPagoVariosProjoBemp") Is Nothing Then

Dim dv As New DataView(ds.Tables("Detalle_M_OPagoVariosProjoBemp")) imprimeDirecta = dv.Count > 0

Else imprimeDirecta = False

End IfEnd Sub

Sobre el subreporte:Private Sub OnBeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)If Not imprimeDirecta Then

sender.visible = FalseEnd IfEnd Sub

O esta es más fácil solo en el subreporte:

Private Sub Sub_Bcos_Recibo_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) If GetCurrentColumnValue("IMP_MN") = Nothing then sender.visible=False else sender.visible=True end if End Sub

Como ocultar un campo:En la función onBeforePrint Sender.Visible = True If GetCurrentColumnValue("IMP_MOV_ING").Trim = "0" Then Sender.Visible = False End If

Como dar formato a un campo:sender.text = String.format("{0:n}", importeAcumulado)

Como mostrar un valor :System.Windows.Forms.MessageBox.Show(“xxx”)

Como poner un importe en letras:sender.text= "Son " + importeenletras(GetCurrentColumnValue("MOSTRARTOTAL"),"SP") + " pesos"

Página 20

Page 21: Instalación, Cambio, actualización de versión Magma .NET

Public Function ImporteEnLetras(ByVal argNumero As Decimal, ByVal argIdioma As String) As String Try ' Redondeo en 2 decimales argNumero = Math.Round(argNumero, 2) Dim parteEntera As Int64 = Math.Truncate(argNumero) Dim cents As Integer = (argNumero - parteEntera) * 100 Dim result As String = "" Select Case argIdioma.ToUpper.Trim Case "EN" ' Inglés result = _IntegerToWords(parteEntera) If cents > 0 Then result = result.trim & " and " & cents & "/100" Case Else ' Español result = _EnteroAPalabras(parteEntera) If cents > 0 Then result = result.trim & " con " & cents & "/100" End Select Return result Catch ex As Exception Throw End Try End Function ''' <summary> ''' Retorna un string representando el número argNumero en palabras. ''' </summary> Private Shared Function _IntegerToWords(ByVal argNumero As Int64) As String Try If argNumero < 0 Or argNumero > System.Int64.MaxValue Then Throw New Exception("El número está fuera del rango soportado por la función (0 - " & System.Int64.MaxValue.ToString & ")") End If If argNumero = 0 Then Return "zero" Dim result As String = "" If argNumero > 999 Then Dim place(4) As String Dim mult(4) As Int64 place(0) = " thousand " : mult(0) = 1000 place(1) = " million " : mult(1) = 1000000 place(2) = " billion " : mult(2) = 1000000000 place(3) = " trillion " : mult(3) = 1000000000000 Dim aux As Int64 Dim resto As Int64 = argNumero Dim units As Integer For i As Integer = 3 To 0 Step -1 If resto >= mult(i) Then aux = (resto \ mult(i)) resto = resto - (aux * mult(i)) If aux > 0 Then result = result & _HundredsToWords(aux) & place(i) End If End If Next units = argNumero - (argNumero \ 1000) * 1000 If units > 0 Then result = result & _HundredsToWords(units) Else result = _HundredsToWords(argNumero) End If Return result Catch ex As Exception Throw End Try End Function ''' <summary> ''' Retorna un string representando el número argNumero en palabras. ''' </summary> Public Shared Function _EnteroAPalabras(ByVal argNumero As Int64) As String Try If argNumero < 0 Or argNumero > System.Int64.MaxValue Then Throw New Exception("El número está fuera del rango soportado por la función (0 - " & System.Int64.MaxValue.ToString & ")") End If If argNumero = 0 Then Return "cero" Dim result As String = ""

Página 21

Page 22: Instalación, Cambio, actualización de versión Magma .NET

If argNumero > 999 Then Dim place(2) As String Dim mult(2) As Int64 place(0) = " mil " : mult(0) = 1000 place(1) = " millón " : mult(1) = 1000000 place(2) = " billón " : mult(2) = 1000000000000 'Dim place(4) As String 'Dim mult(4) As Int64 'place(0) = " mil " : mult(0) = 1000 'place(1) = " millón " : mult(1) = 1000000 'place(2) = " billón " : mult(2) = 1000000000 'place(3) = " trillón " : mult(3) = 1000000000000 Dim aux As Int64 Dim resto As Int64 = argNumero Dim units As Integer For i As Integer = 2 To 0 Step -1 If resto >= mult(i) Then aux = (resto \ mult(i)) resto = resto - (aux * mult(i)) If aux > 0 Then If aux = 1 Then result = result & _EnteroAPalabras(aux) & place(i) Else result = result & _EnteroAPalabras(aux) & place(i).Replace("ón", "ones") End If End If End If Next units = argNumero - (argNumero \ 1000) * 1000 If units > 0 Then result = result & _EnteroAPalabras(units) Else result = _CientosAPalabras(argNumero) End If result = result.Replace("uno mil", "un mil") result = result.Replace("uno billón", "un billón") Return result Catch ex As Exception Throw End Try End Function Private Shared Function _HundredsToWords(ByVal argNumero As Integer) As String Try If argNumero < 1 Or argNumero > 999 Then Throw New Exception("El número está fuera del rango soportado por la función auxiliar CientosAPalabras(1 - 999)") End If Dim result As String = "" ' The range is from 1 to 999. Dim units As Integer Dim hundreds As Integer = argNumero \ 100 units = argNumero - (hundreds * 100) If hundreds > 0 Then result = _HundredsToWords(hundreds) + " hundred" If units > 0 Then result = result + " " + _HundredsToWords(units) End If Else ' The range is from 1 to 99. If units = 1 Then : result = "one" ElseIf units = 2 Then : result = "two" ElseIf units = 3 Then : result = "three" ElseIf units = 4 Then : result = "four" ElseIf units = 5 Then : result = "five" ElseIf units = 6 Then : result = "six" ElseIf units = 7 Then : result = "seven" ElseIf units = 8 Then : result = "eight" ElseIf units = 9 Then : result = "nine" ElseIf units = 10 Then : result = "ten" ElseIf units = 11 Then : result = "eleven" ElseIf units = 12 Then : result = "twelve" ElseIf units = 13 Then : result = "thirteen" ElseIf units = 14 Then : result = "fourteen" ElseIf units = 15 Then : result = "fifteen"

Página 22

Page 23: Instalación, Cambio, actualización de versión Magma .NET

ElseIf units = 16 Then : result = "sixteen" ElseIf units = 17 Then : result = "seventeen" ElseIf units = 18 Then : result = "eighteen" ElseIf units = 19 Then : result = "nineteen" Else ' The range is from 20 to 99 Dim tens As Integer = units \ 10 units = units - (tens * 10) If tens = 2 Then : result = "twenty" ElseIf tens = 3 Then : result = "thirty" ElseIf tens = 4 Then : result = "forty" ElseIf tens = 5 Then : result = "fifty" ElseIf tens = 6 Then : result = "sixty" ElseIf tens = 7 Then : result = "seventy" ElseIf tens = 8 Then : result = "eighty" ElseIf tens = 9 Then : result = "ninety" End If If units > 0 Then result = result + " " + _HundredsToWords(units) End If End If End If Return result Catch ex As Exception Throw End Try End Function Public Shared Function _CientosAPalabras(ByVal argNumero As Integer) As String Try If argNumero < 1 Or argNumero > 999 Then Throw New Exception("El número está fuera del rango soportado por la función auxiliar CientosAPalabras (1 - 999)") End If Dim result As String = "" ' The range is from 1 to 999. Dim units As Integer Dim hundreds As Integer = argNumero \ 100 units = argNumero - (hundreds * 100) If hundreds > 0 Then ' hundreds va de 1 a 9 Select Case hundreds Case 1 If units = 0 Then result = "cien" Else result = "ciento" End If Case 2 : result = "doscientos" Case 3 : result = "trescientos" Case 4 : result = "cuatrocientos" Case 5 : result = "quinientos" Case 6 : result = "seiscientos" Case 7 : result = "setecientos" Case 8 : result = "ochocientos" Case 9 : result = "novecientos" End Select If units > 0 Then result = result + " " + _CientosAPalabras(units) End If Else ' The range is from 1 to 99. If units = 1 Then : result = "uno" ElseIf units = 2 Then : result = "dos" ElseIf units = 3 Then : result = "tres" ElseIf units = 4 Then : result = "cuatro" ElseIf units = 5 Then : result = "cinco" ElseIf units = 6 Then : result = "seis" ElseIf units = 7 Then : result = "siete" ElseIf units = 8 Then : result = "ocho" ElseIf units = 9 Then : result = "nueve" ElseIf units = 10 Then : result = "diez" ElseIf units = 11 Then : result = "once" ElseIf units = 12 Then : result = "doce"

Página 23

Page 24: Instalación, Cambio, actualización de versión Magma .NET

ElseIf units = 13 Then : result = "trece" ElseIf units = 14 Then : result = "catorce" ElseIf units = 15 Then : result = "quince" ElseIf units = 16 Then : result = "dieciseis" ElseIf units = 17 Then : result = "diecisiete" ElseIf units = 18 Then : result = "dieciocho" ElseIf units = 19 Then : result = "diecinueve" Else ' The range is from 20 to 99 Dim tens As Integer = units \ 10 units = units - (tens * 10) If tens = 2 Then If units = 0 Then result = "veinte" Else result = "veinti" End If ElseIf tens = 3 Then : result = "treinta" ElseIf tens = 4 Then : result = "cuarenta" ElseIf tens = 5 Then : result = "cincuenta" ElseIf tens = 6 Then : result = "sesenta" ElseIf tens = 7 Then : result = "setenta" ElseIf tens = 8 Then : result = "ochenta" ElseIf tens = 9 Then : result = "noventa" End If If units > 0 Then If tens = 2 Then result = result + _CientosAPalabras(units) Else result = result + " y " + _CientosAPalabras(units) End If End If End If End If Return result Catch ex As Exception Throw End Try End Function

Página 24

Page 25: Instalación, Cambio, actualización de versión Magma .NET

Seguridad

Consulta que controla la seguridad

WITH CTE_SUJETOS AS ( SELECT CONVERT(CHAR(16),h_gl_perfiles.usuario) as sujeto, 1 as hoja, gl_nodos.nodo as nodo, gl_nodos.nodo as nodo_padre, 0 as pos, ROW_NUMBER() OVER (ORDER BY gl_nodos.fecha_mod DESC) AS id_camino FROM gl_nodos INNER JOIN h_gl_perfiles ON gl_nodos.nodo = h_gl_perfiles.nodo WHERE gl_nodos.clasificacion = 'gl_perfiles' AND h_gl_perfiles.usuario = 'gastono' UNION ALL SELECT CTE_SUJETOS.sujeto as sujeto, 0 as hoja, gl_nodos.nodo as nodo, gl_nodos.nodo_padre , CTE_SUJETOS.pos + 1, CTE_SUJETOS.id_camino FROM gl_nodos INNER JOIN CTE_SUJETOS ON CTE_SUJETOS.nodo_padre = gl_nodos.nodo WHERE NOT (CTE_SUJETOS.nodo = 0 AND CTE_SUJETOS.hoja = 0) AND gl_nodos.clasificacion = 'gl_perfiles' ) , CTE_OBJETOS AS ( SELECT CONVERT(CHAR(16),h_gl_nivel_proceso.proceso) as objeto, 1 as hoja, gl_nodos.nodo as nodo , gl_nodos.nodo as nodo_padre, 0 as pos, ROW_NUMBER() OVER (ORDER BY gl_nodos.fecha_mod DESC) AS id_camino FROM gl_nodos INNER JOIN h_gl_nivel_proceso ON gl_nodos.nodo = h_gl_nivel_proceso.nodo WHERE gl_nodos.clasificacion = 'gl_nivel_proceso' AND h_gl_nivel_proceso.proceso = 'MGSeguridad' UNION ALL SELECT CTE_OBJETOS.objeto as objeto, 0 as hoja, gl_nodos.nodo as nodo, gl_nodos.nodo_padre , CTE_OBJETOS.pos + 1, CTE_OBJETOS.id_camino FROM gl_nodos INNER JOIN CTE_OBJETOS ON CTE_OBJETOS.nodo_padre = gl_nodos.nodo WHERE NOT (CTE_OBJETOS.nodo = 0 AND CTE_OBJETOS.hoja = 0) AND gl_nodos.clasificacion = 'gl_nivel_proceso' ) , TODOS_PERMISOS AS ( SELECT CTE_SUJETOS.sujeto,CTE_OBJETOS.objeto,CTE_SUJETOS.id_camino as id_camino_sujeto,CTE_SUJETOS.pos as pos_sujeto, CTE_OBJETOS.id_camino as id_camino_objeto,CTE_OBJETOS.pos as pos_objeto, mg_permisos.valor_permiso,mg_permisos.operacion, mg_permisos.fec_vig_ini, mg_permisos.fec_vig_fin, '(' + mg_permisos.sujeto + ',' + CONVERT(varchar(6),mg_permisos.nodo_sujeto) + ',' + mg_permisos.objeto + ',' + CONVERT(varchar(6),mg_permisos.nodo_objeto) + ',' + mg_permisos.operacion + ',' + mg_permisos.valor_permiso + ')' as origen FROM mg_permisos INNER JOIN CTE_SUJETOS ON ((mg_permisos.sujeto = CTE_SUJETOS.sujeto AND CTE_SUJETOS.hoja = 1) OR (mg_permisos.nodo_sujeto = CTE_SUJETOS.nodo AND CTE_SUJETOS.hoja = 0)) INNER JOIN CTE_OBJETOS ON ((mg_permisos.objeto = CTE_OBJETOS.objeto AND CTE_OBJETOS.hoja = 1) OR (mg_permisos.nodo_objeto = CTE_OBJETOS.nodo AND CTE_OBJETOS.hoja = 0)) WHERE cod_auth_conf = 'procxuser' AND operacion IN ('TODOS','Ejecución') ) , PRIORITARIOS_PERMISOS AS ( SELECT min(pos_sujeto) as pos_sujeto ,min(pos_sujeto * 100 + pos_objeto) - min(pos_sujeto) * 100 as pos_objeto ,id_camino_sujeto,id_camino_objeto FROM TODOS_PERMISOS GROUP BY id_camino_sujeto,id_camino_objeto ) , PERMISOS_CAMINOS AS ( SELECT TODOS_PERMISOS.sujeto,TODOS_PERMISOS.objeto,TODOS_PERMISOS.id_camino_sujeto, TODOS_PERMISOS.id_camino_objeto, TODOS_PERMISOS.valor_permiso, TODOS_PERMISOS.fec_vig_ini, TODOS_PERMISOS.fec_vig_fin, CASE WHEN TODOS_PERMISOS.pos_sujeto = 0 AND TODOS_PERMISOS.pos_objeto = 0 THEN 'S' ELSE 'N' END as permiso_directo, origen FROM TODOS_PERMISOS INNER JOIN PRIORITARIOS_PERMISOS ON TODOS_PERMISOS.pos_sujeto = PRIORITARIOS_PERMISOS.pos_sujeto AND TODOS_PERMISOS.pos_objeto = PRIORITARIOS_PERMISOS.pos_objeto AND TODOS_PERMISOS.id_camino_sujeto = PRIORITARIOS_PERMISOS.id_camino_sujeto AND TODOS_PERMISOS.id_camino_objeto = PRIORITARIOS_PERMISOS.id_camino_objeto ) SELECT rtrim(sujeto) as sujeto ,rtrim(objeto) as objeto ,min(valor_permiso) as permiso, max(fec_vig_ini) as fec_vig_ini, min(fec_vig_fin) as fec_vig_fin, max(permiso_directo) as permiso_directo FROM PERMISOS_CAMINOS GROUP BY sujeto,objeto ORDER BY permiso,sujeto,objeto

Página 25

Page 26: Instalación, Cambio, actualización de versión Magma .NET

Mantenimiento

Higiene de la base de datosVer archivo gdrive\Higiene de las bases de datos.doc

Incluye:

Borrar temporales Control de modificaciones Tamaño de las tablas Verificar estado de la base y del diccionario de datos Consistencia en formularios chequeo de inconsistencias

Formularios Importantes

EmpleadosVerficar que el user_id sea único con un valNoSQL

SELECT 1 FROM ct_empleados WHERE user_id = @DatosGrales.Asis_ct_empleado.ct_empleados:user_id AND cod_empl <> @DatosGrales.Asis_ct_empleado.ct_empleados:cod_empl

Libro MayorPara probar que el libro mayor funcione correctamente hay que hacer una consulta sobre la base de datos de la contabilidad verificar los siguientes puntos:

Problema Resultado esperado Consulta SQLTransporte entre páginas Que el transporte arrastre el valor

correctoBuscar una cuenta que dentro del período tenga tantos registros como para saltar de página.

Saldo Inicial Verificar que una cuenta que tenga un saldo inicial a una determinada fecha, que no tengan movimientos en el período y que no sea la primera cuenta del reporte, muestre correctamente el saldo y que no muestre detalle.

Buscar una cuenta sin movimiento en el período con un saldo inicial. Pedir todas las cuentas en ese período.

Proformador

Provincias1. Agregar el parámetro general prof_HsGsXProv, Usa Hs y Gs por provincia en ‘S’ (char_1)

Página 26

Page 27: Instalación, Cambio, actualización de versión Magma .NET

2. Agregar el campo cod_provincia en las tablas cpf_horas_em, cps_hs_gs, cpp_proformas, sa_hs_gs, cpt_cabproformas

3. Modificar los triggers de las tablas cpf_horas_em, cps_hs_gs para que consideren el campo cod_provincia.

FacturaTodos los formularios de factura tienen que tener en el inicconsulta de la letra poner:

No se encuetra la letra del documento para este tipo de responsable frente al ivaselect letra_doc from ct_tipoempiva where cod_tipo_emp_iva = @General.Cabezal.ct_impuxtit:cod_tipo_emp_ivaVer ejemplo en EBV.

FacturaAutom

Factura_Clientes

Factura Electrónica

Instalación1. Se agregaron los siguientes parámetros en el .config:

nombreTablaConsultaCae: Es el nombre de la tabla donde se consultará sobre si el registro ya tiene CAE.

<add key="nombreTablaConsultaCae" value="cpt_cabgenac" />campoCae: Es el campo por el cual se filtra para consultar por el valor del CAE.

<add key="campoCae" value="(cae is not null and cae != ' ') and nro_trans = $TRANS" />

Esta modificación corrige el tema de que si dos usuarios tienen abierta la aplicación con los mismos registros y uno de ellos factura y el otro antes de facturar no refrescó la grilla, entonces se enviaba el mismo registro 2 veces. Teniendo así duplicidad de facturas en la afip para un mismo nro_trans.Éstos parámetros son utilizados para comprobar si ya el nro de trans utilizado en la transacción para facturar ya tiene un nro de CAE antes de hacer el envío a la AFIP produciendo así que no se pueda volver a facturar ese registro.La idea es generar una suerte de controlar la concurrencia.

2. Se agregaron los siguientes parámetros en el .config:

nombreTablaConsultaNroFactura: Es el nombre de la vista donde se consultará la existencia del último nro de comprobante.

<add key="nombreTablaConsultaNroFactura" value="v_feultimocbte" />

Esta modificación está apuntada al caso en que si el máximo nro de comprobante para las agrupaciones "cod_emp, pto_vta, tipo_cbte" no se corresponde con el máximo nro de comprobante que tiene la AFIP entonces hay una distorción en la numeración que se tiene en Magma. Esta distorción se debíó a algún tipo de error, entonces hay que revisar el proceso.

El sistema antes del envio de la factura hacia la AFIP comprueba si el último nro de comprobante que tiene la afip es igual al máximo nro de comprobante que se tiene en magma, si es el mismo entonces prosigue con la facturación y hace el envío, caso contrario no prosigue con la facturación y guarda en la tabla fe_errores el log correspondiente.

Para el caso en que se eliga un nuevo punto de venta y la afip devuelve el valor 0 (cero) como primer número entonces se procede a facturar ya que la vista del parámetro nombreTablaConsultaNroFactura

Página 27

Page 28: Instalación, Cambio, actualización de versión Magma .NET

no devolverá regístros.

La vista que hay que crear se adjunta en el archivo comprimido, cabe mencionar que es una muestra, se deben respetar el total y nombres de campos, pero modificarla para cada necesidad de cada cliente.

3. Se encripto el .configEl archivo .config, hasta una versión posterior podía ser modificada por cualquier usuario y al estar el conection string a merced de cualquiera, una persona mal intencionada tendría la posibilidad de conocer el nombre de la base de datos, usuario y contraseña con lo que esto conlleva.

Con esta modificación al ejecutar el exe por primera vez entonces se encripta este archivo de manera que no pueda ser leido por los usuarios.

Importante : Hay que tener en cuenta que una vez encriptado no puede ser modificado por ningún usuario porque es ilegible. Entonces hay que hacer un backup de este archivo de antemano.

InstalaciónSolo agregar los nuevos parámetros en el .config y pisar los siguientes archivos:

Facturador.dll FE.Common.dll FE.Resources.dll POLFactuElec.exe

En la base de datos agregar la vista con nombre que se define en el parámetro nombreTablaConsultaNroFactura y configurarla de manera que traiga el máximo número de comprobante para un tipo de comprobante y punto de venta. Tener en cuenta que hay que respetar los nombres de los campos que están en la muestra de la vista que viene en el archivo adjunto.

ConfiguraciónEjemplo config:

<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> </configSections><startup><supportedRuntime version="v2.0.50727" /></startup><connectionStrings>

<add name="ConnStr" connectionString="Data Source=SQL-SRV2;Initial Catalog=Magma;Integrated Security=false;Persist Security Info=true;Packet Size=4096;user=sa;password=magma" /></connectionStrings>

<appSettings><add key="SQLEmpresas" value="SELECT E.cod_emp, replace(I.nro_dgi,'-','') as nro_dgi FROM ct_empresas AS E INNER JOIN

ct_paramxemp AS P ON E.cod_emp = P.cod_emp INNER JOIN ct_impuxtit AS I ON P.valor_param_char = I.cod_tit WHERE P.cod_parametro ='cod_tit_empresa'" />

<add key="NombreLogo" value="MagmaLogo.JPG" /><add key="pathCertificado" value="C:\\Factura Electronica New\\Certificado" /><add key="SCHEMA_NAME" value="dbo" /><add key="COMMAND_TIMEOUT" value="120" /><add key="WHERE" value="and 1=1" /><add key="snFiltraUsuario" value="N" /><add key="nombrevista" value="v_facturaelectronicaNew" /><add key="nombreVistaTributo" value="v_tabla_tributo" /><add key="nombreVistaOpcionales" value="v_tabla_opcionales" />

<add key="nombreVistaCbtesAsociados" value="v_tabla_cbtesasociados" /><add key="nombreVistaIva" value="v_tabla_iva" /><add key="nombreTablaEnvio" value="fe_envio" /><add key="nombreTalaResultado" value="fe_resultado" /><add key="nombreTablaErrores" value="fe_errores" /><add key="modoVerbose" value="false" />

Página 28

Page 29: Instalación, Cambio, actualización de versión Magma .NET

<add key="campoCae" value="(cae is not null and cae != ' ') and nro_trans = $TRANS" /> <add key="nombreTablaConsultaCae" value="cpt_cabgenac" />

<add key="MotorSQL" value="2005" /><add key="nombreTablaConsultaNroFactura" value="v_feultimocbte" />

</appSettings></configuration>

Certificado1. Entrar en \Factura Electronica\OpenSSL\bin2. Editar el archivo confCert.txt

a. Donde dice O = Nombre de la empresa, completarlo con la razón social que correspondeb. Donde dice SerialNumber = CUIT XXXX, remplazar las xxxx por el cuit de la empresa. Debe

quedar CUIT + espacio + 202523069363. Ejecutar “Script Generacion CSR.bat”

a. Pide 3 veces la contraseñab. Poner 3 veces los últimos 4 dígitos del cuitc. Genera el archivo

4. Mandar un mail a  [email protected] que diga:

Estimados: Adjunto el archivo para generar el certificado para el ambiente de homologación para el web service de Factura Electrónica general..

5. asdf

Errores conocidos

Serialization

ProblemaAl probar Libros de Iva en Magma.

An exception of type 'System.Runtime.Serialization.SerializationException' occurred and was caught.---------------------------------------------------------------------------------------------------07/31/2012 10:01:52Type : System.Runtime.Serialization.SerializationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Message : The input stream is not a valid binary format. The starting contents (in bytes) are: 30-78-30-30-30-31-30-30-30-30-30-30-46-46-46-46-46 ...Source : mscorlibHelp link :Data : System.Collections.ListDictionaryInternalTargetSite : Void Read(System.Runtime.Serialization.Formatters.Binary.__BinaryParser)Stack Trace :Server stack trace:   at System.Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read(__BinaryParser input)

Página 29

Page 30: Instalación, Cambio, actualización de versión Magma .NET

   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadSerializationHeaderRecord()   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage)   at Magma.Tools.ReportesYProcesos.Data.ReporteDxDALC.ObtenerReporteDX(String argNombre, Boolean argEsParaMDR)   at Magma.Tools.ReportesYProcesos.Business.DevExp.ReporteEjecucionDevExp._cargarYAjustarReporte(ReporteOProceso argReporte, Boolean argEsServImpr)   at Magma.Tools.ReportesYProcesos.Business.DevExp.ReporteEjecucionDevExp.PrepararReporte(ReporteOProceso argReporte, String argCancelGuid)   at Magma.Tools.ReportesYProcesos.ServiceInterfaces.ReporteEjecucionDXConEventosHandler.PrepararReporte(ReporteOProceso argReporte, String argCancelGuid)   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext) Exception rethrown at [0]:   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)   at Magma.Tools.ReportesYProcesos.Interfaces.ReporteEjecucionDXDef.PrepararReporte(ReporteOProceso argReporte, String argCancelGuid)   at Magma.Tools.ReportesYProcesos.UIPC.ReporteEjecucionDXUIPC.PrepararReporte(ReporteOProceso argReporte, String argCancelGuid)   at Magma.Tools.ReportesYProcesos.UIC.ReporteEjecucionWin._Preparar(CampoUIColeccion argCamposUI)   at Magma.Tools.ReportesYProcesos.UIC.ReporteEjecucionWin.PrepararAsync(MGFormularioUI argFormulario, Array argValores, Array argDescCombos, BackgroundWorker argBackgroundWorker, DoWorkEventArgs argEventArgs)   at Magma.Tools.Ejecucion.UIC.FormularioEjecucion._bgw_DoWork(Object sender, DoWorkEventArgs e) Additional Info: MachineName : STRVA5110TimeStamp : 31/07/2012 02:01:52 PMFullName : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=1.1.0.0, Culture=neutral, PublicKeyToken=nullAppDomainName : MGExplorer.exeThreadIdentity : d.aguirre.dubiniWindowsIdentity : DIR\d.aguirre.dubini

SoluciónInconsistencia de las dlls.En accenture pasaba esto y se resolvió haciendo esto:1. Bajar el servicio MagmaService en staging2. Borrar todos los archivos .dll de la carpeta Servidor3. Copiar todos los archivos dll de producción a staging4 iniciar el servicio nuevamente

Página 30

Page 31: Instalación, Cambio, actualización de versión Magma .NET

Chequeo de sintaxis

ProblemaAn exception of type 'Magma.Tools.Diccionario.Entities.DiccionarioMagmaException' occurred and was caught.----------------------------------------------------------------------------------------------------------08/01/2012 11:45:19Type : Magma.Tools.Diccionario.Entities.DiccionarioMagmaException, Magma.Tools.Diccionario.Entities, Version=5.1.6.0, Culture=neutral, PublicKeyToken=nullMessage : Error al ejecutar el comando en la base de datos. La sentencia "INSERT INTO mt_campos (campo,nombre,mensaje,notas,dominio,tipo_campo,campo_referencia,literal_columna,literal_ficha,font,color_letra,color_fondo,mascara_entrada,mascara_salida,contenedor_ole,control_grafico,modificable,nulo,visible,valor_omision,form_mantenimiento, usuario_mod,fecha_mod,terminal_mod,operacion_mod,estado_registro ) VALUES ('OPERACION_DEFECTO','OPERACION_DEFECTO','','OPERACION_DEFECTO','char_10',5,'OPERACION_DEFECTO','OPERACION_DEFECTO','OPERACION_DEFECTO','0:0:0:0:Microsoft Sans

Serif:8',2147483640,2147483643,'','','','T','S','S','S','','','d.aguirre.dubini','20120801 11:45:17','MW7V','Nuevo','A')" delovió el error "String or binary data would be truncated.The statement has been terminated."

SoluciónVerificar que los campos “campo” y “campo_referencia” sean char(100) de la gl_campos

Página 31