can.t have unallocated cost on planning formula

Question Status

Suggested Answer
Patrick Pelchat asked a question on 14 Jun 2013 1:42 PM

I have made an inventory closing and I got this error message:

can.t have unallocated cost on planning formula

It only tells me the item number that has the error, not the transactions.  There are many transactions on this items.  Did anyone had this message in the past and what was the solution to solve the problem.

I cannot cancel the closing, the button is not available, I can only resume the inventory closing once the problem is corrected.  In the mean time many transactions are blocked which is crucial.

thanks

Reply
Suggested Answer
Steven Weaver responded on 16 Jun 2013 11:12 PM

In your formula you have a by/co product with the cost allocation not set, you need to set it.

Reply
Alaa assem responded on 17 Jul 2013 2:02 PM

Hi,

i have the same error but when i am trying to recalculate the inventory, and i don't have anything in the formula form!!

but when i click on resume calculation button several times, it resumes every time till it gives me the correct sign

can anyone help me please ASAP??!!!

Reply
Mamta Rathod responded on 11 Sep 2013 1:16 PM

Hi,

I have the same issue, however, in our environment we do not have any formulas.  

Did anyone resolve this?

Reply
Suggested Answer
Steven Weaver responded on 12 Sep 2013 12:29 AM

The message only appears and is referenced by a Formula - can you check the tables for data? Failing that you would need a developer to debug, because the message is being called incorrectly by another issue.

Reply
Mamta Rathod responded on 12 Sep 2013 6:28 AM

Thank you for your fast response.  

I have checked all the tables and all the ones that are pmf or pds related are all blank.  Also, the formula table is blank too.  Would you be able to suggest any other tables?  

Reply
Steven Weaver responded on 13 Sep 2013 12:25 AM

I would suggest a developer debug the message to tell you the table that is causing the error to be called, it is not the one you would expect - although you may want to look in the equivalent of the ProdBOM where a formula could be attached to a batch order, but I do not know the name of the table. Otherwise you have covered the obvious so we would need guidance.

Reply
Shivraj responded on 16 Oct 2013 4:51 AM

U r applying formule on Planning Item rather on formule item

Reply
Francesco Frentrop responded on 10 Jan 2014 8:56 AM

I see something similar in our system and just ran it briefly through the debugger.

It appears that the item that produces the error is not included in the table InventTransOriginAssemblyComponent, which should contain information on all assembled items and their components.

Basically it is trying to find the item that this part belongs to.

In the item setup I notice that the item does not have any production type. This does seem to constitute a planning item in the code.

Like shivrav says, the solution could be as simple as selecting a production type for your item.

Reply
Martina Bergamo responded on 11 Aug 2015 10:06 AM

Hi! I have the same issue!

The item that produced the error is not included in the table InventTransOriginAssemblyComponent, but it has "Formula" as production type.

Any ideas?

Thanks.

Martina

Reply
Suggested Answer
Andrejs Opsis responded on 29 Mar 2017 4:14 AM

Hi!

If "Prodtable"  is created by your class be sure to fill in both fields

prodTable.QtySched ,

prodTable.RemainInventPhysical (!!!)  if this =0 ,

     then on "start" production, there will not be generated records in table "InventTransOriginAssemblyComponent".

JOB: create/restore records :

static void adp_3819_RestoreAssembly(Args _args)

