Contact Persons in Relationship Management

We all know Contacts can be stored in Relationship Management. A Contact can either be a Company or a Person. A Contact Person can either belong to a Contact Company or exist as an individual. This is quite good in terms of Relationship Management and also for handling both B2B and B2C business models. However, when it comes to Sales, only Contact Companies can be created as Customers. There is no possibility to create an individual Contact Person as a Customer. This seems to make the whole point of handling individual Contact Persons redundant. What do other members think? How are other Navision users tackling the individual (non-corporate) Customers when also using the Relationship Management module? How hard do you think it would be to change this standard behaviour? I’m looking for comments, experiences and input from members. Thanks!

You have a good point there, Nelson. We do not have ‘unattached’ contacts (until now) since we operate in the B2B area, but I can perfectly imagine that this is unwanted behaviour in the B2C market. And what would be the disadvantage of being able to create a person as customer? I can’t come up with one… You have my vote for a change of this procedure!

Thanks Michiel. What about other members?

We are facing the same problem. What we ended up doing is creating all our Customers as Contact Companies in order to be able to use the Relationship Management Module. There has to be better way to do this???


Would you care to expand on that, Scott? What Dimension configuration would you use to circumvent this situation?

I do not think you have Dimensions in Contacts?

Coding wise its a very easy modifications. You can modify one function called “CreateCustomer” in the contact table 5050. This works and allow you to create the customer from the person contact. also you can do the same thing with vendors. //Check this code from 4.0 with my mods CreateCustomer(CustomerTemplate : Code[10]) //Start //TESTFIELD(“Company No.”); //End RMSetup.GET; RMSetup.TESTFIELD(“Bus. Rel. Code for Customers”); ContBusRel.RESET; ContBusRel.SETRANGE(“Contact No.”,“No.”); ContBusRel.SETRANGE(“Link to Table”,ContBusRel.“Link to Table”::Customer); IF ContBusRel.FIND(’-’) THEN ERROR( Text019, TABLECAPTION,“No.”,ContBusRel.TABLECAPTION,ContBusRel.“Link to Table”,ContBusRel.“No.”) ELSE IF CustomerTemplate <> ‘’ THEN CustTemplate.GET(CustomerTemplate); CLEAR(Cust); Cust.SetInsertFromContact(TRUE); Cust.INSERT(TRUE); Cust.SetInsertFromContact(FALSE); //Start ContComp := Rec; //IF Type=Type::Company THEN // ContComp := Rec //ELSE // ContComp.GET(“Company No.”); //End ContBusRel.“Contact No.” := ContComp.“No.”; ContBusRel.“Business Relation Code” := RMSetup.“Bus. Rel. Code for Customers”; ContBusRel.“Link to Table” := ContBusRel.“Link to Table”::Customer; ContBusRel.“No.” := Cust.“No.”; ContBusRel.INSERT(TRUE); UpdateCustVendBank.UpdateCustomer(ContComp,ContBusRel); Cust.GET(ContBusRel.“No.”); //Start //Cust.VALIDATE(Name,“Company Name”); IF Type=Type::Company THEN Cust.VALIDATE(Name,“Company Name”); //End IF CustTemplate.Code <> ‘’ THEN BEGIN Cust.“Territory Code” := “Territory Code”; Cust.“Currency Code” := ContComp.“Currency Code”; Cust.“Country Code” := “Country Code”; Cust.“Customer Posting Group” := CustTemplate.“Customer Posting Group”; Cust.“Customer Price Group” := CustTemplate.“Customer Price Group”; Cust.“Invoice Disc. Code” := CustTemplate.“Invoice Disc. Code”; Cust.“Customer Disc. Group” := CustTemplate.“Customer Disc. Group”; Cust.“Allow Line Disc.” := CustTemplate.“Allow Line Disc.”; Cust.“Gen. Bus. Posting Group” := CustTemplate.“Gen. Bus. Posting Group”; Cust.“VAT Bus. Posting Group” := CustTemplate.“VAT Bus. Posting Group”; Cust.“Payment Terms Code” := CustTemplate.“Payment Terms Code”; Cust.“Payment Method Code” := CustTemplate.“Payment Method Code”; Cust.“Shipment Method Code” := CustTemplate.“Shipment Method Code”; Cust.“Tax Area Code” := CustTemplate.“Tax Area Code”; Cust.“Tax Liable” := CustTemplate.“Tax Liable”; DefaultDim.SETRANGE(“Table ID”,DATABASE::“Customer Template”); DefaultDim.SETRANGE(DefaultDim.“No.”,CustTemplate.Code); IF DefaultDim.FIND(’-’) THEN REPEAT CLEAR(DefaultDim2); DefaultDim2.INIT; DefaultDim2.VALIDATE(“Table ID”,DATABASE::Customer); DefaultDim2.“No.” := Cust.“No.”; DefaultDim2.VALIDATE(“Dimension Code”,DefaultDim.“Dimension Code”); DefaultDim2.VALIDATE(“Dimension Value Code”,DefaultDim.“Dimension Value Code”); DefaultDim2.“Value Posting” := DefaultDim.“Value Posting”; DefaultDim2.INSERT(TRUE); UNTIL DefaultDim.NEXT = 0; END; Cust.MODIFY; UpdateQuotes(Cust.“No.”); CampaignMgt.ConverttoCustomer(Rec,Cust); MESSAGE(Text009, Cust.TABLECAPTION, Cust.“No.”);

