Username: Save?
Password:
Home Forum Links Search Login Register*
    News: Welcome to the TechnoWorldInc! Community!
Recent Updates
[October 17, 2024, 05:05:06 PM]

[October 17, 2024, 04:53:18 PM]

[October 17, 2024, 04:53:18 PM]

[October 17, 2024, 04:53:18 PM]

[October 17, 2024, 04:53:18 PM]

[September 09, 2024, 12:27:25 PM]

[September 09, 2024, 12:27:25 PM]

[September 09, 2024, 12:27:25 PM]

[September 09, 2024, 12:27:25 PM]

[August 10, 2024, 12:34:30 PM]

[August 10, 2024, 12:34:30 PM]

[August 10, 2024, 12:34:30 PM]

[August 10, 2024, 12:34:30 PM]
Subscriptions
Get Latest Tech Updates For Free!
Resources
   Travelikers
   Funistan
   PrettyGalz
   Techlap
   FreeThemes
   Videsta
   Glamistan
   BachatMela
   GlamGalz
   Techzug
   Vidsage
   Funzug
   WorldHostInc
   Funfani
   FilmyMama
   Uploaded.Tech
   MegaPixelShop
   Netens
   Funotic
   FreeJobsInc
   FilesPark
Participate in the fastest growing Technical Encyclopedia! This website is 100% Free. Please register or login using the login box above if you have already registered. You will need to be logged in to reply, make new topics and to access all the areas. Registration is free! Click Here To Register.
+ Techno World Inc - The Best Technical Encyclopedia Online! » Forum » THE TECHNO CLUB [ TECHNOWORLDINC.COM ] » Techno Articles » Internet
 Great Plains Customization – programming Auto-apply in Accounts Receivable
Pages: [1]   Go Down
  Print  
Author Topic: Great Plains Customization – programming Auto-apply in Accounts Receivable  (Read 529 times)
Shawn Tracer
TWI Hero
**********


Karma: 2
Offline Offline

Posts: 16072


View Profile


Great Plains Customization – programming Auto-apply in Accounts Receivable
 by: Andrew Karasev

Microsoft Great Plains is one of three Microsoft Business Solutions mid-market ERP products: Great Plains, Solomon, Navision. Considering that Great Plains is now very good candidate for integration with POS application, such as Microsoft Retail Management System or RMS and Client Relation Systems, such as Microsoft CRM – there is common need in Great Plains customizations and integrations, especially on the level of MS SQL Server transact SQL queries and stored procedures. In this small article we’ll show you how to create auto-apply utility, when you integrate huge number of sales transactions and payments. We will be working with RM20101 – Receivables Open File and RM20201 – Receivables Apply Open File. Let’s see SQL code:

declare @curpmtamt numeric(19,5)
declare @curinvamt numeric(19,5)
declare @curpmtnum varchar(20)
declare @curinvnum varchar(20)
declare @curinvtype int
declare @curpmttype int
declare @maxid int
declare @counter int

-- Create a temporary table
create table #temp
(
   [ID] int identity(1,1) primary key,
   CUSTNMBR varchar(15),
   INVNUM varchar(20),
   INVTYPE int,
   PMTNUM varchar(20),
   PMTTYPE int,
   INVAMT numeric(19,5),
   PMTAMT numeric(19,5),
   AMTAPPLIED numeric(19,5)
)

create index IDX_INVNUM on #temp (INVNUM)
create index IDX_PMTNUM on #temp (PMTNUM)

-- Insert unapplied invoices and payments
insert into #temp
   (
    CUSTNMBR,
    INVNUM,
    INVTYPE,
    PMTNUM,
    PMTTYPE,
    INVAMT,
    PMTAMT,
    AMTAPPLIED
   )
select
    CUSTNMBR = a.CUSTNMBR,
    INVNUM = b.DOCNUMBR,
    INVTYPE = b.RMDTYPAL,
    PMTNUM = a.DOCNUMBR,
    PMTTYPE = a.RMDTYPAL,
    INVAMT = b.CURTRXAM,
    PMTAMT = a.CURTRXAM,
    AMTAPPLIED = 0
from RM20101 a
   join RM20101 b on (a.CUSTNMBR = b.CUSTNMBR)
   join RM00101 c on (a.CUSTNMBR = c.CUSTNMBR)
where
   a.RMDTYPAL in (7, 8, 9) and
   b.RMDTYPAL in (1, 3) and
   a.CURTRXAM  0 and
   b.CURTRXAM  0
order by
   a.custnmbr,
   b.DOCDATE,
   a.DOCDATE,
   a.DOCNUMBR,
   b.DOCNUMBR

-- Iterate through each record
select @maxid = max([ID])
from #temp

select @counter = 1

