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

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

  • автор:

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

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

СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(НУЖЕН КЛЮЧ, "Картинка");

Спасибо за ответы!

(1) Это же новый ключ создается.
А я ищу старые

РСВ = РегистрыСведений.КартинкиНоменклатуры.Получить(Новый Структура("ссылка", Объект.Ссылка));
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(РСВ, "Картинка");

вот так не дает, говорит ошибка.

Я через медеджер записи пробовал, тоже не работает.

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

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

Регистр сведений

Регистры сведений — это прикладные объекты конфигурации. Они позволяют хранить в прикладном решении произвольные данные в разрезе нескольких измерений. Например, в регистре сведений можно хранить курсы валют в разрезе валют, или цены предприятия в разрезе номенклатуры и типа цен.

Структура

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

Измерения регистра описывают разрезы, в которых хранится информация, а ресурсы регистра непосредственно содержат хранимую информацию. Например, для регистра сведений Цены товаров, который имеет следующую структуру:

Регистр сведений

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

Регистр сведений

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

Периодичность

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

Регистр сведений

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

Например, периодический регистр сведений Цены товаров может не только хранить информацию о том, какова цена на определенную номенклатуру сейчас, но и о том, как она изменялась в прошлом (или будет изменяться в будущем):

Подчинение регистратору

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

Регистр сведений

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

Например, изменение цен компании может производиться только определенным кругом лиц, и каждое такое изменение должно сопровождаться «бумажным» документом. В этом случае можно использовать режим подчинения регистратору, при котором изменение цен может быть выполнено только специальным документом — Изменение цен товаров.

Уникальность записей

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

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

Формы

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

Форма списка

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

Регистр сведений

Форма записи

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

Программная работа с регистром сведений в 1С 8.3

Для добавление новых записей в регистр сведений нужно:

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

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();
//устанавливаем отбор по измерениям и периоду
НаборЦен.Отбор.Товар.Установить(СсылкаНа Товар);
НаборЦен.Отбор.ТипЦен.Установить(СсылкаН аТипЦен);
НаборЦен.Отбор.Период.Установить(Дата);

//добавляем новую запись
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = СсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

//записываем набор записей
НаборЦен.Записать();

Набор записей с установленным отбором можно назвать гранулой. Запись в регистр сведений выполняется гранулами.

Если при записи не устанавливать отбор, то будет перезаписан весь регистр сведений, все предыдущие записи будут удалены:

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();

//добавляем новую запись
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = СсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

//записываем набор записей
НаборЦен.Записать();
//после записи все предыдущие записи регистра будут удалены
//так как не был установлен отбор

Можно установить отбор только по одному измерению и сразу добавить несколько записей:

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();
//устанавливаем отбор по одному измерению
НаборЦен.Отбор.ТипЦен.Установить(СсылкаН аТипЦен);

//добавляем новую запись
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = СсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

//добавляем еще одну запись
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = ЕщеОднаСсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 850;

//записываем набор записей
НаборЦен.Записать();

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

Но если в метод Записать набора записей передать параметр Ложь, то запись будет выполнена с добавлением новых записей:

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();

//добавляем новую запись
//не устанавливаем отбор в регистре сведений
//так как будем записывать с добавлением
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = СсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

//записываем набор записей с добавлением
НаборЦен.Записать(Ложь);

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

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

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();
//устанавливаем отбор по измерениям и периоду
НаборЦен.Отбор.Товар.Установить(СсылкаНа Товар);
НаборЦен.Отбор.ТипЦен.Установить(СсылкаН аТипЦен);
НаборЦен.Отбор.Период.Установить(Дата);

//добавляем новую запись, но товар записываем не тот, который указали в отборе
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = ЕщеОднаСсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

//записываем набор записей
НаборЦен.Записать(); //НЕ ЗАПИШЕТСЯ

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

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();
//устанавливаем отбор по регистратору
НаборЦен.Отбор.Регистратор.Установить(Сс ылкаНаДок);

//добавляем новые записи
НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = СсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 750;

