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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Что обозначают смайлики в вацапе расшифровка

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

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

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

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

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

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

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

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

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

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

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

Реклама похоронного бюро: «Если наши клиенты воскреснут, то вновь обратятся к нам!

Описание:

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

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

Регистр сведений, фактически, представляет собой массив данных, необходимый, чтобы реализовать функцию, которая может выдать необходимую информацию по определенному набору аргументов. Аргументы функции называются измерениями, а результат функции – ресурсами. В приведенном выше примере регистр "ЦеныКонкурентов" будет содержать измерения "Конкурент" и "Товар", и ресурс "Цена". Ресурсов может быть больше чем один: например, можно хранить оптовую и розничную цены.

Читайте также:  Соседи по ночам двигают мебель

Для разворота этой информации во времени используется поле "Период" регистра. Оно не вносится в качестве измерения, а добавляется системой автоматически при создании периодического регистра.

Для периодических регистров сведений система поддерживает такие стандартные операции, как получение наиболее позднего или наиболее раннего значения по определенной комбинации измерений (например, получение последней введенной цены по конкретному товару и конкретному конкуренту), а также получения среза наиболее поздних или ранних значений. Например, могут быть получены все последние введенные цены по различным товарам и конкурентам.

Если регистр не периодический, то поле "Период" для него не создается. В приведенном примере регистр "ЦеныКонкурентов" может быть непериодическим, если мы не хотим хранить историю изменения цен, а хотим иметь только актуальные цены. Тогда функция регистра сможет ответить на вопрос "какая сейчас цена у такого-то конкурента на такой-то товар", но не сможет ответить на вопрос "какая была цена у такого-то конкурента на такой-то товар в начале года".

Из описанных принципов работы регистра сведений вытекает то, что в системе может быть только одна запись с определенным набором и периодом измерений.

Действительно, по одному товару по одному конкуренту может быть только одна цена. Если по какой-либо причине мы можем получить несколько цен и хотим занести эту информацию в базу данных, то нам нужно создать еще одно измерение для хранения того значения, по которому эти цены могут различаться. Например, можно завести измерение "ИсточникИнформации". Тогда можно будет вводить цены конкурентов в разрезе источников.

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

Читайте также:  1С тонкий клиент таблица значений

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

Эти два варианта влияют на способ внесения информации, а не на основную логику работы регистра.

Документ, которым вносится запись в регистр сведений, называется регистратором.
Регистры, записываемые независимо, могут свободно редактироваться вручную или средствами встроенного языка. При этом если измерение такого регистра назначено как "ведущее" и значением измерения является ссылка на объект базы данных, то будет считаться, что запись регистра имеет смысл, только пока существует этот объект. Например, если назначить ведущим измерение "Конкурент", то считается, что запись имеет смысл только как информация по данному конкуренту. Соответственно, при удалении конкурента записи по нему будут удалены автоматически.

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

В программных модулях для общих действий над регистром сведений (поиск, выбор и создание записей регистра) служит объект РегистрСведенийМенеджер. . Для чтения, записи и удаления отдельных записей регистра сведений, не управляемого регистраторами, служит объект РегистрСведенийМенеджерЗаписи. . Для считывания и занесения набора записей в базу данных по определенному условию отбора служит объект РегистрСведенийНаборЗаписей. . Для динамического обхода записей регистра служит объект РегистрСведенийВыборка. .

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

Adblock detector