Se rendre au contenu
Menu
Cette question a été signalée
3 Réponses
2302 Vues

Hello, this is my first post in the forum :)

I'm trying to automate the analytic distribution in purchase order because, some orders may have tens of lines and I want to avoid errors while copying the distribution. Mass modification is not available for the lines in Studio so I try to make an atumated action with code :

Model id purchase.order, trigger is update and I have a ManyToOne field related to analytic accounts called x_studio_compte_analytique. Here is my code.
I tried to check if record.x_studio_compte_analytique.id is ok => yes, it displays the good ID

Any idea ?

for record in records:
  tag_ids = [record.x_studio_compte_analytique.id]
​#tag_ids = [6,7] doesn't work either
  for line in record.order_line:
    line['analytic_distribution']=[(6, 0, tag_ids)]

Avatar
Ignorer
Auteur Meilleure réponse

Ok, I've found my mistake.
analytic_distribution is a json

The right code is :

for record in records:
  analytic_account_id=record.x_studio_compte_analytique.id
  for line in record.order_line:
    line['analytic_distribution']={str(analytic_account_id): 100.0}
Avatar
Ignorer

Hi Emmanuel,

I’ve set up the analytic distribution with the following structure:

Project

Department

Branch

Location

Now, I want to automate the analytic distribution such that whenever a record is created and a customer is selected on the sale order, the Location (point 4) in the distribution should be automatically populated.

I’ve written logic that fetches the location-related analytic account from the customer and adds it to the sale order’s analytic distribution. However, the issue is that it's currently being added under 1. Project instead of 4. Location.

Do you have any idea how we can specifically target the 4th column (Location) in the analytic distribution?

Thanks in advance!
Best regards,

Meilleure réponse

To automate analytic distribution in purchase orders, ensure you're using the correct syntax to update One2many fields. In your code, analytic_distribution should be written as a write operation on line, not dictionary-style assignment. Try this:

for record in records:
    tag_ids = [record.x_studio_compte_analytique.id]
    for line in record.order_line:
        line.write({'analytic_distribution': [(6, 0, tag_ids)]})

Also, make sure analytic_distribution is a Many2many field. This approach correctly assigns the analytic tag to each line. Test it on sample data to confirm it updates as expected.

Avatar
Ignorer
Meilleure réponse
line['analytic_distribution']={str(analytic_account_id): 100.0, str(Location_account_id): 100.0, 128: 100.0 }

you can try to use above. it's working for me in the analytic distribution but creating 2 or 3 analytic items which i am trying to resolve.

Avatar
Ignorer
Publications associées Réponses Vues Activité
0
mai 24
1548
1
mars 24
1442
1
janv. 24
1433
1
oct. 22
2579
1
mai 22
2708