Correct, Naveen, there are no Default Dimensions for Contacts. Even if Dimensions could be associated with Contacts, I fail to see how they could help. Anyway, I can develop the idea a little further with a small comparison. Before Navision released version 3, the Relationship Management module (then Contact Management) had a different way of dealing with Contacts. 2 Tables existed for storing prospective customers data: Prospect (equivalent to the current Contact when Type is Company) and Contact (the same as today’s Contact when Type is Person). Since only the Contact table had fields such as Job Title, Salutation or Responsability Level, when a User wanted to create an individual person and fill in this type of data, he had to first create a Prospect and only then a Contact. This meant there were 2 records for only 1 person and one of them (the Prospect) is not even “logically” necessary (only by design). Nowadays, with versions 3 and 4, there is only 1 master table in Relationship Management - the Contact table. This table can hold either Companies or Persons and there is no need to create a Company for an individual Person. However, when you get to the part when you want to create that individual Person as a Customer, you can’t. I would like to understand why Navision did it this way. Of course, it could have been just a bad design problem but they probably had some reason. Can someone help me understand what it was?

Naveen, I only saw your code after posting the previous message. I know I can change the way individual Contact Persons are handled, but I would like to get the bigger picture before doing so. Thanks in anticipation.

We kept the relationship between Contact Company and Customer. Then we added a few fields on the Customer Card one for Main Accounting Contact (Person), one for Main Advertinsing Contact (Person) etc. These were lookups to the Contact Table, filtered by Company, so it just showed the people who worked for that Company. Then we modified the Sales Header (Reg, Ship and Invoice) as well as the equivalents in Purchasing. Now when an order is placed, the Company is picked, but you have to choose the person, which is a lookup to the Customers Contact Persons. We can invoice to a different person, that who ordered etc. -john

Nelson, Regarding the use of Dimensions, this is used on the Customer side. When the customer record is created you can use a customer template (one for company and another for person). Then the customer record and its dimension assignments are used for reporting sales related information. The contact record is used for tracking and reporting marketing information. In reference to the Prospect table before version 3.01 and how I determine if a contact record is a prospect of not … In versions 3.01 and later, if a customer record does not exist for a contact, then it is a prospect. By using one table it simplfies the system process checking for duplicates. I try not to get bogged down in the specific word choices, but look at the model being used and build from that. Therefore, type Company in the contact record only means that the record can be created as a customer. And for me dimensions become a suitable means to seperate B2B and B2C customers. Or use General Business Posting Group or Customer Posting Group if accounting needs to report financials by B2B and B2C. The only area that I can think of that this creates and issue with (not being able to create sales and receipts for contacts that are the type person) is donations for fund raising in the Not-For Profit world.

I thought I would let the Christmas/New Year holidays go by before reviving this topic… Scott, thanks a lot. I understand where you’re getting at now. This was the topic’s exact purpose: to find how other people are interpreting and using the CRM module. Any other members care to share their opinions or experiences? All input is appreciated.

Really no more participants?

I first installed RM about 12 years ago. Back then it was an Add-On called “Marketing Manager”. Back then one of the biggest problems, was that companies and persons were stored in seperate tables. That was changed, and now one of the biggest problems is that companies and persons are stored in one table. Basically RM is very flexible, but is still not perfect for everyone. It is generally required to make changes to the system to fit what you want. I have never found a case where it works out of the box, BUT it generally has reached a good balance where the mods required are not too major. In the case listed here, I would do one of three things, either 1/ create a new global company called say “Individuals”, and then have each of these person prospects attached to that Company. 2/ Create a Company and Person for each contact. 3/ Modify the code as was suggested above. It really depends on what best fits thte clients model, and generally everyone has a different requirement and a different idea. PS my preference is 2 above. With some code to eliminate the duplicate keyboard work.

Thanks for dropping by, David!

No problem, I got your [:D]