1с получить запись регистра сведений по ключу

Совокупность полей записи, по которой контролируется уникальность записей в регистре.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Знать значения всех измерений
  • Вызов производится с клиентской процедуры через конструктор Новый с использованием обертки в виде массива
  • Либо через вспомогательную функцию, которая создаст ключ на сервере

Первый пример кода открытия записи регистра сведений

МассивКонструктораКлюча = Новый Массив;
МассивКонструктораКлюча.Добавить(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала»,Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));

КлючЗаписиРегистра = Новый («РегистрСведенийКлючЗаписи.ТабельРаботы», МассивКонструктораКлюча);
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));

Второй вариант открытия — с использованием серверного вызова

КлючЗаписиРегистра = ПолучитьКлючЗаписи(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала», Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));

Особенности использования

В случае отсутствия записи, когда указаны не действительные измерения регистра, выйдет ошибка «Объект не найден»:

  • Вариант1: Используйте попытку исключение
  • Вариант2: При серверном вызове, возможно не просто создавать ключ, но и добавить проверку наличия

Запись = РегистрыСведений.ТабельРаботы.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись,Структура);
Запись.Прочитать();
Если Запись.Выбран() = Ложь
Возврат Неопределено;
КонецЕсли;

Реклама — двигатель всеобщей дебилизации населения.

Оцените статью
Добавить комментарий