Совокупность полей записи, по которой контролируется уникальность записей в регистре.
В регистре не может быть двух записей с одинаковыми значениями полей, входящих в ключ записи.
Также используется для идентификации записей, например, чтобы спозиционироваться на строку в списке.
У справочников и документов есть ссылка — по ней очень удобно находить объект и выполнять с ним любые манипуляции.
У регистра сведений такого простого способа нет.
Но не стоит отчаиваться! Ведь у регистра сведений есть ключ записи. Это то же самое.
Приступим к практике.
Рассмотрим два случая.
В первом нам нужно удалить записи регистра сведений, которые выбраны в множественном выборе в форме списка записей регистра сведений.
Во втором нам нужно в выбранных записях в этой же форме изменить значение какого-нибудь ресурса, например, присвоить ресурсу «Архив» значение истина и реквизиту » ДатаАрхивирования » значение текущей даты.
Нам понадобится функция:
Функция обПрочитатьМенеджерЗаписиПоКлючуЗаписи (МЗ, КлючЗаписи )Экспорт
МД = Метаданные.НайтиПоТипу ( ТипЗнч (МЗ));
Для Каждого Эл Из МД.Измерения Цикл
МЗ[ Эл.Имя ] = КлючЗаписи [ Эл.Имя ];
//Можно попробовать ЗаполнитьЗначенияСвойств (МЗ, КлючЗаписи );
Ну а дальше просто.
Чтобы удалить все выбранные в форме записи, используем код:
Если Вопрос(«Вы хотите удалить записи в » + ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки.Количество () + » строках», РежимДиалогаВопрос.ДаНетОтмена ) <> КодВозвратаДиалога.Да Тогда
Для Каждого Эл Из ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки Цикл
обПрочитатьМенеджерЗаписиПоКлючуЗаписи (МЗ, Эл);
Чтобы проставить нужные реквизиты, используем код:
Для Каждого Эл Из ЭтаФорма.ЭлементыФормы.Список.ВыделенныеСтроки Цикл
обПрочитатьМенеджерЗаписиПоКлючуЗаписи (МЗ, Эл);
Данный код работает только для непериодических регистров, для периодических в ключ записи нужно добавлять поле «Период».
Кстати, можно попробовать использовать функцию ЗаполнитьЗначенияСвойств , тогда, скорее всего, будет работать и в периодических регистрах (добавится отбор по Период).
Конечно, можно сложить все отобранные ключи и построить по ним набор записей с хитрым отбором (вряд ли это получится, но попытаться можно), но это будет сложный способ решить простую задачу.
Для того, чтобы открыть существующую запись регистра сведений в управляемых формах необходимо:
- Знать значения всех измерений
- Вызов производится с клиентской процедуры через конструктор Новый с использованием обертки в виде массива
- Либо через вспомогательную функцию, которая создаст ключ на сервере
Первый пример кода открытия записи регистра сведений
МассивКонструктораКлюча = Новый Массив;
МассивКонструктораКлюча.Добавить(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала»,Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));
КлючЗаписиРегистра = Новый («РегистрСведенийКлючЗаписи.ТабельРаботы», МассивКонструктораКлюча);
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));
Второй вариант открытия — с использованием серверного вызова
КлючЗаписиРегистра = ПолучитьКлючЗаписи(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала», Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));
Особенности использования
В случае отсутствия записи, когда указаны не действительные измерения регистра, выйдет ошибка «Объект не найден»:
- Вариант1: Используйте попытку исключение
- Вариант2: При серверном вызове, возможно не просто создавать ключ, но и добавить проверку наличия
Запись = РегистрыСведений.ТабельРаботы.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись,Структура);
Запись.Прочитать();
Если Запись.Выбран() = Ложь
Возврат Неопределено;
КонецЕсли;
Реклама — двигатель всеобщей дебилизации населения.