НоваяЦена = НаборЦен.Добавить();
НоваяЦена.Товар = ЕщеОднаСсылкаНаТовар;
НоваяЦена.ТипЦен = СсылкаНаТипЦен;
НоваяЦена.Период = Дата;
НоваяЦена.Цена = 950;

//записываем набор записей
НаборЦен.Записать();

Отбор записей регистра сведений

Отбор позволяет не только установить гранулу при записи в регистр сведений, но и прочитать нужные записи регистра. Например, можно получить все записи по одному товару:

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

Удаление записей регистра сведений

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

//создаем набор записей регистра сведений
НаборЦен = РегистрыСведений.ЦеныНаТовары.СоздатьНаб орЗаписей();
//устанавливаем отбор по измерениям и периоду
НаборЦен.Отбор.Товар.Установить(СсылкаНа Товар);
НаборЦен.Отбор.ТипЦен.Установить(СсылкаН аТипЦен);
НаборЦен.Отбор.Период.Установить(Дата);

//записываем пустой набор записей
НаборЦен.Записать();

Чтобы очистить весь регистр сведений можно записать пустой набор записей без отбора:

Если регистр сведений подчинен регистратору, то нужно устанавливать отбор по документу-регистратору:

Если нужно удалить записи с отбором по ресурсу, то можно запросом выбрать необходимые записи, в цикле установить по нужным измерениям отбор и записать пустой набор записей:

В данном примере мы удалили все записи, у которых цена больше или равна 500. Но можно было решить ее от обратного: выбрать все записи, у которых цена меньше 500, создать набор записей и загрузить в него результат запроса. Так как отбор не был установлен, то весь регистр будет перезаписан и в нем останутся только те записи, где цена меньше 500:

Изменение записей регистра сведений

Чтобы изменить существующие записи регистра сведений нужно сначала прочитать их через набор записей, потом перебрать в цикле, изменить и записать набор записей. Например, увеличим все цены по одному типу цен на 10%:

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

Если регистр сведений подчинен регистратору, то отбор нужно устанавливать по регистратору:

Менеджер записи регистра сведений

Менеджер записи регистра сведений используется при интерактивном редактировании записи регистра сведений. Когда мы открываем форму записи, то чтение выполняется именно через менеджер записи. Когда нажимаем на форме записи кнопку Записать, то запись выполняется через менеджер записи.

Менеджер записи доступен только для регистров сведений с режимом записи Независимый.

Менеджер записи можно создать программно:

С помощью менеджера записи сначала была добавлена новая запись затем изменена и наконец удалена.

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

Для примера добавим в модуль набора записей следующий код:

Откроем форму записи для товара Шкаф, изменим измерение товар на Тумбочку и запишем. В сообщениях увидим следующий результат:

Сначала был записан старый пустой набор записей с товаром Шкаф, а потом новый с товаром Тумбочка.

Набор записей регистра сведений

Программную работу с набором записей регистра сведений рассмотрим на примерах:

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

Так как регистр сведений относится к необъектным данным, то у него нет реквизита Ссылка. Если нужно сослаться на определенную запись регистра, то можно использовать Ключ записи. Ключ записи можно создать через конструктор или через менеджер регистра сведений методом СоздатьКлючЗаписи:

//пустой ключ
ПустойКлюч = Новый(«РегистрСведенийКлючЗаписи.ЦеныНаТ овары»);
//можно через менеджер
ПустойКлюч = РегистрыСведений.ЦеныНаТовары.ПустойКлюч( );

//ключ на определенную запись регистра
ЗначенияКлюча = Новый Структура;
ЗначенияКлюча.Вставить(«Период», Дата(2021,4,1));
ЗначенияКлюча.Вставить(«Товар», СсылкаНаТовар);
ЗначенияКлюча.Вставить(«ТипЦен», СсылкаНаТипЦен);
КлючНаЗапись = РегистрыСведений.ЦеныНаТовары.СоздатьКлю чЗаписи(ЗначенияКлюча);

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

Описание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *