Pareciera que al pasar el tiempo sin desarrollar con nuevas tecnologías no pegaría, pero la primera con la que me encontré inmediatamente fue con que mi sistema operativo no era compatible con Visual Estudio 2019, el mensaje que me arrojaba era el siguiente:
Esta versión de Windows no es compatible con el producto. pruebe a actualizar Windows.
Por lo que lo único que pudo arreglar este detalle, fue descargar e instalar la ultima actualización de mi sistema operativo Windows 10, en mi caso no pedía respaldo de mis datos.
Les dejo la liga de descargas para poner fin a este error de compatibilidad: https://www.microsoft.com/en-us/software-download
Saludos!.
domingo, 10 de mayo de 2020
Nuevas experiencias que compartir
¿Cómo Están?, en mi ausencia estos meses en mi blog, he podido volver a emprender con fuerzas renovadas, ahora volviendo con API REST y Angular, descubriendo nuevas formas de mapeo y construcción de bases de datos con .Net Core.
Así que volví a instalar Visual Estudio ahora 2019, Visual Code para Angular, desempolve mi cuenta en GitHub y cree otra en Jira para seguimiento de los proyectos con SCRUM.
Sigo como siempre abierto a nuevas opciones de desarrollo como Xamarin y espero pronto tener mi cuenta Azure.
Con SAP B1 inicio una nueva etapa ahora como desarrollador de AddOns con el UI API, DI API y DI Server, con base de datos en Hana.
Espero poder seguir compartiendo con ustedes mis experiencias, no olviden dejar sus comentarios ante cualquier duda, cuídense de la Pandemia.
Éxitos totales!.
Así que volví a instalar Visual Estudio ahora 2019, Visual Code para Angular, desempolve mi cuenta en GitHub y cree otra en Jira para seguimiento de los proyectos con SCRUM.
Sigo como siempre abierto a nuevas opciones de desarrollo como Xamarin y espero pronto tener mi cuenta Azure.
Con SAP B1 inicio una nueva etapa ahora como desarrollador de AddOns con el UI API, DI API y DI Server, con base de datos en Hana.
Espero poder seguir compartiendo con ustedes mis experiencias, no olviden dejar sus comentarios ante cualquier duda, cuídense de la Pandemia.
Éxitos totales!.
martes, 10 de diciembre de 2019
Inventario - Análisis de Artículos - PIVOTE
Hola!, buen día 😀... les dejo esta consulta con dos finalidades:
- Consultar en SAP la ultima entrada (fecha, total cantidad 1 año y cantidad ultima salida) y la ultima salida (fecha, total cantidad 1 año y cantidad ultima salida) de los artículos.
- Conozcas a través de un ejercicio como funciona el Pivote en SQL Server, en este caso utilizo a los almacenes que están en una misma columna para que se abra cada almacén en una solo columna una por cada almacén, de esta forma evito repeticiones en el Item de mi consulta.
Espero les ayude bastante, hasta la próxima!.
select ItemCode, ItemName, OnHand, ItmsGrpNam,[Fecha de producción],[Ultima Entrada], [Cantidad Ultima Salida], [Total Salidas]
, [Cantidad Ultima Entrada], [Total Entradas], [Ultima Salida], [ALM1], [ALM2], [ALM3],[ALM4]
from (
select a.ItemCode, a.ItemName, a.OnHand, b.ItmsGrpNam
, a.createDate as [Fecha de producción]
, (select MAX(createDate) from OINM where ItemCode = a.ItemCode and TransType in (20,69,10000071)) as [Ultima Entrada]
, (select SUM(InQty) from OINM where ItemCode = a.ItemCode and TransType in (20,69,10000071) and createDate = ( select MAX(createDate) from OINM where ItemCode = a.ItemCode and TransType in (20,69,10000071) ) ) as [Cantidad Ultima Entrada]
, (select SUM(InQty) from OINM where ItemCode = a.ItemCode and TransType in (20,69,10000071) and createDate between '20180101' and '20181231' ) as [Total Entradas 2018]
, (select MAX(createDate) from OINM where ItemCode = a.ItemCode and TransType in (60)) as [Ultima Salida]
, (select SUM(OutQty) from OINM where ItemCode = a.ItemCode and TransType in (60) and createDate = ( select MAX(createDate) from OINM where ItemCode = a.ItemCode and TransType in (60) ) ) as [Cantidad Ultima Salida]
, (select SUM(OutQty) from OINM where ItemCode = a.ItemCode and TransType in (60) and createDate between '20180101' and '20181231' ) as [Total Salidas 2018]
, c.OnHand [Stock en WHSE], a.BuyUnitMsr,a.InvntryUom, c.WhsCode
, CASE
WHEN a.validFor = 'Y' and a.frozenFor = 'N' THEN 'Activo'
WHEN a.validFor = 'N' and a.frozenFor = 'Y' THEN 'Inactivo'
EnD as Activo
from OITM a
inner join OITB b on a.ItmsGrpCod = b.ItmsGrpCod
left join OITW c on a.ItemCode = c.ItemCode
and c.WhsCode in ('ALM1', 'ALM2', 'ALM3','ALM4')
) consulta
PIVOT
(
AVG (consulta.[Stock en WHSE])
FOR WhsCode in ([ALM1], [ALM2], [ALM3],[ALM4])
)AS pvt
sábado, 7 de diciembre de 2019
Ventas - Ventas por cliente y articulo
Hola!, paso de forma muy rapída para compartirles esta consulta que me han solicitado mucho los agentes de ventas y que a ustedes les puede servir mucho de igual manera, saludos!.
c.CardName,
a.DocDate,
DATEPART(month , a.DocDate) AS Periodo,
DATEPART(YEAR , a.DocDate) AS Año,
case a.DocSubType
when 'DN' THEN 'Nota de débito'
when '--' THEN 'Factura'
END AS [Tipo de dcumento],
a.DocNum,
a.DocEntry IrDocumento,
b.ItemCode,
case a.DocType When 'S' THEN b.dscription ELSE
d.ItemName END AS ItemName,
b.Price,
case a.CANCELED
WHEN 'C' THEN case a.DocType When 'S' THEN -1 ELSE
b.Quantity * -1 END
WHEN 'N' THEN case a.DocType When 'S' THEN 1 ELSE b.Quantity
END
ELSE case a.DocType When 'S' THEN 1 ELSE b.Quantity END
END as Quantity,
case a.CANCELED WHEN 'C'
THEN case a.DocType When 'S'
THEN case a.CurSource
WHEN 'L' THEN (b.Price * 1) * - 1 ELSE
(b.Price * 1) * e.rate * -1 END
ELSE case a.CurSource WHEN 'L' THEN (b.Price * b.Quantity) * -1 ELSE (b.Price * b.Quantity) * e.rate *
-1 END
END
WHEN 'N' THEN
case a.DocType When 'S'
THEN case a.CurSource WHEN 'L' THEN (b.Price * 1)
ELSE (b.Price * 1) * e.rate END
ELSE case
a.CurSource WHEN 'L' THEN (b.Price *
b.Quantity) ELSE (b.Price * b.Quantity)
* e.rate END
END
ELSE
case a.DocType When 'S'
THEN case a.CurSource
WHEN 'L' THEN (b.Price * 1) ELSE (b.Price * 1) * e.rate END
ELSE case
a.CurSource WHEN 'L' THEN (b.Price *
b.Quantity) ELSE (b.Price * b.Quantity)
* e.rate END
END
END
AS [Total MXN],
case a.CANCELED WHEN 'C'
THEN case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) * -1 ELSE
(b.Price * 1) / e.rate * -1 END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) * -1 ELSE (b.Price * b.Quantity) / e.rate* -1 END
END
WHEN 'N' THEN
case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) ELSE (b.Price * 1) / e.rate END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) ELSE
(b.Price * b.Quantity) / e.rate END
END
ELSE
case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) ELSE (b.Price * 1) / e.rate END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) ELSE
(b.Price * b.Quantity) / e.rate END
END
END
AS [Total USD],
a.CANCELED,
a.Comments
from OINV a
inner join INV1 b on
a.docentry = b.docentry
inner join OCRD c on a.CardCode = c.CardCode
left join OITM d on b.ItemCode = d.ItemCode
left join ORTT e on a.CreateDate = e.RateDate and e.Currency
= 'USD'
where a.docdate between [%0]
and [%1]
UNION ALL
select a.CardCode,
c.CardName,
a.DocDate,
DATEPART(month , a.DocDate) AS Periodo,
DATEPART(YEAR , a.DocDate) AS Año,
case a.ObjType
when 14 THEN 'Nota de Crédito'
END AS [Tipo de dcumento],
a.DocNum,
a.DocEntry IrDocumento,
b.ItemCode,
case a.DocType When 'S' THEN b.dscription ELSE
d.ItemName END AS ItemName,
b.Price,
case a.CANCELED
WHEN 'C' THEN case a.DocType When 'S' THEN 1 ELSE
b.Quantity END
WHEN 'N' THEN case a.DocType When 'S' THEN -1 ELSE
b.Quantity * - 1 END
ELSE case a.DocType When 'S' THEN -1 ELSE b.Quantity * -1
END
END as Quantity,
case a.CANCELED WHEN 'C'
THEN case a.DocType When 'S'
THEN case a.CurSource
WHEN 'L' THEN (b.Price * 1) ELSE
(b.Price * 1) * e.rate END
ELSE case a.CurSource WHEN 'L' THEN (b.Price * b.Quantity) ELSE (b.Price * b.Quantity) * e.rate END
END
WHEN 'N' THEN
case a.DocType When 'S'
THEN case
a.CurSource WHEN 'L' THEN (b.Price * 1)
* -1 ELSE (b.Price * 1) * e.rate * -1 END
ELSE case
a.CurSource WHEN 'L' THEN (b.Price *
b.Quantity) * -1 ELSE (b.Price *
b.Quantity) * e.rate * -1 END
END
ELSE
case a.DocType When 'S'
THEN case
a.CurSource WHEN 'L' THEN (b.Price * 1)
* -1 ELSE (b.Price * 1) * e.rate * -1
END
ELSE case
a.CurSource WHEN 'L' THEN (b.Price *
b.Quantity) * -1 ELSE (b.Price *
b.Quantity) * e.rate * -1 END
END
END
AS [Total MXN],
case a.CANCELED WHEN 'C'
THEN case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) ELSE (b.Price * 1) / e.rate END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) ELSE (b.Price * b.Quantity) / e.rate
END
END
WHEN 'N' THEN
case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) * -1 ELSE
(b.Price * 1) / e.rate * -1 END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) * -1
ELSE (b.Price * b.Quantity) / e.rate * -1 END
END
ELSE case a.DocType When 'S'
THEN
case a.CurSource WHEN 'C' THEN (b.Price * 1) * -1 ELSE
(b.Price * 1) / e.rate * -1 END
ELSE
case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity) * -1
ELSE (b.Price * b.Quantity) / e.rate * -1 END
END
END
AS [Total USD],
--d.ItemName,
--b.Price,
--b.Quantity * -1,
--case a.CurSource WHEN 'L' THEN b.Price * b.Quantity * -1 ELSE (b.Price *
b.Quantity * -1) * e.rate END AS [Total MXN],
--case a.CurSource WHEN 'C' THEN (b.Price * b.Quantity * -1)
/ e.rate ELSE (b.Price * b.Quantity * -1) END AS [Total USD],
a.CANCELED,
a.Comments
from ORIN a
--left join RIN1 e on a.Docentry = e.BaseEntry
inner join RIN1 b on
a.docentry = b.docentry
inner join OCRD c on a.CardCode = c.CardCode
left join OITM d on b.ItemCode = d.ItemCode
left join ORTT e on a.CreateDate = e.RateDate and e.Currency
= 'USD'
where a.docdate between [%0]
and [%1]
jueves, 19 de septiembre de 2019
Compras - Partidas abiertas por Item
Para los que nos preguntemos que material de nuestros pedidos aún no están en los almacenes, pueden resolver esa inquietud con esta consulta que aquí les dejo, contempla las OC que van directamente a almacén y las OC que pasan previamente por una factura para después iniciar la o las entradas al almacén.
Select a.docdate, a.DocNum, a.CardCode, a.CardName, b.ItemCode, b.Dscription
, b.WhsCode, b.Quantity, b.InvntSttus, b.LineStatus, b.OpenQty, d.SlpName as [Comprador]
, (select DocNum from OPRQ where DocEntry = (select Top 1 T1.BaseEntry from POR1 T1 inner join OPOR T0 on T0.DocEntry = T1.DocEntry
where T0.Segment = 0 and T1.BaseEntry is not null and T0.DocNum = a.DocNum)) as SC
,(select ReqName from OPRQ where DocEntry = (select Top 1 T1.BaseEntry from POR1 T1 inner join OPOR T0 on T0.DocEntry = T1.DocEntry
where T0.Segment = 0 and T1.BaseEntry is not null and T0.DocNum = a.DocNum)) as Solicitante
from OPOR a
inner join POR1 b on a.DocEntry = b.DocEntry
inner join OITM c on b.ItemCode = c.ItemCode
inner join OSLP d on a.SlpCode = d.SlpCode
and b.InvntSttus = 'O' and b.TargetType in (20,-1)
and a.CANCELED = 'N'
and c.frozenFor = 'N'
and c.validFor = 'Y'
and c.InvntItem = 'Y'
and a.DocStatus <> 'C'
union all
select a.docdate, a.DocNum, a.CardCode, a.CardName, b.ItemCode, b.Dscription
, b.WhsCode, b.Quantity, d.InvntSttus, b.LineStatus, d.OpenQty, f.SlpName as [Comprador]
, (select DocNum from OPRQ where DocEntry = (select Top 1 b.BaseEntry from POR1 b inner join OPOR a on a.DocEntry = b.DocEntry
where a.Segment = 0 and b.BaseEntry is not null and a.DocNum = (select distinct DocNum from OPOR where DocEntry = d.BaseEntry and d.BaseType = 22))) as SC
, (select ReqName from OPRQ where DocEntry = (select Top 1 b.BaseEntry from POR1 b inner join OPOR a on a.DocEntry = b.DocEntry
where a.Segment = 0 and b.BaseEntry is not null and a.DocNum = (select distinct DocNum from OPOR where DocEntry = d.BaseEntry and d.BaseType = 22))) as Solicitante
from OPOR a
inner join POR1 b on a.DocEntry = b.DocEntry
inner join OPCH c on b.TrgetEntry = c.DocEntry
inner join PCH1 d on c.DocEntry = d.DocEntry
inner join OITM e on b.ItemCode = e.ItemCode
inner join OSLP f on a.SlpCode = f.SlpCode
and d.InvntSttus = 'O' and b.TargetType in (18,-1)
and e.frozenFor = 'N'
and e.validFor = 'Y'
and e.InvntItem = 'Y'
and d.BaseLine = b.LineNum and d.ItemCode = b.ItemCode
and a.CANCELED = 'N'
martes, 10 de septiembre de 2019
Tesorería - Pagos efectuados
Hola!, ¿como están?... hoy les comparto una consulta con la cual podrán generar infinidad de reportes ya sean masivos o individuales para cada uno de sus proveedores, por ejemplo desde un Crystal Report.
Esta consulta tiene la información necesaria para poder aprovecharla de la mejor manera que ustedes decidan, si algo les hiciera falta no duden colocarlo en los comentarios.
SELECT T5.Street, T5.StreetNo, T5.Block, T5.City, T5.County, UPPER(t6.Name) as State
, UPPER(T7.Name) as Country, T5.ZipCode, convert(varchar,T1.[DocDate],103) as Fecha, T1.DocEntry, T1.[DocNum] as Pago, T3.[DocNum] as Provision
, CASE when t3.isIns = 'Y' then 'OC(s) ' +
ISNULL ((SELECT STUFF
((SELECT distinct ',' + CAST(DocNum AS VARCHAR(15))
FROM OPOR a
inner join POR1 b on a.DocEntry = b.DocEntry
WHERE b.TrgetEntry = t3.DocEntry
and a.CANCELED ='N' FOR XML PATH('')), 1, 1, '')), ' - ')
else
t3.[FolioPref] + '-' + CAST(T3.[FolioNum] as VARCHAR (15)) end as Factura
, T1.[CardCode] as [Codigo Proveedor]
, T1.[CardName] as [Nombre Proveedor], T9.E_mail, 'OP' as [Operacion Terminada]
, case t1.DocCurr when 'USD' then t3.DocTotalFC when 'MXN' Then t3.DocTotal end as [Monto Factura]
, case t1.DocCurr when 'USD' then AppliedFC when 'MXN' Then SumApplied end as [Monto Pagado]
, t1.DocCurr as 'Moneda'
, CASE when t3.isIns = 'Y' then '' else t3.NumAtCard end as UUID, convert(varchar,T1.TrsfrDate,103) as TrsfrDate
, CONVERT(varchar,convert(money,case t1.DocCurr when 'USD' then TrsfrSumFC when 'MXN' then T1.TrsfrSum end), 1) as [Monto Transferencia]
, T8.AcctName
FROM [dbo].[OVPM] T1 INNER JOIN VPM2 T2 ON T1.DocEntry = T2.DocNum
INNER JOIN OPCH T3 ON T2.DocEntry = T3.DocEntry
INNER JOIN OCRD T4 ON T4.CardCode = T1.CardCode
LEFT JOIN CRD1 T5 ON T5.CardCode = T4.CardCode and T5.AdresType = 'B'
LEFT JOIN OCST T6 ON T6.Code = T5.State
LEFT JOIN OCRY T7 ON t7.Code = T5.Country
LEFT JOIN OACT T8 on T8.AcctCode = T1.TrsfrAcct
LEFT JOIN OCRD T9 on T9.CardCode = T1.CardCode
WHERE T1.[CreateDate] between [%0] and [%1]
and T1.Canceled = 'N'
Esta consulta tiene la información necesaria para poder aprovecharla de la mejor manera que ustedes decidan, si algo les hiciera falta no duden colocarlo en los comentarios.
SELECT T5.Street, T5.StreetNo, T5.Block, T5.City, T5.County, UPPER(t6.Name) as State
, UPPER(T7.Name) as Country, T5.ZipCode, convert(varchar,T1.[DocDate],103) as Fecha, T1.DocEntry, T1.[DocNum] as Pago, T3.[DocNum] as Provision
, CASE when t3.isIns = 'Y' then 'OC(s) ' +
ISNULL ((SELECT STUFF
((SELECT distinct ',' + CAST(DocNum AS VARCHAR(15))
FROM OPOR a
inner join POR1 b on a.DocEntry = b.DocEntry
WHERE b.TrgetEntry = t3.DocEntry
and a.CANCELED ='N' FOR XML PATH('')), 1, 1, '')), ' - ')
else
t3.[FolioPref] + '-' + CAST(T3.[FolioNum] as VARCHAR (15)) end as Factura
, T1.[CardCode] as [Codigo Proveedor]
, T1.[CardName] as [Nombre Proveedor], T9.E_mail, 'OP' as [Operacion Terminada]
, case t1.DocCurr when 'USD' then t3.DocTotalFC when 'MXN' Then t3.DocTotal end as [Monto Factura]
, case t1.DocCurr when 'USD' then AppliedFC when 'MXN' Then SumApplied end as [Monto Pagado]
, t1.DocCurr as 'Moneda'
, CASE when t3.isIns = 'Y' then '' else t3.NumAtCard end as UUID, convert(varchar,T1.TrsfrDate,103) as TrsfrDate
, CONVERT(varchar,convert(money,case t1.DocCurr when 'USD' then TrsfrSumFC when 'MXN' then T1.TrsfrSum end), 1) as [Monto Transferencia]
, T8.AcctName
FROM [dbo].[OVPM] T1 INNER JOIN VPM2 T2 ON T1.DocEntry = T2.DocNum
INNER JOIN OPCH T3 ON T2.DocEntry = T3.DocEntry
INNER JOIN OCRD T4 ON T4.CardCode = T1.CardCode
LEFT JOIN CRD1 T5 ON T5.CardCode = T4.CardCode and T5.AdresType = 'B'
LEFT JOIN OCST T6 ON T6.Code = T5.State
LEFT JOIN OCRY T7 ON t7.Code = T5.Country
LEFT JOIN OACT T8 on T8.AcctCode = T1.TrsfrAcct
LEFT JOIN OCRD T9 on T9.CardCode = T1.CardCode
WHERE T1.[CreateDate] between [%0] and [%1]
and T1.Canceled = 'N'
miércoles, 4 de septiembre de 2019
Compras - Ultimo precio de compra
Para conocer el ultimo precio de compra de un articulo o servicio posiblemente habrán muchas maneras, la mas fácil es la siguiente consulta hacia la tabla de los Datos Maestros de Artículo:
SELECT T1.[LastPurPrc] FROM OITM T1 Where T1.ItemCode = 'XxXxX'
Pero la consulta anterior no nos permite saber cuando fue la fecha de esa ultima compra, ni tampoco quien fue el proveedor por poner solo unos ejemplos, para estos casos les dejo la siguiente consulta.
select distinct * from (
select b.DocDate, b.CardCode, b.CardName, a.ItemCode, a.Dscription, a.Price from PCH1 a
inner join OPCH b on a.DocEntry = b.DocEntry
where a.ItemCode = 'XxXxX'
and b.CANCELED = 'N'
) tabla
inner join (select e.ItemCode , MAX(f.docdate) docdate from PCH1 e
inner join OPCH f on e.DocEntry = f.DocEntry and e.ItemCode = 'XxXxX') and f.CANCELED = 'N' group by e.ItemCode) tabla2
on tabla.ItemCode = tabla2.ItemCode and tabla.DocDate = tabla2.docdate
order by tabla.ItemCode, tabla.docdate
Nota: Si este Item se repite, es por que en la misma fecha hubo compras con diferentes precios o diferentes proveedores.
Espero les sirva, saludos!.
Suscribirse a:
Entradas (Atom)