Манипуляция записями регистра в форме

У справочников и документов есть ссылка - по ней очень удобно находить объект и выполнять с ним любые манипуляции.

У регистра сведений такого простого способа нет.

Но не стоит отчаиваться! Ведь у регистра сведений есть ключ записи. Это то же самое.

Приступим к практике.

Рассмотрим два случая.

В первом нам нужно удалить записи регистра сведений, которые выбраны в множественном выборе в форме списка записей регистра сведений.

Во втором нам нужно в выбранных записях в этой же форме изменить значение какого-нибудь ресурса, например, присвоить ресурсу "Архив" значение истина и реквизиту "ДатаАрхивирования" значение текущей даты.

Нам понадобится функция:

Функция обПрочитатьМенеджерЗаписиПоКлючуЗаписи(МЗ, КлючЗаписи)Экспорт

                МД = Метаданные.НайтиПоТипу(ТипЗнч(МЗ));

                Для Каждого Эл Из МД.Измерения Цикл

                               МЗ[Эл.Имя] = КлючЗаписи[Эл.Имя];

                КонецЦикла;

                //Можно попробовать ЗаполнитьЗначенияСвойств(МЗ, КлючЗаписи);

                МЗ.Прочитать();

КонецФункции

Ну а дальше просто.

Чтобы удалить все выбранные в форме записи, используем код:

Если Вопрос("Вы хотите удалить записи в " + ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки.Количество() + " строках", РежимДиалогаВопрос.ДаНетОтмена) <> КодВозвратаДиалога.Да Тогда

                Перейти ~Конец;

КонецЕсли;

Для Каждого Эл Из ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки Цикл

                МЗ = РегистрыСведений.МойРегистр.СоздатьМенеджерЗаписи();

                обПрочитатьМенеджерЗаписиПоКлючуЗаписи(МЗ, Эл);

                МЗ.Удалить();

КонецЦикла;

ЭтаФорма.Обновить();

Чтобы проставить нужные реквизиты, используем код:

Для Каждого Эл Из ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки Цикл

                МЗ = РегистрыСведений.МойРегистр.СоздатьМенеджерЗаписи();

                обПрочитатьМенеджерЗаписиПоКлючуЗаписи(МЗ, Эл);

                МЗ.Архив = истина;

                МЗ.ДатаАрхивирования = ТекущаяДата();

                МЗ.Удалить();

КонецЦикла;

ЭтаФорма.Обновить();

Данный код работает только для непериодических регистров, для периодических в ключ записи нужно добавлять поле «Период».

Кстати, можно попробовать использовать функцию ЗаполнитьЗначенияСвойств, тогда, скорее всего, будет работать и в периодических регистрах (добавится отбор по Период).

Конечно, можно сложить все отобранные ключи и построить по ним набор записей с хитрым отбором (вряд ли это получится, но попытаться можно), но это будет сложный способ решить простую задачу.

Скачать