Advertisement
Guest User

Anton

a guest
Jul 29th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '#Reference {2A75196C-D9EB-4129-B803-931327F72D5C}#2.8#0#C:\Program Files\Common Files\System\ado\msado28.tlb#Microsoft ActiveX Data Objects 2.8 Library#ADODB
  2. '#Reference {420B2830-E718-11CF-893D-00A0C9054228}#1.0#0#C:\Windows\system32\scrrun.dll#Microsoft Scripting Runtime#Scripting
  3. '#Reference {F5078F18-C551-11D3-89B9-0000F81FE221}#6.0#0#C:\Windows\System32\msxml6.dll#Microsoft XML, v6.0#MSXML2
  4. ' [ Component | Aggregatorn Create XML
  5. '   no description
  6. ' ]
  7. '
  8. '
  9. ' [ Parameter | DBPharmaDSN | no description ]
  10. ' [ Parameter | DBPharmaUserID | no description ]
  11. ' [ Parameter | DBPharmaPassword | no description ]
  12. ' [ Parameter | XMLSchemaFile | no description ]
  13. '
  14. '
  15. '#uses "XmlHelpers.bas"
  16.  
  17.  
  18. Option Explicit
  19.  
  20. ' Version history
  21. ' ==========.============================================================
  22. ' 2014-06-18 Fraktavgift
  23. ' 2014-06-04 Fakturaavgift
  24. ' 2014-06-02 PayExDelbetalning
  25. ' 2014-05-22 NBDirektBet SHBDirektBet SEBDirektBet FSPDirektBet PayExFaktura
  26. '            Txtype 101 with subtypes
  27. ' 2013-02-05 New handlig of 'Rabatt' on recordtype 96_96.
  28. ' 2012-08-20 Changed decimal from ',' to '.' on Amount for "fakturaunderlag" file.
  29. ' 2012-04-18 CashierID inserted in Cognos import table.
  30. ' 2012-04-17 Cleaned up obsolete functions for Cognos
  31. ' 2012-02-22 CashierId read but not written to BITransfile
  32. ' 2012-02-22 PresentokortSalda changed sign from -/+.
  33. ' 2012-02-22 InsertBIFromTblReceiptRows
  34. ' 2011-12-07 Subventionsbug
  35. ' 2011-08-26 Återköp förskrivet
  36. ' 2001-08-19 VATPercent incorrect in PrintRows95_95()
  37. ' 2011-05-19 Version 2.0
  38. ' 2011-05-12 Fixed bug with missing storeID at the and of processing.
  39. '            PayExTransactionID into bokf.txt
  40. '            ReceptArendeID and EAN_ID implemented for Future use.
  41. ' 2011-03-07 No stop when incorrect VAT.
  42. ' 2011-03-01 Posttyp 87, AterbetalningKredit.
  43. ' 2011-02-28 New calculations for GenerateInvoice.
  44. ' 2011-02-17 Altered DB layer. Loop through multiple quieries on all exports except to BI (save to file).
  45. ' 2011-01-25 Changed subtractIt/addItr and no change of sign for Kontant, kontantutlands, subtotal och momsbelopp
  46. ' 2011-01-14 Added functionality for multiple organizations for Invoicefile.
  47. ' 2010-12-10 GetVGrupp implemented. Incorrect values vas calculated due to wrong 'varugrupp'.
  48. ' 2010-11-17 Vetrinärsarvode now implemented.
  49. ' 2010-09-22 V2 compatible.
  50. ' 2010-03-11 First version for CIS Pharma.
  51. ' 2010-05-19 New fields
  52. '            receiptId
  53. '            Varunummer
  54. '            Forsaljningspris
  55. '            FormanExmoms
  56. '            SubvensionExmoms
  57. '            SubventionsKomm
  58. '            TransID (ASAB)
  59. '            Beskrivning
  60. '            amountNumber
  61.  
  62. Dim strDBTriggerName As String
  63.  
  64.  
  65. Enum _VAT ' VAT Percentage
  66.     P0  = 1
  67.     P6  = 2
  68.     P12 = 3
  69.     P25 = 4
  70. End Enum
  71.  
  72. Enum _FIXDOT
  73.     MAKEDOT = 0
  74.     NULLIFZERO  = 1
  75. End Enum
  76.  
  77.  
  78.  
  79. Const ASAB_VAT_PERCENTAGE = "25.00"
  80. Const MAX_RECEIPTS = 400
  81. Const MAX_DELBET = 500
  82. Const MAX_INVOICE_FILES = 500
  83.  
  84. Dim _NBR_TO_BLOCK As Long
  85.  
  86. Dim nRecIdx As Integer
  87.  
  88.  
  89. Dim oXml        As New MSXML2.DOMDocument60
  90. Dim oBInfo      As Object
  91. Dim oInfo       As MSXML2.IXMLDOMElement
  92. Dim oSubInfo    As MSXML2.IXMLDOMElement
  93. Dim oTmp        As MSXML2.IXMLDOMElement
  94.  
  95. Dim bInvoiceWritten As Boolean
  96. Dim bAccountWritten As Boolean
  97. Dim bBITWritten     As Boolean
  98. Dim bBITDBWritten   As Boolean
  99. Dim strSavedSwi As String
  100. Dim nRowCounter As Integer
  101. Dim strTable As String
  102. Dim strBITempSQLOutFile As String
  103.  
  104. Type Receipt
  105.  
  106.     DBID                    As String
  107.  
  108.     organizationID          As String ' Retrieved from PS
  109.     storeId                 As String ' /RetailCenter/Store/@storeId ' ApoteksID
  110.     storeRunNumber          As String ' /RetailCenter/Store/ReceiptHead/storeRunningNumber ' unique id within the store
  111.     transactionDate         As String ' /RetailCenter/Store/ReceiptHead/receiptDate
  112.     transactionTime         As String ' /RetailCenter/Store/ReceiptHead/receiptTime
  113.     receiptId               As String ' /RetailCenter/Store/ReceiptHead/receiptId
  114.     cashierId               As String ' /RetailCenter/Store/ReceiptHead/cashierId
  115.  
  116.     cardNumber              As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/CardInformation/cardNumber
  117.     itemNumber              As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/itemNumber
  118.     transactionType         As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/transactionType
  119.     category                As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/RcStatisticsInformation/category ' Varugrupp
  120.     EAN_Id                  As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/RcStatisticsInformation/Id ' EAN
  121.     amount                  As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/amount
  122.     amountNumber            As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/amountNumber
  123.  
  124.     customerNo              As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/Customer/customerNumber
  125.     customerName            As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/Customer/customerName
  126.     customerContact         As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/Customer/customerContact
  127.     customerRef             As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/Customer/customerRef
  128.     customerIdentification  As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/Customer/customerIdentification
  129.  
  130.     VATPercent              As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/RcStatisticsInformation/VATPercent
  131.     costPrice               As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/RcStatisticsInformation/costPrice
  132.     Id                      As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/id
  133.     subType                 As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/subType
  134.     originalCashRegister    As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/ReceiptOriginalInformation/originalCashRegister
  135.     RowNumber               As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/@RowNumber
  136.     receiptRowRefNumber     As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/receiptRowRefNumber
  137.     receiptRowText          As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/receiptRowText
  138.  
  139.     AterbetalningKredit     As String ' /???
  140.  
  141.     orderID                 As String ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/OrderInformation/orderId - transactiontype 1 and 6
  142.                                       ' /RetailCenter/Store/ReceiptHead/ReceiptRow[n]/extraRowInfo - transactiontype 95 and 96
  143.  
  144.     ArtikelID               As String ' */BLOB/Betalning/Vara/ArtikelID
  145.     ArtikelNamn             As String ' */BLOB/Betalning/Vara/ArtikelNamn
  146.     Antal                   As String ' */BLOB/Betalning/Vara/Antal
  147.     Varunummer              As String ' */BLOB/Betalning/Vara/Varunummer
  148.     Forsaljningspris        As String ' */BLOB/Betalning/Vara/Forsaljningspris
  149.     FormanExmoms            As String ' */BLOB/Betalning/Vara/FormanExmoms
  150.     SubvensionExmoms        As String ' */BLOB/Betalning/Vara/SubvensionExmoms
  151.  
  152.     AupExmoms               As String ' */BLOB/Betalning/Vara/AupExmoms
  153.  
  154.     ByteTillatet            As String
  155.     Formanstyp              As String
  156.     Arendetyp               As String
  157.     BetalningsDatum         As String
  158.     MerkostnadExmoms        As String
  159.     Forsaljningstyp         As String
  160.  
  161.  
  162.     SubventionsKomm         As String ' */BLOB/Betalning/Betalare/Subventionskommentar
  163.     Beskrivning             As String ' */BLOB/Betalning/Betalare/Beskrivning
  164.     KundFodelseDatum        As String ' */BLOB/Betalning/Receptkund/Fodelsedatum
  165.     KundKon                 As String ' */BLOB/Betalning/Receptkund/Kon ' Kön
  166.     ArbetsplatsKod          As String ' */BLOB/Betalning/Forskrivare/Arbetsplatskod
  167.     ForskrivarKod           As String ' */BLOB/Betalning/Forskrivare/Forskrivarkod
  168.     Momssatskod             As String ' */BLOB/Betalning/Summa/Momssatskod
  169.     Summa                   As String ' */BLOB/Betalning/Summa/Summa
  170.     Valutakod               As String ' */BLOB/Betalning/Summa/Valutakod
  171.     Momssumma               As String ' */BLOB/Betalning/Summa/Momssumma
  172.  
  173.     TransID                 As String ' */BLOB/Betalning/Referenser/TransID (ASAB)
  174.     ReceptArendeID          As String ' */BLOB/Betalning/Referenser/ReceptArendeID
  175.  
  176.  
  177. End Type
  178.  
  179.  
  180. Dim aRech(MAX_RECEIPTS)     As Receipt
  181.  
  182.  
  183. Type SEK
  184.  
  185.     SEx     As String ' Exmoms
  186.     SInk    As String ' Inkmoms
  187.     SMoms   As String ' momssumma
  188.     CostP   As String ' Momssats
  189.     ExtraInfo   As String ' Extra information
  190.  
  191. End Type
  192.  
  193.  
  194. Type TheAggregator
  195.  
  196.     ' Summeringsgruppering
  197.     ' ====================
  198.     Organisationsnr     As String
  199.     Apoteksid           As String
  200.     Datum               As String
  201.     StoreRunNumber      As String
  202.  
  203.  
  204.     ' Diverse
  205.     ' =======
  206.     Kontant             As SEK
  207.     KontantUtlandsk     As SEK
  208.     KortbetalningAMEX   As SEK
  209.     KortbetalningBABS   As SEK
  210.     KortbetalningDiners As SEK
  211.     KortbetalningOvrig  As SEK
  212.     Kupong              As SEK
  213.     Presentkort         As SEK
  214.     PresentkortSalda    As SEK
  215.     ASABavgift          As SEK
  216.     SummaASAB           As SEK
  217.     Rekvisition         As SEK
  218.     SubTotal            As SEK
  219.     OresAvrundning      As SEK
  220.     MomsBelopp          As SEK
  221.     MomsGrundBelopp     As SEK
  222.     FakturaAvgift       As SEK
  223.     FraktAvgift         As SEK
  224.     Goyada              as SEK
  225.  
  226.     DelBetalning(MAX_DELBET)    As SEK
  227.     nDelbetalningIdx    As Integer
  228.  
  229.     NBDirektBet(MAX_DELBET)     As SEK
  230.     nNBDirektBetIdx     As Integer
  231.  
  232.     SHBDirektBet(MAX_DELBET)    As SEK
  233.     nSHBDirektBetIdx    As Integer
  234.  
  235.     SEBDirektBet(MAX_DELBET)    As SEK
  236.     nSEBDirektBetIdx        As Integer
  237.  
  238.     FSPDirektBet(MAX_DELBET)    As SEK
  239.     nFSPDirektBetIdx    As Integer
  240.  
  241.     PayExFaktura(MAX_DELBET)    As SEK
  242.     nPayExFakturaIdx    As Integer
  243.  
  244.     PayExDelbet(MAX_DELBET) As SEK
  245.     nPayExDelbetIdx As Integer
  246.  
  247.     Rattelse            As SEK
  248.  
  249.     KupongRabatt        As SEK          '   Amount från "7"
  250.     RabattSubTot        As SEK          '   Amount från "3"
  251.     InbetFaktura        As SEK          '   Amount från "63"
  252.     BetTillgodoKvitto   As SEK          '   Amount från "45"
  253.     FsgTillgodoKvitto   As SEK          '   Amount från "46"
  254.     InlostBonuscheck    As SEK          '   Amount från "55"
  255.     FormanskortBonusgr  As SEK          '   Amount från "49"
  256.     InlostBonusbelopp   As SEK          '   Amount från "52"
  257.     Formanskort         As SEK          '   Amount från "61"
  258.     BetPresentkortAnnanButik As SEK     '   Amount från "67"
  259.     BetTillgodoAnnanButik As SEK        '   Amount från "70"
  260.     EfterregRabatt      As SEK          '   Amount från "90"
  261.     AterbetalningKredit As SEK          '   Amount från "87"
  262.  
  263.     Formansbelopp(4)    As SEK
  264.     Subvention(4)       As SEK
  265.     AterkopSystem(4)    As SEK
  266.     SystemForsalj(4)    As SEK
  267.     OspecOvrigUttag     As SEK
  268.     KontorsMateriel     As SEK
  269.     PersonalVard        As SEK
  270.     OvrigaUtlagg        As SEK
  271.  
  272.  
  273.     ' Förskrivet
  274.     ' ==========
  275.     F_RX(4)             As SEK
  276.     F_OTC(4)            As SEK
  277.     F_Livsmedel(4)      As SEK
  278.     F_Hjalpmedel(4)     As SEK
  279.     F_Bocker(4)         As SEK
  280.     F_Tjanster(4)       As SEK
  281.     F_Ovrigt(4)         As SEK
  282.  
  283.  
  284.     ' Återköp förskrivet
  285.     ' ==================
  286.     AF_RX(4)            As SEK
  287.     AF_OTC(4)           As SEK
  288.     AF_Livsmedel(4)     As SEK
  289.     AF_Hjalpmedel(4)    As SEK
  290.     AF_Bocker(4)        As SEK
  291.     AF_Tjanster(4)      As SEK
  292.     AF_Ovrigt(4)        As SEK
  293.  
  294.     ' Egenvård
  295.     ' ========
  296.     EV_RP0              As SEK ' Receptpåsar 0%
  297.     EV_RP6              As SEK ' Receptpåsar 6%
  298.     EV_RP12             As SEK ' Receptpåsar 12%
  299.     EV_RP25             As SEK ' Receptpåsar 25%
  300.  
  301.     EV_RX(4)            As SEK ' kommer nog inget här enligt spec
  302.     EV_OTC(4)           As SEK
  303.     EV_Livsmedel(4)     As SEK
  304.     EV_Hjalpmedel(4)    As SEK
  305.     EV_Bocker(4)        As SEK
  306.     EV_Tjanster(4)      As SEK
  307.     EV_VetArvode(4)     As SEK
  308.     EV_Ovrigt(4)        As SEK
  309.  
  310.     ' Egenvård Rabatt
  311.     ' ===============
  312.  
  313.     EVR_RP0             As SEK ' Receptpåsar 0%
  314.     EVR_RP6             As SEK ' Receptpåsar 6%
  315.     EVR_RP12            As SEK ' Receptpåsar 12%
  316.     EVR_RP25            As SEK ' Receptpåsar 25%
  317.  
  318.     EVR_RX(4)           As SEK ' kommer nog inget här enligt spec
  319.     EVR_OTC(4)          As SEK
  320.     EVR_Livsmedel(4)    As SEK
  321.     EVR_Hjalpmedel(4)   As SEK
  322.     EVR_Bocker(4)       As SEK
  323.     EVR_Tjanster(4)     As SEK
  324.     EVR_Ovrigt(4)       As SEK
  325.  
  326.  
  327.     ' Återköp egenvård
  328.     ' ================
  329.     AEV_RP0             As SEK ' Receptpåsar 0%
  330.     AEV_RP6             As SEK ' Receptpåsar 6%
  331.     AEV_RP12            As SEK ' Receptpåsar 12%
  332.     AEV_RP25            As SEK ' Receptpåsar 25%
  333.  
  334.     AEV_RX(4)               As SEK ' kommer nog inget här enligt spec
  335.     AEV_OTC(4)              As SEK
  336.     AEV_Livsmedel(4)        As SEK
  337.     AEV_Hjalpmedel(4)       As SEK
  338.     AEV_Bocker(4)           As SEK
  339.     AEV_Tjanster(4)         As SEK
  340.     AEV_VetArvode(4)        As SEK
  341.     AEV_Ovrigt(4)           As SEK
  342.  
  343.  
  344.  
  345. End Type
  346.  
  347.  
  348. Dim oDBcn           As ADODB.Connection
  349. Dim oDBrs           As ADODB.Recordset
  350. Dim oDBrsTmp        As ADODB.Recordset
  351. Dim oDBrsTmpII      As ADODB.Recordset
  352.  
  353. Dim oDBcnCognos             As ADODB.Connection
  354. Dim oDBrsCognos             As ADODB.Recordset
  355.  
  356.  
  357. Dim strTargetFolder         As String
  358. Dim strOutfile              As String
  359. Dim strOutfileTxt           As String
  360. Dim strOutfileInvoiceTxt(MAX_INVOICE_FILES)     As String
  361. Dim strOrganizationNumber(MAX_INVOICE_FILES)    As String
  362. Dim idxIVFile As Integer
  363.  
  364. Dim strBITextFile           As String
  365.  
  366.  
  367. Dim dict As New Dictionary
  368.  
  369.  
  370.  
  371. ' ==================================================================================
  372. ' The main procedure
  373. ' ==================================================================================
  374. Sub Main
  375. Dim i               As Integer
  376. Dim nFiles          As Long
  377. Dim strDBDSN        As String
  378. Dim strDBUserID     As String
  379. Dim strDBPassword   As String
  380. Dim strDBCogDSN         As String
  381. Dim strDBCogUserID  As String
  382. Dim strDBCogPassword    As String
  383.  
  384. Dim strSchemaFile   As String
  385. Dim strPONR         As String
  386. Dim strTemp         As String
  387. Dim bCreateTbl      As Boolean
  388.  
  389.  
  390.     On Error GoTo AllError
  391.  
  392.  
  393.     strDBDSN            = GetParameter( "+DBPharmaDSN" )
  394.     strDBUserID         = GetParameter( "DBPharmaUserID" )
  395.     strDBPassword       = GetParameter( "DBPharmaPassword" )
  396.     strDBTriggerName    = GetParameter( "-CogTriggerName", "PS_FSG_Trans" )
  397.  
  398.     strDBCogDSN         = GetParameter( "+DBCogDSN" )
  399.     strDBCogUserID      = GetParameter( "DBCogUserID" )
  400.     strDBCogPassword    = GetParameter( "DBCogPassword" )
  401.  
  402.     strSchemaFile       = GetParameter( "AGGXMLSchemaFile" )
  403.     strTargetFolder     = GetParameter( "+AGGTargetFolder" )
  404.     bCreateTbl          = CBool(GetParameter( "?-DBCreateTable", "0" ))
  405.     strPONR             = GetParameter( "-PONR", "0" )
  406.  
  407.  
  408.     strBITempSQLOutFile = CreateTempFile( "sql" )
  409.  
  410.     _NBR_TO_BLOCK       = CLng(GetParameter( "-#_NBR_TO_BLOCK_BI_TRANS", "1000" ))
  411.  
  412.     If( strPONR = "1" ) Then
  413.         ReportLog( RL_ERROR, "THIS INTEGRATION CANNOT BE RESTARTED AT THIS STATE. CONTACT ADMINISTRATORS. FILES MUST BE COPIED" )
  414.         Quit
  415.     End If
  416.  
  417.  
  418.     If( Not OpenDB( strDBDSN, strDBUserID, strDBPassword ) ) Then
  419.         ReportEvent( RE_ERROR, "Cannot open Aggregatorn database:" + strDBDSN )
  420.         Quit
  421.     End If
  422.  
  423.     If( Not OpenCognosDB( strDBCogDSN, strDBCogUserID, strDBCogPassword ) ) Then
  424.         ReportEvent( RE_ERROR, "Cannot open Cognos database:" + strDBDSN )
  425.         Quit
  426.     End If
  427.  
  428.     If( bCreateTbl ) Then
  429.         CreateTable()
  430.         Quit
  431.     End If
  432.  
  433.     InitXML()
  434.     PrepareDBData()
  435.  
  436.     SetParameter( "-AGGExecStart=" + Format(Now, "YYMMDD-hhmmss" ) )
  437.  
  438.     ReportEvent(RE_NORMAL, "GenerateInvoice START" )
  439.     bInvoiceWritten = False
  440.     GenerateInvoiceFiles()
  441.     ReportEvent(RE_INFO, "GenerateInvoice END" )
  442.  
  443.  
  444.  
  445.     ReportEvent(RE_NORMAL, "GenerateAccounting START" )
  446.     bAccountWritten = False
  447.     GenerateAccountingFiles()
  448.     ReportEvent(RE_INFO, "GenerateAccounting END" )
  449.  
  450. '   ReportEvent(RE_NORMAL, "GenerateBI START" )
  451. '   bBITWritten = False
  452. '   GenerateBITransactionFile()
  453. '   ReportEvent(RE_INFO, "GenerateBI END" )
  454.  
  455.     ReportEvent(RE_NORMAL, "InsertBI START" )
  456.     bBITDBWritten = False
  457.     InsertBIFromTblReceiptRows()
  458.     ReportEvent(RE_INFO, "InsertBI END" )
  459.  
  460.     ReportEvent(RE_NORMAL, "MarkAsProcessed START" )
  461.     oDBcn.BeginTrans()
  462.     MarkDBDataAsProcessed()
  463.     oDBcn.CommitTrans()
  464.     ReportEvent(RE_INFO, "MarkAsProcessed END" )
  465.  
  466.     SetParameter( "-PONR=1" )
  467.     ReportLog( RL_NORMAL, "File Created Step I||XMLFile Created/Deliverable=" + strOutfile + "|TxtFile Created/Deliverable=" + strOutfileTxt )
  468.  
  469.  
  470.     CloseDB()
  471.  
  472.     MoveFiles()
  473.  
  474.     Exit Sub
  475.  
  476. AllError:
  477.  
  478.     ReportEvent(RE_ERROR, "Main:" + Err.Description )
  479.     Quit
  480. End Sub
  481.  
  482.  
  483. Sub PrepareDBData()
  484. Dim strSQL As String
  485.  
  486.  
  487.     strTable = GetParameter( "-AGGTable", "tblreceiptrows" )
  488.  
  489.     ReportLog( RL_NORMAL, "||Table=" + strTable )
  490.  
  491.     On Error GoTo AllError
  492.  
  493.     strSQL = "DROP TABLE IF EXISTS tblReceiptRows_tmp;"
  494.     CloseRecordSet oDBrs
  495.     oDBrs.open(strSQL)
  496.  
  497.     strSQL = "CREATE TABLE tblReceiptRows_tmp LIKE " + strTable + ";"
  498.     CloseRecordSet oDBrs
  499.     oDBrs.open(strSQL)
  500.  
  501.  
  502.     strSQL = "INSERT INTO tblReceiptRows_tmp SELECT * from " + strTable + " WHERE " + strTable + ".State='I';"
  503.  
  504.     CloseRecordSet oDBrs
  505.     oDBrs.open(strSQL)
  506.  
  507.     Exit Sub
  508.  
  509. AllError:
  510.  
  511.     ReportEvent(RE_ERROR, "PrepareDBData:" + Err.Description )
  512.     Quit
  513. End Sub
  514.  
  515.  
  516. Sub MarkDBDataAsProcessed()
  517. Dim strCISID As String
  518. Dim strSQL As String
  519.  
  520.     On Error GoTo AllError
  521.  
  522.     strCISID = Replace( GetID(), "#", "" )
  523.  
  524.     strSQL = "UPDATE " + strTable + ",tblReceiptRows_tmp SET " + strTable + ".State = '" + strCISID + "' WHERE " + strTable + ".ID = tblReceiptRows_tmp.ID;"
  525.  
  526.     CloseRecordSet oDBrs
  527.     oDBrs.open(strSQL)
  528.  
  529.     Exit Sub
  530.  
  531. AllError:
  532.  
  533.     ReportEvent(RE_ERROR, "MarkDBDataAsProcessed:" + Err.Description )
  534.     Quit
  535.  
  536. End Sub
  537.  
  538.  
  539. Sub GenerateAccountingFiles()
  540.     Dim strSQL      As String
  541.     Dim rec         As Receipt
  542.     Dim strSavedID  As String
  543.     Dim strOldID    As String
  544.     Dim agg         As TheAggregator
  545.     Dim strTempFile As String
  546.     Dim bSumPrinted As Boolean
  547.     Dim bFirstTime As Boolean
  548.     Dim strRestartUpdated As String
  549.  
  550.     Dim numRecepits     As Long
  551.     Dim numRecepitsTmp  As Long
  552.     Dim bOpen           As Boolean
  553.     Dim bContinue       As Boolean
  554.  
  555.  
  556.  
  557.     On Error GoTo AllError
  558.  
  559.  
  560.     numRecepits = 30000
  561.     numRecepitsTmp = numRecepits
  562.     bContinue = True
  563.  
  564.  
  565.     ' Prepare processed table
  566.     strSQL = "TRUNCATE TABLE tblReceiptRows_processed"
  567.     CloseRecordSet oDBrs
  568.     oDBrs.open(strSQL)
  569.  
  570.     strSQL = "ALTER TABLE tblReceiptRows_processed AUTO_INCREMENT=1"
  571.     CloseRecordSet oDBrs
  572.     oDBrs.open(strSQL)
  573.  
  574.     ' Populate processed table
  575.     strSQL = "INSERT INTO tblReceiptRows_processed(StoreRunNumber) SELECT DISTINCT(StoreRunNumber) FROM tblReceiptRows_tmp WHERE State='I';"
  576.     CloseRecordSet oDBrs
  577.     oDBrs.open(strSQL)
  578.  
  579.     ' Get an initial result
  580.     strSQL = "SELECT * FROM tblReceiptRows_processed WHERE processed <> 1 LIMIT 1"
  581.     CloseRecordSet oDBrs
  582.     oDBrs.open(strSQL)
  583.  
  584.     If oDBrs.RecordCount = 0 Then
  585.         ReportLog( RL_NORMAL, "NO RECORDS TO PROCESS..." )
  586.         Quit
  587.     End If
  588.  
  589.  
  590.     strOutfile              = GetParameter( "-XMLTmpfile" )
  591.     strOutfileTxt           = GetParameter( "-TXTTmpfile" )
  592.  
  593.     If( strOutfile = "" ) Then
  594.  
  595.         strOutfile              = CreateTempFile( "xml", False )
  596.         SetParameter( "-XMLTmpfile=" + strOutfile )
  597.  
  598.         strOutfileTxt           = CreateTempFile( "txt", False )
  599.         SetParameter( "-TXTTmpfile=" + strOutfileTxt )
  600.  
  601.     End If
  602.  
  603.     Open strOutfileTxt For Output As #1
  604.  
  605.     While bContinue And ContinueRun()
  606.  
  607.         ReportEvent(RE_INFO, "Processing " & CStr(numRecepits) & " receipts, tot receipts: " & CStr(numRecepitsTmp))
  608.  
  609.         strSQL = "SELECT * FROM tblReceiptRows_tmp tt " + _
  610.                 "INNER JOIN tblReceiptRows_processed tp ON tt.StoreRunNumber = tp.StoreRunNumber and tp.id < " & CStr(numRecepitsTmp) & " and tp.processed <> 1 " + _
  611.                 "ORDER BY tt.organizationID, tt.storeId, tt.transactionDate, tt.storeRunNumber, tt.receiptRowRefNumber, tt.RowNumber, tt.transactionType"
  612.  
  613.         CloseRecordSet oDBrs
  614.         oDBrs.open(strSQL)
  615.  
  616.         bContinue = False
  617.  
  618.         ResetAgg( agg )
  619.  
  620.         If(oDBrs.RecordCount > 0 ) Then
  621.  
  622.             bContinue = True
  623.  
  624.             bAccountWritten = True
  625.  
  626.  
  627.             strOldID = ""
  628.             bFirstTime = True
  629.             bSumPrinted = False
  630.             While Not oDBrs.EOF And ContinueRun()
  631.  
  632.                 GetDataFromDB( rec, oDBrs )
  633.  
  634.                 strSavedID = rec.organizationID + rec.storeId + rec.transactionDate
  635.  
  636.                 If( strSavedID <> strOldID ) Then
  637.  
  638.                     If( bFirstTime ) Then
  639.                         bFirstTime = False
  640.                     Else
  641.                         bSumPrinted = True
  642.  
  643.                         AddXMLInfo( agg )
  644.  
  645.                     End If
  646.  
  647.                     agg.Organisationsnr = rec.organizationID
  648.                     agg.Apoteksid       = rec.storeId
  649.                     agg.Datum           = rec.transactionDate
  650.  
  651.                     ResetAgg( agg )
  652.  
  653.                     Aggregate( agg, rec )
  654.  
  655.                     strOldID = strSavedID
  656.  
  657.  
  658.                 Else
  659.  
  660.                     Aggregate( agg, rec )
  661.  
  662.                     bSumPrinted = False
  663.  
  664.                 End If
  665.  
  666.                 oDBrs.MoveNext
  667.  
  668.             Wend
  669.  
  670.             ' update processed rows in processed table
  671.             strSQL = "UPDATE tblReceiptRows_processed set processed = 1 where processed = 0 and id < " & CStr(numRecepitsTmp)
  672.             CloseRecordSet oDBrs
  673.             oDBrs.open(strSQL)
  674.  
  675.             numRecepitsTmp = numRecepitsTmp + numRecepits
  676.  
  677.             If Not ContinueRun() Then
  678.                 ReportEvent(RE_ERROR, "Quitting on users request..." )
  679.                 Quit
  680.             End If
  681.  
  682.             If( Not bSumPrinted ) Then
  683.                 AddXMLInfo( agg )
  684.             End If
  685.  
  686.         End If
  687.  
  688.     Wend
  689.  
  690.     oXml.save( strOutfile )
  691.     Close #1
  692.  
  693.  
  694.     Exit Sub
  695.  
  696. AllError:
  697.     ReportEvent(RE_ERROR, "GenerateAccountingFiles:" + Err.Description + " : " + CStr(Err.Number) + " : 0x" + Hex( Err.Number ) )
  698.     Quit
  699.  
  700. End Sub
  701.  
  702.  
  703. Sub CloseRecordSet( o As Object )
  704.  
  705.     If o.State = adStateOpen Then
  706.         o.Close
  707.     End If
  708.  
  709. End Sub
  710.  
  711.  
  712. Function OpenDB(strDSN As String, strUser As String, strPwd As String, Optional strDefaultDB As String = "" ) As Boolean
  713. Dim strCnn As String
  714.  
  715.     On Error GoTo AllError
  716.     OpenDB = False
  717.  
  718.  
  719.     If( strUser <> "" ) Then
  720.         strCnn = "DSN=" & strDSN & ";UID=" & strUser & ";PWD=" & strPwd
  721.     Else
  722.         strCnn = "DSN=" & strDSN & ";Trusted_Connection=yes"
  723.     End If
  724.  
  725.     ' to get correct dateformat when storing timestamp in database.
  726.     SetLocale &H41D
  727.  
  728.     ' Create and open database connection
  729.     Set oDBcn = CreateObject("ADODB.Connection")
  730.     oDBcn.open strCnn
  731.  
  732.     If( strDefaultDB <> "" ) Then
  733.         oDBcn.DefaultDatabase = strDefaultDB
  734.     End If
  735.  
  736.     Set oDBrs       = CreateObject("ADODB.Recordset")
  737.     Set oDBrsTmp    = CreateObject("ADODB.Recordset")
  738.     Set oDBrsTmpII  = CreateObject("ADODB.Recordset")
  739.  
  740.     ' Open DB and return record rows, if any
  741.     With oDBrs
  742.         .ActiveConnection = oDBcn
  743.         .CursorLocation = adUseClient
  744.         .CursorType     = adOpenKeyset      'adOpenDynamic
  745.         .LockType       = adLockOptimistic  'adLockPessimIStic
  746.     End With
  747.  
  748.     With oDBrsTmp
  749.         .ActiveConnection = oDBcn
  750.         .CursorLocation = adUseClient
  751.         .CursorType     = adOpenKeyset      'adOpenDynamic
  752.         .LockType       = adLockOptimistic  'adLockPessimIStic
  753.     End With
  754.  
  755.     With oDBrsTmpII
  756.         .ActiveConnection = oDBcn
  757.         .CursorLocation = adUseClient
  758.         .CursorType     = adOpenKeyset      'adOpenDynamic
  759.         .LockType       = adLockOptimistic  'adLockPessimIStic
  760.     End With
  761.  
  762.     OpenDB = True
  763.  
  764.     Exit Function
  765.  
  766. AllError:
  767.     ReportEvent( RE_ERROR, "OpenDB:" + Err.Description )
  768.     Quit
  769.  
  770. End Function
  771.  
  772.  
  773. Function OpenCognosDB(strDSN As String, strUser As String, strPwd As String, Optional strDefaultDB As String = "" ) As Boolean
  774. Dim strCnn As String
  775.  
  776.     On Error GoTo AllError
  777.     OpenCognosDB = False
  778.  
  779.  
  780.     If( strUser <> "" ) Then
  781.         strCnn = "DSN=" & strDSN & ";UID=" & strUser & ";PWD=" & strPwd
  782.     Else
  783.         strCnn = "DSN=" & strDSN & ";Trusted_Connection=yes"
  784.     End If
  785.  
  786.     ' to get correct dateformat when storing timestamp in database.
  787.     SetLocale &H41D
  788.  
  789.     ' Create and open database connection
  790.     Set oDBcnCognos = CreateObject("ADODB.Connection")
  791.  
  792.  
  793.     With oDBcnCognos
  794.         .ConnectionTimeout  = 1400 ' = 4 hours
  795.         .CommandTimeout     =  1400
  796.     End With
  797.  
  798.  
  799.     oDBcnCognos.open strCnn
  800.  
  801.     If( strDefaultDB <> "" ) Then
  802.         oDBcnCognos.DefaultDatabase = strDefaultDB
  803.     End If
  804.  
  805.     Set oDBrsCognos     = CreateObject("ADODB.Recordset")
  806.  
  807.     With oDBrsCognos
  808.         .ActiveConnection = oDBcnCognos
  809.         .CursorLocation = adUseClient
  810.         .CursorType     = adOpenKeyset
  811.         .LockType       = adLockOptimistic
  812.     End With
  813.  
  814.  
  815.     OpenCognosDB = True
  816.  
  817.     Exit Function
  818.  
  819. AllError:
  820.     ReportEvent( RE_ERROR, "OpenCognosDB:" + Err.Description )
  821.     Quit
  822.  
  823. End Function
  824.  
  825.  
  826.  
  827.  
  828.  
  829. Sub CloseDB
  830.  
  831.     Set oDBcn = Nothing
  832.     Set oDBrs = Nothing
  833.  
  834. End Sub
  835.  
  836. Sub MoveFiles()
  837. Dim strTargetFile As String
  838. Dim strAggExecStart As String
  839. Dim strNamePart As String
  840. Dim i As Integer
  841.  
  842.     On Error GoTo AllError
  843.  
  844.     strAggExecStart = GetParameter( "-AGGExecStart" )
  845.  
  846.  
  847.     If( bAccountWritten ) Then
  848.  
  849.         ' XML
  850.         strNamePart = Replace(GetID(), "#", "" ) + strAggExecStart + "_bokf.xml"
  851.         strTargetFile = strTargetFolder + "\" + strNamePart
  852.         FileCopy strOutfile, strTargetFile
  853.  
  854.         ' for use in subsequent script/components
  855.         SetParameter( "XMLFile=" + strTargetFile )
  856.         SetParameter( "XMLFileName=" + strNamePart )
  857.         ReportLog( RL_NORMAL, "File Delivered Step I||Accounting file delivered XML=" + strTargetFile )
  858.  
  859.         ' Textfile
  860.         strNamePart = Replace(GetID(), "#", "" ) + strAggExecStart + "_bokf.txt"
  861.         strTargetFile = strTargetFolder + "\" + strNamePart
  862.         FileCopy strOutfileTxt, strTargetFile
  863.  
  864.         ' for use in subsequent script/components
  865.         SetParameter( "TXTFile=" + strTargetFile )
  866.         SetParameter( "TXTFileName=" + strNamePart )
  867.         ReportLog( RL_NORMAL, "File Delivered Step I||Accounting file delivered TXT=" + strTargetFile )
  868.  
  869.     Else
  870.         ReportLog( RL_NORMAL, "File Delivered Step I||Accounting file NOT delivered TXT=No records written" )
  871.     End If
  872.  
  873.  
  874.     ' Invoice textfile
  875.     If( bInvoiceWritten ) Then
  876.  
  877.         For i = 0 To idxIVFile-1
  878.  
  879.             strNamePart = Replace(GetID(), "#", "" ) + strAggExecStart + "_" + strOrganizationNumber(i) + "_" + CStr(i) + "_invoice.edi"
  880.             strTargetFile = strTargetFolder + "\" + strNamePart
  881.             FileCopy strOutfileInvoiceTxt(i), strTargetFile
  882.  
  883.             ReportLog( RL_NORMAL, "File Delivered Step I||Invoice file delivered TXT=" + strTargetFile )
  884.  
  885.         Next i
  886.  
  887.     Else
  888.         ReportLog( RL_NORMAL, "File Delivered Step I||Invoice file NOT delivered TXT=No records written" )
  889.     End If
  890.  
  891.  
  892.     If( bBITWritten  ) Then
  893.  
  894.         strNamePart = Replace(GetID(), "#", "" ) + strAggExecStart + "_bitrans.edi"
  895.         strTargetFile = strTargetFolder + "\" + strNamePart
  896.         FileCopy strBITextFile, strTargetFile
  897.  
  898.         ' for use in subsequent script/components
  899.         SetParameter( "TXTBIFile=" + strTargetFile )
  900.         SetParameter( "TXTBIName=" + strNamePart )
  901.         ReportLog( RL_NORMAL, "File Delivered Step I||BI-Transactionfile file delivered TXT=" + strTargetFile )
  902.  
  903.  
  904.     End If
  905.  
  906.     Exit Sub
  907.  
  908. AllError:
  909.     ReportEvent( RE_ERROR, "MoveFiles:" + Err.Description )
  910.     ReportEvent( RE_WARNING, "Trying to copy/move file:" )
  911.     ReportEvent( RE_WARNING, strOutfileInvoiceTxt(i) + " to:" )
  912.     ReportEvent( RE_WARNING, strTargetFile )
  913.  
  914.     Quit
  915.  
  916. End Sub
  917.  
  918.  
  919.  
  920. Sub Aggregate( a As TheAggregator, r As Receipt )
  921.  
  922.     Dim sVGrupp As String
  923.     Dim strTmp As String
  924.     Dim vp As Integer
  925.     On Error GoTo AllError
  926.  
  927.  
  928.     Select Case r.transactionType
  929.  
  930.         Case "1"
  931.  
  932.             ' EGENVÅRD
  933.             ' ========
  934.             sVGrupp = GetVGrupp( r.category )
  935.  
  936.             Select Case sVGrupp
  937.  
  938.                 Case "100"
  939.  
  940.                     If( r.VATPercent = "" ) Then
  941.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  942.                         Quit
  943.                     End If
  944.  
  945.                     vp = GetIdxFromVAT( r.VATPercent )
  946.                     a.EV_RX(vp) = ComputeAllValues( a.EV_RX(vp), "ADD", r)
  947.  
  948.                 Case "200"
  949.  
  950.                     If( r.VATPercent = "" ) Then
  951.                         ReportEvent( RE_NORMAL, "Storerunnumber:" + r.storeRunNumber )
  952.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  953.                         Quit
  954.                     End If
  955.  
  956.                     vp = GetIdxFromVAT( r.VATPercent )
  957.                     a.EV_OTC(vp) = ComputeAllValues( a.EV_OTC(vp), "ADD", r)
  958.  
  959.  
  960.                 Case "300"
  961.  
  962.                     If( r.VATPercent = "" ) Then
  963.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  964.                         Quit
  965.                     End If
  966.  
  967.                     vp = GetIdxFromVAT( r.VATPercent )
  968.                     a.EV_Livsmedel(vp) = ComputeAllValues( a.EV_Livsmedel(vp), "ADD", r)
  969.  
  970.  
  971.                 Case "400"
  972.  
  973.                     ' Hjälpmedel
  974.  
  975.                     If( r.VATPercent = "" ) Then
  976.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  977.                         Quit
  978.                     End If
  979.  
  980.                     If( Left(r.VATPercent, 2) = "25" )  Then
  981.  
  982.                         vp = GetIdxFromVAT( r.VATPercent )
  983.                         a.EV_Hjalpmedel(vp) = ComputeAllValues( a.EV_Hjalpmedel(vp), "ADD", r)
  984.  
  985.                     ElseIf( Left(r.VATPercent, 1) = "6" ) Then
  986.  
  987.                         vp = GetIdxFromVAT( r.VATPercent )
  988.                         a.EV_Bocker(vp) = ComputeAllValues( a.EV_Bocker(vp), "ADD", r)
  989.  
  990.                     Else
  991.  
  992.                         ReportEvent( RE_ERROR, "******INCORRECT VAT: for " + r.transactionType + ":" + sVGrupp + ", VAT:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  993.                         ReportEvent( RE_WARNING, "This process is not stopped..." )
  994.  
  995.                     End If
  996.  
  997.  
  998.                 Case "500"
  999.  
  1000.  
  1001.                     ' TJANSTER
  1002.                     ' ========
  1003.  
  1004.                     If( r.VATPercent = "" ) Then
  1005.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1006.                         Quit
  1007.                     End If
  1008.  
  1009.                     vp = GetIdxFromVAT( r.VATPercent )
  1010.  
  1011.                     a.EV_Tjanster(vp) = ComputeAllValues( a.EV_Tjanster(vp), "ADD", r)
  1012.  
  1013.                 ' ---------------
  1014.  
  1015.  
  1016.                 Case "610"
  1017.  
  1018.                     If( r.VATPercent = "" ) Then
  1019.                         ReportEvent( RE_NORMAL, "Storerunnumber:" + r.storeRunNumber )
  1020.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1021.                         Quit
  1022.                     End If
  1023.  
  1024.                     ' receptpåse 0%
  1025.                     a.EV_RP0 = ComputeAllValues( a.EV_RP0, "ADD", r)
  1026.  
  1027.                 Case "620"
  1028.  
  1029.                     If( r.VATPercent = "" ) Then
  1030.                         r.VATPercent = "6.00"
  1031.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1032.                     End If
  1033.  
  1034.                     ' receptpåse 6%
  1035.                     a.EV_RP6 = ComputeAllValues( a.EV_RP6, "ADD", r )
  1036.  
  1037.                 Case "630"
  1038.  
  1039.                     If( r.VATPercent = "" ) Then
  1040.                         r.VATPercent = "12.00"
  1041.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1042.                     End If
  1043.  
  1044.                     ' receptpåse 12%
  1045.                     a.EV_RP12 = ComputeAllValues( a.EV_RP12, "ADD", r )
  1046.  
  1047.                 Case "640"
  1048.  
  1049.                     If( r.VATPercent = "" ) Then
  1050.                         r.VATPercent = "25.00"
  1051.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1052.                     End If
  1053.  
  1054.                     ' receptpåse 25%
  1055.  
  1056.                     a.EV_RP25 = ComputeAllValues( a.EV_RP25, "ADD", r )
  1057.  
  1058.                 Case Else
  1059.  
  1060.                     If( r.VATPercent = "" ) Then
  1061.                         r.VATPercent = "25.00"
  1062.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1063.                     End If
  1064.  
  1065.                     If( r.itemNumber = "36650" ) Then
  1066.                         vp = GetIdxFromVAT( r.VATPercent )
  1067.                         a.EV_VetArvode(vp) = ComputeAllValues( a.EV_VetArvode(vp), "ADD", r)
  1068.                     Else
  1069.                         vp = GetIdxFromVAT( r.VATPercent )
  1070.                         a.EV_Ovrigt(vp) = ComputeAllValues( a.EV_Ovrigt(vp), "ADD", r)
  1071.                     End If
  1072.  
  1073.             End Select
  1074.  
  1075.  
  1076.         Case "2"
  1077.  
  1078.             ' EGENVÅRD RABATT
  1079.             ' ===============
  1080.             sVGrupp = GetVGrupp( r.category )
  1081.  
  1082.             Select Case sVGrupp
  1083.  
  1084.                 Case "100"
  1085.  
  1086.                     If( r.VATPercent = "" ) Then
  1087.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1088.                         Quit
  1089.                     End If
  1090.  
  1091.                     vp = GetIdxFromVAT( r.VATPercent )
  1092.                     a.EVR_RX(vp) = ComputeAllValues( a.EVR_RX(vp), "ADD", r)
  1093.  
  1094.                 Case "200"
  1095.  
  1096.                     If( r.VATPercent = "" ) Then
  1097.                         ReportEvent(RE_INFO, "RowID:" + CStr(r.Id) )
  1098.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1099.                         Quit
  1100.                     End If
  1101.  
  1102.                     vp = GetIdxFromVAT( r.VATPercent )
  1103.                     a.EVR_OTC(vp) = ComputeAllValues( a.EVR_OTC(vp), "ADD", r)
  1104.  
  1105.  
  1106.                 Case "300"
  1107.  
  1108.                     If( r.VATPercent = "" ) Then
  1109.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1110.                         Quit
  1111.                     End If
  1112.  
  1113.                     vp = GetIdxFromVAT( r.VATPercent )
  1114.                     a.EVR_Livsmedel(vp) = ComputeAllValues( a.EVR_Livsmedel(vp), "ADD", r)
  1115.  
  1116.                 Case "400"
  1117.  
  1118.                     ' Hjälpmedel
  1119.  
  1120.                     If( r.VATPercent = "" ) Then
  1121.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1122.                         Quit
  1123.                     End If
  1124.  
  1125.                     If( Left(r.VATPercent, 2) = "25" )  Then
  1126.  
  1127.                         vp = GetIdxFromVAT( r.VATPercent )
  1128.                         a.EVR_Hjalpmedel(vp) = ComputeAllValues( a.EVR_Hjalpmedel(vp), "ADD", r)
  1129.  
  1130.                     ElseIf( Left(r.VATPercent, 1) = "6" ) Then
  1131.  
  1132.                         vp = GetIdxFromVAT( r.VATPercent )
  1133.                         a.EVR_Bocker(vp) = ComputeAllValues( a.EVR_Bocker(vp), "ADD", r)
  1134.  
  1135.                     Else
  1136.  
  1137.                         ReportEvent( RE_ERROR, "******INCORRECT VAT: for " + r.transactionType + ":" + sVGrupp + ", VAT:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1138.                         ReportEvent( RE_WARNING, "This process is not stopped..." )
  1139.  
  1140.                     End If
  1141.  
  1142.  
  1143.                 Case "500"
  1144.  
  1145.  
  1146.                     ' TJANSTER
  1147.                     ' ========
  1148.  
  1149.                     If( r.VATPercent = "" ) Then
  1150.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1151.                         Quit
  1152.                     End If
  1153.  
  1154.                     vp = GetIdxFromVAT( r.VATPercent )
  1155.  
  1156.                     a.EVR_Tjanster(vp) = ComputeAllValues( a.EVR_Tjanster(vp), "ADD", r)
  1157.  
  1158.                 ' ---------------
  1159.  
  1160.  
  1161.                 Case "610"
  1162.  
  1163.                     If( r.VATPercent = "" ) Then
  1164.                         r.VATPercent = "0.00"
  1165.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1166.                         Quit
  1167.                     End If
  1168.  
  1169.                     ' receptpåse 0%
  1170.                     a.EVR_RP0 = ComputeAllValues( a.EVR_RP0, "ADD", r)
  1171.  
  1172.                 Case "620"
  1173.  
  1174.                     If( r.VATPercent = "" ) Then
  1175.                         r.VATPercent = "6.00"
  1176.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1177.                     End If
  1178.  
  1179.                     ' receptpåse 6%
  1180.                     a.EVR_RP6 = ComputeAllValues( a.EVR_RP6, "ADD", r )
  1181.  
  1182.                 Case "630"
  1183.  
  1184.                     If( r.VATPercent = "" ) Then
  1185.                         r.VATPercent = "12.00"
  1186.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1187.                     End If
  1188.  
  1189.                     ' receptpåse 12%
  1190.                     a.EVR_RP12 = ComputeAllValues( a.EVR_RP12, "ADD", r )
  1191.  
  1192.                 Case "640"
  1193.  
  1194.                     If( r.VATPercent = "" ) Then
  1195.                         r.VATPercent = "25.00"
  1196.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1197.                     End If
  1198.  
  1199.                     ' receptpåse 25%
  1200.  
  1201.                     a.EVR_RP25 = ComputeAllValues( a.EVR_RP25, "ADD", r )
  1202.  
  1203.                 Case Else
  1204.  
  1205.                     If( r.VATPercent = "" ) Then
  1206.                         r.VATPercent = "25.00"
  1207.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":600_" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1208.                     End If
  1209.  
  1210.                     vp = GetIdxFromVAT( r.VATPercent )
  1211.                     a.EVR_Ovrigt(vp) = ComputeAllValues( a.EVR_Ovrigt(vp), "ADD", r)
  1212.  
  1213.             End Select
  1214.  
  1215.  
  1216.         Case "3"
  1217.  
  1218.             a.RabattSubTot.SInk = addIt( a.RabattSubTot.SInk, r.amount )
  1219.  
  1220.         Case "5"
  1221.  
  1222.             a.Rattelse.SInk = addIt( a.Rattelse.SInk, r.amount )
  1223.  
  1224.         Case "6"
  1225.  
  1226.             ' EGENVÅRD ÅTERKÖP
  1227.             ' =================
  1228.             sVGrupp = GetVGrupp( r.category )
  1229.  
  1230.             Select Case sVGrupp
  1231.  
  1232.                 Case "100"
  1233.                     If( r.VATPercent = "" ) Then
  1234.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1235.                         Quit
  1236.                     End If
  1237.  
  1238.                     vp = GetIdxFromVAT( r.VATPercent )
  1239.                     a.AEV_RX(vp) = ComputeAllValues( a.AEV_RX(vp), "ADD", r)
  1240.  
  1241.                 Case "200"
  1242.                     If( r.VATPercent = "" ) Then
  1243.                         ReportEvent(RE_INFO, "RowID:" + CStr(r.Id) )
  1244.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1245.                         Quit
  1246.                     End If
  1247.  
  1248.                     vp = GetIdxFromVAT( r.VATPercent )
  1249.                     a.AEV_OTC(vp) = ComputeAllValues( a.AEV_OTC(vp), "ADD", r)
  1250.  
  1251.                 Case "300"
  1252.                     If( r.VATPercent = "" ) Then
  1253.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1254.                         Quit
  1255.                     End If
  1256.  
  1257.                     vp = GetIdxFromVAT( r.VATPercent )
  1258.                     a.AEV_Livsmedel(vp) = ComputeAllValues( a.AEV_Livsmedel(vp), "ADD", r)
  1259.  
  1260.                 Case "400"
  1261.  
  1262.                     If( r.VATPercent = "" ) Then
  1263.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1264.                         Quit
  1265.                     End If
  1266.  
  1267.                     ' Category = "400" med VATpercent = 25
  1268.                     ' Hjälpmedel
  1269.                     If( r.VATPercent = "25.00" ) Then
  1270.  
  1271.                         vp = GetIdxFromVAT( r.VATPercent )
  1272.                         a.AEV_Hjalpmedel(vp) = ComputeAllValues( a.AEV_Hjalpmedel(vp), "ADD", r)
  1273.  
  1274.                     ElseIf( r.VATPercent = "6.00" ) Then
  1275.  
  1276.                         vp = GetIdxFromVAT( r.VATPercent )
  1277.                         a.AEV_Bocker(vp) = ComputeAllValues( a.AEV_Bocker(vp), "ADD", r)
  1278.  
  1279.                     Else
  1280.                         ReportEvent( RE_ERROR, "******INCORRECT VAT: for " + r.transactionType + ":" + sVGrupp + ", VAT:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1281.                         ReportEvent( RE_WARNING, "This process is not stopped..." )
  1282.                     End If
  1283.  
  1284.  
  1285.                 Case "500"
  1286.                     If( r.VATPercent = "" ) Then
  1287.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1288.                         Quit
  1289.                     End If
  1290.  
  1291.                     vp = GetIdxFromVAT( r.VATPercent )
  1292.                     a.AEV_Tjanster(vp) = ComputeAllValues( a.AEV_Tjanster(vp), "ADD", r)
  1293.  
  1294.                     ' --------------------
  1295.  
  1296.                 Case "610"
  1297.                     If( r.VATPercent = "" ) Then
  1298.                         r.VATPercent = "0.00"
  1299.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1300.                     End If
  1301.  
  1302.                     ' receptpåse 0%
  1303.                     a.AEV_RP0 = ComputeAllValues( a.AEV_RP0, "ADD", r)
  1304.  
  1305.                 Case "620"
  1306.                     If( r.VATPercent = "" ) Then
  1307.                         r.VATPercent = "6.00"
  1308.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1309.                     End If
  1310.  
  1311.                     ' receptpåse 6%
  1312.                     a.AEV_RP6 = ComputeAllValues( a.AEV_RP6, "ADD", r)
  1313.  
  1314.                 Case "630"
  1315.                     If( r.VATPercent = "" ) Then
  1316.                         r.VATPercent = "12.00"
  1317.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1318.                     End If
  1319.  
  1320.                     ' receptpåse 12%
  1321.                     a.AEV_RP12 = ComputeAllValues( a.AEV_RP12, "ADD", r)
  1322.  
  1323.                 Case "640"
  1324.                     If( r.VATPercent = "" ) Then
  1325.                         r.VATPercent = "25.00"
  1326.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1327.                     End If
  1328.  
  1329.                     ' receptpåse 25%
  1330.                     a.AEV_RP25 = ComputeAllValues( a.AEV_RP25, "ADD", r)
  1331.  
  1332.                 Case Else
  1333.  
  1334.                     If( r.VATPercent = "" ) Then
  1335.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1336.                         Quit
  1337.                     End If
  1338.  
  1339.                     If( r.itemNumber = "36650" ) Then
  1340.                         vp = GetIdxFromVAT( r.VATPercent )
  1341.                         a.AEV_VetArvode(vp) = ComputeAllValues( a.AEV_VetArvode(vp), "ADD", r)
  1342.                     Else
  1343.                         vp = GetIdxFromVAT( r.VATPercent )
  1344.                         a.AEV_Ovrigt(vp) = ComputeAllValues( a.AEV_Ovrigt(vp), "ADD", r)
  1345.                     End If
  1346.  
  1347.  
  1348.             End Select
  1349.  
  1350.         Case "7"
  1351.             a.KupongRabatt.SInk = addIt( a.KupongRabatt.SInk, r.amount )                    '   Amount från "7"
  1352.  
  1353.         Case "10"
  1354.             ' "Amount från "10" adderas. Dra bort från "18"
  1355.             a.Kontant.SInk = addIt( a.Kontant.SInk, r.amount )
  1356.  
  1357.         Case "11"
  1358.             'Lägg till Amount från "11","17", "19", "71", "73" och "74"
  1359.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1360.  
  1361.         Case "12"
  1362.  
  1363.             Select Case Left(r.cardNumber, 2 )
  1364.  
  1365.                 Case "34", "37"
  1366.                     a.KortbetalningAMEX.SInk = addIt( a.KortbetalningAMEX.SInk, r.amount )
  1367.  
  1368.                 Case "30", "36", "38"
  1369.                     a.KortbetalningDiners.SInk = addIt( a.KortbetalningDiners.SInk, r.amount )
  1370.  
  1371.                 Case Else
  1372.                     a.KortbetalningBABS.SInk = addIt( a.KortbetalningBABS.SInk, r.amount )
  1373.  
  1374.             End Select
  1375.  
  1376.         Case "13"
  1377.  
  1378.             a.Rekvisition.SInk = addIt( a.Rekvisition.SInk, r.amount )
  1379.  
  1380.         Case "14"
  1381.             a.Presentkort.SInk = addIt( a.Presentkort.SInk, r.amount )
  1382.  
  1383.         Case "15"
  1384.  
  1385.             a.PresentkortSalda.SInk = addIt( a.PresentkortSalda.SInk, r.amount )
  1386.  
  1387.         Case "16"
  1388.             a.Kupong.SInk = addIt( a.Kupong.SInk, r.amount )
  1389.  
  1390.         Case "17"
  1391.             'Lägg till Amount från "11", "17", "19", "71", "73" och "74"
  1392.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1393.  
  1394.         Case "18"
  1395.             ' "Amount från "10" adderas. Dra bort från "18".
  1396.             a.Kontant.SInk = subtractIt( a.Kontant.SInk, r.amount )
  1397.  
  1398.         Case "19"
  1399.             'Lägg till Amount från "11", "17", "19", "71", "73" och "74"
  1400.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1401.  
  1402.         Case "31"
  1403.             ' ändrat 2011-01-25 subtractit till addit
  1404.             a.SubTotal.SInk = addIt( a.SubTotal.SInk, r.amount )
  1405.  
  1406.         Case "21"
  1407.             a.OresAvrundning.SEx = subtractIt( a.OresAvrundning.SEx, r.amount )
  1408.  
  1409.         Case "45"
  1410.             a.BetTillgodoKvitto.SInk = addIt( a.BetTillgodoKvitto.SInk, r.amount )              '   Amount från "45"
  1411.  
  1412.         Case "46"
  1413.             a.FsgTillgodoKvitto.SInk = addIt( a.FsgTillgodoKvitto.SInk, r.amount )              '   Amount från "46"
  1414.  
  1415.         Case "49"
  1416.             a.FormanskortBonusgr.SInk = addIt( a.FormanskortBonusgr.SInk, r.amount )            '   Amount från "49"
  1417.  
  1418.         Case "50"
  1419.             a.MomsBelopp.SMoms = subtractIt( a.MomsBelopp.SMoms, r.amount )
  1420.  
  1421.         Case "51"
  1422.             a.MomsGrundBelopp.SEx = addIt( a.MomsGrundBelopp.SEx, r.amount )
  1423.  
  1424.         Case "52"
  1425.             a.InlostBonusbelopp.SInk = addIt( a.InlostBonusbelopp.SInk, r.amount )              '   Amount från "52"
  1426.  
  1427.         Case "55"
  1428.             a.InlostBonuscheck.SInk = addIt( a.InlostBonuscheck.SInk, r.amount )                '   Amount från "55"
  1429.  
  1430.         Case "61"
  1431.             a.Formanskort.SInk = addIt( a.Formanskort.SInk, r.amount )                  '   Amount från "61"
  1432.  
  1433.         Case "63"
  1434.             a.InbetFaktura.SInk = addIt( a.InbetFaktura.SInk, r.amount )                    '   Amount från "63"
  1435.  
  1436.         Case "65"
  1437.             ' not used, (LOGIN=
  1438.  
  1439.         Case "67"
  1440.             a.BetPresentkortAnnanButik.SInk = addIt( a.BetPresentkortAnnanButik.SInk, r.amount )    '   Amount från "67"
  1441.  
  1442.         Case "70"
  1443.             a.BetTillgodoAnnanButik.SInk = addIt( a.BetTillgodoAnnanButik.SInk, r.amount )          '   Amount från "70"
  1444.  
  1445.         Case "68"
  1446.  
  1447.             If( r.Id = "101" ) Then
  1448.  
  1449.                 If( r.VATPercent = "" ) Then
  1450.                     r.VATPercent = ASAB_VAT_PERCENTAGE
  1451. '                   ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1452.                 End If
  1453.  
  1454.                 a.ASABavgift.SInk = addIt( a.ASABavgift.SInk, r.amount )
  1455.                 a.ASABavgift.SEx = ExVATFromInkVAT( a.ASABavgift.SEx, r.amount, r.VATPercent )
  1456.  
  1457.             ElseIf( r.Id = "69" ) Then
  1458.  
  1459.                 a.KontorsMateriel.SInk = addIt( a.KontorsMateriel.SInk, r.amount )
  1460.  
  1461.             ElseIf( r.Id = "71" ) Then
  1462.  
  1463.                 a.PersonalVard.SInk = addIt( a.PersonalVard.SInk, r.amount )
  1464.  
  1465.             ElseIf( r.Id = "72" ) Then
  1466.  
  1467.                 a.OvrigaUtlagg.SInk = addIt( a.OvrigaUtlagg.SInk, r.amount )
  1468.  
  1469.             Else
  1470.  
  1471.                 a.OspecOvrigUttag.SInk = addIt( a.OspecOvrigUttag.SInk, r.amount )
  1472.  
  1473.             End If
  1474.  
  1475.         Case "69"
  1476.  
  1477.             If( r.Id = "101" ) Then
  1478.                 a.ASABavgift.SMoms = addIt( a.ASABavgift.SMoms, r.amount )
  1479.  
  1480.             ElseIf( r.Id = "69" ) Then
  1481.  
  1482.                 a.KontorsMateriel.SMoms = addIt( a.KontorsMateriel.SMoms, r.amount )
  1483.  
  1484.             ElseIf( r.Id = "71" ) Then
  1485.  
  1486.                 a.PersonalVard.SMoms = addIt( a.PersonalVard.SMoms, r.amount )
  1487.  
  1488.             ElseIf( r.Id = "72" ) Then
  1489.  
  1490.                 a.OvrigaUtlagg.SMoms = addIt( a.OvrigaUtlagg.SMoms, r.amount )
  1491.  
  1492.             Else
  1493.  
  1494.                 a.OspecOvrigUttag.SMoms = addIt( a.OspecOvrigUttag.SMoms, r.amount )
  1495.  
  1496.             End If
  1497.  
  1498.         Case "71"
  1499.             'Lägg till Amount från "11", "17", "19", "71", "73" och "74"
  1500.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1501.  
  1502.         Case "72"
  1503.             'Drag bort Amount "72" och "106"
  1504.             a.KontantUtlandsk.SInk = subtractIt( a.KontantUtlandsk.SInk, r.amount )
  1505.  
  1506.         Case "73"
  1507.             'Lägg till Amount från "11", "17", "19", "71", "73" och "74"
  1508.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1509.  
  1510.         Case "74"
  1511.             'Lägg till Amount från "11", "17", "19", "71", "73" och "74"
  1512.             a.KontantUtlandsk.SInk = addIt( a.KontantUtlandsk.SInk, r.amount )
  1513.  
  1514.         Case "75"
  1515.             ' "Amount från "10" adderas. Dra bort från "18" och "75"
  1516.             ' Not handled. This transaction is just info.
  1517.  
  1518.         Case "76"
  1519.             ' Not used
  1520.  
  1521.         Case "77"
  1522.             ' Not used
  1523.  
  1524.         Case "80"
  1525.             a.FraktAvgift.SInk = addIt( a.FraktAvgift.SInk, r.amount )
  1526.            
  1527.         Case "81"
  1528.             a.Goyada.SInk = addIt( a.Goyada.SInk, r.amount )
  1529.            
  1530.         Case "87"
  1531.             a.AterbetalningKredit.SInk = subtractIt( a.AterbetalningKredit.SInk, r.amount )
  1532.  
  1533.         Case "88"
  1534.             ' Not used
  1535.  
  1536.         Case "89"
  1537.             a.FakturaAvgift.SInk = addIt( a.FakturaAvgift.SInk, r.amount )
  1538.  
  1539.  
  1540.  
  1541.         Case "90"
  1542.             a.EfterregRabatt.SInk = addIt( a.EfterregRabatt.SInk, r.amount )
  1543.  
  1544.         Case "95"
  1545.  
  1546.             ' FÖRSKRIVET
  1547.             ' ==========
  1548.             sVGrupp = GetVGrupp( r.category )
  1549.  
  1550.             Select Case sVGrupp
  1551.  
  1552.  
  1553.                 Case "100"
  1554.  
  1555.                     If( r.VATPercent = "" ) Then
  1556.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1557.                         Quit
  1558.                     End If
  1559.  
  1560.                     vp = GetIdxFromVAT( r.VATPercent )
  1561.                     a.F_RX(vp) = ComputeAllValues( a.F_RX(vp), "ADD", r)
  1562.  
  1563.                 Case "200"
  1564.  
  1565.                     If( r.VATPercent = "" ) Then
  1566.                         ReportEvent(RE_INFO, "RowID:" + CStr(r.Id) )
  1567.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1568.                         Quit
  1569.                     End If
  1570.  
  1571.                     vp = GetIdxFromVAT( r.VATPercent )
  1572.                     a.F_OTC(vp) = ComputeAllValues( a.F_OTC(vp), "ADD", r)
  1573.  
  1574.                 Case "300"
  1575.  
  1576.                     If( r.VATPercent = "" ) Then
  1577.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1578.                         Quit
  1579.                     End If
  1580.  
  1581.                     vp = GetIdxFromVAT( r.VATPercent )
  1582.                     a.F_Livsmedel(vp) = ComputeAllValues( a.F_Livsmedel(vp), "ADD", r)
  1583.  
  1584.                 Case "400"
  1585.  
  1586.                     If( r.VATPercent = "" ) Then
  1587.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1588.                         Quit
  1589.                     End If
  1590.  
  1591.                     vp = GetIdxFromVAT( r.VATPercent )
  1592.  
  1593.                     If( Left(r.VATPercent, 2) = "25" )  Then
  1594.  
  1595.                         a.F_Hjalpmedel(vp) = ComputeAllValues( a.F_Hjalpmedel(vp), "ADD", r)
  1596.  
  1597.                     ElseIf( Left(r.VATPercent, 1) = "6" ) Then
  1598.  
  1599.                         a.F_Bocker(vp) = ComputeAllValues( a.F_Bocker(vp), "ADD", r)
  1600.  
  1601.                     Else
  1602.                         ReportEvent( RE_ERROR, "INCORRECT VAT: for " + r.transactionType + ":" + sVGrupp + ", VAT:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1603.                         ReportEvent( RE_WARNING, "This process is not stopped..." )
  1604.                     End If
  1605.  
  1606.                 Case "500"
  1607.  
  1608.                     If( r.VATPercent = "" ) Then
  1609.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1610.                         Quit
  1611.                     End If
  1612.  
  1613.                     vp = GetIdxFromVAT( r.VATPercent )
  1614.                     a.F_Tjanster(vp) = ComputeAllValues( a.F_Tjanster(vp), "ADD", r)
  1615.  
  1616.                 Case Else
  1617.  
  1618.                     If( r.VATPercent = "" ) Then
  1619.                         ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1620.                         Quit
  1621.                     End If
  1622.  
  1623.                     vp = GetIdxFromVAT( r.VATPercent )
  1624.                     a.F_Ovrigt(vp) = ComputeAllValues( a.F_Ovrigt(vp), "ADD", r)
  1625.  
  1626.             End Select
  1627.  
  1628.  
  1629.         Case "96"
  1630.  
  1631.  
  1632.             ' Återköp förskrivet
  1633.             ' ==================
  1634.             sVGrupp = GetVGrupp( r.category )
  1635.  
  1636.             Select Case sVGrupp
  1637.  
  1638.                 Case "100"
  1639.                     If( r.VATPercent = "" ) Then
  1640.                         r.VATPercent = "0.00"
  1641.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1642.                     End If
  1643.  
  1644.                     vp = GetIdxFromVAT( r.VATPercent )
  1645.                     a.AF_RX(vp) = ComputeAllValues( a.AF_RX(vp), "ADD", r)
  1646.  
  1647.  
  1648.                 Case "200"
  1649.                     If( r.VATPercent = "" ) Then
  1650.                         ReportEvent(RE_INFO, "RowID:" + CStr(r.Id) )
  1651.                         r.VATPercent = "0.00"
  1652.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1653.                     End If
  1654.  
  1655.                     vp = GetIdxFromVAT( r.VATPercent )
  1656.                     a.AF_OTC(vp) = ComputeAllValues( a.AF_OTC(vp), "ADD", r)
  1657.  
  1658.                 Case "300"
  1659.                     If( r.VATPercent = "" ) Then
  1660.                         r.VATPercent = "0.00"
  1661.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1662.                     End If
  1663.  
  1664.                     vp = GetIdxFromVAT( r.VATPercent )
  1665.                     a.AF_Livsmedel(vp) = ComputeAllValues( a.AF_Livsmedel(vp), "ADD", r)
  1666.  
  1667.                 Case "400"
  1668.  
  1669.                     If( r.VATPercent = "" ) Then
  1670.                         r.VATPercent = "0.00"
  1671.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1672.                     End If
  1673.  
  1674.                     vp = GetIdxFromVAT( r.VATPercent )
  1675.  
  1676.                     If( Left(r.VATPercent, 2) = "25" )  Then
  1677.  
  1678.                         a.AF_Hjalpmedel(vp) = ComputeAllValues( a.AF_Hjalpmedel(vp), "ADD", r)
  1679.  
  1680.                     ElseIf( Left(r.VATPercent, 1) = "6" ) Then
  1681.  
  1682.                         a.AF_Bocker(vp) = ComputeAllValues( a.AF_Bocker(vp), "ADD", r)
  1683.  
  1684.                     Else
  1685.                         ReportEvent( RE_ERROR, "******INCORRECT VAT: for " + r.transactionType + ":" + sVGrupp + ", VAT:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1686.                         ReportEvent( RE_WARNING, "This process is not stopped..." )
  1687.                     End If
  1688.  
  1689.                 Case "500"
  1690.  
  1691.                     If( r.VATPercent = "" ) Then
  1692.                         r.VATPercent = "25.00"
  1693.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1694.                     End If
  1695.  
  1696.                     vp = GetIdxFromVAT( r.VATPercent )
  1697.                     a.AF_Tjanster(vp) = ComputeAllValues( a.AF_Tjanster(vp), "ADD", r)
  1698.  
  1699.                 Case Else
  1700.  
  1701.                     If( r.VATPercent = "" ) Then
  1702.                         r.VATPercent = "25.00"
  1703.                         ReportEvent( RE_WARNING, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1704.                     End If
  1705.  
  1706.                     vp = GetIdxFromVAT( r.VATPercent )
  1707.                     a.AF_Ovrigt(vp) = ComputeAllValues( a.AF_Ovrigt(vp), "ADD", r)
  1708.  
  1709.             End Select
  1710.  
  1711.         Case "99"
  1712.  
  1713.             If( r.VATPercent = "" ) Then
  1714.                 ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1715.                 ReportEvent( RE_WARNING, "MUST HAVE VATPERCENT!" )
  1716.                 Quit
  1717.             End If
  1718.  
  1719.             vp = GetIdxFromVAT( r.VATPercent )
  1720.  
  1721.             If( r.subType = "1" ) Then
  1722.  
  1723.                 a.Subvention(vp).SInk   = addIt( a.Subvention(vp).SInk, r.amount )
  1724.                 a.Subvention(vp).SEx    = ExVATFromInkVAT( a.Subvention(vp).SEx, r.amount, r.VATPercent )
  1725.                 a.Subvention(vp).SMoms  = addIt( a.Subvention(vp).SMoms, r.Momssumma )
  1726.  
  1727.             End If
  1728.  
  1729.             If( r.subType = "2" ) Then
  1730.                 a.Formansbelopp(vp).SInk    = addIt( a.Formansbelopp(vp).SInk, r.amount )
  1731.                 a.Formansbelopp(vp).SEx     = ExVATFromInkVAT( a.Formansbelopp(vp).SEx, r.amount, r.VATPercent )
  1732.                 a.Formansbelopp(vp).SMoms   = addIt( a.Formansbelopp(vp).SMoms, r.Momssumma )
  1733.             End If
  1734.  
  1735.             If( r.subType = "3" ) Then
  1736.                 a.SummaASAB.SInk    = subtractIt( a.SummaASAB.SInk, r.amount )
  1737.             End If
  1738.  
  1739.         Case "100"
  1740.  
  1741.             If( r.VATPercent = "" ) Then
  1742.                 ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1743.                 Quit
  1744.             End If
  1745.  
  1746.             vp = GetIdxFromVAT( r.VATPercent )
  1747.             a.AterkopSystem(vp) = ComputeAllValues( a.AterkopSystem(vp), "ADD", r)
  1748.  
  1749.         Case "101"
  1750.  
  1751.             ' Delbetalning
  1752.             If( r.subType = "1" ) Then
  1753.  
  1754.                 If( a.nDelbetalningIdx = MAX_DELBET ) Then
  1755.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1756.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nDelbetalningIdx) )
  1757.                     Quit
  1758.                 End If
  1759.  
  1760.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1761.                 a.DelBetalning(a.nDelbetalningIdx).SInk = addIt( a.DelBetalning(a.nDelbetalningIdx).SInk, r.amount )
  1762.                 a.DelBetalning(a.nDelbetalningIdx).ExtraInfo =  r.Id ' PayexTransactionID
  1763.  
  1764.                 a.nDelbetalningIdx = a.nDelbetalningIdx + 1
  1765.  
  1766.             End If
  1767.  
  1768.             ' NBDirektBet
  1769.             If( r.subType = "3" ) Then
  1770.  
  1771.                 If( a.nNBDirektBetIdx = MAX_DELBET ) Then
  1772.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1773.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nNBDirektBetIdx) )
  1774.                     Quit
  1775.                 End If
  1776.  
  1777.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1778.                 a.NBDirektBet(a.nNBDirektBetIdx).SInk   = addIt( a.NBDirektBet(a.nNBDirektBetIdx).SInk, r.amount )
  1779.                 a.NBDirektBet(a.nNBDirektBetIdx).ExtraInfo =    r.Id ' NordbankenTxID
  1780.  
  1781.                 a.nNBDirektBetIdx = a.nNBDirektBetIdx + 1
  1782.  
  1783.             End If
  1784.  
  1785.             ' SHBDirektBet
  1786.             If( r.subType = "4" ) Then
  1787.  
  1788.                 If( a.nSHBDirektBetIdx = MAX_DELBET ) Then
  1789.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1790.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nSHBDirektBetIdx) )
  1791.                     Quit
  1792.                 End If
  1793.  
  1794.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1795.                 a.SHBDirektBet(a.nSHBDirektBetIdx).SInk = addIt( a.SHBDirektBet(a.nSHBDirektBetIdx).SInk, r.amount )
  1796.                 a.SHBDirektBet(a.nSHBDirektBetIdx).ExtraInfo =  r.Id '
  1797.  
  1798.                 a.nSHBDirektBetIdx = a.nSHBDirektBetIdx + 1
  1799.  
  1800.             End If
  1801.  
  1802.             ' SEBDirektBet
  1803.             If( r.subType = "5" ) Then
  1804.  
  1805.                 If( a.nSEBDirektBetIdx = MAX_DELBET ) Then
  1806.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1807.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nSEBDirektBetIdx) )
  1808.                     Quit
  1809.                 End If
  1810.  
  1811.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1812.                 a.SEBDirektBet(a.nSEBDirektBetIdx).SInk = addIt( a.SEBDirektBet(a.nSEBDirektBetIdx).SInk, r.amount )
  1813.                 a.SEBDirektBet(a.nSEBDirektBetIdx).ExtraInfo =  r.Id '
  1814.  
  1815.                 a.nSEBDirektBetIdx = a.nSEBDirektBetIdx + 1
  1816.  
  1817.             End If
  1818.  
  1819.             ' FSPDirektBet
  1820.             If( r.subType = "6" ) Then
  1821.  
  1822.                 If( a.nFSPDirektBetIdx = MAX_DELBET ) Then
  1823.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1824.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nFSPDirektBetIdx) )
  1825.                     Quit
  1826.                 End If
  1827.  
  1828.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1829.                 a.FSPDirektBet(a.nFSPDirektBetIdx).SInk = addIt( a.FSPDirektBet(a.nFSPDirektBetIdx).SInk, r.amount )
  1830.                 a.FSPDirektBet(a.nFSPDirektBetIdx).ExtraInfo =  r.Id '
  1831.  
  1832.                 a.nFSPDirektBetIdx = a.nFSPDirektBetIdx + 1
  1833.  
  1834.             End If
  1835.  
  1836.             ' PayExFaktura
  1837.             If( r.subType = "7" ) Then
  1838.  
  1839.                 If( a.nPayExFakturaIdx = MAX_DELBET ) Then
  1840.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1841.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nPayExFakturaIdx) )
  1842.                     Quit
  1843.                 End If
  1844.  
  1845.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1846.                 a.PayExFaktura(a.nPayExFakturaIdx).SInk = addIt( a.PayExFaktura(a.nPayExFakturaIdx).SInk, r.amount )
  1847.                 a.PayExFaktura(a.nPayExFakturaIdx).ExtraInfo =  r.Id '
  1848.  
  1849.                 a.nPayExFakturaIdx = a.nPayExFakturaIdx + 1
  1850.  
  1851.             End If
  1852.  
  1853.             ' PayExDelbet
  1854.             If( r.subType = "8" ) Then
  1855.  
  1856.                 If( a.nPayExDelbetIdx = MAX_DELBET ) Then
  1857.                     ReportEvent(RE_ERROR, "The index MAX_DELBET must be increased. It has reached max. Increase is bigger then the value below and restart" )
  1858.                     ReportEvent(RE_ERROR, "Index value=" + CStr(a.nPayExDelbetIdx) )
  1859.                     Quit
  1860.                 End If
  1861.  
  1862.                 ' just add, no aggregate. I use addIt anyway just for it is easy.
  1863.                 a.PayExDelbet(a.nPayExDelbetIdx).SInk   = addIt( a.PayExDelbet(a.nPayExDelbetIdx).SInk, r.amount )
  1864.                 a.PayExDelbet(a.nPayExDelbetIdx).ExtraInfo =    r.Id '
  1865.  
  1866.                 a.nPayExDelbetIdx = a.nPayExDelbetIdx + 1
  1867.  
  1868.             End If
  1869.  
  1870.  
  1871.         Case "102"
  1872.             ' Systemförsäljning
  1873.             If( r.VATPercent = "" ) Then
  1874.                 ReportEvent( RE_ERROR, "No VAT for " + r.transactionType + ":" + sVGrupp + " VAT set to:" + r.VATPercent + " : Momssumma(" + r.Momssumma + ")" )
  1875.                 Quit
  1876.             End If
  1877.  
  1878.             vp = GetIdxFromVAT( r.VATPercent )
  1879.             a.SystemForsalj(vp) = ComputeAllValues( a.SystemForsalj(vp), "ADD", r)
  1880.  
  1881.         Case "103"
  1882.             a.KortbetalningOvrig.SInk = addIt( a.KortbetalningOvrig.SInk, r.amount )
  1883.  
  1884.         Case "104"
  1885.             a.KortbetalningOvrig.SInk = subtractIt( a.KortbetalningOvrig.SInk, r.amount )
  1886.  
  1887.         Case "106"
  1888.             'Drag bort Amount "72" och "106"
  1889.             a.KontantUtlandsk.SInk = subtractIt( a.KontantUtlandsk.SInk, r.amount )
  1890.  
  1891.  
  1892. '       Case "200"
  1893. '           ' ÅterköpSystem
  1894. '           a.AterkopSystem.SInk    = addIt( a.AterkopSystem.SInk, r.amount )
  1895.  
  1896.         Case Else
  1897.             ReportEvent( RE_WARNING, "Transactiontype:" + r.transactionType + " is not handled" )
  1898.  
  1899.     End Select
  1900.  
  1901.     Exit Sub
  1902.  
  1903. AllError:
  1904.     ReportEvent( RE_ERROR, "Aggregate:" + Err.Description )
  1905.     ReportEvent(RE_WARNING, "RowID:" + CStr(r.DBID) )
  1906.     ReportEvent(RE_WARNING, "Transactiontype:" + r.transactionType )
  1907.     ReportEvent(RE_WARNING, "Category:" + sVGrupp )
  1908.  
  1909.  
  1910.     Quit
  1911.  
  1912. End Sub
  1913.  
  1914.  
  1915. Sub ResetSEK( s As SEK )
  1916.  
  1917.     s.SEx   = "0,00"
  1918.     s.SInk  = "0,00"
  1919.     s.SMoms = "0,00"
  1920. '   s.VATPerc = "0,00"
  1921.     s.CostP = "0,00"
  1922.     s.ExtraInfo = ""
  1923.  
  1924. End Sub
  1925.  
  1926.  
  1927. Sub ResetAgg( a As TheAggregator )
  1928. Dim i As Integer
  1929.  
  1930.     ResetSEK(a.Kontant)
  1931.     ResetSEK(a.KontantUtlandsk)
  1932.     ResetSEK(a.KortbetalningAMEX)
  1933.     ResetSEK(a.KortbetalningBABS)
  1934.     ResetSEK(a.KortbetalningDiners)
  1935.     ResetSEK(a.KortbetalningOvrig)
  1936.     ResetSEK(a.Kupong)
  1937.     ResetSEK(a.Presentkort)
  1938.     ResetSEK(a.PresentkortSalda)
  1939.     ResetSEK(a.ASABavgift)
  1940.     ResetSEK(a.SummaASAB)
  1941.     ResetSEK(a.SubTotal)
  1942.     ResetSEK(a.OresAvrundning)
  1943.     ResetSEK(a.MomsBelopp)
  1944.     ResetSEK(a.MomsGrundBelopp)
  1945.     ResetSEK(a.Rekvisition)
  1946.     ResetSEK(a.FakturaAvgift)
  1947.     ResetSEK(a.FraktAvgift)
  1948.     ResetSEK(a.Goyada)
  1949.  
  1950.  
  1951.     For i = 0 To MAX_DELBET-1
  1952.         ResetSEK(a.DelBetalning(i))
  1953.     Next
  1954.     a.nDelbetalningIdx = 0
  1955.  
  1956.  
  1957.     For i = 0 To MAX_DELBET-1
  1958.         ResetSEK(a.NBDirektBet(i))
  1959.     Next
  1960.     a.nNBDirektBetIdx = 0
  1961.  
  1962.     For i = 0 To MAX_DELBET-1
  1963.         ResetSEK(a.SHBDirektBet(i))
  1964.     Next
  1965.     a.nSHBDirektBetIdx = 0
  1966.  
  1967.     For i = 0 To MAX_DELBET-1
  1968.         ResetSEK(a.SEBDirektBet(i))
  1969.     Next
  1970.     a.nSEBDirektBetIdx = 0
  1971.  
  1972.     For i = 0 To MAX_DELBET-1
  1973.         ResetSEK(a.FSPDirektBet(i))
  1974.     Next
  1975.     a.nFSPDirektBetIdx = 0
  1976.  
  1977.     For i = 0 To MAX_DELBET-1
  1978.         ResetSEK(a.PayExFaktura(i))
  1979.     Next
  1980.     a.nPayExFakturaIdx = 0
  1981.  
  1982.     For i = 0 To MAX_DELBET-1
  1983.         ResetSEK(a.PayExDelbet(i))
  1984.     Next
  1985.     a.nPayExDelbetIdx = 0
  1986.  
  1987.     ResetSEK(a.Rattelse)
  1988.  
  1989.     ResetSEK(a.KupongRabatt)
  1990.     ResetSEK(a.RabattSubTot)
  1991.     ResetSEK(a.InbetFaktura)
  1992.     ResetSEK(a.BetTillgodoKvitto)
  1993.     ResetSEK(a.EfterregRabatt)
  1994.     ResetSEK(a.AterbetalningKredit)
  1995.     ResetSEK(a.FsgTillgodoKvitto)
  1996.     ResetSEK(a.InlostBonuscheck)
  1997.     ResetSEK(a.FormanskortBonusgr)
  1998.     ResetSEK(a.InlostBonusbelopp)
  1999.     ResetSEK(a.Formanskort)
  2000.     ResetSEK(a.BetPresentkortAnnanButik)
  2001.     ResetSEK(a.BetTillgodoAnnanButik)
  2002.     ResetSEK(a.OspecOvrigUttag)
  2003.     ResetSEK(a.KontorsMateriel)
  2004.     ResetSEK(a.PersonalVard)
  2005.     ResetSEK(a.OvrigaUtlagg)
  2006.  
  2007.  
  2008.  
  2009.  
  2010.     For i = 1 To 4
  2011.         ' Förskrivet
  2012.         ResetSEK(a.F_RX(i))
  2013.         ResetSEK(a.F_OTC(i))
  2014.         ResetSEK(a.F_Livsmedel(i))
  2015.         ResetSEK(a.F_Hjalpmedel(i))
  2016.         ResetSEK(a.F_Bocker(i))
  2017.         ResetSEK(a.F_Tjanster(i))
  2018.         ResetSEK(a.F_Ovrigt(i))
  2019.  
  2020.         ' Återköp förskrivet
  2021.         ResetSEK(a.AF_RX(i))
  2022.         ResetSEK(a.AF_OTC(i))
  2023.         ResetSEK(a.AF_Livsmedel(i))
  2024.         ResetSEK(a.AF_Hjalpmedel(i))
  2025.         ResetSEK(a.AF_Bocker(i))
  2026.         ResetSEK(a.AF_Tjanster(i))
  2027.         ResetSEK(a.AF_Ovrigt(i))
  2028.  
  2029.         ' Egenvård
  2030.         ResetSEK(a.EV_RX(i))
  2031.         ResetSEK(a.EV_OTC(i))
  2032.         ResetSEK(a.EV_Livsmedel(i))
  2033.         ResetSEK(a.EV_Hjalpmedel(i))
  2034.         ResetSEK(a.EV_Bocker(i))
  2035.         ResetSEK(a.EV_Tjanster(i))
  2036.         ResetSEK(a.EV_VetArvode(i))
  2037.         ResetSEK(a.EV_Ovrigt(i))
  2038.  
  2039.         ' Återköp egenvård
  2040.         ResetSEK(a.AEV_RX(i))
  2041.         ResetSEK(a.AEV_OTC(i))
  2042.         ResetSEK(a.AEV_Livsmedel(i))
  2043.         ResetSEK(a.AEV_Hjalpmedel(i))
  2044.         ResetSEK(a.AEV_Bocker(i))
  2045.         ResetSEK(a.AEV_Tjanster(i))
  2046.         ResetSEK(a.AEV_VetArvode(i))
  2047.         ResetSEK(a.AEV_Ovrigt(i))
  2048.  
  2049.         ' Återköp egenvård
  2050.         ResetSEK(a.EVR_RX(i))
  2051.         ResetSEK(a.EVR_OTC(i))
  2052.         ResetSEK(a.EVR_Livsmedel(i))
  2053.         ResetSEK(a.EVR_Hjalpmedel(i))
  2054.         ResetSEK(a.EVR_Bocker(i))
  2055.         ResetSEK(a.EVR_Tjanster(i))
  2056.         ResetSEK(a.EVR_Ovrigt(i))
  2057.  
  2058.  
  2059.         ' Diverse
  2060.         ResetSEK(a.Formansbelopp(i))
  2061.         ResetSEK(a.Subvention(i))
  2062.  
  2063.         ResetSEK(a.AterkopSystem(i))
  2064.         ResetSEK(a.SystemForsalj(i))
  2065.  
  2066.  
  2067.     Next i
  2068.  
  2069.  
  2070.     ' Egenvård receptpåsar
  2071.     ResetSEK(a.EV_RP0)
  2072.     ResetSEK(a.EV_RP6)
  2073.     ResetSEK(a.EV_RP12)
  2074.     ResetSEK(a.EV_RP25)
  2075.  
  2076.     ' Egenvård rabatt receptpåsar
  2077.     ResetSEK(a.EVR_RP0)
  2078.     ResetSEK(a.EVR_RP6)
  2079.     ResetSEK(a.EVR_RP12)
  2080.     ResetSEK(a.EVR_RP25)
  2081.  
  2082.  
  2083.     ' Återköp egenvård
  2084.     ResetSEK(a.AEV_RP0)
  2085.     ResetSEK(a.AEV_RP6)
  2086.     ResetSEK(a.AEV_RP12)
  2087.     ResetSEK(a.AEV_RP25)
  2088.  
  2089.  
  2090.  
  2091. End Sub
  2092.  
  2093. Function InitXML() As String
  2094.  
  2095.     On Error GoTo ErrorHandling
  2096.  
  2097.  
  2098.     Set oBInfo = CreateSubElement(oXml, "BokforingsInfo" )
  2099.  
  2100.     Exit Function
  2101.  
  2102. ErrorHandling:
  2103.     ReportLog(RL_NORMAL, "||ErrorInformation|Error=" & GetSubParameter(GetParameter("-Component%CurrentComponent%"), "File") & ": " & Err.Source & " " & Err.Number & " (&H" & Hex(Err.Number) & ") " & Err.Description)
  2104.     ReportEvent(RE_ERROR, GetSubParameter(GetParameter("-Component%CurrentComponent%"), "File") & ": " & Err.Source & " " & Err.Number & " (&H" & Hex(Err.Number) & ") " & Err.Description)
  2105.     Quit
  2106.  
  2107. End Function
  2108.  
  2109.  
  2110.  
  2111. Sub AddXMLInfo( a As TheAggregator )
  2112. Dim i As Integer
  2113.  
  2114.     On Error GoTo ErrorHandling:
  2115.  
  2116.     Set oInfo = CreateSubElement(oBInfo, "Info" )
  2117.  
  2118.     CreateSubElement(oInfo, "OrganisationsNummer", a.Organisationsnr )
  2119.     CreateSubElement(oInfo, "ApoteksID", a.Apoteksid )
  2120.     CreateSubElement(oInfo, "Datum", a.Datum )
  2121.  
  2122.     Set oSubInfo = CreateSubElement( oInfo, "SubInfo" )
  2123.  
  2124. ' ändrat 2011-01-25
  2125. '   addNegativeSign( a.Kontant, "0,0,0,0" )
  2126.     CreateSubNodeFromEPath( oSubInfo, "Kontant/SInk", FixDot( a.Kontant.SInk ))
  2127.     FormatPrint_II( "Kontant/SInk", a.Kontant.SInk, a )
  2128.  
  2129.     CreateSubNodeFromEPath( oSubInfo, "Fakturaavgift/SInk", FixDot( a.FakturaAvgift.SInk ))
  2130.     FormatPrint_II( "Fakturaavgift/SInk", a.FakturaAvgift.SInk, a )
  2131.  
  2132.     CreateSubNodeFromEPath( oSubInfo, "Fraktavgift/SInk", FixDot( a.FraktAvgift.SInk ))
  2133.     FormatPrint_II( "Fraktavgift/SInk", a.FraktAvgift.SInk, a )
  2134.    
  2135.     CreateSubNodeFromEPath( oSubInfo, "Goyada/SInk", FixDot( a.Goyada.SInk ))
  2136.     FormatPrint_II( "Goyada/SInk", a.Goyada.SInk, a )
  2137.  
  2138.  
  2139.  
  2140. ' ändrat 2011-01-25
  2141. '   addNegativeSign( a.KontantUtlandsk, "0,0,0,0" )
  2142.     CreateSubNodeFromEPath( oSubInfo, "KontantUtlandsk/SInk", FixDot( a.KontantUtlandsk.SInk ))
  2143.     FormatPrint_II( "KontantUtlandsk/SInk", a.KontantUtlandsk.SInk, a )
  2144.  
  2145.     addNegativeSign( a.KortbetalningAMEX, "0,0,0,0" )
  2146.     CreateSubNodeFromEPath( oSubInfo, "KortbetalningAmex/SInk", FixDot( a.KortbetalningAMEX.SInk ))
  2147.     FormatPrint_II( "KortbetalningAmex/SInk", a.KortbetalningAMEX.SInk, a )
  2148.  
  2149.     addNegativeSign( a.KortbetalningBABS, "0,0,0,0" )
  2150.     CreateSubNodeFromEPath( oSubInfo, "KortbetalningBABS/SInk", FixDot( a.KortbetalningBABS.SInk ))
  2151.     FormatPrint_II( "KortbetalningBABS/SInk", a.KortbetalningBABS.SInk, a )
  2152.  
  2153.     addNegativeSign( a.KortbetalningDiners, "0,0,0,0" )
  2154.     CreateSubNodeFromEPath( oSubInfo, "KortbetalningDiners/SInk", FixDot( a.KortbetalningDiners.SInk ))
  2155.     FormatPrint_II( "KortbetalningDiners/SInk", a.KortbetalningDiners.SInk, a )
  2156.  
  2157.     addNegativeSign( a.KortbetalningOvrig, "0,0,0,0" )
  2158.     CreateSubNodeFromEPath( oSubInfo, "KortbetalningOvrigt/SInk", FixDot( a.KortbetalningOvrig.SInk ))
  2159.     FormatPrint_II( "KortbetalningOvrigt/SInk", a.KortbetalningOvrig.SInk, a )
  2160.  
  2161.     addNegativeSign( a.Rekvisition, "0,0,0,0" )
  2162.     CreateSubNodeFromEPath( oSubInfo, "Rekvisition/SInk", FixDot( a.Rekvisition.SInk ))
  2163.     FormatPrint_II( "Rekvisition/SInk", a.Rekvisition.SInk, a )
  2164.  
  2165.     addNegativeSign( a.Presentkort, "0,0,0,0" )
  2166.     CreateSubNodeFromEPath( oSubInfo, "Presentkort/SInk", FixDot( a.Presentkort.SInk ))
  2167.     FormatPrint_II( "Presentkort/SInk", a.Presentkort.SInk, a )
  2168.  
  2169.     addNegativeSign( a.SummaASAB, "1,0,0,0" )
  2170.     CreateSubNodeFromEPath( oSubInfo, "SummaASAB/SInk", FixDot( a.SummaASAB.SInk ))
  2171.     FormatPrint_II( "SummaASAB/SInk", a.SummaASAB.SInk, a )
  2172.  
  2173.  
  2174.     ' ----------------------------------------------------------------
  2175.  
  2176.     For i = 0 To a.nDelbetalningIdx-1
  2177.  
  2178.         ' one for each transaction/row in file. no aggregation.
  2179.         Set oTmp = CreateSubElement(oSubInfo, "Delbetalning" )
  2180.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.DelBetalning(i).SInk ))
  2181.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.DelBetalning(i).ExtraInfo )
  2182.  
  2183.         FormatPrint_II( "DelBetalning/SInk", a.DelBetalning(i).SInk, a, a.DelBetalning(i).ExtraInfo )
  2184.  
  2185.     Next
  2186.  
  2187.     For i = 0 To a.nNBDirektBetIdx-1
  2188.  
  2189.         ' one for each transaction/row in file. no aggregation.
  2190.         Set oTmp = CreateSubElement(oSubInfo, "DirektbetNB" )
  2191.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.NBDirektBet(i).SInk ))
  2192.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.NBDirektBet(i).ExtraInfo )
  2193.  
  2194.         FormatPrint_II( "Direktbet NB/SInk", a.NBDirektBet(i).SInk, a, a.NBDirektBet(i).ExtraInfo )
  2195.  
  2196.     Next
  2197.  
  2198.     For i = 0 To a.nSHBDirektBetIdx-1
  2199.  
  2200.         ' one for each transaction/row in file. no aggregation.
  2201.         Set oTmp = CreateSubElement(oSubInfo, "DirektbetSHB" )
  2202.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.SHBDirektBet(i).SInk ))
  2203.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.SHBDirektBet(i).ExtraInfo )
  2204.  
  2205.         FormatPrint_II( "Direktbet SHB/SInk", a.SHBDirektBet(i).SInk, a, a.SHBDirektBet(i).ExtraInfo )
  2206.  
  2207.     Next
  2208.  
  2209.     For i = 0 To a.nSEBDirektBetIdx-1
  2210.  
  2211.         ' one for each transaction/row in file. no aggregation.
  2212.         Set oTmp = CreateSubElement(oSubInfo, "DirektbetSHB" )
  2213.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.SEBDirektBet(i).SInk ))
  2214.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.SEBDirektBet(i).ExtraInfo )
  2215.  
  2216.         FormatPrint_II( "Direktbet SEB/SInk", a.SEBDirektBet(i).SInk, a, a.SEBDirektBet(i).ExtraInfo )
  2217.  
  2218.     Next
  2219.  
  2220.     For i = 0 To a.nFSPDirektBetIdx-1
  2221.  
  2222.         ' one for each transaction/row in file. no aggregation.
  2223.         Set oTmp = CreateSubElement(oSubInfo, "DirektbetFSP" )
  2224.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.FSPDirektBet(i).SInk ))
  2225.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.FSPDirektBet(i).ExtraInfo )
  2226.  
  2227.         FormatPrint_II( "Direktbet FSP/SInk", a.FSPDirektBet(i).SInk, a, a.FSPDirektBet(i).ExtraInfo )
  2228.  
  2229.     Next
  2230.  
  2231.     For i = 0 To a.nPayExFakturaIdx-1
  2232.  
  2233.         ' one for each transaction/row in file. no aggregation.
  2234.         Set oTmp = CreateSubElement(oSubInfo, "PayExFaktura" )
  2235.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.PayExFaktura(i).SInk ))
  2236.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.PayExFaktura(i).ExtraInfo )
  2237.  
  2238.         FormatPrint_II( "PayEx Faktura/SInk", a.PayExFaktura(i).SInk, a, a.PayExFaktura(i).ExtraInfo )
  2239.  
  2240.     Next
  2241.  
  2242.     For i = 0 To a.nPayExDelbetIdx-1
  2243.  
  2244.         ' one for each transaction/row in file. no aggregation.
  2245.         Set oTmp = CreateSubElement(oSubInfo, "PayExDelbet" )
  2246.         CreateSubNodeFromEPath( oTmp, "SInk", FixDot( a.PayExDelbet(i).SInk ))
  2247.         CreateSubNodeFromEPath( oTmp, "ExtraInfo", a.PayExDelbet(i).ExtraInfo )
  2248.  
  2249.         FormatPrint_II( "PayEx Delbet e-handel/SInk", a.PayExDelbet(i).SInk, a, a.PayExDelbet(i).ExtraInfo )
  2250.  
  2251.     Next
  2252.  
  2253.     ' ----------------------------------------------------------------
  2254.  
  2255.     addNegativeSign( a.Rattelse, "0,0,0,0" )
  2256.     CreateSubNodeFromEPath( oSubInfo, "Rattelse/SInk", FixDot( a.Rattelse.SInk ))
  2257.     FormatPrint_II( "Rattelse/SInk", a.Rattelse.SInk, a )
  2258.  
  2259.     CreateSubNodeFromEPath( oSubInfo, "AterbetalningKredit/SInk", FixDot( a.AterbetalningKredit.SInk ))
  2260.     FormatPrint_II( "AterbetalningKredit/SInk", a.AterbetalningKredit.SInk, a )
  2261.  
  2262.     CreateSubNodeFromEPath( oSubInfo, "EfterregRabatt/SInk", FixDot( a.EfterregRabatt.SInk ))
  2263.     FormatPrint_II( "EfterregRabatt/SInk", a.EfterregRabatt.SInk, a )
  2264.  
  2265. ' ------------------
  2266.  
  2267.     addNegativeSign( a.PresentkortSalda, "1,0,0,0" )
  2268.     CreateSubNodeFromEPath( oSubInfo, "PresentkortSalda/SInk", FixDot( a.PresentkortSalda.SInk ))
  2269.     FormatPrint_II( "PresentkortSalda/SInk", a.PresentkortSalda.SInk, a )
  2270.  
  2271. ' no sign change    addNegativeSign( a.Kupong, "0,0,0,0" )
  2272.     CreateSubNodeFromEPath( oSubInfo, "Kupong/SInk", FixDot( a.Kupong.SInk ))
  2273.     FormatPrint_II( "Kupong/SInk", a.Kupong.SInk, a )
  2274.  
  2275. ' ändrat 2011-01-25
  2276. '   addNegativeSign( a.SubTotal, "0,1,0,0" )
  2277.     CreateSubNodeFromEPath( oSubInfo, "Subtotal/SInk", FixDot( a.SubTotal.SInk ))
  2278.     FormatPrint_II( "SubTotal/SInk", a.SubTotal.SInk, a )
  2279.  
  2280. ' no sign change    addNegativeSign( a.OresAvrundning, "0,0,0,0" )
  2281.     CreateSubNodeFromEPath( oSubInfo, "OresAvrundning/SEx", FixDot( a.OresAvrundning.SEx ))
  2282.     FormatPrint_II( "OresAvrundning/SEx", a.OresAvrundning.SEx, a )
  2283.  
  2284. ' ändrat 2011-01-25
  2285. '   addNegativeSign( a.MomsBelopp, "0,0,1,0" )
  2286.     CreateSubNodeFromEPath( oSubInfo, "MomsBelopp/SMoms", FixDot( a.MomsBelopp.SMoms ))
  2287.     FormatPrint_II( "MomsBelopp/SMoms", a.MomsBelopp.SMoms, a )
  2288.  
  2289. ' no sign change        addNegativeSign( a.MomsGrundBelopp, "0,0,0,0" )
  2290.     CreateSubNodeFromEPath( oSubInfo, "MomsGrundBelopp/SEx", FixDot( a.MomsGrundBelopp.SEx ))
  2291.     FormatPrint_II( "MomsGrundBelopp/SEx", a.MomsGrundBelopp.SEx, a )
  2292.  
  2293.     addNegativeSign( a.RabattSubTot, "0,0,0,0" )
  2294.     CreateSubNodeFromEPath( oSubInfo, "RabattSubTot/SInk", FixDot( a.RabattSubTot.SInk ))
  2295.     FormatPrint_II( "RabattSubTot/SInk", a.RabattSubTot.SInk, a )
  2296.  
  2297.     addNegativeSign( a.KupongRabatt, "0,0,0,0" )
  2298.     CreateSubNodeFromEPath( oSubInfo, "KupongRabatt/SInk", FixDot( a.KupongRabatt.SInk ))
  2299.     FormatPrint_II( "KupongRabatt/SInk", a.KupongRabatt.SInk, a )
  2300.  
  2301.     addNegativeSign( a.InbetFaktura, "0,0,0,0" )
  2302.     CreateSubNodeFromEPath( oSubInfo, "InbetFaktura/SInk", FixDot( a.InbetFaktura.SInk ))
  2303.     FormatPrint_II( "InbetFaktura/SInk", a.InbetFaktura.SInk, a )
  2304.  
  2305.     addNegativeSign( a.BetTillgodoKvitto, "0,0,0,0" )
  2306.     CreateSubNodeFromEPath( oSubInfo, "BetTillgodoKvitto/SInk", FixDot( a.BetTillgodoKvitto.SInk ))
  2307.     FormatPrint_II( "BetTillgodoKvitto/SInk", a.BetTillgodoKvitto.SInk, a )
  2308.  
  2309. ' no sign change        addNegativeSign( a.FsgTillgodoKvitto, "0,0,0,0" )
  2310.     CreateSubNodeFromEPath( oSubInfo, "FsgTillgodoKvitto/SInk", FixDot( a.FsgTillgodoKvitto.SInk ))
  2311.     FormatPrint_II( "FsgTillgodoKvitto/SInk", a.FsgTillgodoKvitto.SInk, a )
  2312.  
  2313.     addNegativeSign( a.InlostBonuscheck, "0,0,0,0" )
  2314.     CreateSubNodeFromEPath( oSubInfo, "InlostBonuscheck/SInk", FixDot( a.InlostBonuscheck.SInk ))
  2315.     FormatPrint_II( "InlostBonuscheck/SInk", a.InlostBonuscheck.SInk, a )
  2316.  
  2317. ' no sign change        addNegativeSign( a.FormanskortBonusgr, "0,0,0,0" )
  2318.     CreateSubNodeFromEPath( oSubInfo, "FormanskortBonusgr/SInk", FixDot( a.FormanskortBonusgr.SInk ))
  2319.     FormatPrint_II( "FormanskortBonusgr/SInk", a.FormanskortBonusgr.SInk, a )
  2320.  
  2321.     addNegativeSign( a.InlostBonusbelopp, "0,0,0,0" )
  2322.     CreateSubNodeFromEPath( oSubInfo, "InlostBonusbelopp/SInk", FixDot( a.InlostBonusbelopp.SInk ))
  2323.     FormatPrint_II( "InlostBonusbelopp/SInk", a.InlostBonusbelopp.SInk, a )
  2324.  
  2325. ' no sign change        addNegativeSign( a.Formanskort, "0,0,0,0" )
  2326.     CreateSubNodeFromEPath( oSubInfo, "Formanskort/SInk", FixDot( a.Formanskort.SInk ))
  2327.     FormatPrint_II( "Formanskort/SInk", a.Formanskort.SInk, a )
  2328.  
  2329.     addNegativeSign( a.BetPresentkortAnnanButik, "0,0,0,0" )
  2330.     CreateSubNodeFromEPath( oSubInfo, "BetPresentkortAnnanButik/SInk", FixDot( a.BetPresentkortAnnanButik.SInk ))
  2331.     FormatPrint_II( "BetPresentkortAnnanButik/SInk", a.BetPresentkortAnnanButik.SInk, a )
  2332.  
  2333.     addNegativeSign( a.BetTillgodoAnnanButik, "0,0,0,0" )
  2334.     CreateSubNodeFromEPath( oSubInfo, "BetTillgodoAnnanButik/SInk", FixDot( a.BetTillgodoAnnanButik.SInk ))
  2335.     FormatPrint_II( "BetTillgodoAnnanButik/SInk", a.BetTillgodoAnnanButik.SInk, a )
  2336.  
  2337.     addNegativeSign( a.ASABavgift, "0,0,0,0" )
  2338.     CreateSubNodeFromEPath( oSubInfo, "ASABAvgift/SInk", FixDot( a.ASABavgift.SInk ))
  2339.     CreateSubNodeFromEPath( oSubInfo, "ASABAvgift/SEx", FixDot( a.ASABavgift.SEx ))
  2340.     CreateSubNodeFromEPath( oSubInfo, "ASABAvgift/SMoms", FixDot( a.ASABavgift.SMoms ))
  2341.     CreateSubNodeFromEPath( oSubInfo, "ASABAvgift/Momssats", ASAB_VAT_PERCENTAGE )
  2342.     FormatPrint_I( "ASABAvgift", a.ASABavgift, 4, a )
  2343.  
  2344.  
  2345.     addNegativeSign( a.OspecOvrigUttag, "0,0,0,0" )
  2346.     CreateSubNodeFromEPath( oSubInfo, "OspecOvrigUttag/SInk", FixDot( a.OspecOvrigUttag.SInk ))
  2347.     FormatPrint_II( "OspecOvrigUttag/SInk", a.OspecOvrigUttag.SInk, a )
  2348.     CreateSubNodeFromEPath( oSubInfo, "OspecOvrigUttag/SMoms", FixDot( a.OspecOvrigUttag.SMoms ))
  2349.     FormatPrint_II( "OspecOvrigUttag/SMoms", a.OspecOvrigUttag.SMoms, a )
  2350.  
  2351.     addNegativeSign( a.KontorsMateriel, "0,0,0,0" )
  2352.     CreateSubNodeFromEPath( oSubInfo, "Kontorsmateriel/SInk", FixDot( a.KontorsMateriel.SInk ))
  2353.     FormatPrint_II( "Kontorsmateriel/SInk", a.KontorsMateriel.SInk, a )
  2354.     CreateSubNodeFromEPath( oSubInfo, "Kontorsmateriel/SMoms", FixDot( a.KontorsMateriel.SMoms ))
  2355.     FormatPrint_II( "Kontorsmateriel/SMoms", a.KontorsMateriel.SMoms, a )
  2356.  
  2357.     addNegativeSign( a.PersonalVard, "0,0,0,0" )
  2358.     CreateSubNodeFromEPath( oSubInfo, "Personalvard/SInk", FixDot( a.PersonalVard.SInk ))
  2359.     FormatPrint_II( "Personalvard/SInk", a.PersonalVard.SInk, a )
  2360.     CreateSubNodeFromEPath( oSubInfo, "Personalvard/SMoms", FixDot( a.PersonalVard.SMoms ))
  2361.     FormatPrint_II( "Personalvard/SMoms", a.PersonalVard.SMoms, a )
  2362.  
  2363.     addNegativeSign( a.OvrigaUtlagg, "0,0,0,0" )
  2364.     CreateSubNodeFromEPath( oSubInfo, "OvrigaUtlagg/SInk", FixDot( a.OvrigaUtlagg.SInk ))
  2365.     FormatPrint_II( "OvrigaUtlagg/SInk", a.OvrigaUtlagg.SInk, a )
  2366.     CreateSubNodeFromEPath( oSubInfo, "OvrigaUtlagg/SMoms", FixDot( a.OvrigaUtlagg.SMoms ))
  2367.     FormatPrint_II( "OvrigaUtlagg/SMoms", a.OvrigaUtlagg.SMoms, a )
  2368.  
  2369.  
  2370.  
  2371.     ' klart hit, väntar på Lena.
  2372.  
  2373.     For i = 1 To 4
  2374.         addNegativeSign( a.AterkopSystem(i), "0,0,0,0" )
  2375.         CreateSubNodeFromEPath( oSubInfo, "AterkopSystem/MT" + CStr(i) + "/SInk", FixDot( a.AterkopSystem(i).SInk ))
  2376.         CreateSubNodeFromEPath( oSubInfo, "AterkopSystem/MT" + CStr(i) + "/SEx", FixDot( a.AterkopSystem(i).SEx ))
  2377.         CreateSubNodeFromEPath( oSubInfo, "AterkopSystem/MT" + CStr(i) + "/SMoms", FixDot( a.AterkopSystem(i).SMoms ))
  2378.         CreateSubNodeFromEPath( oSubInfo, "AterkopSystem/MT" + CStr(i) + "/VInkPris", FixDot( a.AterkopSystem(i).CostP )) '
  2379.         CreateSubNodeFromEPath( oSubInfo, "AterkopSystem/MT" + CStr(i) + "/Momssats", GetVatFromIdx(i))
  2380.         FormatPrint_I( "AterkopSystem", a.AterkopSystem(i), i, a )
  2381.     Next
  2382.  
  2383.     For i = 1 To 4
  2384.         addNegativeSign( a.SystemForsalj(i), "1,1,1,1" )
  2385.         CreateSubNodeFromEPath( oSubInfo, "SystemForsalj/MT" + CStr(i) + "/SInk", FixDot( a.SystemForsalj(i).SInk ))
  2386.         CreateSubNodeFromEPath( oSubInfo, "SystemForsalj/MT" + CStr(i) + "/SEx", FixDot( a.SystemForsalj(i).SEx ))
  2387.         CreateSubNodeFromEPath( oSubInfo, "SystemForsalj/MT" + CStr(i) + "/SMoms", FixDot( a.SystemForsalj(i).SMoms ))
  2388.         CreateSubNodeFromEPath( oSubInfo, "SystemForsalj/MT" + CStr(i) + "/VInkPris", FixDot( a.SystemForsalj(i).CostP )) '
  2389.         CreateSubNodeFromEPath( oSubInfo, "SystemForsalj/MT" + CStr(i) + "/Momssats", GetVatFromIdx(i))
  2390.         FormatPrint_I( "SystemForsalj", a.SystemForsalj(i), i, a )
  2391.     Next
  2392.  
  2393.     For i = 1 To 4
  2394. '       addNegativeSign( a.Formansbelopp(i), "0,0,0,0" )
  2395.         CreateSubNodeFromEPath( oSubInfo, "Formansbelopp/MT" + CStr(i) + "/SInk", FixDot( a.Formansbelopp(i).SInk ))
  2396.         CreateSubNodeFromEPath( oSubInfo, "Formansbelopp/MT" + CStr(i) + "/SEx", FixDot( a.Formansbelopp(i).SEx ))
  2397.         CreateSubNodeFromEPath( oSubInfo, "Formansbelopp/MT" + CStr(i) + "/SMoms", FixDot( a.Formansbelopp(i).SMoms ))
  2398.         CreateSubNodeFromEPath( oSubInfo, "Formansbelopp/MT" + CStr(i) + "/VInkPris", FixDot( a.Formansbelopp(i).CostP )) '
  2399.         CreateSubNodeFromEPath( oSubInfo, "Formansbelopp/MT" + CStr(i) + "/Momssats", GetVatFromIdx(i))
  2400.         FormatPrint_I( "Formansbelopp", a.Formansbelopp(i), i, a )
  2401.     Next
  2402.  
  2403.     For i = 1 To 4
  2404.         ' ändrat 2011-01-25
  2405. '       addNegativeSign( a.Subvention(i), "0,0,0,0" )
  2406.         CreateSubNodeFromEPath( oSubInfo, "Subvention/MT" + CStr(i) + "/SInk", FixDot( a.Subvention(i).SInk ))
  2407.         CreateSubNodeFromEPath( oSubInfo, "Subvention/MT" + CStr(i) + "/SEx", FixDot( a.Subvention(i).SInk ))
  2408.         CreateSubNodeFromEPath( oSubInfo, "Subvention/MT" + CStr(i) + "/SMoms", FixDot( a.Subvention(i).SMoms ))
  2409.         CreateSubNodeFromEPath( oSubInfo, "Subvention/MT" + CStr(i) + "/Momssats", GetVatFromIdx(i))
  2410.         FormatPrint_I( "Subvention", a.Subvention(i), i, a )
  2411.     Next
  2412.  
  2413. ' ------------------
  2414.  
  2415.     For i = 1 To 4
  2416.         addNegativeSign( a.F_RX(i), "1,1,1,0" )
  2417.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/RX/SInk", FixDot( a.F_RX(i).SInk ))
  2418.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/RX/SEx", FixDot( a.F_RX(i).SEx ))
  2419.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/RX/SMoms", FixDot( a.F_RX(i).SMoms ))
  2420.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/RX/VInkPris", FixDot( a.F_RX(i).CostP ))
  2421.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/RX/Momssats", GetVatFromIdx(i))
  2422.         FormatPrint_I( "Forskrivet/RX", a.F_RX(i), i, a )
  2423.     Next
  2424.  
  2425.     For i = 1 To 4
  2426.         addNegativeSign( a.F_OTC(i), "1,1,1,0" )
  2427.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/OTC/SInk", FixDot( a.F_OTC(i).SInk ))
  2428.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/OTC/SEx", FixDot( a.F_OTC(i).SEx ))
  2429.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/OTC/SMoms", FixDot( a.F_OTC(i).SMoms ))
  2430.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/OTC/VInkPris", FixDot( a.F_OTC(i).CostP ))
  2431.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/OTC/Momssats", GetVatFromIdx(i))
  2432.         FormatPrint_I( "Forskrivet/OTC", a.F_OTC(i), i, a )
  2433.     Next i
  2434.  
  2435.     For i = 1 To 4
  2436.         addNegativeSign( a.F_Livsmedel(i), "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2437.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Livsmedel/SInk", FixDot( a.F_Livsmedel(i).SInk ))
  2438.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Livsmedel/SEx", FixDot( a.F_Livsmedel(i).SEx ))
  2439.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Livsmedel/SMoms", FixDot( a.F_Livsmedel(i).SMoms ))
  2440.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Livsmedel/VInkPris", FixDot( a.F_Livsmedel(i).CostP ))
  2441.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Livsmedel/Momssats", GetVatFromIdx(i))
  2442.         FormatPrint_I( "Forskrivet/Livsmedel", a.F_Livsmedel(i), i, a )
  2443.     Next i
  2444.  
  2445.  
  2446.     For i = 1 To 4
  2447.         addNegativeSign( a.F_Hjalpmedel(i), "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2448.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Hjalpmedel/SInk", FixDot( a.F_Hjalpmedel(i).SInk ))
  2449.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Hjalpmedel/SEx", FixDot( a.F_Hjalpmedel(i).SEx ))
  2450.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Hjalpmedel/SMoms", FixDot( a.F_Hjalpmedel(i).SMoms ))
  2451.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Hjalpmedel/VInkPris", FixDot( a.F_Hjalpmedel(i).CostP ))
  2452.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Hjalpmedel/Momssats", GetVatFromIdx(i))
  2453.         FormatPrint_I( "Forskrivet/Hjalpmedel", a.F_Hjalpmedel(i), i, a )
  2454.     Next i
  2455.  
  2456.     For i = 1 To 4
  2457.         addNegativeSign( a.F_Bocker(i), "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2458.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Bocker/SInk", FixDot( a.F_Bocker(i).SInk ))
  2459.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Bocker/SEx", FixDot( a.F_Bocker(i).SEx ))
  2460.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Bocker/SMoms", FixDot( a.F_Bocker(i).SMoms ))
  2461.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Bocker/VInkPris", FixDot( a.F_Bocker(i).CostP ))
  2462.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Bocker/Momssats", GetVatFromIdx(i))
  2463.         FormatPrint_I( "Forskrivet/Bocker", a.F_Bocker(i), i, a )
  2464.     Next i
  2465.  
  2466.     For i = 1 To 4
  2467.         addNegativeSign( a.F_Tjanster(i), "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2468.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Tjanster/SInk", FixDot( a.F_Tjanster(i).SInk ))
  2469.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Tjanster/SEx", FixDot( a.F_Tjanster(i).SEx ))
  2470.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Tjanster/SMoms", FixDot( a.F_Tjanster(i).SMoms ))
  2471.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Tjanster/VInkPris", FixDot( a.F_Tjanster(i).CostP ))
  2472.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Tjanster/Momssats", GetVatFromIdx(i))
  2473.         FormatPrint_I( "Forskrivet/Tjanster", a.F_Tjanster(i), i, a )
  2474.     Next i
  2475.  
  2476.     For i = 1 To 4
  2477.         addNegativeSign( a.F_Ovrigt(i), "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2478.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Ovrigt/SInk", FixDot( a.F_Ovrigt(i).SInk ))
  2479.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Ovrigt/SEx", FixDot( a.F_Ovrigt(i).SEx ))
  2480.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Ovrigt/SMoms", FixDot( a.F_Ovrigt(i).SMoms ))
  2481.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Ovrigt/VInkPris", FixDot( a.F_Ovrigt(i).CostP ))
  2482.         CreateSubNodeFromEPath( oSubInfo, "Forskrivet/MT" + CStr(i) + "/Ovrigt/Momssats", GetVatFromIdx(i))
  2483.         FormatPrint_I( "Forskrivet/Ovrigt", a.F_Ovrigt(i), i, a )
  2484.     Next i
  2485.  
  2486. ' ------------------
  2487.  
  2488.     For i = 1 To 4
  2489.         addNegativeSign( a.AF_RX(i), "0,0,0,1" )
  2490.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/RX/SInk", FixDot( a.AF_RX(i).SInk ))
  2491.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/RX/SEx", FixDot( a.AF_RX(i).SEx ))
  2492.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/RX/SMoms", FixDot( a.AF_RX(i).SMoms ))
  2493.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/RX/VInkPris", FixDot( a.AF_RX(i).CostP ))
  2494.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/RX/Momssats", GetVatFromIdx(i))
  2495.         FormatPrint_I( "AterkopForskrivet/RX", a.AF_RX(i), i, a )
  2496.     Next i
  2497.  
  2498.     For i = 1 To 4
  2499.         addNegativeSign( a.AF_OTC(i), "0,0,0,1" )
  2500.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/OTC/SInk", FixDot( a.AF_OTC(i).SInk ))
  2501.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/OTC/SEx", FixDot( a.AF_OTC(i).SEx ))
  2502.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/OTC/SMoms", FixDot( a.AF_OTC(i).SMoms ))
  2503.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/OTC/VInkPris", FixDot( a.AF_OTC(i).CostP ))
  2504.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/OTC/Momssats", GetVatFromIdx(i))
  2505.         FormatPrint_I( "AterkopForskrivet/OTC", a.AF_OTC(i), i, a )
  2506.     Next i
  2507.  
  2508.     For i = 1 To 4
  2509.         addNegativeSign( a.AF_Livsmedel(i), "0,0,0,1" )
  2510.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Livsmedel/SInk", FixDot( a.AF_Livsmedel(i).SInk ))
  2511.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Livsmedel/SEx", FixDot( a.AF_Livsmedel(i).SEx ))
  2512.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Livsmedel/SMoms", FixDot( a.AF_Livsmedel(i).SMoms ))
  2513.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Livsmedel/VInkPris", FixDot( a.AF_Livsmedel(i).CostP ))
  2514.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Livsmedel/Momssats", GetVatFromIdx(i))
  2515.         FormatPrint_I( "AterkopForskrivet/Livsmedel", a.AF_Livsmedel(i), i, a )
  2516.     Next i
  2517.  
  2518.     For i = 1 To 4
  2519.         addNegativeSign( a.AF_Hjalpmedel(i), "0,0,0,1" )
  2520.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Hjalpmedel/SInk", FixDot( a.AF_Hjalpmedel(i).SInk ))
  2521.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Hjalpmedel/SEx", FixDot( a.AF_Hjalpmedel(i).SEx ))
  2522.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Hjalpmedel/SMoms", FixDot( a.AF_Hjalpmedel(i).SMoms ))
  2523.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Hjalpmedel/VInkPris", FixDot( a.AF_Hjalpmedel(i).CostP ))
  2524.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Hjalpmedel/Momssats", GetVatFromIdx(i))
  2525.         FormatPrint_I( "AterkopForskrivet/Hjalpmedel", a.AF_Hjalpmedel(i), i, a )
  2526.     Next i
  2527.  
  2528.     For i = 1 To 4
  2529.         addNegativeSign( a.AF_Bocker(i), "0,0,0,1" )
  2530.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Bocker/SInk", FixDot( a.AF_Bocker(i).SInk ))
  2531.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Bocker/SEx", FixDot( a.AF_Bocker(i).SEx ))
  2532.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Bocker/SMoms", FixDot( a.AF_Bocker(i).SMoms ))
  2533.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Bocker/VInkPris", FixDot( a.AF_Bocker(i).CostP ))
  2534.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Bocker/Momssats", GetVatFromIdx(i))
  2535.         FormatPrint_I( "AterkopForskrivet/Bocker", a.AF_Bocker(i), i, a )
  2536.     Next i
  2537.  
  2538.     For i = 1 To 4
  2539.         addNegativeSign( a.AF_Tjanster(i), "0,0,0,1" )
  2540.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Tjanster/SInk", FixDot( a.AF_Tjanster(i).SInk ))
  2541.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Tjanster/SEx", FixDot( a.AF_Tjanster(i).SEx ))
  2542.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Tjanster/SMoms", FixDot( a.AF_Tjanster(i).SMoms ))
  2543.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Tjanster/VInkPris", FixDot( a.AF_Tjanster(i).CostP ))
  2544.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Tjanster/Momssats", GetVatFromIdx(i))
  2545.         FormatPrint_I( "AterkopForskrivet/Tjanster", a.AF_Tjanster(i), i, a )
  2546.     Next i
  2547.  
  2548.  
  2549.     For i = 1 To 4
  2550.         addNegativeSign( a.AF_Ovrigt(i), "0,0,0,1" )
  2551.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Ovrigt/SInk", FixDot( a.AF_Ovrigt(i).SInk ))
  2552.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Ovrigt/SEx", FixDot( a.AF_Ovrigt(i).SEx ))
  2553.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Ovrigt/SMoms", FixDot( a.AF_Ovrigt(i).SMoms ))
  2554.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Ovrigt/VInkPris", FixDot( a.AF_Ovrigt(i).CostP ))
  2555.         CreateSubNodeFromEPath( oSubInfo, "AterkopForskrivet/MT" + CStr(i) + "/Ovrigt/Momssats", GetVatFromIdx(i))
  2556.         FormatPrint_I( "AterkopForskrivet/Ovrigt", a.AF_Ovrigt(i), i, a )
  2557.     Next i
  2558.  
  2559.  
  2560.  
  2561. ' ------------------
  2562.     addNegativeSign( a.EV_RP0, "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2563.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar0Procent/SInk", FixDot( a.EV_RP0.SInk ))
  2564.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar0Procent/SEx", FixDot( a.EV_RP0.SEx ))
  2565.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar0Procent/SMoms", FixDot( a.EV_RP0.SMoms ))
  2566.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar0Procent/Momssats", "0.00" )
  2567.     FormatPrint_I( "Egenvard/Receptpasar0Procent", a.EV_RP0, 1, a )
  2568.  
  2569.     addNegativeSign( a.EV_RP6, "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2570.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar6Procent/SInk", FixDot( a.EV_RP6.SInk ))
  2571.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar6Procent/SEx", FixDot( a.EV_RP6.SEx ))
  2572.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar6Procent/SMoms", FixDot( a.EV_RP6.SMoms ))
  2573.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar6Procent/Momssats", "6.00" )
  2574.     FormatPrint_I( "Egenvard/Receptpasar6Procent", a.EV_RP6, 2, a )
  2575.  
  2576.     addNegativeSign( a.EV_RP12, "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2577.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar12Procent/SInk", FixDot( a.EV_RP12.SInk ))
  2578.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar12Procent/SEx", FixDot( a.EV_RP12.SEx ))
  2579.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar12Procent/SMoms", FixDot( a.EV_RP12.SMoms ))
  2580.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar12Procent/Momssats", "12.00" )
  2581.     FormatPrint_I( "Egenvard/Receptpasar12Procent", a.EV_RP12, 3, a )
  2582.  
  2583.     addNegativeSign( a.EV_RP25, "1,1,1,0" ) ' SInk, SEx, SMoms, Costp
  2584.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar25Procent/SInk", FixDot( a.EV_RP25.SInk ))
  2585.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar25Procent/SEx", FixDot( a.EV_RP25.SEx ))
  2586.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar25Procent/SMoms", FixDot( a.EV_RP25.SMoms ))
  2587.     CreateSubNodeFromEPath( oSubInfo, "Egenvard/Receptpasar25Procent/Momssats", "25.00" )
  2588.     FormatPrint_I( "Egenvard/Receptpasar25Procent", a.EV_RP25, 4, a )
  2589.  
  2590.  
  2591. ' -----------------------
  2592.  
  2593.     For i = 1 To 4
  2594.         addNegativeSign( a.EV_RX(i), "1,1,1,0" )
  2595.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/RX/SInk", FixDot( a.EV_RX(i).SInk ))
  2596.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/RX/SEx", FixDot( a.EV_RX(i).SEx ))
  2597.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/RX/SMoms", FixDot( a.EV_RX(i).SMoms ))
  2598.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/RX/VInkPris", FixDot( a.EV_RX(i).CostP ))
  2599.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/RX/Momssats", GetVatFromIdx(i))
  2600.         FormatPrint_I( "Egenvard/RX", a.EV_RX(i), i, a )
  2601.     Next i
  2602.  
  2603.     For i = 1 To 4
  2604.         addNegativeSign( a.EV_OTC(i), "1,1,1,0" )
  2605.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/OTC/SInk", FixDot( a.EV_OTC(i).SInk ))
  2606.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/OTC/SEx", FixDot( a.EV_OTC(i).SEx ))
  2607.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/OTC/SMoms", FixDot( a.EV_OTC(i).SMoms ))
  2608.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/OTC/VInkPris", FixDot( a.EV_OTC(i).CostP ))
  2609.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/OTC/Momssats", GetVatFromIdx(i))
  2610.         FormatPrint_I( "Egenvard/OTC", a.EV_OTC(i), i, a )
  2611.     Next i
  2612.  
  2613.     For i = 1 To 4
  2614.         addNegativeSign( a.EV_Livsmedel(i), "1,1,1,0" )
  2615.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Livsmedel/SInk", FixDot( a.EV_Livsmedel(i).SInk ))
  2616.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Livsmedel/SEx", FixDot( a.EV_Livsmedel(i).SEx ))
  2617.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Livsmedel/SMoms", FixDot( a.EV_Livsmedel(i).SMoms ))
  2618.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Livsmedel/VInkPris", FixDot( a.EV_Livsmedel(i).CostP ))
  2619.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Livsmedel/Momssats", GetVatFromIdx(i))
  2620.         FormatPrint_I( "Egenvard/Livsmedel", a.EV_Livsmedel(i), i, a )
  2621.     Next i
  2622.  
  2623.     For i = 1 To 4
  2624.         addNegativeSign( a.EV_Hjalpmedel(i), "1,1,1,0" )
  2625.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Hjalpmedel/SInk", FixDot( a.EV_Hjalpmedel(i).SInk ))
  2626.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Hjalpmedel/SEx", FixDot( a.EV_Hjalpmedel(i).SEx ))
  2627.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Hjalpmedel/SMoms", FixDot( a.EV_Hjalpmedel(i).SMoms ))
  2628.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Hjalpmedel/VInkPris", FixDot( a.EV_Hjalpmedel(i).CostP ))
  2629.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Hjalpmedel/Momssats", GetVatFromIdx(i))
  2630.         FormatPrint_I( "Egenvard/Hjalpmedel", a.EV_Hjalpmedel(i), i, a )
  2631.     Next i
  2632.  
  2633.     For i = 1 To 4
  2634.         addNegativeSign( a.EV_Bocker(i), "1,1,1,0" )
  2635.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Bocker/SInk", FixDot( a.EV_Bocker(i).SInk ))
  2636.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Bocker/SEx", FixDot( a.EV_Bocker(i).SEx ))
  2637.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Bocker/SMoms", FixDot( a.EV_Bocker(i).SMoms ))
  2638.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Bocker/VInkPris", FixDot( a.EV_Bocker(i).CostP ))
  2639.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Bocker/Momssats", GetVatFromIdx(i))
  2640.         FormatPrint_I( "Egenvard/Bocker", a.EV_Bocker(i), i, a )
  2641.     Next i
  2642.  
  2643.     For i = 1 To 4
  2644.         addNegativeSign( a.EV_Tjanster(i), "1,1,1,0" )
  2645.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Tjanster/SInk", FixDot( a.EV_Tjanster(i).SInk ))
  2646.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Tjanster/SEx", FixDot( a.EV_Tjanster(i).SEx ))
  2647.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Tjanster/SMoms", FixDot( a.EV_Tjanster(i).SMoms ))
  2648.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Tjanster/VInkPris", FixDot( a.EV_Tjanster(i).CostP ))
  2649.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Tjanster/Momssats", GetVatFromIdx(i))
  2650.         FormatPrint_I( "Egenvard/Tjanster", a.EV_Tjanster(i), i, a )
  2651.     Next i
  2652.  
  2653.     For i = 1 To 4
  2654.         addNegativeSign( a.EV_VetArvode(i), "1,1,1,0" )
  2655.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/VetArvode/SInk", FixDot( a.EV_VetArvode(i).SInk ))
  2656.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/VetArvode/SEx", FixDot( a.EV_VetArvode(i).SEx ))
  2657.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/VetArvode/SMoms", FixDot( a.EV_VetArvode(i).SMoms ))
  2658.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/VetArvode/VInkPris", FixDot( a.EV_VetArvode(i).CostP ))
  2659.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/VetArvode/Momssats", GetVatFromIdx(i))
  2660.         FormatPrint_I( "Egenvard/VetArvode", a.EV_VetArvode(i), i, a )
  2661.     Next i
  2662.  
  2663.     For i = 1 To 4
  2664.         addNegativeSign( a.EV_Ovrigt(i), "1,1,1,0" )
  2665.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Ovrigt/SInk", FixDot( a.EV_Ovrigt(i).SInk ))
  2666.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Ovrigt/SEx", FixDot( a.EV_Ovrigt(i).SEx ))
  2667.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Ovrigt/SMoms", FixDot( a.EV_Ovrigt(i).SMoms ))
  2668.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Ovrigt/VInkPris", FixDot( a.EV_Ovrigt(i).CostP ))
  2669.         CreateSubNodeFromEPath( oSubInfo, "Egenvard/MT" + CStr(i) + "/Ovrigt/Momssats", GetVatFromIdx(i))
  2670.         FormatPrint_I( "Egenvard/Ovrigt", a.EV_Ovrigt(i), i, a )
  2671.     Next i
  2672.  
  2673.  
  2674. ' ------------------------------------------------
  2675.  
  2676.  
  2677.     For i = 1 To 4
  2678.         addNegativeSign( a.EVR_RX(i), "0,0,0,0" )
  2679.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/RX/SInk", FixDot( a.EVR_RX(i).SInk ))
  2680.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/RX/SEx", FixDot( a.EVR_RX(i).SEx ))
  2681.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/RX/SMoms", FixDot( a.EVR_RX(i).SMoms ))
  2682.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/RX/VInkPris", FixDot( a.EVR_RX(i).CostP ))
  2683.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/RX/Momssats", GetVatFromIdx(i))
  2684.         FormatPrint_I( "EgenvardRabatt/RX", a.EVR_RX(i), i, a )
  2685.     Next i
  2686.  
  2687.     For i = 1 To 4
  2688.         addNegativeSign( a.EVR_OTC(i), "0,0,0,0" )
  2689.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/OTC/SInk", FixDot( a.EVR_OTC(i).SInk ))
  2690.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/OTC/SEx", FixDot( a.EVR_OTC(i).SEx ))
  2691.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/OTC/SMoms", FixDot( a.EVR_OTC(i).SMoms ))
  2692.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/OTC/VInkPris", FixDot( a.EVR_OTC(i).CostP ))
  2693.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/OTC/Momssats", GetVatFromIdx(i))
  2694.         FormatPrint_I( "EgenvardRabatt/OTC", a.EVR_OTC(i), i, a )
  2695.     Next i
  2696.  
  2697.     For i = 1 To 4
  2698.         addNegativeSign( a.EVR_Livsmedel(i), "0,0,0,0" )
  2699.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Livsmedel/SInk", FixDot( a.EVR_Livsmedel(i).SInk ))
  2700.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Livsmedel/SEx", FixDot( a.EVR_Livsmedel(i).SEx ))
  2701.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Livsmedel/SMoms", FixDot( a.EVR_Livsmedel(i).SMoms ))
  2702.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Livsmedel/VInkPris", FixDot( a.EVR_Livsmedel(i).CostP ))
  2703.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Livsmedel/Momssats", GetVatFromIdx(i))
  2704.         FormatPrint_I( "EgenvardRabatt/Livsmedel", a.EVR_Livsmedel(i), i, a )
  2705.     Next i
  2706.  
  2707.     For i = 1 To 4
  2708.         addNegativeSign( a.EVR_Hjalpmedel(i), "0,0,0,0" )
  2709.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Hjalpmedel/SInk", FixDot( a.EVR_Hjalpmedel(i).SInk ))
  2710.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Hjalpmedel/SEx", FixDot( a.EVR_Hjalpmedel(i).SEx ))
  2711.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Hjalpmedel/SMoms", FixDot( a.EVR_Hjalpmedel(i).SMoms ))
  2712.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Hjalpmedel/VInkPris", FixDot( a.EVR_Hjalpmedel(i).CostP ))
  2713.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Hjalpmedel/Momssats", GetVatFromIdx(i))
  2714.         FormatPrint_I( "EgenvardRabatt/Hjalpmedel", a.EVR_Hjalpmedel(i), i, a )
  2715.     Next i
  2716.  
  2717.     For i = 1 To 4
  2718.         addNegativeSign( a.EVR_Bocker(i), "0,0,0,0" )
  2719.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Bocker/SInk", FixDot( a.EVR_Bocker(i).SInk ))
  2720.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Bocker/SEx", FixDot( a.EVR_Bocker(i).SEx ))
  2721.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Bocker/SMoms", FixDot( a.EVR_Bocker(i).SMoms ))
  2722.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Bocker/VInkPris", FixDot( a.EVR_Bocker(i).CostP ))
  2723.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Bocker/Momssats", GetVatFromIdx(i))
  2724.         FormatPrint_I( "EgenvardRabatt/Bocker", a.EVR_Bocker(i), i, a )
  2725.     Next i
  2726.  
  2727.     For i = 1 To 4
  2728.         addNegativeSign( a.EVR_Tjanster(i), "0,0,0,0" )
  2729.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Tjanster/SInk", FixDot( a.EVR_Tjanster(i).SInk ))
  2730.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Tjanster/SEx", FixDot( a.EVR_Tjanster(i).SEx ))
  2731.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Tjanster/SMoms", FixDot( a.EVR_Tjanster(i).SMoms ))
  2732.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Tjanster/VInkPris", FixDot( a.EVR_Tjanster(i).CostP ))
  2733.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Tjanster/Momssats", GetVatFromIdx(i))
  2734.         FormatPrint_I( "EgenvardRabatt/Tjanster", a.EVR_Tjanster(i), i, a )
  2735.     Next i
  2736.  
  2737.     For i = 1 To 4
  2738.         addNegativeSign( a.EVR_Ovrigt(i), "0,0,0,0" )
  2739.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Ovrigt/SInk", FixDot( a.EVR_Ovrigt(i).SInk ))
  2740.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Ovrigt/SEx", FixDot( a.EVR_Ovrigt(i).SEx ))
  2741.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Ovrigt/SMoms", FixDot( a.EVR_Ovrigt(i).SMoms ))
  2742.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Ovrigt/VInkPris", FixDot( a.EVR_Ovrigt(i).CostP ))
  2743.         CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/MT" + CStr(i) + "/Ovrigt/Momssats", GetVatFromIdx(i))
  2744.         FormatPrint_I( "EgenvardRabatt/Ovrigt", a.EVR_Ovrigt(i), i, a )
  2745.     Next i
  2746.  
  2747.     addNegativeSign( a.EVR_RP0, "0,0,0,0" )
  2748.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar0Procent/SInk", FixDot( a.EVR_RP0.SInk ))
  2749.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar0Procent/SEx", FixDot( a.EVR_RP0.SEx ))
  2750.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar0Procent/SMoms", FixDot( a.EVR_RP0.SMoms ))
  2751.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar0Procent/Momssats", "0.00" )
  2752.     FormatPrint_I( "EgenvardRabatt/Receptpasar0Procent", a.EVR_RP0, 1, a )
  2753.  
  2754.     addNegativeSign( a.EVR_RP6, "0,0,0,0" )
  2755.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar6Procent/SInk", FixDot( a.EVR_RP6.SInk ))
  2756.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar6Procent/SEx", FixDot( a.EVR_RP6.SEx ))
  2757.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar6Procent/SMoms", FixDot( a.EVR_RP6.SMoms ))
  2758.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar6Procent/Momssats", "6.00" )
  2759.     FormatPrint_I( "EgenvardRabatt/Receptpasar6Procent", a.EVR_RP6, 2, a )
  2760.  
  2761.     addNegativeSign( a.EVR_RP12, "0,0,0,0" )
  2762.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar12Procent/SInk", FixDot( a.EVR_RP12.SInk ))
  2763.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar12Procent/SEx", FixDot( a.EVR_RP12.SEx ))
  2764.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar12Procent/SMoms", FixDot( a.EVR_RP12.SMoms ))
  2765.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar12Procent/Momssats", "12.00" )
  2766.     FormatPrint_I( "EgenvardRabatt/Receptpasar12Procent", a.EVR_RP12, 3, a )
  2767.  
  2768.     addNegativeSign( a.EVR_RP25, "0,0,0,0" )
  2769.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar25Procent/SInk", FixDot( a.EVR_RP25.SInk ))
  2770.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar25Procent/SEx", FixDot( a.EVR_RP25.SEx ))
  2771.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar25Procent/SMoms", FixDot( a.EVR_RP25.SMoms ))
  2772.     CreateSubNodeFromEPath( oSubInfo, "EgenvardRabatt/Receptpasar25Procent/Momssats", "25.00" )
  2773.     FormatPrint_I( "EgenvardRabatt/Receptpasar25Procent", a.EVR_RP25, 4, a )
  2774.  
  2775.  
  2776. ' ------------------------------------------------
  2777.  
  2778.  
  2779.     addNegativeSign( a.AEV_RP0, "0,0,0,1" ) ' SInk, SEx, SMoms, Costp
  2780.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar0Procent/SInk", FixDot( a.AEV_RP0.SInk ))
  2781.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar0Procent/SEx", FixDot( a.AEV_RP0.SEx ))
  2782.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar0Procent/SMoms", FixDot( a.AEV_RP0.SMoms ))
  2783.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar0Procent/Momssats", "0.00" )
  2784.     FormatPrint_I( "AterkopEgenvard/Receptpasar0Procent", a.AEV_RP0, 1, a )
  2785.  
  2786.     addNegativeSign( a.AEV_RP6, "0,0,0,1" ) ' SInk, SEx, SMoms, Costp
  2787.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar6Procent/SInk", FixDot( a.AEV_RP6.SInk ))
  2788.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar6Procent/SEx", FixDot( a.AEV_RP6.SEx ))
  2789.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar6Procent/SMoms", FixDot( a.AEV_RP6.SMoms ))
  2790.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar6Procent/Momssats", "6.00" )
  2791.     FormatPrint_I( "AterkopEgenvard/Receptpasar6Procent", a.AEV_RP6, 2, a )
  2792.  
  2793.     addNegativeSign( a.AEV_RP12, "0,0,0,1" ) ' SInk, SEx, SMoms, Costp
  2794.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar12Procent/SInk", FixDot( a.AEV_RP12.SInk ))
  2795.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar12Procent/SEx", FixDot( a.AEV_RP12.SEx ))
  2796.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar12Procent/SMoms", FixDot( a.AEV_RP12.SMoms ))
  2797.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar12Procent/Momssats", "12.00" )
  2798.     FormatPrint_I( "AterkopEgenvard/Receptpasar12Procent", a.AEV_RP12, 3, a )
  2799.  
  2800.     addNegativeSign( a.AEV_RP25, "0,0,0,1" ) ' SInk, SEx, SMoms, Costp
  2801.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar25Procent/SInk", FixDot( a.AEV_RP25.SInk ))
  2802.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar25Procent/SEx", FixDot( a.AEV_RP25.SEx ))
  2803.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar25Procent/SMoms", FixDot( a.AEV_RP25.SMoms ))
  2804.     CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/Receptpasar25Procent/Momssats", "25.00" )
  2805.     FormatPrint_I( "AterkopEgenvard/Receptpasar25Procent", a.AEV_RP25, 4, a )
  2806.  
  2807.     For i = 1 To 4
  2808.         addNegativeSign( a.AEV_RX(i), "0,0,0,1" )
  2809.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/RX/SInk", FixDot( a.AEV_RX(i).SInk ))
  2810.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/RX/SEx", FixDot( a.AEV_RX(i).SEx ))
  2811.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/RX/SMoms", FixDot( a.AEV_RX(i).SMoms ))
  2812.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/RX/VInkPris", FixDot( a.AEV_RX(i).CostP ))
  2813.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/RX/Momssats", GetVatFromIdx(i))
  2814.         FormatPrint_I( "AterkopEgenvard/RX", a.AEV_RX(i), i, a )
  2815.     Next i
  2816.  
  2817.     For i = 1 To 4
  2818.         addNegativeSign( a.AEV_OTC(i), "0,0,0,1" )
  2819.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/OTC/SInk", FixDot( a.AEV_OTC(i).SInk ))
  2820.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/OTC/SEx", FixDot( a.AEV_OTC(i).SEx ))
  2821.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/OTC/SMoms", FixDot( a.AEV_OTC(i).SMoms ))
  2822.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/OTC/VInkPris", FixDot( a.AEV_OTC(i).CostP ))
  2823.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/OTC/Momssats", GetVatFromIdx(i))
  2824.         FormatPrint_I( "AterkopEgenvard/OTC", a.AEV_OTC(i), i, a )
  2825.     Next i
  2826.  
  2827.     For i = 1 To 4
  2828.         addNegativeSign( a.AEV_Livsmedel(i), "0,0,0,1" )
  2829.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Livsmedel/SInk", FixDot( a.AEV_Livsmedel(i).SInk ))
  2830.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Livsmedel/SEx", FixDot( a.AEV_Livsmedel(i).SEx ))
  2831.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Livsmedel/SMoms", FixDot( a.AEV_Livsmedel(i).SMoms ))
  2832.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Livsmedel/VInkPris", FixDot( a.AEV_Livsmedel(i).CostP ))
  2833.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Livsmedel/Momssats", GetVatFromIdx(i))
  2834.         FormatPrint_I( "AterkopEgenvard/Livsmedel", a.AEV_Livsmedel(i), i, a )
  2835.     Next i
  2836.  
  2837.     For i = 1 To 4
  2838.         addNegativeSign( a.AEV_Hjalpmedel(i), "0,0,0,1" )
  2839.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Hjalpmedel/SInk", FixDot( a.AEV_Hjalpmedel(i).SInk ))
  2840.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Hjalpmedel/SEx", FixDot( a.AEV_Hjalpmedel(i).SEx ))
  2841.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Hjalpmedel/SMoms", FixDot( a.AEV_Hjalpmedel(i).SMoms ))
  2842.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Hjalpmedel/VInkPris", FixDot( a.AEV_Hjalpmedel(i).CostP ))
  2843.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Hjalpmedel/Momssats", GetVatFromIdx(i))
  2844.         FormatPrint_I( "AterkopEgenvard/Hjalpmedel", a.AEV_Hjalpmedel(i), i, a )
  2845.     Next i
  2846.  
  2847.     For i = 1 To 4
  2848.         addNegativeSign( a.AEV_Bocker(i), "0,0,0,1" )
  2849.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Bocker/SInk", FixDot( a.AEV_Bocker(i).SInk ))
  2850.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Bocker/SEx", FixDot( a.AEV_Bocker(i).SEx ))
  2851.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Bocker/SMoms", FixDot( a.AEV_Bocker(i).SMoms ))
  2852.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Bocker/VInkPris", FixDot( a.AEV_Bocker(i).CostP ))
  2853.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Bocker/Momssats", GetVatFromIdx(i))
  2854.         FormatPrint_I( "AterkopEgenvard/Bocker", a.AEV_Bocker(i), i, a )
  2855.     Next i
  2856.  
  2857.     For i = 1 To 4
  2858.         addNegativeSign( a.AEV_Tjanster(i), "0,0,0,1" )
  2859.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Tjanster/SInk", FixDot( a.AEV_Tjanster(i).SInk ))
  2860.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Tjanster/SEx", FixDot( a.AEV_Tjanster(i).SEx ))
  2861.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Tjanster/SMoms", FixDot( a.AEV_Tjanster(i).SMoms ))
  2862.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Tjanster/VInkPris", FixDot( a.AEV_Tjanster(i).CostP ))
  2863.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Tjanster/Momssats", GetVatFromIdx(i))
  2864.         FormatPrint_I( "AterkopEgenvard/Tjanster", a.AEV_Tjanster(i), i, a )
  2865.     Next i
  2866.  
  2867.     For i = 1 To 4
  2868.         addNegativeSign( a.AEV_VetArvode(i), "0,0,0,1" )
  2869.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/VetArvode/SInk", FixDot( a.AEV_VetArvode(i).SInk ))
  2870.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/VetArvode/SEx", FixDot( a.AEV_VetArvode(i).SEx ))
  2871.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/VetArvode/SMoms", FixDot( a.AEV_VetArvode(i).SMoms ))
  2872.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/VetArvode/VInkPris", FixDot( a.AEV_VetArvode(i).CostP ))
  2873.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/VetArvode/Momssats", GetVatFromIdx(i))
  2874.         FormatPrint_I( "AterkopEgenvard/VetArvode", a.AEV_VetArvode(i), i, a )
  2875.     Next i
  2876.  
  2877.     For i = 1 To 4
  2878.         addNegativeSign( a.AEV_Ovrigt(i), "0,0,0,1" )
  2879.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Ovrigt/SInk", FixDot( a.AEV_Ovrigt(i).SInk ))
  2880.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Ovrigt/SEx", FixDot( a.AEV_Ovrigt(i).SEx ))
  2881.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Ovrigt/SMoms", FixDot( a.AEV_Ovrigt(i).SMoms ))
  2882.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Ovrigt/VInkPris", FixDot( a.AEV_Ovrigt(i).CostP ))
  2883.         CreateSubNodeFromEPath( oSubInfo, "AterkopEgenvard/MT" + CStr(i) + "/Ovrigt/Momssats", GetVatFromIdx(i))
  2884.         FormatPrint_I( "AterkopEgenvard/Ovrigt", a.AEV_Ovrigt(i), i, a )
  2885.     Next i
  2886.  
  2887.     Exit Sub
  2888.  
  2889.  
  2890. ErrorHandling:
  2891.     ReportEvent( RE_ERROR, "AddXMLInfo:" + Err.Description )
  2892.     Quit
  2893.  
  2894.  
  2895. End Sub
  2896.  
  2897. Function multiplyIt( a As String,  b As String ) As String
  2898.  
  2899.     If( a = "" ) Then a = "0,00"
  2900.     If( b = "" ) Then b = "0,00"
  2901.  
  2902.     a = Replace( a, ".", "," )
  2903.     b = Replace( b, ".", "," )
  2904.  
  2905.     multiplyIt = CStr(CDbl(CDbl(a) * CDbl(b)))
  2906.  
  2907. End Function
  2908.  
  2909.  
  2910.  
  2911. Sub addNegativeSign( a As SEK, sMask As String )
  2912.  
  2913. Dim aMask() As String
  2914.  
  2915.     aMask() = Split(sMask, "," )
  2916.  
  2917.     If( aMask(0) = "1" ) Then
  2918.         If( InStr( a.SInk, "-" ) = 0 ) Then
  2919.             If( a.SInk <> "0" ) Then
  2920.                 a.SInk = "-" + a.SInk
  2921.             End If
  2922.         End If
  2923.     Else
  2924.         a.SInk = Replace( a.SInk, "-", "" )
  2925.     End If
  2926.  
  2927.     If( aMask(1) = "1" ) Then
  2928.         If( InStr( a.SEx, "-" ) = 0 ) Then
  2929.             If( a.SEx <> "0" ) Then
  2930.                 a.SEx = "-" + a.SEx
  2931.             End If
  2932.         End If
  2933.     Else
  2934.         a.SEx = Replace( a.SEx, "-", "" )
  2935.     End If
  2936.  
  2937.     If( aMask(2) = "1" ) Then
  2938.         If( InStr( a.SMoms, "-" ) = 0 ) Then
  2939.             If( a.SMoms <> "0" ) Then
  2940.                 a.SMoms = "-" + a.SMoms
  2941.             End If
  2942.         End If
  2943.     Else
  2944.         a.SMoms = Replace( a.SMoms, "-", "" )
  2945.     End If
  2946.  
  2947.     If( aMask(3) = "1" ) Then
  2948.         If( InStr( a.CostP, "-" ) = 0 ) Then
  2949.             If( a.CostP <> "0" ) Then
  2950.                 a.CostP = "-" + a.CostP
  2951.             End If
  2952.         End If
  2953.     Else
  2954.         a.CostP = Replace( a.CostP, "-", "" )
  2955.     End If
  2956.  
  2957.  
  2958. End Sub
  2959.  
  2960.  
  2961.  
  2962. Function addIt( a As String,  b As String ) As String
  2963.  
  2964.     If( a = "" ) Then a = "0,00"
  2965.     If( b = "" ) Then b = "0,00"
  2966.  
  2967.     a = Replace( a, ".", "," )
  2968.     b = Replace( b, ".", "," )
  2969.  
  2970.     addIt = CStr(CDbl(CDbl(a) + CDbl(b)))
  2971.  
  2972. End Function
  2973.  
  2974. Function subtractIt( a As String,  b As String ) As String
  2975.  
  2976.     If( a = "" ) Then a = "0,00"
  2977.     If( b = "" ) Then b = "0,00"
  2978.  
  2979.     a = Replace( a, ".", "," )
  2980.     b = Replace( b, ".", "," )
  2981.  
  2982.     subtractIt = CStr(CDbl(CDbl(a) - CDbl(b)))
  2983.  
  2984. End Function
  2985.  
  2986.  
  2987. 'A = pris exkl moms
  2988. 'B = pris inkl moms
  2989. 'C = momssats i %
  2990.  
  2991. 'B = A * (1 + C), ex 100 = 80 * (1 + 0,25)
  2992. 'A = B / (1 + C), ex 80 = 100 / (1 + 0,25)
  2993. 'C = (B - A) / A, ex 20 = (100 - 80) / 80 = 0,25 = 25%
  2994.  
  2995. Function VATSumFromInkVAT( sAck As String, sSum As String, sVAT As String ) As String
  2996. Dim dAck As Double
  2997. Dim dSum As Double
  2998. Dim dVAT As Double
  2999. Dim dExVAT As Double
  3000. Dim dSumVAT As Double
  3001.  
  3002.     sAck = Replace( sAck, ".", "," )
  3003.     sSum = Replace( sSum, ".", "," )
  3004.     sVAT = Replace( sVAT, ".", "," )
  3005.  
  3006.  
  3007.     dSum = CDbl(sSum)
  3008.     dAck = CDbl(sAck)
  3009.     dVAT = CDbl(sVAT)
  3010.  
  3011.     dExVAT = dSum / (1 + (dVAT/100)) '
  3012.     dSumVAT = CDbl(CDbl(dSum) - CDbl(dExVAT))
  3013.     VATSumFromInkVAT = CStr(Round(CDbl(CDbl(dAck) + CDbl(dSumVAT)), 2))
  3014.  
  3015. End Function
  3016.  
  3017.  
  3018. 'A = pris exkl moms
  3019. 'B = pris inkl moms
  3020. 'C = momssats i %
  3021.  
  3022. 'B = A * (1 + C), ex 100 = 80 * (1 + 0,25)
  3023. 'A = B / (1 + C), ex 80 = 100 / (1 + 0,25)
  3024. 'C = (B - A) / A, ex 20 = (100 - 80) / 80 = 0,25 = 25%
  3025. Function ExVATFromInkVAT( sAck As String, sSum As String, sVAT As String ) As String
  3026. Dim dAck As Double
  3027. Dim dSum As Double
  3028. Dim dVAT As Double
  3029. Dim dExVAT As Double
  3030.  
  3031.     sAck = Replace( sAck, ".", "," )
  3032.     sSum = Replace( sSum, ".", "," )
  3033.     sVAT = Replace( sVAT, ".", "," )
  3034.  
  3035.     dSum = CDbl(sSum)
  3036.     dAck = CDbl(sAck)
  3037.     dVAT = CDbl(sVAT)
  3038.  
  3039.     dExVAT = dSum / (1 + (dVAT/100)) '
  3040.     ExVATFromInkVAT = CStr(Round(CDbl(CDbl(dAck) + CDbl(dExVAT)), 2))
  3041.  
  3042. End Function
  3043.  
  3044.  
  3045. Function FixDot( s As String, Optional nType As _FIXDOT = MAKEDOT) As String
  3046.  
  3047.     If( nType = MAKEDOT ) Then
  3048.         FixDot = Replace( s, ",","." )
  3049.     Else
  3050.         FixDot = Replace( s, ",","." )
  3051.         If( FixDot = "0.00" Or FixDot = "00.00" Or FixDot = "0" Or FixDot = "-0.00" ) Then
  3052.             FixDot = ""
  3053.         End If
  3054.     End If
  3055. End Function
  3056.  
  3057. Function ComputeAllValues( aa As SEK, sType As String, r As Receipt ) As SEK
  3058. Dim strSum As String
  3059.  
  3060.     aa.SMoms    = VATSumFromInkVAT( aa.SMoms, r.amount, r.VATPercent )
  3061.  
  3062.     If( sType = "SUB" ) Then
  3063.         aa.SInk = subtractIt(aa.SInk, r.amount )
  3064.     Else
  3065.         aa.SInk = addIt(aa.SInk, r.amount )
  3066.     End If
  3067.  
  3068.     aa.SEx      = ExVATFromInkVAT( aa.SEx, r.amount, r.VATPercent )
  3069.  
  3070.     strSum = multiplyIt( r.costPrice, r.amountNumber )
  3071.     aa.CostP = addIt(aa.CostP, strSum )
  3072.  
  3073.     ComputeAllValues = aa
  3074.  
  3075. End Function
  3076.  
  3077. Function GetIdxFromVAT( ByVal sVAT As String ) As _VAT
  3078. Dim nVAT As Integer
  3079. Dim i As Integer
  3080.  
  3081.     ' qwe qwe qwe qwe FIX THIS
  3082.     i = InStr( sVAT, "." )
  3083.     If( i > 0 ) Then
  3084.         sVAT = Left( sVAT, i-1 )
  3085.     End If
  3086.  
  3087.     nVAT = CInt(sVAT)
  3088.     Select Case nVAT
  3089.  
  3090.         Case 0
  3091.             GetIdxFromVAT = P0
  3092.  
  3093.         Case 6
  3094.             GetIdxFromVAT = P6
  3095.  
  3096.         Case 12
  3097.             GetIdxFromVAT = P12
  3098.  
  3099.         Case 25
  3100.             GetIdxFromVAT = P25
  3101.  
  3102.         Case Else
  3103.             ' qwe qwe qew qew FIX THIS!
  3104.             ReportEvent( RE_ERROR, "VATPercentage is incorrect" )
  3105.             Quit
  3106.     End Select
  3107.  
  3108. End Function
  3109.  
  3110. Function GetVatFromIdx(i As Integer ) As String
  3111.  
  3112.     Select Case i
  3113.  
  3114.         Case 1
  3115.             GetVatFromIdx = "0.00"
  3116.         Case 2
  3117.             GetVatFromIdx = "6.00"
  3118.         Case 3
  3119.             GetVatFromIdx = "12.00"
  3120.         Case 4
  3121.             GetVatFromIdx = "25.00"
  3122.         Case Else
  3123.             ' qwe qwe qew qew FIX THIS!
  3124.             ReportEvent( RE_ERROR, "VATPercentage is incorrect" )
  3125.             Quit
  3126.     End Select
  3127.  
  3128. End Function
  3129.  
  3130.  
  3131. Sub FormatPrint_I( strText As String, s As SEK, iVATIdx As Integer, a As TheAggregator )
  3132. Dim sInk As String
  3133. Dim sEx As String
  3134. Dim sMoms As String
  3135. Dim sCost As String
  3136. Dim sVAT As String
  3137. Dim i As Integer
  3138.  
  3139.     sInk    = FixDot(s.SInk, 1)
  3140.     sEx     = FixDot(s.SEx, 1)
  3141.     sMoms   = FixDot(s.SMoms, 1)
  3142.     sCost   = FixDot(s.CostP, 1 )
  3143.     sVAT    = GetVatFromIdx(iVATIdx)
  3144.  
  3145.     ' remove trailing decimals
  3146.     i = InStr( sVAT, "." )
  3147.     If( i > 0 ) Then
  3148.         sVAT = Left( sVAT, i-1 )
  3149.     End If
  3150.  
  3151.     Print #1, "0" + "|" + a.Organisationsnr + "|" + a.Apoteksid + "|" + a.Datum + "|" + strText + "|" + sInk + "|" + sEx + "|" + sMoms + "|" + sVAT + "|" + sCost
  3152.  
  3153. End Sub
  3154.  
  3155. Sub FormatPrint_II( strText As String, strValue As String, a As TheAggregator, Optional strExtraInfo As String = ""  )
  3156. Dim sOutput As String
  3157.  
  3158.  
  3159.     strValue = FixDot( strValue, NULLIFZERO )
  3160.  
  3161.     If( InStr( LCase(strText), "/sink" ) ) Then
  3162.         sOutput = strValue + "||||"
  3163.     ElseIf( InStr( LCase(strText), "/sex" ) ) Then
  3164.         sOutput =  "|" + strValue + "|||"
  3165.     ElseIf( InStr( LCase(strText), "/smoms" ) )  Then
  3166.         sOutput =  "||" + strValue + "||"
  3167.     ElseIf( InStr( LCase(strText), "/scostp" ) )  Then
  3168.         sOutput =  "||||" + strValue
  3169.     Else
  3170.         ' qwe qwe qwe qwe FIX THIS!!!
  3171.         ReportEvent( RE_ERROR, "UNKNOWN SWITCH" )
  3172.         Quit
  3173.     End If
  3174.  
  3175. ' prior to version 2.0
  3176. ' Print #1, "1" + "|" + a.Organisationsnr + "|" + a.Apoteksid + "|" + a.Datum + "|" + strText + "|" + sOutput
  3177. ' prior to version 2.0
  3178.  
  3179.     Print #1, "1" + "|" + a.Organisationsnr + "|" + a.Apoteksid + "|" + a.Datum + "|" + strText + "|" + sOutput + "|" + strExtraInfo
  3180.  
  3181.  
  3182. End Sub
  3183.  
  3184.  
  3185. Sub GetDataFromDB( rec As Receipt, oDBrs As ADODB.Recordset )
  3186.  
  3187.  
  3188.  
  3189.     On Error GoTo AllError
  3190.  
  3191.  
  3192.     rec.DBID                = CStr(oDBrs.Fields( "ID" ))
  3193.     rec.organizationID      = CStr(oDBrs.Fields( "organizationID" ))
  3194.     rec.storeId             = CStr(oDBrs.Fields( "storeId" ))
  3195.     rec.transactionDate     = CStr(oDBrs.Fields( "transactionDate" ))
  3196.     rec.transactionTime     = CStr(oDBrs.Fields( "transactionTime" ))
  3197.     rec.storeRunNumber      = CStr(oDBrs.Fields( "storeRunNumber" ))
  3198.  
  3199.     rec.transactionType     = CStr(oDBrs.Fields( "transactionType" ))
  3200.     rec.cardNumber          = CStr(oDBrs.Fields( "cardNumber" ))
  3201.     rec.itemNumber          = CStr(oDBrs.Fields( "itemNumber" ))
  3202.     rec.TransID             = CStr(oDBrs.Fields( "TransID" ))
  3203.     rec.ReceptArendeID      = CStr(oDBrs.Fields( "ReceptArendeID" ))
  3204.     rec.category            = CStr(oDBrs.Fields( "category" ))
  3205.     rec.EAN_Id              = CStr(oDBrs.Fields( "EAN_Id" ))
  3206.     rec.amount              = CStr(oDBrs.Fields( "amount" ))
  3207.     rec.amountNumber        = CStr(oDBrs.Fields( "amountNumber" ))
  3208.  
  3209.     rec.customerNo          = CStr(oDBrs.Fields( "customerNo" ))
  3210.     rec.customerName        = CStr(oDBrs.Fields( "customerName" ))
  3211.     rec.customerContact     = CStr(oDBrs.Fields( "customerContact" ))
  3212.     rec.customerRef         = CStr(oDBrs.Fields( "customerRef" ))
  3213.     rec.customerIdentification  = CStr(oDBrs.Fields( "customerIdentification" ))
  3214.     rec.originalCashRegister    = CStr(oDBrs.Fields( "originalCashRegister" ))
  3215.  
  3216.     rec.VATPercent          = Trim(CStr(oDBrs.Fields( "VATPercent" )))
  3217.  
  3218.     rec.costPrice           = Trim(CStr(oDBrs.Fields( "costPrice" )))
  3219.     rec.Id                  = CStr(oDBrs.Fields( "rid" ))
  3220.     rec.subType             = CStr(oDBrs.Fields( "subType" ))
  3221.     rec.RowNumber           = CStr(oDBrs.Fields( "RowNumber" ))
  3222.     rec.receiptRowRefNumber = CStr(oDBrs.Fields( "receiptRowRefNumber" ))
  3223.     rec.receiptRowText      = CStr(oDBrs.Fields( "receiptRowText" ))
  3224.  
  3225.     rec.orderID             = CStr(oDBrs.Fields( "OrderID" ))
  3226.  
  3227.     rec.ArtikelNamn         = CStr(oDBrs.Fields( "ArtikelNamn" ))
  3228.     rec.SubventionsKomm     = CStr(oDBrs.Fields( "SubventionsKomm" ))
  3229.     rec.KundFodelseDatum    = CStr(oDBrs.Fields( "KundFodelseDatum" ))
  3230.     rec.KundKon             = CStr(oDBrs.Fields( "KundKon" ))
  3231.     rec.ArbetsplatsKod      = CStr(oDBrs.Fields( "ArbetsplatsKod" ))
  3232.     rec.ForskrivarKod       = CStr(oDBrs.Fields( "ForskrivarKod" ))
  3233.     rec.ByteTillatet        = CStr(oDBrs.Fields( "ByteTillatet" ))
  3234.     rec.Formanstyp          = CStr(oDBrs.Fields( "Formanstyp" ))
  3235.     rec.Arendetyp           = CStr(oDBrs.Fields( "Arendetyp" ))
  3236.     rec.BetalningsDatum     = CStr(oDBrs.Fields( "BetalningsDatum" ))
  3237.     rec.Forsaljningstyp     = CStr(oDBrs.Fields( "Forsaljningstyp" ))
  3238.  
  3239.     rec.Momssatskod         = CStr(oDBrs.Fields( "Momssatskod" ))
  3240.     rec.Summa               = CStr(oDBrs.Fields( "Summa" ))
  3241.     rec.Valutakod           = CStr(oDBrs.Fields( "Valutakod" ))
  3242.     rec.Momssumma           = CStr(oDBrs.Fields( "Momssumma" ))
  3243.  
  3244.     rec.AupExmoms           =  CStr(oDBrs.Fields( "AupExMoms" ))
  3245.     rec.MerkostnadExmoms    = CStr(oDBrs.Fields( "MerkostnadExmoms" ))
  3246.  
  3247.     rec.receiptId           = CStr(oDBrs.Fields( "receiptId" ))
  3248.     rec.cashierId           = CStr(oDBrs.Fields( "cashierId" ))
  3249.     rec.Varunummer          = CStr(oDBrs.Fields( "Varunummer" ))
  3250.     rec.Forsaljningspris    = CStr(oDBrs.Fields( "Forsaljningspris" ))
  3251.     rec.FormanExmoms        = CStr(oDBrs.Fields( "FormanExmoms" ))
  3252.     rec.SubvensionExmoms    = CStr(oDBrs.Fields( "SubvensionExmoms" ))
  3253.     rec.Beskrivning         = CStr(oDBrs.Fields( "Beskrivning" ))
  3254.     rec.ArtikelID           = CStr(oDBrs.Fields( "ArtikelID" ))
  3255.  
  3256.  
  3257.     Exit Sub
  3258.  
  3259. AllError:
  3260.  
  3261.     ReportEvent(RE_ERROR, "GetDataFromDB:" + Err.Description )
  3262.     Quit
  3263.  
  3264.  
  3265. End Sub
  3266.  
  3267.  
  3268. Sub CreateTable()
  3269. Dim strSQL As String
  3270.  
  3271.  
  3272.     On Error GoTo AllError
  3273.  
  3274.  
  3275.  
  3276.     ReportEvent( RE_ERROR, "CREATE TABLE MANUALLY! This function is obsolete." )
  3277.     Quit
  3278.  
  3279.     strSQL = "CREATE TABLE `tblreceiptrows` (" + _
  3280.       "`ID` bigint(20) NOT NULL AUTO_INCREMENT," + _
  3281.       "`State` varchar(45) DEFAULT NULL," + _
  3282.       "`StoreID` varchar(45) DEFAULT NULL," + _
  3283.       "`OrganizationID` varchar(45) DEFAULT NULL," + _
  3284.       "`StoreRunNumber` varchar(45) DEFAULT NULL," + _
  3285.       "`TransactionDate` varchar(45) DEFAULT NULL," + _
  3286.       "`TransactionTime` varchar(45) DEFAULT NULL," + _
  3287.       "`TransactionType` varchar(45) DEFAULT NULL," + _
  3288.       "`CardNumber` varchar(255) DEFAULT NULL," + _
  3289.       "`ItemNumber` varchar(45) DEFAULT NULL," + _
  3290.       "`Category` varchar(45) DEFAULT NULL," + _
  3291.       "`Amount` varchar(45) DEFAULT NULL," + _
  3292.       "`CustomerNo` varchar(45) DEFAULT NULL," + _
  3293.       "`VATPercent` varchar(45) DEFAULT NULL," + _
  3294.       "`rid` varchar(45) DEFAULT NULL," + _
  3295.       "`subType` varchar(45) DEFAULT NULL," + _
  3296.       "`originalCashRegister` varchar(45) DEFAULT NULL," + _
  3297.       "`RowNumber` varchar(45) DEFAULT NULL," + _
  3298.       "`receiptRowRefNumber` varchar(45) DEFAULT NULL," + _
  3299.       "`receiptRowText` varchar(255) DEFAULT NULL," + _
  3300.       "`CustomerName` varchar(80) DEFAULT NULL," + _
  3301.       "`ArtikelID` varchar(45) DEFAULT NULL," + _
  3302.       "`ArtikelNamn` varchar(45) DEFAULT NULL," + _
  3303.       "`ArtikelID` varchar(45) DEFAULT NULL," + _
  3304.       "`Forsaljningstyp` varchar(45) DEFAULT NULL," + _
  3305.       "`ByteTillatet` varchar(45) DEFAULT NULL," + _
  3306.       "`Formanstyp` varchar(45) DEFAULT NULL," + _
  3307.       "`Arendetyp` varchar(45) DEFAULT NULL," + _
  3308.       "`BetalningsDatum` varchar(45) DEFAULT NULL," + _
  3309.       "`AupExmoms` varchar(45) DEFAULT NULL," + _
  3310.       "`MerkostnadExmoms` varchar(45) DEFAULT NULL," + _
  3311.       "`SubventionsKomm` varchar(255) DEFAULT NULL," + _
  3312.       "`TransID` varchar(45) DEFAULT NULL," + _
  3313.       "`Beskrivning` varchar(255) DEFAULT NULL," + _
  3314.       "`KundFodelsedatum` varchar(45) DEFAULT NULL," + _
  3315.       "`KundKon` varchar(45) DEFAULT NULL," + _
  3316.       "`ArbetsplatsKod` varchar(45) DEFAULT NULL," + _
  3317.       "`ForskrivarKod` varchar(45) DEFAULT NULL," + _
  3318.       "`Momssatskod` varchar(45) DEFAULT NULL," + _
  3319.       "`Summa` varchar(45) DEFAULT NULL," + _
  3320.       "`Valutakod` varchar(45) DEFAULT NULL," + _
  3321.       "`Momssumma` varchar(45) DEFAULT NULL," + _
  3322.       "`CostPrice` varchar(45) DEFAULT NULL," + _
  3323.       "`AmountNumber` varchar(45) DEFAULT NULL," + _
  3324.       "`ReceiptID` varchar(45) DEFAULT NULL," + _
  3325.       "`CashierID` varchar(45) DEFAULT NULL," + _
  3326.       "`Varunummer` varchar(45) DEFAULT NULL," + _
  3327.       "`Forsaljningspris` varchar(45) DEFAULT NULL," + _
  3328.       "`FormanExmoms` varchar(45) DEFAULT NULL," + _
  3329.       "`SubvensionExmoms` varchar(45) DEFAULT NULL," + _
  3330.       "PRIMARY KEY (`ID`)" + _
  3331.       ") ENGINE=InnoDB AUTO_INCREMENT=1855 DEFAULT CHARSET=latin1;"
  3332.  
  3333.     CloseRecordSet oDBrs
  3334.     oDBrs.open(strSQL)
  3335.  
  3336.     ReportLog(RL_NORMAL, "Table created! NOTE! Alter parameter DBCreateTable, must be set to '0'" )
  3337.     ReportEvent(RE_WARNING, "Table created! NOTE! Alter parameter DBCreateTable, must be set to '0'" )
  3338.  
  3339.     Exit Sub
  3340.  
  3341. AllError:
  3342.     ReportEvent(RE_ERROR, Err.Description )
  3343.     Quit
  3344.  
  3345. End Sub
  3346.  
  3347. Sub OBSOLETEGenerateBITransactionFile()
  3348. Dim strFilename As String
  3349. Dim strSQL As String
  3350.  
  3351.     On Error GoTo AllError
  3352.  
  3353.  
  3354.     strBITextFile = GetParameter( "-TXTBIOutFile" )
  3355.  
  3356.     If( strBITextFile = "" ) Then
  3357.         strBITextFile = CreateTempFile( "edi" )
  3358.         SetParameter( "-TXTBIOutFile=" + strBITextFile )
  3359.     End If
  3360.  
  3361.  
  3362.     strFilename = Replace(strBITextFile, "\", "\\" )
  3363.  
  3364.     ' with transactiontime
  3365.     strSQL ="SELECT ID, State, StoreID, OrganizationID, StoreRunNumber, TransactionDate, TransactionTime, TransactionType, " + _
  3366.             "CardNumber, ItemNumber, Category, Amount, CustomerNo, VATPercent, rid, subType, originalCashRegister, " + _
  3367.             "RowNumber, receiptRowRefNumber, CustomerName, ArtikelID, ArtikelNamn, SubventionsKomm, TransID, " + _
  3368.             "Beskrivning, KundFodelsedatum, KundKon, ArbetsplatsKod, ForskrivarKod, Momssatskod, Summa, Valutakod, " + _
  3369.             "Momssumma, CostPrice, AmountNumber, Varunummer, Forsaljningspris, FormanExmoms, SubvensionExmoms, " + _
  3370.             "ReceiptRowText, Forsaljningstyp, ByteTillatet, Formanstyp, Arendetyp, BetalningsDatum, AupExmoms, MerkostnadExmoms " + _
  3371.             "FROM tblReceiptRows_tmp " + _
  3372.             "WHERE State='I' " + _
  3373.             "ORDER BY organizationID, storeId, transactionDate, TransactionTime, storeRunNumber, receiptRowRefNumber, RowNumber, transactionType " + _
  3374.             "INTO OUTFILE '" + strFilename + "' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n' "
  3375.  
  3376.  
  3377.     bBITWritten = True
  3378.  
  3379.  
  3380.     On Error Resume Next
  3381.     Kill strBITextFile
  3382.     Err.Clear
  3383.     On Error GoTo AllError
  3384.  
  3385.     CloseRecordSet oDBrs
  3386.     oDBrs.open(strSQL)
  3387.  
  3388.     Exit Sub
  3389.  
  3390. AllError:
  3391.     ReportEvent(RE_ERROR, "GenerateBITransactionFile:" + Err.Description )
  3392.     Quit
  3393.  
  3394. End Sub
  3395. Sub InsertBIFromTblReceiptRows()
  3396. Dim strSQL As String
  3397. Dim strSQLII As String
  3398. Dim sx As String
  3399.  
  3400.  
  3401. Dim strSQLy As String
  3402. Dim strSQLyII As String
  3403. Dim sy As String
  3404. Dim bHit As Boolean
  3405.  
  3406.  
  3407.     On Error GoTo AllError
  3408.  
  3409.  
  3410.     ' select all processed ID:s from the triggertable
  3411.  
  3412.  
  3413.  
  3414.     strSQL = "SELECT * FROM HJBI_import.dbo.imp_TriggerTab where ImportTriggerName = '" + strDBTriggerName + "' AND ImportRead is not Null AND (DataDeleted != 1 OR DataDeleted is null)"
  3415.     CloseRecordSet oDBrsCognos
  3416.     oDBrsCognos.open strSQL
  3417.  
  3418.     strSQL  = "DELETE FROM imp_ps_salestrans WHERE (State = '"
  3419.     strSQLy = "UPDATE HJBI_import.dbo.imp_TriggerTab SET DataDeleted = '1' WHERE ImportTriggerName = '" + strDBTriggerName + "' AND (importID='"
  3420.  
  3421.     sx = "' OR State = '"
  3422.     sy = "' OR importID = '"
  3423.  
  3424.     bHit = False
  3425.     ' generate delete satement for imp_ps_salestrans
  3426.     ' generate update statement for imp_TriggerTab
  3427.     While( Not oDBrsCognos.EOF )
  3428.  
  3429.         bHit = True
  3430.         strSQLII = strSQLII + oDBrsCognos.Fields( "importID" ) + sx
  3431.         strSQLyII = strSQLyII + oDBrsCognos.Fields( "importID" ) + sy
  3432.         oDBrsCognos.MoveNext
  3433.  
  3434.     Wend
  3435.  
  3436.     If( bHit ) Then
  3437.  
  3438.  
  3439.         ReportEvent( RE_NORMAL, "Deleting data from 'imp_ps_salestrans' with ID:" + Left( strSQLyII, (Len(strSQLyII)-Len(sy))+1 ) )
  3440.         ' delete all rows in database where imp_ps_salestrans.State = triggertab.State.
  3441.         strSQL = strSQL + Left( strSQLII, (Len(strSQLII)-Len(sx))+1 ) + ");"
  3442.         CloseRecordSet oDBrs
  3443.         oDBrs.open(strSQL)
  3444.  
  3445.  
  3446.         ' update all rows in database where ID = ID.
  3447.         strSQLy = strSQLy + Left( strSQLyII, (Len(strSQLyII)-Len(sy))+1 ) + ");"
  3448.         CloseRecordSet oDBrsCognos
  3449.         oDBrsCognos.open strSQLy
  3450.  
  3451.     End If
  3452.  
  3453.  
  3454.     strSQL =    "INSERT INTO imp_ps_salestrans (" + _
  3455.                 "State, StoreID, OrganizationID, StoreRunNumber, TransactionDate, TransactionTime, TransactionType, CardNumber, " + _
  3456.                 "ItemNumber, Category, Amount, CustomerNo, VATPercent, rid, SubType, OriginalCashRegister, RowNumber,  " + _
  3457.                 "receiptRowRefNumber, CustomerName, ArtikelID, ArtikelNamn, SubventionsKomm, TransID, Beskrivning,  " + _
  3458.                 "KundFodelsedatum, KundKon, ArbetsplatsKod, ForskrivarKod, Momssatskod, Summa, Valutakod, Momssumma,  " + _
  3459.                 "CostPrice, AmountNumber, Varunummer, Forsaljningspris, FormanExmoms, SubvensionExmoms, ReceiptRowText,  " + _
  3460.                 "Forsaljningstyp, ByteTillatet, Formanstyp, Arendetyp, BetalningsDatum, AupExmoms, MerkostnadExmoms, OrderID,  " + _
  3461.                 "CustomerContact, CustomerRef, CustomerIdentification, EAN_ID, ReceptArendeID, ID, CashierID) " + _
  3462.                 "SELECT " + _
  3463.                 "'" + Replace( GetID(), "#", "" ) + "', StoreID, OrganizationID, StoreRunNumber, TransactionDate, TransactionTime, TransactionType, CardNumber, " + _
  3464.                 "ItemNumber, Category, Amount, CustomerNo, VATPercent, rid, SubType, OriginalCashRegister, RowNumber,  " + _
  3465.                 "receiptRowRefNumber, CustomerName, ArtikelID, ArtikelNamn, SubventionsKomm, TransID, Beskrivning,  " + _
  3466.                 "KundFodelsedatum, KundKon, ArbetsplatsKod, ForskrivarKod, Momssatskod, Summa, Valutakod, Momssumma,  " + _
  3467.                 "CostPrice, AmountNumber, Varunummer, Forsaljningspris, FormanExmoms, SubvensionExmoms, ReceiptRowText,  " + _
  3468.                 "Forsaljningstyp, ByteTillatet, Formanstyp, Arendetyp, BetalningsDatum, AupExmoms, MerkostnadExmoms, OrderID,  " + _
  3469.                 "CustomerContact, CustomerRef, CustomerIdentification, EAN_ID, ReceptArendeID, ID, CashierID " + _
  3470.                 "FROM tblReceiptRows_tmp " + _
  3471.                 "WHERE tblReceiptRows_tmp.State='I';"
  3472.  
  3473.     CloseRecordSet oDBrs
  3474.     oDBrs.open(strSQL)
  3475.  
  3476.  
  3477.     strSQL = "INSERT INTO HJBI_import.dbo.imp_TriggerTab (importTriggerName, importID) VALUES( '" + strDBTriggerName + "', '" + Replace( GetID(), "#", "" ) + "');"
  3478.     CloseRecordSet oDBrsCognos
  3479.     oDBrsCognos.open strSQL
  3480.  
  3481.  
  3482.     Exit Sub
  3483.  
  3484. AllError:
  3485.     DumpSQL( strSQL )
  3486.     ReportEvent(RE_ERROR, "InsertBIFromTblReceiptRows:" + Err.Description + " : " + CStr(Err.Number) + " : 0x" + Hex( Err.Number ) )
  3487.     Quit
  3488.  
  3489. End Sub
  3490.  
  3491.  
  3492.  
  3493.  
  3494. Sub GenerateInvoiceFiles()
  3495.  
  3496.     Dim strSQL      As String
  3497.     Dim rech        As Receipt
  3498.     Dim strSavedID  As String
  3499.     Dim strOldID    As String
  3500. '   Dim diRows      As New Dictionary
  3501.     Dim agg         As TheAggregator
  3502.     Dim strTempFile As String
  3503. '   Dim bRowsPrinted    As Boolean
  3504.     Dim bFirstTime As Boolean
  3505.     Dim strRestartUpdated As String
  3506.     Dim strSavedOrgID As String
  3507.     Dim strOldOrgID As String
  3508.  
  3509.     Dim numRecepits     As Long
  3510.     Dim numRecepitsTmp  As Long
  3511.     Dim bContinue       As Boolean
  3512.  
  3513.     On Error GoTo AllError
  3514.  
  3515.  
  3516.     numRecepits = 30000
  3517.     numRecepitsTmp = numRecepits
  3518.     bContinue = True
  3519.  
  3520.  
  3521.     ' Prepare processed table
  3522.     strSQL = "TRUNCATE TABLE tblReceiptRows_processed"
  3523.     CloseRecordSet oDBrs
  3524.     oDBrs.open(strSQL)
  3525.  
  3526.     strSQL = "ALTER TABLE tblReceiptRows_processed AUTO_INCREMENT=1"
  3527.     CloseRecordSet oDBrs
  3528.     oDBrs.open(strSQL)
  3529.  
  3530.     ' Populate processed table
  3531.     strSQL = "INSERT INTO tblReceiptRows_processed(StoreRunNumber) SELECT DISTINCT(StoreRunNumber) FROM tblReceiptRows_tmp WHERE State='I' " + _
  3532.               "AND ((transactiontype='99' and SubType='1') " + _
  3533.               "OR (transactiontype='13' OR transactiontype='1' OR transactiontype='2' or transactiontype='6' or transactiontype='31' or transactiontype='87'))"
  3534.     CloseRecordSet oDBrs
  3535.     oDBrs.open(strSQL)
  3536.  
  3537.    ' Get an initial result
  3538.     strSQL = "SELECT * FROM tblReceiptRows_processed WHERE processed <> 1 LIMIT 1"
  3539.     CloseRecordSet oDBrs
  3540.     oDBrs.open(strSQL)
  3541.  
  3542.     If oDBrs.RecordCount = 0 Then
  3543.         ReportEvent( RE_NORMAL, "No invoice data to process..." )
  3544.         Exit Sub
  3545.     End If
  3546.  
  3547.     idxIVFile = 0
  3548. '   bRowsPrinted    = False
  3549.     bFirstTime      = True
  3550.     ResetRows()
  3551.  
  3552.     While bContinue And ContinueRun()
  3553.  
  3554.         ReportEvent(RE_INFO, "Processing invoice row " & CStr(numRecepits) & " receipts, invoice row: " & CStr(numRecepitsTmp))
  3555.  
  3556.  
  3557.         strSQL = "SELECT * FROM tblReceiptRows_tmp tt " + _
  3558.             "INNER JOIN tblReceiptRows_processed tp ON tt.StoreRunNumber = tp.StoreRunNumber and tp.id < " & CStr(numRecepitsTmp) & " and tp.processed <> 1 " + _
  3559.             "AND ((tt.transactiontype='99' and tt.SubType='1') " + _
  3560.             "OR (tt.transactiontype='13' OR tt.transactiontype='1' or tt.transactiontype='2' or tt.transactiontype='6' or tt.transactiontype='31' or tt.transactiontype='87')) " + _
  3561.             "ORDER BY tt.organizationID, tt.storeId, tt.transactionDate, tt.storeRunNumber, cast( tt.receiptRowRefNumber as decimal(2,0)), cast(tt.RowNumber as decimal(2,0)), cast(tt.transactionType as decimal(2,0))"
  3562.  
  3563.  
  3564.         If Not ContinueRun() Then
  3565.             ReportEvent( RE_ERROR, "Quitting on users request..." )
  3566.             Quit
  3567.         End If
  3568.  
  3569.         CloseRecordSet oDBrs
  3570.         oDBrs.open(strSQL)
  3571.  
  3572.         bContinue = False
  3573.  
  3574.         If(oDBrs.RecordCount > 0 ) Then
  3575.  
  3576.             bContinue = True
  3577.  
  3578.             strOldID        = ""
  3579.             strOldOrgID     = ""
  3580.  
  3581.             While Not oDBrs.EOF And ContinueRun()
  3582.  
  3583.  
  3584.                 GetDataFromDB( rech, oDBrs )
  3585.  
  3586.                 strSavedID      = rech.organizationID + rech.storeId + rech.transactionDate + rech.storeRunNumber
  3587.                 strSavedOrgID   = rech.organizationID
  3588.  
  3589.  
  3590.                 If( strSavedID <> strOldID ) Then
  3591.  
  3592.  
  3593.                     If( bFirstTime ) Then
  3594.  
  3595.                         bFirstTime = False
  3596.  
  3597.                         strOutfileInvoiceTxt(idxIVFile)     = CreateTempFile( "txt", False )
  3598.                         Open strOutfileInvoiceTxt(idxIVFile) For Output As #2
  3599.                         strOrganizationNumber(idxIVFile)    = strSavedOrgID
  3600.                         idxIVFile = idxIVFile + 1
  3601.  
  3602.                         strOldOrgID = strSavedOrgID
  3603.  
  3604.                     Else
  3605.  
  3606. '                       bRowsPrinted = True
  3607.                         PrintRows() ' prints all rech saved up til now
  3608.  
  3609.                         ' one file for each organizationnumber.
  3610.                         If( strSavedOrgID <> strOldOrgID ) Then
  3611.  
  3612.                             Close #2
  3613.  
  3614.                             strOutfileInvoiceTxt(idxIVFile)     = CreateTempFile( "txt", False )
  3615.                             Open strOutfileInvoiceTxt(idxIVFile) For Output As #2
  3616.                             strOrganizationNumber(idxIVFile)    = strSavedOrgID
  3617.                             idxIVFile = idxIVFile + 1
  3618.  
  3619.                             strOldOrgID = strSavedOrgID
  3620.  
  3621.                         End If
  3622.  
  3623.  
  3624.                     End If
  3625.  
  3626.                     ResetRows() ' remove all already printed
  3627.  
  3628.                     SaveRow( rech ) ' save the new
  3629.  
  3630.                     strOldID = strSavedID
  3631.  
  3632.                 Else
  3633.  
  3634.                     SaveRow( rech )
  3635.  
  3636.                 End If
  3637.  
  3638.                 oDBrs.MoveNext
  3639.  
  3640.             Wend
  3641.  
  3642. '           If( RowsLeftToprint() ) Then
  3643. '               PrintRows()
  3644. '           End If
  3645.  
  3646.             ' update processed rows in processed table
  3647.             strSQL = "UPDATE tblReceiptRows_processed set processed = 1 where processed = 0 and id < " & CStr(numRecepitsTmp)
  3648.             CloseRecordSet oDBrs
  3649.             oDBrs.open(strSQL)
  3650.  
  3651.             numRecepitsTmp = numRecepitsTmp + numRecepits
  3652.  
  3653.  
  3654.             If Not ContinueRun() Then
  3655.                 ReportEvent(RE_ERROR, "Quitting on users request..." )
  3656.                 Quit
  3657.             End If
  3658.  
  3659.         End If
  3660.  
  3661.     Wend
  3662.  
  3663.     If( RowsLeftToprint() ) Then
  3664.         PrintRows()
  3665.     End If
  3666.  
  3667.     Close #2
  3668.  
  3669.  
  3670.  
  3671.     Exit Sub
  3672.  
  3673. AllError:
  3674.     ReportEvent(RE_ERROR, "GenerateInvoiceFiles:" + Err.Description)
  3675.     Quit
  3676.  
  3677. End Sub
  3678.  
  3679.  
  3680. Function RowsLeftToprint() As Boolean
  3681.  
  3682.     If( nRecIdx > 0 ) Then
  3683.         RowsLeftToprint = True
  3684.     Else
  3685.         RowsLeftToprint = False
  3686.     End If
  3687.  
  3688. End Function
  3689.  
  3690. Sub ResetRows()
  3691.  
  3692.  
  3693.     nRecIdx = 0
  3694.  
  3695.     Exit Sub
  3696.  
  3697. AllError:
  3698.     ReportEvent(RE_ERROR, "ResetRows:" + Err.Description)
  3699.     Quit
  3700. End Sub
  3701.  
  3702.  
  3703.  
  3704. Sub SaveRow( rech As Receipt)
  3705.  
  3706.     On Error GoTo AllError
  3707.  
  3708.     aRech(nRecIdx) = rech
  3709.     nRecIdx = nRecIdx + 1
  3710.  
  3711.     If( nRecIdx >= MAX_RECEIPTS-1 ) Then
  3712.         ReportEvent( RE_ERROR, "The index of the receiptrow array must be extended. Alter the 'MAX_RECEIPTS' constant value in the script." )
  3713.         Quit
  3714.     End If
  3715.  
  3716.     Exit Sub
  3717.  
  3718. AllError:
  3719.     ReportEvent(RE_ERROR, "SaveRow:" + Err.Description)
  3720.     Quit
  3721. End Sub
  3722.  
  3723.  
  3724.  
  3725. Sub PrintRows( )
  3726.     Dim aValues()   As Variant
  3727.     Dim i           As Integer
  3728.     Dim j           As Integer
  3729.     Dim rech        As Receipt
  3730.     Dim b13Hit      As Boolean
  3731.     Dim b87Hit      As Boolean
  3732.     Dim b_31_Hit        As Boolean
  3733.     Dim b99Hit      As Boolean
  3734.     Dim strCustNo   As String
  3735.     Dim str13Amount As String
  3736.     Dim str87Amount As String
  3737.     Dim str31Amount As String
  3738.     Dim str01Amount As String
  3739.     Dim str06Amount As String
  3740.     Dim str02Amount As String
  3741.     Dim strDate     As String
  3742.     Dim strStoreID  As String
  3743.     Dim strReceiptID        As String
  3744.     Dim strSubventionsKomm  As String
  3745.     Dim nCounter            As Integer
  3746.     Dim strArtikelnamn      As String
  3747.     Dim strArtikelID        As String
  3748.     Dim str01AmountNbr      As String
  3749.     Dim str06AmountNbr      As String
  3750.     Dim strVATPercent       As String
  3751.     Dim vat                 As _VAT
  3752.     Dim strVATType          As String
  3753.     Dim strForsaljPris      As String
  3754.     Dim strFaktor           As String
  3755.     Dim strRabatt           As String
  3756.     Dim strFormanExmoms     As String
  3757.     Dim strTransID          As String
  3758.     Dim bHeadWritten        As Boolean
  3759.     Dim nIdx                As Integer
  3760.     Dim strAmount           As String
  3761.     Dim strOrderID          As String
  3762.     Dim strSubExMoms        As String
  3763.     Dim strMomsSum          As String
  3764.  
  3765.     Dim strCustomerContact  As String
  3766.     Dim strCustomerRef      As String
  3767.     Dim strCustomerIdentification As String
  3768.  
  3769.     On Error GoTo AllError
  3770.  
  3771.  
  3772.     ' check if list contains a transactiontype 13
  3773.     b13Hit = False
  3774.     b_31_Hit = False
  3775.     b99Hit = False
  3776.     b87Hit = False
  3777.  
  3778.     strCustNo       = ""
  3779.     str13Amount     = ""
  3780.     strDate         = ""
  3781.     strStoreID      = ""
  3782.     strReceiptID    = ""
  3783.  
  3784.     str31Amount = ""
  3785.     str13Amount = ""
  3786.     str87Amount = ""
  3787.     strSubventionsKomm = ""
  3788.     strFormanExmoms = ""
  3789.     strTransID = ""
  3790.  
  3791.  
  3792.     ' FAKTURAFILEN: 13/87 är grunden sen så ska det alltid komma minst en 1/6 (en rad för varje, artikelid/itemnumber en ny rad),
  3793.     ' sen kan det komma 2:or som är rabatten och sen kommer det alltid en 31.
  3794.     ' Transt 1 = amount = Försäljningspris ink moms, räkna ut exmoms m.h.a. VATPercent
  3795.     ' Transt 2 = amount = Itemnumber = minusbelopp som talar om rabatten, använd VATPercent för att räkna ut exmoms.
  3796.     ' Detta ska multipliceras med en faktor, amount i transtyp 13 dividerat med amount i transtyp 31 den summan ska multipliceras mot artikeln.
  3797.     ' Endast en 13 och endast en 31 per storerunningnumber.
  3798.     '
  3799.     ' 13/87 alltid en
  3800.     ' 1/6:or kommer en eller flera artikelID
  3801.     ' 2 kan komma och den är rabatten.
  3802.     ' 1 31:a
  3803.  
  3804.     ' För varje kvitto som har transaktionstyp 13.
  3805.     ' En kvittorad för varje transaktionstyp 1. På denna rad räknas försäljningspris exkl moms/st ut genom att ta amount (från 1) minus momsbelopp
  3806.     ' (VATpercent finns på 1:an) multiplicerat med
  3807.     ' faktorn.
  3808.  
  3809.     ' Faktorn räknas ut genom att ta amount i transtyp 13 dividerat med amount i transtyp 31 (för samma storerunningnumber).
  3810.  
  3811.     ' Artikelnr för raden är ItemNumber i transtyp 1.
  3812.     ' Artikelnamn för raden är ReceiptRowText i transtyp 1.
  3813.     ' Antal för raden är AmountNumber i transtyp 1.
  3814.     ' Kundnr för raden är Customer/CustomerNumber som finns i transtyp 13.
  3815.     ' Momssatskod för raden sätts till 101, 102 etc utifrån VATPercent i transtyp 1.
  3816.  
  3817.  
  3818.     ' 87:orna (funkar på samma sätt som 13 typerna)
  3819.     ' Endast en 87 och endast en 31 per storerunningnumber.
  3820.     ' 6:or kommer en eller flera (samma som 1:orna för 13)
  3821.     ' 2 kan komma och den är rabatten.
  3822.  
  3823.  
  3824.  
  3825.     ' NYTT
  3826.     ' ====
  3827.     ' För transtyp 13, tag orderid i transtyp 1 sök efter samma orderid i transtyp 95 (alltid en 1:a som kan ha 0, 1 eller flera 95:or).
  3828.     ' För transtyp 87, tag orderid i transtyp 6 sök efter samma orderid i transtyp 96 (alltid en 6:a som kan ha 0, 1 eller flera 96:or)..
  3829.  
  3830.     ' Om man får träff, tag denna information från kvittoraderna:
  3831.     ' Itemnumber, AmountNumber, VATPercent och Amount.
  3832.     ' ' Transt 1->96 = amount = Försäljningspris ink moms, räkna ut exmoms m.h.a. VATPercent
  3833.     ' ' Transt 2->95 = amount = Itemnumber (recptpåse item 100000,100006,100012, 100025) = minusbelopp som talar om rabatten, använd VATPercent för att räkna ut exmoms.
  3834.     ' ' Detta ska multipliceras med en faktor, amount i transtyp 13 dividerat med amount i transtyp 31 den summan ska multipliceras mot artikeln.
  3835.     ' ' Endast en 13 och endast en 31 per storerunningnumber.
  3836.  
  3837.     ' -' Artikelnr är ItemNumber i transtyp 95 eller 96.
  3838.     ' -' Artikelnamn hämtas med Itemnumber från tabell.
  3839.     ' -' Antal för raden är AmountNumber i transtyp 95 eller 96.
  3840.     ' -' Kundnr för raden är Customer/CustomerNumber som finns i transtyp 13. (Ingen ändring)
  3841.     ' -' Momssatskod för raden sätts till 101, 102 etc utifrån VATPercent i transtyp 95 eller 96.
  3842.  
  3843.     ' get data from each transactiontype for subsequent processing
  3844.     ' -------------------------------------------------------------
  3845.     For i = 0 To nRecIdx-1
  3846.  
  3847.         rech = aRech(i)
  3848.  
  3849.         If( rech.transactionType = "13" ) Then
  3850.  
  3851.             strCustNo       = rech.customerNo
  3852.             str13Amount     = rech.amount
  3853.             strDate         = Replace( rech.transactionDate, "-", "" )
  3854.             strStoreID      = rech.storeId
  3855.             strReceiptID    = rech.receiptId
  3856.             strTransID      = rech.storeRunNumber
  3857.  
  3858.             strCustomerContact          = rech.customerContact
  3859.             strCustomerRef              = rech.customerRef
  3860.             strCustomerIdentification   = rech.customerIdentification
  3861.  
  3862.             b13Hit = True
  3863.  
  3864.         End If
  3865.  
  3866.         If( rech.transactionType = "87" ) Then
  3867.  
  3868.             strCustNo       = rech.customerNo
  3869.             str87Amount     = rech.amount
  3870.             strDate         = Replace( rech.transactionDate, "-", "" )
  3871.             strStoreID      = rech.storeId
  3872.             strReceiptID    = rech.receiptId
  3873.             strTransID      = rech.storeRunNumber
  3874.  
  3875.             strCustomerContact          = rech.customerContact
  3876.             strCustomerRef              = rech.customerRef
  3877.             strCustomerIdentification   = rech.customerIdentification
  3878.  
  3879.             b87Hit = True
  3880.  
  3881.         End If
  3882.  
  3883.         If( rech.transactionType = "31" ) Then
  3884.  
  3885.             str31Amount = rech.amount
  3886.             b_31_Hit = True
  3887.  
  3888.         End If
  3889.  
  3890.         If( rech.transactionType = "99" ) Then
  3891.  
  3892.             b99Hit = True
  3893.  
  3894.         End If
  3895.  
  3896.     Next i
  3897.  
  3898.  
  3899.  
  3900.     If( b99Hit And b13Hit ) Then
  3901.  
  3902.         ReportEvent(RE_ERROR, "A storerunningnumber/receipt contains rows with transactiontype 99 and 13. NOT VALID!" )
  3903.         rech = aRech(0)
  3904.         ReportReceipt( rech )
  3905.         Quit
  3906.  
  3907.     End If
  3908.  
  3909.     If( b99Hit And b87Hit ) Then
  3910.  
  3911.         ReportEvent(RE_ERROR, "A storerunningnumber/receipt contains rows with transactiontype 99 and 87. NOT VALID!" )
  3912.         rech = aRech(0)
  3913.         ReportReceipt( rech )
  3914.         Quit
  3915.  
  3916.     End If
  3917.  
  3918.     If( b13Hit And b87Hit ) Then
  3919.  
  3920.         ReportEvent(RE_ERROR, "A storerunningnumber/receipt contains rows with transactiontype 13 and 87. NOT VALID!" )
  3921.         rech = aRech(0)
  3922.         ReportReceipt( rech )
  3923.         Quit
  3924.  
  3925.     End If
  3926.  
  3927.  
  3928.     ' NOTE! THE IMPLEMENTATION FOR 13 and 87 are nearly exakt the same. It is splitted into two separate
  3929.     ' sections due to coming changes.
  3930.  
  3931.     ' only process storerunningnumber/receipts with transactintype 13 in it
  3932.     ' ---------------------------------------------------------------------
  3933.     If( b13Hit ) Then
  3934.  
  3935.  
  3936.         If( Not b_31_Hit ) Then
  3937.  
  3938.             rech = aRech(0)
  3939.             ReportEvent( RE_ERROR, "The storerunningnumber:" + rech.storeRunNumber + " does not contain a transactiontype 31 but it has a transactiontype 13" )
  3940.             ReportEvent( RE_WARNING, "Receipt error - must have 31 with a 13" )
  3941.             ReportReceipt( rech )
  3942.             Quit
  3943.  
  3944.         End If
  3945.  
  3946.         strFaktor = CStr(CDbl(CDbl(str13Amount) / CDbl(str31Amount)))
  3947.  
  3948.         nCounter = 0
  3949.         Print #2, "H;;2;" + strCustNo + ";;" + strDate + ";;" + strTransID + ";" + strReceiptID + ";;" ;
  3950.         Print #2, ";;1;;;;;;;;;" + strStoreID + ";;;;;;;;;;;;;;;" + strCustomerContact + ":" + strCustomerRef + ":" + strCustomerIdentification + ";;;"
  3951.  
  3952.         strArtikelnamn  = ""
  3953.         strArtikelID    = ""
  3954.         str01Amount     = ""
  3955.         str02Amount     = ""
  3956.         str01AmountNbr  = ""
  3957.         strVATPercent   = ""
  3958.  
  3959.         bInvoiceWritten = True
  3960.  
  3961.         For i = 0 To nRecIdx-1
  3962.  
  3963.  
  3964.             rech = aRech(i)
  3965.  
  3966.             ' if it is a transactiontype 2 the following transactiontype should be a 1
  3967.             ' and transtype 2 and 1 must be processed together
  3968.  
  3969.  
  3970.             ' Momskoder Visma: 101 = 25%, 102 = 12%, 103 = 6%, 104 = 0%
  3971.             '   P0  = 1
  3972.             '   P6  = 2
  3973.             '   P12 = 3
  3974.             '   P25 = 4
  3975.  
  3976.             ' transtyp 1 = en artikel eller en receptpåse (itemnumber: 100000, 100006, 100012, 100025).
  3977.             If( rech.transactionType = "1" ) Then
  3978.  
  3979.                 strOrderID      = rech.orderID
  3980.  
  3981.                 ' Kolla om det är en receptpåde på rekvisition, då ska den inte skrivas ut igen.
  3982.                 ' Alla 95:or skrivs ut en gång för en enda transtyp 1 (receptpåse på rekvisition).
  3983.  
  3984.  
  3985.                 ' Endast receptpåsar har orderID.
  3986.                 If( strOrderID <> "" ) Then
  3987.  
  3988.  
  3989.                     If( AlreadyWritten( strOrderID ) ) Then
  3990.                         GoTo NextRech13
  3991.                     End If
  3992.  
  3993.                     ' Ett kvitto kan innehålla flera receptpåsar, vanliga receptpåsar och på rekvisition (med 95:or).
  3994.                     ' Då en receptpåse är på rekvisition kan det komma flera transtyp 1
  3995.                     ' så därför ska 95:orna skrivas ut endast en gång och inte en gång per transtyp 1.
  3996.                     ' Om det finns en eller flera 95:or för transtypen 1 så stoppas orderID:t för ytterlgare en utskrift.
  3997.                     If( PrintRows95_96( "95", rech, nCounter, strStoreID, strTransID, strDate, strFaktor ) ) Then
  3998.                         SetAlreadyWritten( strOrderID )
  3999.                         GoTo NextRech13
  4000.                     End If
  4001.  
  4002.                 End If
  4003.  
  4004.                 strArtikelnamn  = rech.receiptRowText
  4005.                 strArtikelID    = rech.itemNumber
  4006.                 str01Amount     = rech.amount
  4007.                 str01AmountNbr  = rech.amountNumber
  4008.                 strVATPercent   = rech.VATPercent
  4009.                 vat             = GetIdxFromVAT(strVATPercent)
  4010.                 strRabatt       = ""
  4011.                 strVATType = ""
  4012.  
  4013.                 Select Case vat
  4014.                     ' Visma Style
  4015.                     Case P0
  4016.                         strVATType = "104"
  4017.                     Case P6
  4018.                         strVATType = "103"
  4019.                     Case P12
  4020.                         strVATType = "102"
  4021.                     Case P25
  4022.                         strVATType = "101"
  4023.                 End Select
  4024.  
  4025.                 strForsaljPris = ExVATFromInkVAT("0.00", str01Amount, rech.VATPercent )
  4026.                 strForsaljPris = CStr(Round(CDbl(CDbl(strForsaljPris) * CDbl(strFaktor)), 2))
  4027.  
  4028.  
  4029.                 ' if not last row, check if next is a transtype 2
  4030.                 strRabatt = "0.00"
  4031.                 While( i < nRecIdx-1 )
  4032.  
  4033.                     ' process transtype 1 in same loop
  4034.                     i = i + 1
  4035.                     rech = aRech(i)
  4036.  
  4037.                     If( rech.transactionType = "2" ) Then
  4038.  
  4039.                         str02Amount     = rech.amount
  4040.                         strRabatt = ExVATFromInkVAT(strRabatt, str02Amount, strVATPercent )
  4041.                         strRabatt = CStr(Round(CDbl(CDbl(strRabatt) * CDbl(strFaktor)), 2))
  4042.  
  4043.                     Else
  4044.  
  4045.                         ' not a transtype 2, rewind
  4046.                         i = i - 1
  4047.                         rech = aRech(i)
  4048.                         Exit While
  4049.  
  4050.                     End If
  4051.  
  4052.                 Wend
  4053.  
  4054.  
  4055.                 If( strVATType = "" ) Then
  4056.                     ReportEvent(RE_ERROR, "VATType is missing for this Receipt (Transtype=13,1,2,99)." )
  4057.                     ReportReceipt( rech )
  4058.                     Quit
  4059.                 End If
  4060.  
  4061.  
  4062.                 nCounter = nCounter + 1
  4063.  
  4064.                 strRabatt = Replace( strRabatt, "-", "" ) ' always positive sign
  4065.                 Print #2, "L;" + CStr(nCounter) + ";1;" + strArtikelnamn + ";1;" + FixDot(strForsaljPris) + ";;;;;;;;;;;;;;" + strStoreID + ";;;;;;;;" + str01AmountNbr + ";;;;" + strVATType + ";;" + Left(strDate, 6 ) ;
  4066.                 Print #2, ";" + strTransID + ";;" + strArtikelID + ";" + rech.orderID + ";" + strDate + ";;;" + FixDot(strRabatt) + ";" + strArtikelID + ";;;"
  4067.  
  4068.             End If
  4069. NextRech13:
  4070.  
  4071.         Next i
  4072.  
  4073.     End If
  4074.  
  4075.  
  4076.     ' -----------------
  4077.     ' only process storerunningnumber/receipts with transactintype 87 in it
  4078.     ' ---------------------------------------------------------------------
  4079.     If( b87Hit ) Then
  4080.  
  4081.  
  4082.         If( Not b_31_Hit ) Then
  4083.  
  4084.             rech = aRech(0)
  4085.             ReportEvent( RE_ERROR, "The storerunningnumber:" + rech.storeRunNumber + " does not contain a transactiontype 31 but it has a transactiontype 87" )
  4086.             ReportEvent( RE_WARNING, "Receipt error - must have 31 with a 87" )
  4087.             ReportReceipt( rech )
  4088.             Quit
  4089.  
  4090.         End If
  4091.  
  4092.         strFaktor = CStr(CDbl(CDbl(str87Amount) / CDbl(str31Amount)))
  4093.  
  4094.  
  4095.         nCounter = 0
  4096.         Print #2, "H;;2;" + strCustNo + ";;" + strDate + ";;" + strTransID + ";" + strReceiptID + ";;" ;
  4097.         Print #2, ";;1;;;;;;;;;" + strStoreID + ";;;;;;;;;;;;;;;" + strCustomerContact + ":" + strCustomerRef + ":" + strCustomerIdentification + ";;;"
  4098.  
  4099.         strArtikelnamn  = ""
  4100.         strArtikelID    = ""
  4101.         str06Amount     = ""
  4102.         str02Amount     = ""
  4103.         str06AmountNbr  = ""
  4104.         strVATPercent   = ""
  4105.  
  4106.         bInvoiceWritten = True
  4107.  
  4108.         For i = 0 To nRecIdx-1
  4109.  
  4110.             rech = aRech(i)
  4111.  
  4112.             ' if it is a transactiontype 2 the followinf transactiontype should be a 1
  4113.             ' and transtype 2 and 1 must be processed together
  4114.  
  4115.  
  4116.             ' Momskoder Visma: 101 = 25%, 102 = 12%, 103 = 6%, 104 = 0%
  4117.             '   P0  = 1
  4118.             '   P6  = 2
  4119.             '   P12 = 3
  4120.             '   P25 = 4
  4121.  
  4122.  
  4123.             ' transtyp 6 = en artikel eller en receptpåse (itemnumber: 100000, 100006, 100012, 100025).
  4124.             If( rech.transactionType = "6" ) Then
  4125.  
  4126.                 strOrderID      = rech.orderID
  4127.  
  4128.                 ' Kolla om det är en kreditnota på rekvistition (återköp), då ska den inte skrivas ut igen.
  4129.                 ' Alla 96:or skrivs ut en gång för en enda transtyp 6 (receptpåse på rekvisition).
  4130.  
  4131.                 ' Endast receptpåsar har orderID.
  4132.                 If( strOrderID <> "" ) Then
  4133.  
  4134.                     If( AlreadyWritten( strOrderID ) ) Then
  4135.                         GoTo NextRech87
  4136.                     End If
  4137.  
  4138.                     ' Ett kvitto kan innehålla flera receptpåsar, vanliga receptpåsar och på kreditnota (med 96:or).
  4139.                     ' Då en receptpåse är på kredit kan det komma flera transtyp 6
  4140.                     ' så därför ska 96:orna skrivas ut endast en gång och inte en gång per transtyp 6.
  4141.                     ' Om det finns en eller flera 96:or för transtypen 6 så stoppas orderID:t för ytterlgare utskrift.
  4142.                     If( PrintRows95_96( "96", rech, nCounter, strStoreID, strTransID, strDate, strFaktor ) ) Then
  4143.                         SetAlreadyWritten( strOrderID )
  4144.                         GoTo NextRech87
  4145.                     End If
  4146.  
  4147.                     ' ej en receptpåse på kreditnota, kör normala hanteringen härunder
  4148.                 End If
  4149.  
  4150.  
  4151.                 strArtikelnamn  = rech.receiptRowText
  4152.                 strArtikelID    = rech.itemNumber
  4153.                 str06Amount     = rech.amount
  4154.                 str06AmountNbr  = rech.amountNumber
  4155.                 strVATPercent   = rech.VATPercent
  4156.                 vat             = GetIdxFromVAT(strVATPercent)
  4157.                 strVATType = ""
  4158.  
  4159.                 Select Case vat
  4160.                     ' Visma Style
  4161.                     Case P0
  4162.                         strVATType = "104"
  4163.                     Case P6
  4164.                         strVATType = "103"
  4165.                     Case P12
  4166.                         strVATType = "102"
  4167.                     Case P25
  4168.                         strVATType = "101"
  4169.                 End Select
  4170.  
  4171.                 strForsaljPris = ExVATFromInkVAT("0.00", str06Amount, rech.VATPercent )
  4172.                 strForsaljPris = CStr(Round(CDbl(CDbl(strForsaljPris) * CDbl(strFaktor)), 2))
  4173.  
  4174.  
  4175.                 If( strVATType = "" ) Then
  4176.                     ReportEvent(RE_ERROR, "VATType is missing for this Receipt (Transtype=87)." )
  4177.                     ReportReceipt( rech )
  4178.                     Quit
  4179.                 End If
  4180.  
  4181.  
  4182.                 nCounter = nCounter + 1
  4183.  
  4184.                 Print #2, "L;" + CStr(nCounter) + ";1;" + strArtikelnamn + ";-1;" + FixDot(strForsaljPris) + ";;;;;;;;;;;;;;" + strStoreID + ";;;;;;;;" + str06AmountNbr + ";;;;" + strVATType + ";;" + Left(strDate, 6 ) ;
  4185.                 Print #2, ";" + strTransID + ";;" + strArtikelID + ";" + rech.orderID + ";" + strDate + ";;;;" + strArtikelID + ";;;"
  4186.  
  4187.             End If
  4188.  
  4189. NextRech87:
  4190.  
  4191.         Next i
  4192.  
  4193.     End If
  4194.  
  4195.  
  4196.     ' -----------------
  4197.     ' only process storerunningnumber/receipts with transactintype 99 in it
  4198.     ' ---------------------------------------------------------------------
  4199.     If( b99Hit ) Then
  4200.  
  4201.         bHeadWritten = False
  4202.         nCounter = 0
  4203.  
  4204.  
  4205.         For i = 0 To nRecIdx-1
  4206.  
  4207.             rech = aRech(i)
  4208.  
  4209.             strVATPercent   = rech.VATPercent
  4210.             vat             = GetIdxFromVAT(strVATPercent)
  4211.  
  4212.             strVATType = ""
  4213.  
  4214.             Select Case vat
  4215.                 ' Visma Style
  4216.                 Case P0
  4217.                     strVATType = "104"
  4218.                 Case P6
  4219.                     strVATType = "103"
  4220.                 Case P12
  4221.                     strVATType = "102"
  4222.                 Case P25
  4223.                     strVATType = "101"
  4224.             End Select
  4225.  
  4226.  
  4227.             If( strVATType = "" ) Then
  4228.                 ReportEvent(RE_ERROR, "VATType is missing for this Receipt (transtype=99)." )
  4229.                 ReportReceipt( rech )
  4230.                 Quit
  4231.             End If
  4232.  
  4233.  
  4234.  
  4235.             If( rech.transactionType = "99" ) Then
  4236.  
  4237.                 bInvoiceWritten = True
  4238.                 strSubventionsKomm = Replace( rech.SubventionsKomm, vbCrLf, ":" )
  4239.                 strSubventionsKomm = Replace( strSubventionsKomm, vbCr, ":" )
  4240.                 strSubventionsKomm = Replace( strSubventionsKomm, vbLf, ":" )
  4241.                 strArtikelnamn     = Trim(rech.ArtikelNamn)
  4242.                 strDate            = Replace( rech.transactionDate, "-", "" )
  4243.  
  4244.                 If( strArtikelnamn = "" ) Then
  4245.                     strArtikelnamn = "Artikelnamn saknas"
  4246.                 End If
  4247.  
  4248.                 Print #2, "H;;2;" + rech.customerNo + ";;" + strDate + ";;" + rech.TransID + ";" + rech.ReceptArendeID + ";" + rech.KundFodelseDatum + ";" ;
  4249.                 Print #2, ";;1;;;;;;;;;" + rech.storeId + ";;;;;;;;;;;;;;;" + strSubventionsKomm + ";;;"
  4250.  
  4251.  
  4252.                 If( InStr(rech.amount, "-" ) > 0 ) Then
  4253.  
  4254.                     strAmount = "-1" ' använd för köp eller återköp
  4255.                     rech.amountNumber = "-" + rech.amountNumber
  4256.  
  4257.                     strMomsSum = Replace( rech.Momssumma, "-", "" )
  4258.                     strSubExMoms = addIt(rech.amount,strMomsSum)
  4259.  
  4260.                 Else
  4261.  
  4262.                     strAmount = "1" ' använd för köp eller återköp
  4263.  
  4264.                     strMomsSum = Replace( rech.Momssumma, "-", "" )
  4265.                     strSubExMoms = subtractIt(rech.amount,strMomsSum)
  4266.  
  4267.                 End If
  4268.  
  4269.                 ' always a positive sign
  4270.                 strSubExMoms = Replace(strSubExMoms, "-", "" )
  4271.  
  4272.                 nCounter = 1
  4273.                 Print #2, "L;" + CStr(nCounter) + ";1;" + strArtikelnamn + ";" + FixDot(strAmount) + ";" + FixDot(strSubExMoms) + ";;;;;;;;;;;;;;" + rech.storeId + ";;;;;;;" + rech.AupExmoms + ";" + rech.amountNumber + ";;;;" + strVATType + ";" + rech.FormanExmoms + ";" + Left(strDate, 6 ) ;
  4274.                 Print #2, ";" + rech.TransID + ";" + rech.ArbetsplatsKod + ";" + rech.ArtikelID + ";;" + strDate + ";;;;" + rech.Varunummer + ";;;"
  4275.  
  4276.             End If
  4277.  
  4278.         Next i
  4279.  
  4280.     End If
  4281.  
  4282.     Exit Sub
  4283.  
  4284. AllError:
  4285.     ReportEvent(RE_ERROR, "PrintRows:" + Err.Description)
  4286.     Quit
  4287. End Sub
  4288.  
  4289.  
  4290.  
  4291. Function GetArticleName( strItemNumber As String ) As String
  4292.     Dim strSQL As String
  4293.  
  4294.     On Error GoTo AllError
  4295.  
  4296.  
  4297.  
  4298. '   Select Case stritemnumber
  4299. '       Case "100000"
  4300. '       100000,100006,100012, 100025
  4301. '
  4302. '   End Select
  4303.  
  4304.     strSQL = "SELECT artikelBenamning FROM tblArticles WHERE XID='" + strItemNumber + "';"
  4305.     CloseRecordSet( oDBrsTmpII )
  4306.     oDBrsTmpII.open( strSQL )
  4307.  
  4308.  
  4309.     If( oDBrsTmpII.RecordCount = 1 ) Then
  4310.         GetArticleName  = oDBrsTmpII.Fields("artikelBenamning")
  4311.     Else
  4312.         GetArticleName  = "Artikelnamn saknas"
  4313.     End If
  4314.  
  4315.     Exit Function
  4316.  
  4317. AllError:
  4318.     ReportEvent(RE_ERROR, "GetArticleName:" + Err.Description)
  4319.     Quit
  4320.  
  4321. End Function
  4322.  
  4323.  
  4324.  
  4325.  
  4326. Function PrintRows95_96( strTransType As String, rech As Receipt, ByRef nCounter As Integer, strStoreID As String, strTransID As String, strDate As String, strFaktor As String ) As Boolean
  4327. Dim strSQL          As String
  4328. Dim strArtikelnamn  As String
  4329. Dim strArtikelID    As String
  4330. Dim strAmount   As String
  4331. Dim strAmountNbr    As String
  4332. Dim strVATPercent   As String
  4333. Dim vat             As _VAT
  4334. Dim strVATType      As String
  4335. Dim strForsaljPris As String
  4336. Dim strSign         As String
  4337.  
  4338. Dim strRabattTtyp2  As String
  4339. Dim strVATPercentTtyp2  As String
  4340.  
  4341.     On Error GoTo AllError
  4342.  
  4343.  
  4344.     strSQL = "SELECT Itemnumber, Amountnumber, VATPercent, Amount, StoreRunNumber, ReceiptRowRefNumber FROM tblreceiptrows_tmp WHERE transactiontype = '" + strTransType + "' AND OrderID='" + rech.orderID + "';"
  4345.  
  4346.     ' Alla transtyp 2 som har samma receiptrowrefnbr med samma storerunnumber
  4347.  
  4348.     CloseRecordSet( oDBrsTmp )
  4349.     oDBrsTmp.open( strSQL )
  4350.  
  4351.  
  4352.     If( oDBrsTmp.RecordCount > 0 ) Then
  4353.  
  4354.  
  4355.         While( Not oDBrsTmp.EOF )
  4356.  
  4357.  
  4358.             strArtikelnamn = GetArticleName( oDBrsTmp.Fields("Itemnumber" ) )
  4359.  
  4360.             strArtikelID    = oDBrsTmp.Fields("Itemnumber")
  4361.             strAmount       = oDBrsTmp.Fields("Amount")
  4362.             strAmountNbr    = oDBrsTmp.Fields("Amountnumber")
  4363.             strVATPercent   = oDBrsTmp.Fields("VATPercent")
  4364.             strVATType      = ""
  4365.             strRabattTtyp2  = ""
  4366.  
  4367.             ' -------------------------------------------
  4368.             ' Hämta rabatt från transaktionstyp 2 för att kunna skriva ut
  4369.             strSQL = "SELECT Amount, VATPercent FROM tblreceiptrows_tmp WHERE TransactionType = '2' AND StoreRunNumber='" + oDBrsTmp.Fields("StoreRunNumber" ) + "' " + _
  4370.                      "AND ReceiptRowRefNumber='" + oDBrsTmp.Fields("ReceiptRowRefNumber" ) + "';"
  4371.  
  4372.             CloseRecordSet( oDBrsTmpII )
  4373.             oDBrsTmpII.open( strSQL )
  4374.  
  4375.             If( oDBrsTmpII.RecordCount > 0 ) Then
  4376.  
  4377.                 strRabattTtyp2      = oDBrsTmpII.Fields("Amount")
  4378.                 strRabattTtyp2      = Replace( strRabattTtyp2, "-", "" )
  4379.                 strVATPercentTtyp2  = oDBrsTmpII.Fields("VATPercent") ' ska vara samma som för 95
  4380.  
  4381.                 strRabattTtyp2 = ExVATFromInkVAT("0.00", strRabattTtyp2, strVATPercentTtyp2 )
  4382.                 strRabattTtyp2 = CStr(Round(CDbl(CDbl(strRabattTtyp2) * CDbl(strFaktor)), 2))
  4383.  
  4384.                 strRabattTtyp2 = Replace(strRabattTtyp2, "-", "" )
  4385.  
  4386.                 strRabattTtyp2  = FixDot(strRabattTtyp2,MAKEDOT)
  4387.  
  4388.  
  4389. '               ReportEvent(RE_NORMAL, "strRabattTtyp2: " + strRabattTtyp2 )
  4390. '               ReportEvent(RE_NORMAL, "VAT: " + strVATPercentTtyp2 )
  4391.  
  4392.  
  4393.             End If
  4394.             ' -------------------------------------------
  4395.  
  4396.             vat             = GetIdxFromVAT(strVATPercent)
  4397.  
  4398.             Select Case vat
  4399.                 ' Visma Style
  4400.                 Case P0
  4401.                     strVATType = "104"
  4402.                 Case P6
  4403.                     strVATType = "103"
  4404.                 Case P12
  4405.                     strVATType = "102"
  4406.                 Case P25
  4407.                     strVATType = "101"
  4408.             End Select
  4409.  
  4410.             If( strVATType = "" ) Then
  4411.                 ReportEvent(RE_ERROR, "VATType is missing for this Receipt (Transtype=13,1,2,99)." )
  4412.                 ReportReceipt( rech )
  4413.                 Quit
  4414.             End If
  4415.  
  4416.             strForsaljPris = ExVATFromInkVAT("0.00", strAmount, strVATPercent )
  4417.             strForsaljPris = CStr(Round(CDbl(CDbl(strForsaljPris) * CDbl(strFaktor)), 2))
  4418.  
  4419.             If( strArtikelnamn = "" ) Then
  4420.                 strArtikelnamn = "Artikelnamn saknas"
  4421.             End If
  4422.  
  4423.  
  4424.             nCounter = nCounter + 1
  4425.  
  4426.             If( strTransType = "95" ) Then
  4427.                 strSign = "1"
  4428.             Else
  4429.                 strSign = "-1"
  4430.             End If
  4431.  
  4432.  
  4433.             Print #2, "L;" + CStr(nCounter) + ";1;" + strArtikelnamn + ";" + strSign + ";" + FixDot(strForsaljPris) + ";;;;;;;;;;;;;;" + strStoreID + ";;;;;;;;" + strAmountNbr + ";;;;" + strVATType + ";;" + Left(strDate, 6 ) ;
  4434.             Print #2, ";" + strTransID + ";;" + strArtikelID + ";" + rech.orderID + ";" + strDate + ";;;" + FixDot(strRabattTtyp2) + ";" + strArtikelID + ";;;"
  4435.  
  4436.             oDBrsTmp.MoveNext
  4437.  
  4438.         Wend
  4439.  
  4440.         PrintRows95_96 = True
  4441.         Exit Function
  4442.  
  4443.  
  4444.     End If
  4445.  
  4446.     PrintRows95_96 = False
  4447.  
  4448.  
  4449.     Exit Function
  4450.  
  4451. AllError:
  4452.     ReportEvent(RE_ERROR, "PrintRows95_96:" + Err.Description)
  4453.     ReportEvent(RE_WARNING, "Storerunnumber:" + rech.storeRunNumber)
  4454.     ReportEvent(RE_WARNING, "DatabaseID:" + rech.DBID )
  4455.     ReportEvent(RE_WARNING, "Transtype:" + strTransType )
  4456.     ReportEvent(RE_WARNING, "OrderID:" + rech.orderID )
  4457.     ReportEvent(RE_WARNING, "ArtikelID:" + strArtikelID )
  4458.     ReportEvent(RE_WARNING, "Amount:" + strAmount )
  4459.     ReportEvent(RE_WARNING, "Amountnbr:" + strAmountNbr )
  4460.     Quit
  4461. End Function
  4462.  
  4463.  
  4464.  
  4465.  
  4466. Sub ReportReceipt( rech As Receipt )
  4467.  
  4468.     ReportEvent( RE_WARNING, "DatabaseID:" + rech.DBID )
  4469.     ReportEvent( RE_WARNING, "StoreRunningnumber:" + rech.storeRunNumber )
  4470.  
  4471. End Sub
  4472.  
  4473.  
  4474. Function GetVGrupp( strCategory As String ) As String
  4475. Dim sS As String
  4476. Dim i As Integer
  4477.  
  4478.  
  4479.     GetVGrupp = ""
  4480.  
  4481.     i = InStr( strCategory, "_" )
  4482.  
  4483.     If( i > 0 ) Then
  4484.  
  4485.         sS = Left( strCategory, i-1 )
  4486.  
  4487.         If( sS = "600" ) Then
  4488.             GetVGrupp = Mid( strCategory, 5 )
  4489.         ElseIf( sS = "100" Or sS = "200" Or sS = "300" Or sS = "400" Or sS = "500"  ) Then
  4490.             GetVGrupp = Left( strCategory, 3 )
  4491.         End If
  4492.  
  4493.     End If
  4494.  
  4495. End Function
  4496.  
  4497.  
  4498.  
  4499. Sub DumpSQL( sql As String )
  4500. Dim strTempfile As String
  4501.  
  4502.     strTempfile  = CreateTempFile( "txt" )
  4503.     Open strTempfile For Output As #22
  4504.     Print #22, sql
  4505.     Close #22
  4506.  
  4507.     ReportLog(RL_NORMAL, "||SQLDumped=" + strTempfile )
  4508.  
  4509. End Sub
  4510.  
  4511.  
  4512. Sub SetAlreadyWritten( strOrderID As String )
  4513.     dict.add( strOrderID, "" )
  4514. End Sub
  4515.  
  4516. Function AlreadyWritten( strOrderID As String ) As Boolean
  4517.     AlreadyWritten = dict.Exists( strOrderID )
  4518. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement