|
Отбор+изменение набора записей регистра накопления - как быть? |
☑ |
0
Тим
15.03.11
✎
21:51
|
Мое почтение!
Коллеги, только начинаю разбираться с 1С8.
Возникла задача изменить подмножество записей регистра накопления(Р1), на основании данных другого регистра(Р2).
Поскольку язык запросов 8.1 не поддерживает аналог SQL-инструкции
UPDATE, пока нашёл единственный алгоритм действий - запросом к регистру
Р1 получаю набор записей для изменения - СоздатьНаборЗаписей(),
причём без какого либо отбора, т.к. регистраторов несколько.
Выгружаю в таблицу значений.
В цикле обхода таблицы значений вызываю запрос к Р2 с параметрами. Если результат запроса непустой, то исправляю запись.
Затем загружаю исправленную таблицу, вызываю Записать().
Пробую этот метод - пустой результат. В документации написано-
Прочитать() Описание: Считывает записи из базы данных по
установленному отбору. А если нет ограничения? Пробую
Отбор.Регистратор.Использование = Ложь; - безуспешно,
"Значение данного реквизита изменять нельзя!".
|
|
1
amiko
15.03.11
✎
22:05
|
Разве регистр накопления можно "оторвать" от регистратора? НаборЗаписей = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Регистратор); //определяется заранее, например, запросом к регистру // обработка набора записей // ... НаборЗаписей.Записать();
|
|
2
Тим
15.03.11
✎
22:12
|
Если несколько регистраторов - как быть? Только ещё один внешний цикл - сначала перебор регистраторов, а потом внутри перебор по их движениям? Может, есть вообще совсем иной способ править записи регистра накопления?
|
|
3
amiko
15.03.11
✎
22:17
|
Если смотреть типовые механизмы и следовать им, то порядок действий как раз такой: 1. Сначала запрос к регистру для выборка всех записей с |УПОРЯДОЧИТЬ ПО | Регистратор, | НомерСтроки 2. Затем выбрать из запроса: ВыборкаРегистраторов = Запрос.Выполнить().Выбрать(); НаборЗаписей = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей(); Пока ВыборкаРегистраторов.СледующийПоЗначениюПоля("Регистратор") Цикл НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистраторов.Регистратор); // выполнить преобразования НаборЗаписей.Записать(Истина, Ложь, Истина, Ложь); НаборЗаписей.Очистить(); КонецЦикла; Как-то так. Тут надо понимать саму задачу.
|
|
4
Тим
15.03.11
✎
22:25
|
Похоже, только так и остаётся действовать. amiko, благодарен за участие! Впрочем, если есть другие мнения... :)
|
|
5
hhhh
15.03.11
✎
22:26
|
(0) тут жестко, только по регистраторам.
|
|
6
Тим
15.03.11
✎
22:29
|
(5) - спасибо за подтверждение
|
|