lunes, 28 de enero de 2019

Quitar carácter especial en consulta SQL Server


Tuve por varios días un problema que surgió por una comilla simple que SQL Server traducía como caracter especial las cuales venían de un sistema auxiliar de SAP y que cargaba por DTW, esto hacia que no pudiera hacer un Join pues las descripciones eran distintas entre un sistema y otro, como no hallaba la solución a través de alguna función o de forma nativa desde SQL Server para eliminarla y ante mi carga de trabajo que me impedía seguir buscando, decidí darle rienda suelta a mi imaginación y pues aquí les dejo mi solución, si tienen una mejor, no sean malos déjenla en los comentarios.

Utilizando el CHARINDEX y el SUBSTRING creo nuevas descripciones uniformes dentro de una tabla creada a partir de una subconsulta la cual uno con otra subconsulta con las tablas de SAP, para ya sin el caracter especial hacer el match.

select * from (
 select NOM_GEN_POL as [Nombre Poliza Sistema Aux], replace(Ref1,'Pól','Pól')  as [Nombre Poliza SAP], FECHA_GEN_POL as [Fecha Poliza], [Importe Poliza SAP]  , [Importe Poliza Sistema Aux]
from (
select CONVERT(Decimal(15,2),SUM(c.IMPORTE),2) as [Importe Poliza Sistema Aux]
,CASE when b.NOM_GEN_POL like '%PEÑ%' then SUBSTRING(b.NOM_GEN_POL,0, CHARINDEX('PEÑ', b.NOM_GEN_POL) + 2) + SUBSTRING(b.NOM_GEN_POL,CHARINDEX('PEÑ', b.NOM_GEN_POL) + 3, 20) else b.NOM_GEN_POL end as NOM_GEN_POL, b.FECHA_GEN_POL
from Sistema_Aux.dbo.RH_ENC_POL  b
inner join  Sistema_Aux.dbo.RH_POLIZA_NOMINA a on a.CLA_GEN_POL = b.CLA_GEN_POL
inner join  Sistema_Aux.dbo.RH_DET_POL_IND c on a.NUM_NOMINA = c.NUM_NOMINA
and c.TIPO_CAR_CRE = 2
and c.CLA_PERIODO = a.CLA_PERIODO
and b.FECHA_GEN_POL > '20180531'
group by b.NOM_GEN_POL, b.FECHA_GEN_POL) Tabla_Sistema_Aux
left join (
select  CONVERT(Decimal(15,2),sum(Loctotal),2) as [Importe Poliza SAP], TransCode
, CASE when Ref1 like '%PEÃ%' then SUBSTRING(isnull(Ref1,''),0, CHARINDEX('PEÃ', isnull(Ref1,'')) +2) + SUBSTRING(isnull(Ref1,''),CHARINDEX('PEÃ', isnull(Ref1,'')) + 4, 20) else Ref1 end as ref1--, RefDate
from OJDT
where  TransType = 30 and TransCode in ('NO01','FN01')
and RefDate >  '20180531'
group by transcode, Ref1)--, RefDate)
Tabla_SAP On (replace(replace(Tabla_SAP.Ref1,'Pól','Pól'), ' - [', '- [') = replace(Tabla_Sistema_Aux.NOM_GEN_POL COLLATE Modern_Spanish_CS_AS, ' - [', '- [')
 )
 ) Consulta where isnull([Importe Poliza SAP],0) <> isnull([Importe Poliza Sistema Aux],0)
order by [Fecha Poliza]

Nota: mi versión de SQL Server es 2008 R2.

TN - Validar campo de horas y minutos en SAP


Como programador descubrí el poder de las expresiones regulares y como estas te pueden salvar la vida 😅, les mostrare algo que seguramente en algún momento necesitaran ocupar, es un ejemplo de lo que se puede hacer con las expresiones regulares en SQL Server, para esto necesitaremos ocupar el operador Like.

