tracy5436
Yak Posting Veteran
50 Posts |
Posted - 2010-07-10 : 22:48:05
|
Hi,I have a macro below which uses SQL to extract data from an IV30300 table and inserts the data into a INVENTRY table.There are various columns in the table, such as allocated quantity, allocated value, returned quantity, returned value. My problem is that I can't get the correct values to be inserted for the allocqty and retqty values. These variables are totalled in the field Allocated Quantity in the INVENTRY table. However, it seems that once there are no values in some of the variables, it throws out the the values in others. I suspect my problem is with my join statements, but I have tried different things but I still can't get it right. Can someone help please ?Sub Inventory()'' Inventory Macro'' Keyboard Shortcut: Ctrl+iDim cn As New ADODB.ConnectionDim rst As New ADODB.RecordsetDim cmd As New ADODB.CommandDim sqlstring As StringDim sqlstring2 As StringDim sqlstring3 As StringDim sqlstring4 As StringDim sqlstring5 As StringDim sqlstring6 As StringDim sqlstring7 As StringDim rstupdate As New ADODB.RecordsetDim objConnDim cmdStringDim objRecDim startdat As StringDim enddate As StringDim procdate As StringDim exchangerate As CurrencyChDir "E:\KIRK DISTRIBUTORS - ITT\SALES"Workbooks.Open Filename:="E:\KIRK DISTRIBUTORS - ITT\INVENTRY\INVENTRY4.XLS"Rows("2:10658").SelectSelection.Delete Shift:=xlUpWorkbooks.CloseSet objRec = CreateObject("ADODB.Recordset")Set objConn = CreateObject("ADODB.Connection")With cn.ConnectionString = "Provider=MSDASQL;DSN=GREATPLAINS;User Id=sa;Password=ramses2;database=KDLTD;".CursorLocation = adUseClient.OpenEnd Withcmd.ActiveConnection = cncmd.CommandType = adCmdTextcn.CommandTimeout = 900000cmd.CommandTimeout = 900000startdat = InputBox("Starting Date: (MM/DD/YYYY")enddate = InputBox("Ending Date: (MM/DD/YYYY)")procdate = InputBox("Process Date: (YYYYMM)")exchangerate = InputBox("Exchange Rate")sqlstring2 = "DELETE INVENTRY"sqlstring = "INSERT INTO INVENTRY([STOCKLIST CODE], [WAREHOUSE CODE], [PROCESS YYYYMM], [INVENTORY TYPE], [PRODUCT CODE], [OPENING BALANCE QTY.], [OPENING BAL. VALUE],[RECEIPT QUANTITY],[RECEIPT VALUE],[FREE RECEIPT QUANTITY],[FREE RECEIPT VALUE],[RETURN QUANTITY],[RETURN VALUE],[ADJUSTMENT QUANTITY],[ADJUSTMENT VALUE],[ALLOCATED QUANTITY],[ALLOCATED VALUE],[CLOSING QUANTITY],[CLOSING VALUE])"sqlstring = sqlstring & " SELECT '5555550101','MGD',ProcessDate,'S',ProductCode,ISNULL(OpenQty,0.00),ISNULL(OpeningBalValue,0.00),ISNULL(RecQty,0.00),ISNULL(RecValue,0.00),0.00,0.00,0.00,0.00,ISNULL(AdjQtyb,0.00)+ISNULL(AdjQty,0.00),ISNULL(AdjValue,0.00)+ISNULL(AdjValueb,0.00),ISNULL(AllocQty,0.00)-ISNULL(RetQty,0.00),ISNULL(AllocValue,0.00)-ISNULL(RetValue,0.00),ISNULL(OpenQty,0.00)+ISNULL(RecQty,0.00)+ISNULL(RetQty,0.00)+ISNULL(AdjQty,0.00)+ISNULL(AdjQtyB,0.00)-ISNULL(AllocQty,0.00),ISNULL(OpeningBalValue,0.00)+ISNULL(RecValue,0.00)+ISNULL(RetValue,0.00)+ISNULL(AdjValue,0.00)-ISNULL(AllocValue,0.00) "sqlstring = sqlstring & " FROM ( SELECT '" & procdate & "' As ProcessDate12,I11.[CP PRODUCT CODE] as ProductCode11,sum(I12.TRXQTY*I12.QTYBSUOM)*-1 as AllocQty,SUM(I12.TRXQTY*I12.QTYBSUOM*I11.[UNIT PRICE]) as AllocValue"sqlstring = sqlstring & " FROM IV30300 I12"sqlstring = sqlstring & " RIGHT OUTER JOIN [ITEM_MAPPING] I11"sqlstring = sqlstring & " ON I11.[KIRK ITEM NUMBER] = I12.ITEMNMBR JOIN IV00101 I1 ON I11.[KIRK ITEM NUMBER] = I1.ITEMNMBR"sqlstring = sqlstring & " and I12.DOCDATE BETWEEN '" & startdat & "' AND '" & enddate & "' "sqlstring = sqlstring & " AND I12.DOCTYPE = '6' "sqlstring = sqlstring & " AND I12.TRXLOCTN <> 'MGD_DAM'"sqlstring = sqlstring & " GROUP BY I11.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D12"sqlstring = sqlstring & " LEFT JOIN ("sqlstring = sqlstring & " SELECT I70.[CP PRODUCT CODE] as ProductCode10,SUM(P10.TRXQTY * P10.QTYBSUOM) as RetQty,SUM(I70.[CASE PRICE]/P10.QTYBSUOM*(P10.TRXQTY * P10.QTYBSUOM)) as RetValue "sqlstring = sqlstring & " FROM IV30300 P10 RIGHT OUTER JOIN [ITEM_MAPPING] I70 ON P10.ITEMNMBR = I70.[KIRK ITEM NUMBER] JOIN IV00101 I300 ON I70.[KIRK ITEM NUMBER] = I300.ITEMNMBR AND P10.DOCTYPE = '5' AND TRXLOCTN <> 'MGD_DAM' AND P10.DOCDATE BETWEEN '" & startdat & "' AND '" & enddate & "' GROUP BY I70.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D10"sqlstring = sqlstring & " ON D12.ProductCode11 = D10.ProductCode10 "sqlstring = sqlstring & " RIGHT OUTER JOIN"sqlstring = sqlstring & " ( SELECT"sqlstring = sqlstring & " '" & procdate & "' As ProcessDate1101,I201.[CP PRODUCT CODE] as ProductCode1101"sqlstring = sqlstring & " FROM IV00101 I1101 JOIN [ITEM_MAPPING] I201 ON I1101.ITEMNMBR = I201.[KIRK ITEM NUMBER] "sqlstring = sqlstring & " GROUP BY I201.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D1101"sqlstring = sqlstring & " ON D10.ProductCode10 = D1101.ProductCode1101 "sqlstring = sqlstring & " LEFT JOIN"sqlstring = sqlstring & " ( SELECT"sqlstring = sqlstring & " '" & procdate & "' As ProcessDate,I2.[CP PRODUCT CODE] as ProductCode,SUM(I3.QTYONHND*convert(money,I1.USCATVLS_2)) As ClosingQty1"sqlstring = sqlstring & " FROM IV00101 I1 JOIN [ITEM_MAPPING] I2 ON I1.ITEMNMBR = I2.[KIRK ITEM NUMBER] JOIN IV00102 I3 ON I1.ITEMNMBR = I3.ITEMNMBR AND I3.LOCNCODE <> 'MGD_DAM'"sqlstring = sqlstring & " GROUP BY I2.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D1"sqlstring = sqlstring & " ON D1101.ProductCode1101 = D1.ProductCode "sqlstring = sqlstring & " LEFT JOIN ("sqlstring = sqlstring & " SELECT B2.[CP PRODUCT CODE] as Item,SUM(B1.[QTY PER STOCK]*convert(money,I3000.USCATVLS_2)) as ClosingQty,SUM(B1.[QTY PER STOCK]*convert(money,I3000.USCATVLS_2)*B2.[CASE PRICE]/convert(money,I3000.USCATVLS_2)) as ClosingValue,SUM(B1.[QTY PER STOCK]*convert(money,I3000.USCATVLS_2)) as OpenQty,SUM(B2.[CASE PRICE]/convert(money,I3000.USCATVLS_2)*(B1.[QTY PER STOCK])) As OpeningBalValue"sqlstring = sqlstring & " FROM OPENINGBAL B1 INNER JOIN [ITEM_MAPPING] B2 ON B1.[ITEM NUMBER] = B2.[KIRK ITEM NUMBER] JOIN IV00101 I3000 ON B2.[KIRK ITEM NUMBER] = I3000.ITEMNMBR GROUP BY B2.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D13"sqlstring = sqlstring & " ON D1.ProductCode = D13.Item"sqlstring = sqlstring & " LEFT JOIN ("sqlstring = sqlstring & " SELECT I6.[CP PRODUCT CODE] as ProductCode2,SUM(I5.TRXQTY*I5.QTYBSUOM) as AdjQty,SUM(I6.[CASE PRICE]/I5.QTYBSUOM*(I5.TRXQTY*I5.QTYBSUOM)) as AdjValue"sqlstring = sqlstring & " FROM IV30300 I5 RIGHT OUTER JOIN [ITEM_MAPPING] I6 ON I6.[KIRK ITEM NUMBER] = I5.ITEMNMBR JOIN IV00101 I30 ON I6.[KIRK ITEM NUMBER] = I30.ITEMNMBR AND DOCDATE BETWEEN '" & startdat & "' AND '" & enddate & "' AND DOCTYPE = '1' "sqlstring = sqlstring & " GROUP BY I6.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D2"sqlstring = sqlstring & " ON D1.ProductCode = D2.ProductCode2"sqlstring = sqlstring & " LEFT OUTER JOIN ("sqlstring = sqlstring & " SELECT I9.[CP PRODUCT CODE] as ProdCode FROM [ITEM_MAPPING] I9 LEFT OUTER JOIN IV30300 I10 ON I9.[KIRK ITEM NUMBER] = I10.ITEMNMBR GROUP BY I9.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D4"sqlstring = sqlstring & " ON D12.ProductCode11 = D4.ProdCode LEFT OUTER JOIN ("sqlstring = sqlstring & " SELECT I7.[CP PRODUCT CODE] as ProductCode8,SUM(P1.TRXQTY * P1.QTYBSUOM) as RecQty,SUM(I7.[CASE PRICE]/P1.QTYBSUOM*(P1.TRXQTY * P1.QTYBSUOM)) as RecValue"sqlstring = sqlstring & " FROM IV30300 P1 RIGHT OUTER JOIN [ITEM_MAPPING] I7 ON P1.ITEMNMBR = I7.[KIRK ITEM NUMBER] JOIN IV00101 I32 ON I7.[KIRK ITEM NUMBER] = I32.ITEMNMBR AND P1.DOCTYPE = '4' AND TRXLOCTN <> 'MGD_DAM' AND P1.DOCDATE BETWEEN '" & startdat & "' AND '" & enddate & "' GROUP BY I7.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D3"sqlstring = sqlstring & " ON D4.ProdCode = D3.ProductCode8 "sqlstring = sqlstring & " LEFT JOIN ("sqlstring = sqlstring & " SELECT I6.[CP PRODUCT CODE] as ProductCode2B,SUM(I5.TRXQTY*I5.QTYBSUOM) as AdjQtyB,SUM(I6.[CASE PRICE]/I5.QTYBSUOM*(I5.TRXQTY*I5.QTYBSUOM)) as AdjValueB"sqlstring = sqlstring & " FROM IV30300 I5 RIGHT OUTER JOIN [ITEM_MAPPING] I6 ON I6.[KIRK ITEM NUMBER] = I5.ITEMNMBR JOIN IV00101 I3 ON I6.[KIRK ITEM NUMBER] = I3.ITEMNMBR AND DOCDATE BETWEEN '" & startdat & "' AND '" & enddate & "' AND DOCTYPE = '2' "sqlstring = sqlstring & " GROUP BY I6.[CP PRODUCT CODE]"sqlstring = sqlstring & " )D2B"sqlstring = sqlstring & " ON D2B.ProductCode2B = D3.ProductCode8"'sqlstring = sqlstring & " LEFT JOIN ("'sqlstring = sqlstring & " RIGHT OUTER JOIN ("'sqlstring = sqlstring & " SELECT I90.[CP PRODUCT CODE] as ProdCode90 FROM [ITEM_MAPPING] I90 INNER JOIN IV00101 I100 ON I90.[KIRK ITEM NUMBER] = I100.ITEMNMBR GROUP BY I90.[CP PRODUCT CODE]"'sqlstring = sqlstring & " )D40"'sqlstring = sqlstring & " ON D3.ProductCode8 = D40.ProdCode90 LEFT OUTER JOIN ("sqlstring3 = "UPDATE INVENTRY SET [ADJUSTMENT QUANTITY] = 1 WHERE [ADJUSTMENT VALUE] <> 0 and [adjustment quantity] = 0"sqlstring4 = "UPDATE INVENTRY SET [ADJUSTMENT VALUE] = 1 WHERE [ADJUSTMENT QUANTITY] <> 0 and [adjustment value] = 0"'sqlstring7 = "UPDATE INVENTRY SET [ALLOCATED QUANTITY] = -1 where [ALLOCATED value] < 0 and [ALLOCATED qUANtITy] = 0"sqlstring5 = "UPDATE INVENTRY SET [CLOSING QUANTITY] = [OPENING BALANCE QTY.]+[RECEIPT QUANTITY]+[RETURN QUANTITY]+[ADJUSTMENT QUANTITY]-[ALLOCATED QUANTITY]"sqlstring6 = "UPDATE INVENTRY SET [CLOSING VALUE] = [OPENING BAL. VALUE] + [RECEIPT VALUE] + [RETURN VALUE] + [ADJUSTMENT VALUE] - [ALLOCATED VALUE]"rstupdate.Open sqlstring2, cn, adOpenDynamic, adLockOptimistic, adCmdTextrstupdate.Open sqlstring, cn, adOpenDynamic, adLockOptimistic, adCmdTextrstupdate.Open sqlstring3, cn, adOpenDynamic, adLockOptimistic, adCmdTextrstupdate.Open sqlstring4, cn, adOpenDynamic, adLockOptimistic, adCmdText'rstupdate.Open sqlstring7, cn, adOpenDynamic, adLockOptimistic, adCmdTextrstupdate.Open sqlstring5, cn, adOpenDynamic, adLockOptimistic, adCmdTextrstupdate.Open sqlstring6, cn, adOpenDynamic, adLockOptimistic, adCmdTextMsgBox ("Process Complete")cn.CloseEnd Sub |
|