Fishbowl ASN 856 EDI Query
Use this query to export the custom report of new new shipments from Fishbowl.
SELECT
Pos01, Pos02, Pos03, Pos04, Pos05, Pos06, Pos07, Pos08, Pos09, Pos10,
Pos11, Pos12, Pos13, Pos14, Pos15, Pos16, Pos17, Pos18, Pos19, Pos20,
Pos21, Pos22, Pos23, Pos24, Pos25, Pos26, Pos27, Pos28, Pos29, Pos30,
Pos31, Pos32, Pos33, Pos34, Pos35, Pos36, Pos37, Pos38, Pos39, Pos40,
Pos41, Pos42
FROM (
/* =========================
S ROW - Shipment
========================= */
SELECT
sh.id AS SortShipment,
1 AS SortRow,
0 AS SortCarton,
0 AS SortLine,
'S' AS Pos01,
'856SOPI' AS Pos02,
COALESCE(
NULLIF(TRIM(cust.accountingId), ''),
''
) AS Pos03,
COALESCE(
NULLIF(TRIM(sh.shipmentIdentificationNumber), ''),
NULLIF(TRIM(sh.num), ''),
CAST(sh.id AS CHAR),
''
) AS Pos04,
COALESCE(
NULLIF(TRIM(car.scac), ''),
''
) AS Pos05,
'' AS Pos06,
COALESCE(
NULLIF(TRIM(sh.billOfLading), ''),
''
) AS Pos07,
COALESCE(DATE_FORMAT(orderAgg.ScheduledDeliveryDate, '%Y%m%d'), '') AS Pos08,
COALESCE(DATE_FORMAT(sh.dateShipped, '%Y%m%d'), '') AS Pos09,
COALESCE(
NULLIF(TRIM(sh.shipToName), ''),
''
) AS Pos10,
COALESCE(
NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(sh.shipToAddress, '\r', ''), '\n', 1)), ''),
''
) AS Pos11,
COALESCE(
NULLIF(
TRIM(
CASE
WHEN LOCATE('\n', REPLACE(sh.shipToAddress, '\r', '')) > 0 THEN
SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(sh.shipToAddress, '\r', ''), '\n', 2), '\n', -1)
ELSE ''
END
),
''
),
''
) AS Pos12,
COALESCE(NULLIF(TRIM(sh.shipToCity), ''), '') AS Pos13,
COALESCE(NULLIF(TRIM(shipState.code), ''), '') AS Pos14,
COALESCE(NULLIF(TRIM(sh.shipToZip), ''), '') AS Pos15,
COALESCE(
NULLIF(CAST(sh.shipToId AS CHAR), ''),
NULLIF(TRIM(cust.number), ''),
''
) AS Pos16,
'' AS Pos17,
'' AS Pos18,
'' AS Pos19,
CAST(COALESCE(cartonAgg.GrossWeight, 0) AS CHAR) AS Pos20,
CASE
WHEN LOWER(COALESCE(cartonAgg.WeightUOM, '')) IN ('lb', 'lbs', 'pound', 'pounds') THEN 'Pound'
WHEN LOWER(COALESCE(cartonAgg.WeightUOM, '')) IN ('kg', 'kgs', 'kilogram', 'kilograms') THEN 'Kilogram'
ELSE COALESCE(NULLIF(TRIM(cartonAgg.WeightUOM), ''), '')
END AS Pos21,
CAST(COALESCE(NULLIF(sh.cartonCount, 0), cartonAgg.CartonCount, 0) AS CHAR) AS Pos22,
'' AS Pos23,
'' AS Pos24,
COALESCE(
NULLIF(TRIM(shipFrom.addressName), ''),
NULLIF(TRIM(shipFrom.name), ''),
NULLIF(TRIM(lg.name), ''),
NULLIF(TRIM(comp.name), ''),
''
) AS Pos25,
COALESCE(
NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(shipFrom.address, '\r', ''), '\n', 1)), ''),
''
) AS Pos26,
COALESCE(
NULLIF(
TRIM(
CASE
WHEN LOCATE('\n', REPLACE(shipFrom.address, '\r', '')) > 0 THEN
SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(shipFrom.address, '\r', ''), '\n', 2), '\n', -1)
ELSE ''
END
),
''
),
''
) AS Pos27,
COALESCE(NULLIF(TRIM(shipFrom.city), ''), '') AS Pos28,
COALESCE(NULLIF(TRIM(shipFromState.code), ''), '') AS Pos29,
COALESCE(NULLIF(TRIM(shipFrom.zip), ''), '') AS Pos30,
'' AS Pos31,
'' AS Pos32,
'' AS Pos33,
'' AS Pos34,
'' AS Pos35,
'' AS Pos36,
'' AS Pos37,
'' AS Pos38,
CASE
WHEN COALESCE(shipThroughAgg.TotalShippedThroughShipment, 0) >= COALESCE(orderAgg.TotalOrderedOnOrder, 0)
THEN 'CC'
ELSE 'PR'
END AS Pos39,
'' AS Pos40,
COALESCE(DATE_FORMAT(sh.dateShipped, '%H:%i'), '') AS Pos41,
COALESCE(
NULLIF(TRIM(car.name), ''),
''
) AS Pos42
FROM ship sh
INNER JOIN so ON so.id = sh.soId
LEFT JOIN customer cust ON cust.id = so.customerId
LEFT JOIN carrier car ON car.id = COALESCE(sh.carrierId, so.carrierId)
LEFT JOIN stateconst shipState ON shipState.id = sh.shipToStateId
LEFT JOIN locationgroup lg ON lg.id = sh.locationGroupId
LEFT JOIN company comp ON comp.id = 1
CROSS JOIN (
SELECT
COALESCE(
MAX(h.lastRunTime),
'1900-01-01 00:00:00'
) AS LastSuccessfulRun
FROM fbschedulehistory h
INNER JOIN fbschedule s ON s.id = h.scheduleId
WHERE s.name = 'EDI 856 SOPI Auto Export'
AND (
h.error IS NULL
OR TRIM(h.error) = ''
OR h.error LIKE 'Success%'
)
) lastRun
LEFT JOIN address shipFrom ON shipFrom.id = (
SELECT a.id
FROM address a
WHERE a.locationGroupId = sh.locationGroupId
ORDER BY a.defaultFlag DESC, a.id
LIMIT 1
)
LEFT JOIN stateconst shipFromState ON shipFromState.id = shipFrom.stateId
LEFT JOIN (
SELECT
sc.shipId,
COUNT(sc.id) AS CartonCount,
SUM(COALESCE(sc.freightWeight, 0)) AS GrossWeight,
MAX(NULLIF(TRIM(sc.weightUOM), '')) AS WeightUOM
FROM shipcarton sc
GROUP BY sc.shipId
) cartonAgg ON cartonAgg.shipId = sh.id
LEFT JOIN (
SELECT
soi.soId,
SUM(COALESCE(soi.qtyOrdered, 0)) AS TotalOrderedOnOrder,
MIN(soi.dateScheduledFulfillment) AS ScheduledDeliveryDate
FROM soitem soi
WHERE soi.productId IS NOT NULL
GROUP BY soi.soId
) orderAgg ON orderAgg.soId = so.id
LEFT JOIN (
SELECT
shBase.id AS ShipId,
SUM(COALESCE(si2.qtyShipped, 0)) AS TotalShippedThroughShipment
FROM ship shBase
INNER JOIN ship sh2 ON sh2.soId = shBase.soId
AND sh2.dateShipped IS NOT NULL
AND (
sh2.dateShipped < shBase.dateShipped
OR (
sh2.dateShipped = shBase.dateShipped
AND sh2.id <= shBase.id
)
)
INNER JOIN shipitem si2 ON si2.shipId = sh2.id
GROUP BY shBase.id
) shipThroughAgg ON shipThroughAgg.ShipId = sh.id
WHERE sh.soId IS NOT NULL
AND sh.dateShipped IS NOT NULL
AND sh.dateShipped > lastRun.LastSuccessfulRun
UNION ALL
/* =========================
O ROW - Order
========================= */
SELECT
sh.id AS SortShipment,
2 AS SortRow,
0 AS SortCarton,
0 AS SortLine,
'O' AS Pos01,
COALESCE(
NULLIF(TRIM(so.customerPO), ''),
''
) AS Pos02,
COALESCE(DATE_FORMAT(COALESCE(so.dateIssued, so.dateCreated), '%Y%m%d'), '') AS Pos03,
'' AS Pos04,
CAST(COALESCE(cartonAgg.GrossWeight, 0) AS CHAR) AS Pos05,
'' AS Pos06,
'' AS Pos07,
CAST(COALESCE(NULLIF(sh.cartonCount, 0), cartonAgg.CartonCount, 0) AS CHAR) AS Pos08,
'' AS Pos09,
'' AS Pos10,
'' AS Pos11,
'' AS Pos12,
'' AS Pos13,
'' AS Pos14,
'' AS Pos15,
'' AS Pos16,
'' AS Pos17,
'' AS Pos18,
'' AS Pos19,
'' AS Pos20,
'' AS Pos21,
'' AS Pos22,
'' AS Pos23,
'' AS Pos24,
'' AS Pos25,
'' AS Pos26,
'' AS Pos27,
'' AS Pos28,
'' AS Pos29,
'' AS Pos30,
'' AS Pos31,
'' AS Pos32,
'' AS Pos33,
'' AS Pos34,
'' AS Pos35,
'' AS Pos36,
'' AS Pos37,
'' AS Pos38,
'' AS Pos39,
'' AS Pos40,
'' AS Pos41,
'' AS Pos42
FROM ship sh
INNER JOIN so ON so.id = sh.soId
CROSS JOIN (
SELECT
COALESCE(
MAX(h.lastRunTime),
'1900-01-01 00:00:00'
) AS LastSuccessfulRun
FROM fbschedulehistory h
INNER JOIN fbschedule s ON s.id = h.scheduleId
WHERE s.name = 'EDI 856 SOPI Auto Export'
AND (
h.error IS NULL
OR TRIM(h.error) = ''
OR h.error LIKE 'Success%'
)
) lastRun
LEFT JOIN (
SELECT
sc.shipId,
COUNT(sc.id) AS CartonCount,
SUM(COALESCE(sc.freightWeight, 0)) AS GrossWeight
FROM shipcarton sc
GROUP BY sc.shipId
) cartonAgg ON cartonAgg.shipId = sh.id
WHERE sh.soId IS NOT NULL
AND sh.dateShipped IS NOT NULL
AND sh.dateShipped > lastRun.LastSuccessfulRun
UNION ALL
/* =========================
P ROW - Pack / Carton
========================= */
SELECT
sh.id AS SortShipment,
3 AS SortRow,
COALESCE(sc.cartonNum, sc.id) AS SortCarton,
0 AS SortLine,
'P' AS Pos01,
COALESCE(
NULLIF(TRIM(sc.sscc), ''),
''
) AS Pos02,
CAST(COALESCE(packAgg.PackSize, 0) AS CHAR) AS Pos03,
'' AS Pos04,
'' AS Pos05,
'' AS Pos06,
'' AS Pos07,
'' AS Pos08,
'' AS Pos09,
'' AS Pos10,
'' AS Pos11,
'' AS Pos12,
COALESCE(
NULLIF(TRIM(sc.trackingNum), ''),
''
) AS Pos13,
'' AS Pos14,
'' AS Pos15,
'' AS Pos16,
'' AS Pos17,
'' AS Pos18,
'' AS Pos19,
'' AS Pos20,
'' AS Pos21,
'' AS Pos22,
'' AS Pos23,
'' AS Pos24,
'' AS Pos25,
'' AS Pos26,
'' AS Pos27,
'' AS Pos28,
'' AS Pos29,
'' AS Pos30,
'' AS Pos31,
'' AS Pos32,
'' AS Pos33,
'' AS Pos34,
'' AS Pos35,
'' AS Pos36,
'' AS Pos37,
'' AS Pos38,
'' AS Pos39,
'' AS Pos40,
'' AS Pos41,
'' AS Pos42
FROM ship sh
INNER JOIN so ON so.id = sh.soId
INNER JOIN shipcarton sc ON sc.shipId = sh.id
CROSS JOIN (
SELECT
COALESCE(
MAX(h.lastRunTime),
'1900-01-01 00:00:00'
) AS LastSuccessfulRun
FROM fbschedulehistory h
INNER JOIN fbschedule s ON s.id = h.scheduleId
WHERE s.name = 'EDI 856 SOPI Auto Export'
AND (
h.error IS NULL
OR TRIM(h.error) = ''
OR h.error LIKE 'Success%'
)
) lastRun
LEFT JOIN (
SELECT
si.shipCartonId,
SUM(COALESCE(si.qtyShipped, 0)) AS PackSize
FROM shipitem si
GROUP BY si.shipCartonId
) packAgg ON packAgg.shipCartonId = sc.id
WHERE sh.soId IS NOT NULL
AND sh.dateShipped IS NOT NULL
AND COALESCE(packAgg.PackSize, 0) <> 0
AND sh.dateShipped > lastRun.LastSuccessfulRun
UNION ALL
/* =========================
I ROW - Item
========================= */
SELECT
sh.id AS SortShipment,
4 AS SortRow,
COALESCE(sc.cartonNum, sc.id, 0) AS SortCarton,
COALESCE(soi.soLineItem, si.id) AS SortLine,
'I' AS Pos01,
COALESCE(
NULLIF(TRIM(soi.customerPartNum), ''),
NULLIF(TRIM(product.num), ''),
NULLIF(TRIM(soi.productNum), ''),
''
) AS Pos02,
'' AS Pos03,
COALESCE(
NULLIF(TRIM(product.upc), ''),
''
) AS Pos04,
COALESCE(
NULLIF(TRIM(soi.description), ''),
NULLIF(TRIM(product.description), ''),
''
) AS Pos05,
CAST(COALESCE(soi.qtyOrdered, 0) AS CHAR) AS Pos06,
COALESCE(
NULLIF(TRIM(shipUom.code), ''),
NULLIF(TRIM(soUom.code), ''),
''
) AS Pos07,
CAST(COALESCE(si.qtyShipped, 0) AS CHAR) AS Pos08,
'' AS Pos09,
'' AS Pos10,
'' AS Pos11,
COALESCE(
NULLIF(CAST(soi.soLineItem AS CHAR), ''),
''
) AS Pos12,
'' AS Pos13,
'' AS Pos14,
'' AS Pos15,
'' AS Pos16,
'' AS Pos17,
'' AS Pos18,
'' AS Pos19,
'' AS Pos20,
'' AS Pos21,
'' AS Pos22,
'' AS Pos23,
'' AS Pos24,
'' AS Pos25,
'' AS Pos26,
'' AS Pos27,
'' AS Pos28,
'' AS Pos29,
'' AS Pos30,
'' AS Pos31,
'' AS Pos32,
'' AS Pos33,
'' AS Pos34,
'' AS Pos35,
'' AS Pos36,
'' AS Pos37,
'' AS Pos38,
'' AS Pos39,
'' AS Pos40,
'' AS Pos41,
'' AS Pos42
FROM ship sh
INNER JOIN so ON so.id = sh.soId
INNER JOIN shipitem si ON si.shipId = sh.id
LEFT JOIN shipcarton sc ON sc.id = si.shipCartonId
LEFT JOIN soitem soi ON soi.id = si.soItemId
LEFT JOIN product ON product.id = soi.productId
LEFT JOIN uom shipUom ON shipUom.id = si.uomId
LEFT JOIN uom soUom ON soUom.id = soi.uomId
CROSS JOIN (
SELECT
COALESCE(
MAX(h.lastRunTime),
'1900-01-01 00:00:00'
) AS LastSuccessfulRun
FROM fbschedulehistory h
INNER JOIN fbschedule s ON s.id = h.scheduleId
WHERE s.name = 'EDI 856 SOPI Auto Export'
AND (
h.error IS NULL
OR TRIM(h.error) = ''
OR h.error LIKE 'Success%'
)
) lastRun
WHERE sh.soId IS NOT NULL
AND sh.dateShipped IS NOT NULL
AND COALESCE(si.qtyShipped, 0) <> 0
AND sh.dateShipped > lastRun.LastSuccessfulRun
) SOPI
ORDER BY
SortShipment,
CASE
WHEN Pos01 = 'S' THEN 1
WHEN Pos01 = 'O' THEN 2
WHEN Pos01 IN ('P', 'I') THEN 3
ELSE 9
END,
SortCarton,
CASE
WHEN Pos01 = 'P' THEN 1
WHEN Pos01 = 'I' THEN 2
ELSE 0
END,
SortLine;Updated 2 days ago