{

   InventTransOrigin   InventTransOrigin_prod;

   InventTransOrigin   InventTransOrigin_raw;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_prod;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_raw;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_new;

   int i,k;    

   int                     starttime;

   ;

   Starttime = timenow();

   while select InventTransOrigin_prod

       where

           //InventTransOrigin_prod.ItemId == '8035' &&

           InventTransOrigin_prod.ReferenceCategory == InventTransType::Production

       notExists join inventTransOriginAssemblyComponent_prod

           where inventTransOriginAssemblyComponent_prod.ASSEMBLYINVENTTRANSORIGIN == InventTransOrigin_prod.RecId

   {

       k++;

       while select InventTransOrigin_raw

           where

               InventTransOrigin_raw.ReferenceCategory == InventTransType::ProdLine &&

               InventTransOrigin_raw.ReferenceId == InventTransOrigin_prod.ReferenceId

       notExists join inventTransOriginAssemblyComponent_raw

           where

               inventTransOriginAssemblyComponent_raw.ASSEMBLYINVENTTRANSORIGIN == InventTransOrigin_prod.RecId &&

               inventTransOriginAssemblyComponent_raw.ComponentInventTransOrigin == InventTransOrigin_raw.RecId

       {

           inventTransOriginAssemblyComponent_new = null;

           inventTransOriginAssemblyComponent_new.AssemblyInventTransOrigin  = InventTransOrigin_prod.RecId;

           inventTransOriginAssemblyComponent_new.ComponentInventTransOrigin = InventTransOrigin_raw.RecId;

           inventTransOriginAssemblyComponent_new.insert();

           i++;

       }//while

   } //while

   info(strFmt("Total procesed %1, created lines %2", k, i));

   info(strfmt('Time %1',  time2str(timenow()- starttime, 1 , 1 )));

   //info(strfmt("%1: ttsLevel %2 ", '', appl.ttsLevel() ) );

}

Reply
Mtuss responded on 18 Apr 2017 6:31 PM

Hello,

I have experienced this issue in one of my customers. In their case the problem was that those items where included in a formula using total cost allocation and didn't have an active cost.

The solution is as easy as activating a cost price for those items.

I hope that helps.

Marc

Reply
Suggested Answer
Steven Weaver responded on 16 Jun 2013 11:12 PM

In your formula you have a by/co product with the cost allocation not set, you need to set it.

Reply
Suggested Answer
Steven Weaver responded on 12 Sep 2013 12:29 AM

The message only appears and is referenced by a Formula - can you check the tables for data? Failing that you would need a developer to debug, because the message is being called incorrectly by another issue.

Reply
Suggested Answer
Andrejs Opsis responded on 29 Mar 2017 4:14 AM

Hi!

If "Prodtable"  is created by your class be sure to fill in both fields

prodTable.QtySched ,

prodTable.RemainInventPhysical (!!!)  if this =0 ,

     then on "start" production, there will not be generated records in table "InventTransOriginAssemblyComponent".

JOB: create/restore records :

static void adp_3819_RestoreAssembly(Args _args)

{

   InventTransOrigin   InventTransOrigin_prod;

   InventTransOrigin   InventTransOrigin_raw;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_prod;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_raw;

   inventTransOriginAssemblyComponent inventTransOriginAssemblyComponent_new;

   int i,k;    

   int                     starttime;

   ;

   Starttime = timenow();

   while select InventTransOrigin_prod

       where

           //InventTransOrigin_prod.ItemId == '8035' &&

           InventTransOrigin_prod.ReferenceCategory == InventTransType::Production

       notExists join inventTransOriginAssemblyComponent_prod

           where inventTransOriginAssemblyComponent_prod.ASSEMBLYINVENTTRANSORIGIN == InventTransOrigin_prod.RecId

   {

       k++;

       while select InventTransOrigin_raw

           where

               InventTransOrigin_raw.ReferenceCategory == InventTransType::ProdLine &&

               InventTransOrigin_raw.ReferenceId == InventTransOrigin_prod.ReferenceId

       notExists join inventTransOriginAssemblyComponent_raw

           where

               inventTransOriginAssemblyComponent_raw.ASSEMBLYINVENTTRANSORIGIN == InventTransOrigin_prod.RecId &&

               inventTransOriginAssemblyComponent_raw.ComponentInventTransOrigin == InventTransOrigin_raw.RecId

       {

           inventTransOriginAssemblyComponent_new = null;

           inventTransOriginAssemblyComponent_new.AssemblyInventTransOrigin  = InventTransOrigin_prod.RecId;

           inventTransOriginAssemblyComponent_new.ComponentInventTransOrigin = InventTransOrigin_raw.RecId;

           inventTransOriginAssemblyComponent_new.insert();

           i++;

       }//while

   } //while

   info(strFmt("Total procesed %1, created lines %2", k, i));

   info(strfmt('Time %1',  time2str(timenow()- starttime, 1 , 1 )));

   //info(strfmt("%1: ttsLevel %2 ", '', appl.ttsLevel() ) );

}

Reply