Si requieren validar los datos de hora y minutos que ingresan sus usuarios al momento de realizar alguna transacción, esto lo pueden hacer a través del Transaction Notification, les dejo abajo el script (la parte en negrita es lo que hace la magia), espero les sea de provecho.

Saludos!.


if @object_type = '23' and @transaction_type in ('U','A')
BEGIN
if EXISTS(select DocEntry from OQUT
where Docentry = @list_of_cols_val_tab_del
and (U_Observaciones <> ''
and U_Observaciones not like  '[2][0-3]:[0-5][0-9]'
and U_Observaciones not like '[0-1][0-9]:[0-5][0-9]')
OR DATEDIFF(MINUTE,U_destino,U_Observaciones) < 0
and Series in ('16'))
begin

Set @error = 60003
Set @error_message = 'Verifique el dato a ingresar'
end
END 

Importe de reconciliación debe ser inferior a saldo vencido para esta transacción


¿Que tal?, estoy de vuelta con un caso que me surgió la semana pasada el cual a las personas que usen SAP 9.2 PL 8 o mas recientes ya no lo presentarán, ya que es un bug de SAP el cual ya fue resuelto a partir de esa versión, el mensaje de error generalmente sucede cuando se cancela un pago en dolares de una factura en dolares, esta al querer volver a generar el pago efectuado nos arroja el siguiente error: "Importe de reconciliación debe ser inferior a saldo vencido para esta transacción", buscando en Internet me encontré que lo que se tiene que hacer es informar a SAP para que nos realice un update a nuestra BD, esto nos puede demorar hasta 5 días en promedio esto si ya cubren todos los requisitos que SAP solicita, ellos se demoran hasta dos días en enviar la solución que se tiene que realizar primero en ambiente de pruebas, pero esto es posible evitarlo realizando el pago directo a cuenta a nombre del Socio de negocio y después reconciliando este con la factura, de esta forma el saldo del socio de negocio queda en cero y el pago es cubierto en su totalidad.

Espero les sea de ayuda esta solución para evitar todo el proceso con SAP, Saludos!.

jueves, 13 de diciembre de 2018

Training - Status Canceled en SAP


Si alguna vez te has preguntando que significa los tres estados del campo CANCELED, enseguida te lo muestro poniendo como ejemplo la tabla OINV:

'Y' = Facturas Canceladas
'N' = Facturas No Canceladas
'C' = Facturas que realizan la cancelación de otra previa (Esa factura previa se convertirá en una factura con estatus 'Y').

Saludos!.

jueves, 29 de noviembre de 2018

Error en el servidor de licencias SAP


Un problema que nos encontramos frecuentemente es la caída del servicio de licencias de SAP apareciando la famosa pantalla Landscape Server Selection, las causas pueden ser varias, falta de mantenimiento del servidor, reinicio del mismo, los servicios no logran levantar correctamente, perdida de conexión con la base de datos, etc.

Cualquiera que sea la causa hay momentos en que ni un reinicio nos saca del problema mientras todos los usuarios están ya encima de nosotros por que dicen "detenemos sus procesos" (en parte es verdad xD), para esto hay una forma en el que el servidor de licencias de SAP nuevamente este en servicio, primero relajarnos tomando aire y dejándolo salir, posteriormente detener los siguientes servicios de arriba hacia abajo y levantar nuevamente de abajo hacia arriba:

  • Licenca Manager
  • Sld Service
  • Tao NT Naming Service

Failed to send request to Web Service at Tool.ToolRuntime.UploadCompressedRequest(String requestId)



Después de un buen rato sin publicar pensé que esto no podía dejarlo pasar, el día de ayer surgió un error que jamás había visto en TaskCentre el cual me impedía realizar un insert:

System.Exception: Failed to send request to Web Service at Tool.ToolRuntime.UploadCompressedRequest(String requestId)
at Tool.ToolRuntime.SendRequest(XmlDocument requestXmlDoc, Boolean useMultipleTransactions, Boolean useOverrideXML)

