How does one do it? This is definitely a good question. Let us look at the Data lock control mode configuration property. This property has the Managed value (fig. 14.31).
Fig. 14.31. Data lock control mode in configuration properties
This means that you have to use managed locks, which are set using 1C:Enterprise script tools.
You need to lock the data you intend to read and subsequently modify. This is implemented using the LockForUpdate property of register record sets. Let us use this property.
- Insert the lines shown in listing 14.41 before writing empty record sets.
Listing 14.41. Posting() procedure (fragment)
... | ON DocumentMaterialsAndServices.MaterialOrService = BalanceOfMaterialsBalance.Material"; // Setting data locks for the CostOfMaterials and BalanceOfMaterials registers RegisterRecords.CostOfMaterials.LockForUpdate = True; RegisterRecords.BalanceOfMaterials.LockForUpdate = True; // Writing empty record sets to read balances without the data added by this document RegisterRecords.CostOfMaterials.Write(); RegisterRecords.BalanceOfMaterials.Write(); QueryResult = Query2.Execute();
A managed lock is applied at the moment of writing these record sets, right before the execution of the second query. This is exactly what we wanted to achieve.
Next page: Marking custom module regions