while @counter = @curpmtamt) and (@curpmtamt>0) and (@curinvamt>0)-- if the invoice amount is greater or the same as the payment amount
   begin
      select @curinvamt = @curinvamt - @curpmtamt   -- invoice amount remaining

      -- update with the amount that is applied to the current invoice from
      -- the current payment
      update #temp
      set
         AMTAPPLIED = @curpmtamt
      where
         [ID] = @counter

      -- update with amount of invoice remaining
      update #temp
      set
         INVAMT = @curinvamt
      where
         INVNUM = @curinvnum and
         INVTYPE = @curinvtype

      -- update with amount of payment remaining
      update #temp
      set
         PMTAMT = 0
      where
         PMTNUM = @curpmtnum and
         PMTTYPE = @curpmttype
   end
   else if (@curinvamt 0) and (@curinvamt>0)-- if the invoice amount is lesser to the payment amount
   begin
      select @curpmtamt = @curpmtamt - @curinvamt   -- payment amount remaining

      -- update with the amount that is applied to the current invoice from
      -- the current payment
      update #temp
      set
         AMTAPPLIED = @curinvamt
      where
         [ID] = @counter

      -- update with amount of invoice remaining
      update #temp
      set
         INVAMT = 0
      where
         INVNUM = @curinvnum and
         INVTYPE = @curinvtype

      -- update with amount of payment remaining
      update #temp
      set
         PMTAMT = @curpmtamt
      where
         PMTNUM = @curpmtnum and
         PMTTYPE = @curpmttype
   end

   -- go to the next record
   select @counter = @counter + 1
end

-- update the RM Open table with the correct amounts
update
   RM20101
set
   CURTRXAM = b.INVAMT
from
   RM20101 a
      join #temp b on (a.DOCNUMBR = b.INVNUM and a.RMDTYPAL = b.INVTYPE)

update
   RM20101
set
   CURTRXAM = b.PMTAMT
from
   RM20101 a
      join #temp b on (a.DOCNUMBR = b.PMTNUM and a.RMDTYPAL = b.PMTTYPE)

-- create the RM Apply record or update if records already exist
update
   RM20201
set
   DATE1 = convert(varchar(10), getdate(), 101),
   GLPOSTDT = convert(varchar(10), getdate(), 101),
   APPTOAMT = APPTOAMT + a.AMTAPPLIED,
   ORAPTOAM = ORAPTOAM + a.AMTAPPLIED,
   APFRMAPLYAMT = APFRMAPLYAMT + a.AMTAPPLIED,
        ActualApplyToAmount = APFRMAPLYAMT + a.AMTAPPLIED
from
   #temp a
      join RM20101 b on (b.DOCNUMBR = a.INVNUM and b.RMDTYPAL = a.INVTYPE)
      join RM20101 c on (c.DOCNUMBR = a.PMTNUM and c.RMDTYPAL = a.PMTTYPE)
      join RM20201 d on (d.APFRDCTY = a.PMTTYPE and
               d.APFRDCNM = a.PMTNUM and
               d.APTODCTY = a.INVTYPE and
               d.APTODCNM = a.INVNUM)
where
   a.AMTAPPLIED  0

insert into RM20201
   (CUSTNMBR,
     DATE1,
    GLPOSTDT,
    POSTED,
    APTODCNM,
    APTODCTY,
    APTODCDT,
    ApplyToGLPostDate,
    CURNCYID,
    CURRNIDX,
    APPTOAMT,
    ORAPTOAM,
    APFRDCNM,
    APFRDCTY,
    APFRDCDT,
    ApplyFromGLPostDate,
    FROMCURR,
    APFRMAPLYAMT,
    ActualApplyToAmount)
select
    CUSTNMBR = a.CUSTNMBR,
     DATE1 = convert(varchar(10), getdate(), 101),
    GLPOSTDT = convert(varchar(10), getdate(), 101),
    POSTED = 1,
    APTODCNM = a.INVNUM,
    APTODCTY = a.INVTYPE,
    APTODCDT = b.DOCDATE,
    ApplyToGLPostDate = b.GLPOSTDT,
    CURNCYID = b.CURNCYID,
    CURRNIDX = '',
    APPTOAMT = a.AMTAPPLIED,
    ORAPTOAM = a.AMTAPPLIED,
    APFRDCNM = a.PMTNUM,
    APFRDCTY = a.PMTTYPE,
    APFRDCDT = c.DOCDATE,
    ApplyFromGLPostDate = c.GLPOSTDT,
    FROMCURR = c.CURNCYID,
    APFRMAPLYAMT = a.AMTAPPLIED,
    ActualApplyToAmount = a.AMTAPPLIED
from
   #temp a
      join RM20101 b on (b.DOCNUMBR = a.INVNUM and b.RMDTYPAL = a.INVTYPE)
      join RM20101 c on (c.DOCNUMBR = a.PMTNUM and c.RMDTYPAL = a.PMTTYPE)
where
   a.AMTAPPLIED  0 and
   not exists (select 1
          from RM20201 d
          where d.APFRDCTY = a.PMTTYPE and
           d.APFRDCNM = a.PMTNUM and
           d.APTODCTY = a.INVTYPE and
           d.APTODCNM = a.INVNUM)

drop table #temp

About The Author

Andrew Karasev is Chief Technology Officer in Alba Spectrum Technologies – USA nationwide Great Plains, Microsoft CRM customization company, with offices in Chicago, San Francisco, Los Angeles, San Diego, Phoenix, Houston, Miami, Atlanta, New York, Madrid, Brazil, Moscow ( http://www.albaspectrum.com), you can reach Andrew 1-866-528-0577, he is Dexterity, SQL, C#.Net, Crystal Reports and Microsoft CRM SDK developer.
[email protected]

Logged

Pages: [1]   Go Up
  Print  
 
Jump to:  

Copyright © 2006-2023 TechnoWorldInc.com. All Rights Reserved. Privacy Policy | Disclaimer
Page created in 0.104 seconds with 24 queries.