¿Cual era el problema?, era la carga de datos en el XML!, sobrepasaba los 16 KB y el directorio temporal no se había podido crear por el servicio web, investigando del tema en Internet encontré el siguiente link el cual muestra la solución al problema diciendo que había que crearlo directamente en la siguiente dirección: C:\inetpub\wwwroot\CommunicatorWS quedando de esta forma:   C:\inetpub\wwwroot\CommunicatorWS\Temp .




martes, 7 de febrero de 2017

Error en el Landscape de SAP


Otro error con el que me encontré, fue inmediatamente después de que el servidor tuvo varias actualizaciones, el problema lo tuve en el Landscape.

Los sintomas pueden ser:

  1. Al iniciar sesión en SAP Business One 9.1 o versiones inferiores, se muestra el siguiente mensaje de error:
  2. "Hay un problema con el certificado de seguridad del servidor. El certificado de seguridad no proviene de un Autoridad certificadora. SAP Business One no puede conectarse al servidor. "
  3. "Al intentar instalar el servidor SAP Business One obtendrá el error" Autenticanción contra el servidor especificado. Error en el servidor de licencias. Compruebe su contraseña de usuario del sitio."
  4. La ventana "Elegir empresa" de SAP Business One está vacía.
  5. El sitio web SLD no está disponible y muestra un error como: Ssl_error_weak_server_ephemeral_dh_key
  6. Ha instalado recientemente actualizaciones de Windows y ya no puede conectarse a SAP Business One.
Causa:

Implementación de actualizaciones de Microsoft Windows.
Como ejemplo, las siguientes actualizaciones podrían estar causando los síntomas descritos:

Microsoft KB  |   Sistema (s) operativo (s) afectado (s)
KB3161608     |   Windows 7 SP1
KB3161606     |   Windows 8.1
KB3161608     |   Windows Server 2008 R2 SP1

Tenga en cuenta que Windows puede lanzar nuevas actualizaciones que causan problemas similares.

Solución:

La solución recomendada es actualizar a SAP Business One 9.2.
Como solución de corto plazo, para SAP Business One 9.1 solamente, puede probar lo siguiente:


  1. Haga una copia de seguridad del archivo server.xml (C: \ Archivos de programa (x86) \ SAP \ SAP Business One ServerTools \ System \ Landscape Directory \ tomcat \ conf).
  2. En Linux, el archivo server.xml se puede encontrar en la siguiente ubicación: / Usr / sap / SAPBusinessOne / Common / tomcat / conf
  3. Abra server.xml en <tomcat> \ conf
  4. Encuentre el elemento <Connector> en este xml.
  5. Cambie el valor del atributo sslEnabledProtocols a "TLSv1, TLSv1.1, TLSv1.2"
  6. Agregue un atributo nuevo ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"
  7. Después de actualizar el archivo xml, reinicie el servicio SLD.
  8. Inicie sesión en SAP Business One o vuelva a intentar la instalación de SAP Business One Server.

Aquí dejo la muestra de como se ve el nodo después de su modificación, con esto dejaran de sufrir por cada actualización del server.

<Connector SSLEnabled="true" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA" clientAuth="false" keystoreFile="C:\Program Files (x86)\SAP\SAP Business One ServerTools\Common\sapjvm_6\jre\bin\keystore.p12" keystorePass="AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAiNe6T1ScRkqWMFc1wjLAqAQAAAAOAAAASgBEAFAAQQBQAEkAAAADZgAAwAAAABAAAAAVeOw03eqQURndH2Ki7NpgAAAAAASAAACgAAAAEAAAAIx3cn4oA1MQ/yhlI8WT4ykIAAAAw3r2o62PVk8UAAAAX/2asI/OiTkM427EPXlmG/Np2f4=" keystoreType="PKCS12" maxThreads="150" port="30010" protocol="org.apache.coyote.http11.SLDHttp11Protocol" scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2,SSLv3,SSLv2Hello" sslProtocol="TLS"/>

Saludos!!.