SQL Server Message 245 - Conversion failed when converting varchar value 'indirect' to data type INT when running Close Project Year at Actual (AL.CPA.00)

This article provides a resolution to solve the SQL Server Message 245 - Conversion failed error that occurs in Microsoft Dynamics SL.

Applies to:   Microsoft Dynamics SL
Original KB number:   2953415

Symptoms

When you run Project Allocator (PA.PRO.00) in Final Mode or when you run the Close Project Year at Actual (AL.CPA.00) process, you may receive the following error:

SQL Server Message 245: [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the varchar value 'ACCOUNT CATAGORY' to data type int.value 'ACCOUNT CATAGORY' to data type int.

Resolution

Run the following SQL Script against each application database.

-- FIX for bug 25152 for 2011 FP1
--
-- Run against SL Application databases

/****** Object: View [dbo].[PJvAIC_source] Script Date: 12/12/2012 13:30:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO

alter VIEW [dbo].[PJvAIC_source]
AS
-- This is part of a group of SQL tables, views, and functions used by the PJAIC SQL stored procedure to
-- generate actual indirect cost amounts.

select pt.alloc_calc_type,
 pt.alloc_method_cd,
 pt.alloc_method1_cd,
 pt.alloc_rate,
 amount_01 = isnull(s.amount_01, 0), amount_02 = isnull(s.amount_02, 0), amount_03 = isnull(s.amount_03, 0),
 amount_04 = isnull(s.amount_04, 0), amount_05 = isnull(s.amount_05, 0), amount_06 = isnull(s.amount_06, 0),
 amount_07 = isnull(s.amount_07, 0), amount_08 = isnull(s.amount_08, 0), amount_09 = isnull(s.amount_09, 0),
 amount_10 = isnull(s.amount_10, 0), amount_11 = isnull(s.amount_11, 0), amount_12 = isnull(s.amount_12, 0),
 amount_13 = isnull(s.amount_13, 0), amount_14 = isnull(s.amount_14, 0), amount_15 = isnull(s.amount_15, 0),
 pt.begin_step,
 pt.end_step,
 pt.emp_CpnyId,
 pt.emp_gl_subacct,
 pt.fsyear_num,
 pt.from_method,
 pt.ptd_indirectgrp,
 pt.ytd_indirectgrp,
 pt.pjt_entity,
 post_acct_ptd_indirectgrp = g.ptd_indirectgrp,
 post_acct_ytd_indirectgrp = g.ytd_indirectgrp,
 pt.project,
 project_cpnyid = pt.CpnyId,
 pt.src_acct,
 pt.src_CpnyId,
 pt.src_gl_subacct,
 pt.step_number
from ( -- Need to union the project allocation method and the second project allocation method
 select distinct p.project, t.pjt_entity, p.alloc_method_cd, alloc_method1_cd = p.alloc_method_cd, a.alloc_calc_type,
 a.alloc_rate, a.begin_step, a.end_step, from_method = a.al_id10, a.ptd_indirectgrp, a.ytd_indirectgrp,
 a.post_acct, a.step_number, p.CpnyId, s.fsyear_num, s.src_acct, s.src_CpnyId, s.src_gl_subacct, s.emp_CpnyId, s.emp_gl_subacct
 from PJPROJ p with (nolock)
 inner join PJPENT t with (nolock)
 on t.project = p.project
 inner join PJALLOC a with (nolock)
 on a.alloc_method_cd = p.alloc_method_cd
 -- Link to PJINDSRC without using step_number to get all the fiscal year numbers and source account cateogies possible for each step
 inner join PJINDSRC s with (nolock)
 on s.project = p.project
 and s.pjt_entity = t.pjt_entity
 and s.alloc_method_cd = a.alloc_method_cd
 where len(rtrim(p.alloc_method_cd)) <> 0
 and a.alloc_basis = 'A' -- Only interested in steps based on amounts
 union
 select distinct p.project, t.pjt_entity, p.alloc_method2_cd, p.alloc_method_cd, a.alloc_calc_type,
 a.alloc_rate, a.begin_step, a.end_step, from_method = a.al_id10, a.ptd_indirectgrp, a.ytd_indirectgrp,
 a.post_acct, a.step_number, p.CpnyId, s.fsyear_num, s.src_acct, s.src_CpnyId, s.src_gl_subacct, s.emp_CpnyId, s.emp_gl_subacct
 from PJPROJ p with (nolock)
 inner join PJPENT t with (nolock)
 on t.project = p.project 
 inner join PJALLOC a with (nolock)
 on a.alloc_method_cd = p.alloc_method2_cd
 inner join PJINDSRC s with (nolock)
 on s.project = p.project
 and s.pjt_entity = t.pjt_entity
 and s.alloc_method_cd = a.alloc_method_cd
 where len(rtrim(p.alloc_method2_cd)) <> 0
 and a.alloc_basis = 'A'
 ) pt
-- Link to PJINDSRC once again, this time just to get amounts where they exists
left join PJINDSRC s with (nolock)
 on s.fsyear_num = pt.fsyear_num
 and s.project = pt.project
 and s.pjt_entity = pt.pjt_entity
 and s.src_CpnyId = pt.src_CpnyId
 and s.alloc_method_cd = pt.alloc_method_cd
 and s.step_number = pt.step_number
 and s.src_acct = pt.src_acct
 and s.src_gl_subacct = pt.src_gl_subacct
 and s.emp_CpnyId = pt.emp_CpnyId
 and s.emp_gl_subacct = pt.emp_gl_subacct
-- Link to get the post account category indirect groups
left join PJvPJACCT_IndirectGrps g
 on g.acct = dbo.PJfMask_acct(pt.post_acct, s.src_acct)

GO

go
ALTER VIEW [dbo].[PJvAIC_source_summary] 
AS 
-- This is part of a group of SQL tables, views, and functions used by the PJAIC_summary SQL stored procedure to 
-- generate actual indirect cost amounts. 

-- Dependent on: PJvPJINDSRC_summary, PJvPJACCT_IndirectGrps 

select pt.alloc_calc_type, 
 pt.alloc_method_cd, 
 pt.alloc_method1_cd, 
 pt.alloc_rate, 
 amount_01 = isnull(s.amount_01, 0), amount_02 = isnull(s.amount_02, 0), amount_03 = isnull(s.amount_03, 0), 
 amount_04 = isnull(s.amount_04, 0), amount_05 = isnull(s.amount_05, 0), amount_06 = isnull(s.amount_06, 0), 
 amount_07 = isnull(s.amount_07, 0), amount_08 = isnull(s.amount_08, 0), amount_09 = isnull(s.amount_09, 0), 
 amount_10 = isnull(s.amount_10, 0), amount_11 = isnull(s.amount_11, 0), amount_12 = isnull(s.amount_12, 0), 
 amount_13 = isnull(s.amount_13, 0), amount_14 = isnull(s.amount_14, 0), amount_15 = isnull(s.amount_15, 0), 
 pt.begin_step, 
 pt.end_step, 
 pt.fsyear_num, 
 pt.from_method, 
 pt.ptd_indirectgrp, 
 pt.ytd_indirectgrp, 
 pt.pjt_entity, 
 post_acct_ptd_indirectgrp = g.ptd_indirectgrp, 
 post_acct_ytd_indirectgrp = g.ytd_indirectgrp, 
 pt.project, 
 project_cpnyid = pt.CpnyId, 
 pt.src_acct, 
 pt.step_number 
from ( -- Need to union the project allocation method and the second project allocation method 
 select distinct p.project, t.pjt_entity, p.alloc_method_cd, alloc_method1_cd = p.alloc_method_cd, a.alloc_calc_type, 
 a.alloc_rate, a.begin_step, a.end_step, from_method = a.al_id10, -- HERE
 a.ptd_indirectgrp, a.ytd_indirectgrp, 
 a.post_acct, a.step_number, p.CpnyId, s.fsyear_num, s.src_acct 
 from PJPROJ p with (nolock) 
 inner join PJPENT t with (nolock) 
 on t.project = p.project 
 inner join PJALLOC a with (nolock) 
 on a.alloc_method_cd = p.alloc_method_cd 
 -- Link to PJvINDSRC_summary without using step_number to get all the fiscal year numbers and source account cateogies possible for each step 
 inner join PJvPJINDSRC_summary s with (nolock) 
 on s.project = p.project 
 and s.pjt_entity = t.pjt_entity 
 and s.alloc_method_cd = a.alloc_method_cd 
 where len(rtrim(p.alloc_method_cd)) <> 0 
 and a.alloc_basis = 'A' -- Only interested in steps based on amounts 
 union 
 select distinct p.project, t.pjt_entity, p.alloc_method2_cd, p.alloc_method_cd, a.alloc_calc_type, 
 a.alloc_rate, a.begin_step, a.end_step, from_method = a.al_id10, -- HERE
 a.ptd_indirectgrp, a.ytd_indirectgrp, 
 a.post_acct, a.step_number, p.CpnyId, s.fsyear_num, s.src_acct 
 from PJPROJ p with (nolock) 
 inner join PJPENT t with (nolock) 
 on t.project = p.project 
 inner join PJALLOC a with (nolock) 
 on a.alloc_method_cd = p.alloc_method2_cd 
 inner join PJvPJINDSRC_summary s with (nolock) 
 on s.project = p.project 
 and s.pjt_entity = t.pjt_entity 
 and s.alloc_method_cd = a.alloc_method_cd 
 where len(rtrim(p.alloc_method2_cd)) <> 0 
 and a.alloc_basis = 'A' 
 ) pt 
-- Link to PJINDSRC once again, this time just to get amounts where they exists 
left join PJvPJINDSRC_summary s with (nolock) 
 on s.fsyear_num = pt.fsyear_num 
 and s.project = pt.project 
 and s.pjt_entity = pt.pjt_entity 
 and s.src_acct = pt.src_acct 
 and s.alloc_method_cd = pt.alloc_method_cd 
 and s.step_number = pt.step_number 
-- Link to get the post account category indirect groups 
left join PJvPJACCT_IndirectGrps g 
 on g.acct = dbo.PJfMask_acct(pt.post_acct, s.src_acct) 

GO