Установка управляемой блокировки на таблицу остатков регистра бухгалтерии

1. demon_infernal 40 31.05.18 17:07 Сейчас в теме
Добрый день.
Режим управления блокировкой конфигурации - Управляемый.
Есть регистр бухгалтерии, режим управления блокировкой - Управляемый, разделение итогов включено.
В плане счетов есть счет, допустим, Сотрудники, с одним субконто вида "Контрагенты"
При проведении некоторого документа требуется получить остаток по счету Сотрудники для всех сотрудников, у кого числится сумма, например, 1 копейка. Сделать проводки, убирающие эту 1 копейку.
Сомневаюсь, как именно правильно установить управляемую блокировку на регистр бухгалтерии, ведь список сотрудников заранее не известен.
Сейчас делаю так:
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
Элемент.УстановитьЗначение("Счет", Счет_Сотрудники);
Элемент.УстановитьЗначение("Период", КонецДня(Дата));
Элемент.УстановитьЗначение("Организация", Организация);
// и вот тут хочется сделать Элемент.УстановитьЗначение(ПланыВидовХарактеристик.ВидыСубконто.Контрагенты, ), но не понятно, что передать вторым параметром


Если у кого то есть пример решения подобной задачи - буду благодарен.
По теме из базы знаний
Найденные решения
2. Dream_kz 129 31.05.18 17:19 Сейчас в теме
(1) Надо блокировать остатки по счету без указания контрагентов
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 31.05.18 17:19 Сейчас в теме
(1) Надо блокировать остатки по счету без указания контрагентов
3. demon_infernal 40 31.05.18 17:25 Сейчас в теме
(2) Согласен, но тогда заблокируются остатки по всем возможным на этом счете субконто, а хотелось бы установить только минимально необходимую блокировку.
4. Dream_kz 129 31.05.18 17:36 Сейчас в теме
(3) Так нам и нужны все остатки
5. demon_infernal 40 31.05.18 17:57 Сейчас в теме
(4) Ну да, логично. Тогда код обработки проведения документа я представляю таким:

// избавляемся от прежних движений документа
Движения.Хозрасчетный.Записавать = Истина;
Движения.Хозрасчетный.Очистить();
// здесь не нужно БлокироватьДляИзменения?
Движения.Хозрасчетный.Записать();

// ставим блокировку
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
Элемент.УстановитьЗначение("Счет", Счет_Сотрудники);
Элемент.УстановитьЗначение("Период", КонецДня(Дата));
Элемент.УстановитьЗначение("Организация", Организация);
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

// выполняем запрос, получаем нужные данные, формируем новые проводки
//...
//....

Движения.Хозрасчетный.Записывать = Истина
Движения.Хозрасчетный.Записать();
Показать

Не совсем понятно, нужно ли выполнять последнюю строчку Движения.Хозрасчетный.Записать(), или достаточно сделать Движения.Хозрасчетный.Записывать = Истина; и проводки запишутся?
У документа свойство "Записывать Движения" равно "Записывать выбранные", "Удаление движений" равно "Удалять автоматически при отмене проведения"
6. Dream_kz 129 31.05.18 18:04 Сейчас в теме
(5) Принудительно проводки лучше не записывать, дабы не вызвать дедлок. При окончании транзакции, если Записывать в истину взведено, сами запишутся.
user705522_constantin_h; +1 Ответить
7. demon_infernal 40 31.05.18 20:55 Сейчас в теме
В запросе условие Счет В ИЕРАРХИИ(&Счет_Сотрудники) , а блокировку сейчас я ставлю только на сам счет. Нужно явно ставить блокировку на все подчиненные счета?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот