Регистр сведений по сути своей ближе всего к справочнику.
Однако есть ряд важных отличий, некоторые из которых перечислены ниже.
Во-первых регистр сведений не имеет ссылочной структуры, то есть у его записей нет уникальной ссылки, попросту свойства «Ссылка», поэтому на запись регистра сведений нельзя ссылаться.
Во-вторых регистр сведений имеет назначаемый разработчиком состав ключевых реквизитов, называемых измерениями.
Комбинация ключевых реквизитов однозначно идентифицирует запись, то есть двух или более записей с одинаковыми значениями ключевых реквизитов не может быть по-определению.
То есть, к примеру, в регистре сведений, хранящем информацию о длительности рабочих дней с реквизитами «Дата» и «Длительность», реквизит «Дата» будет ключевых, а «Длительность» нет, поскольку в регистре сведений должна быть только одна запись для каждой даты.
В-третьих возможен режим записи в регистр сведений с подчинением регистратору.
То есть записи в регистр сведений будут выполняться документами и при отмене проведения этих документов в случае автоматического удаления движений эти записи будут удаляться.
И в-четвертых регистр сведений может быть периодическим.
То есть информация в нем может быть различной на разные моменты времени.
Классический пример — это курсы валют, сегодня курс один, завтра курс той же самой валюты может быть другой.
Именно поэтому информацию, меняющуюся во времени, нужно хранить в регистре сведений, поскольку методы работы с регистром сведений позволяют использовать агрегатные таблицы «Срез первых» и «Срез последних», в которых можно получить записи, действующие на заданный момент времени.
Ну и напоследок ответ на вопрос, как осуществлять чтение и запись регистра сведений.
Чтение регистра сведений лучше всего осуществлять с помощью запроса.
Работа с запросами является отдельной темой и в рамках данной статьи не рассматривается.
Однако можно читать записи и без запроса с помощью нескольких методов объекта «РегистрСведенийМенеджер».
Методы «Выбрать» и «ВыбратьПоРегистратору» позволяют получить выборку записей с учетом заданного отбора.
Метод «Получить» позволяет получить одну запись, для которой в параметрах метода передается отбор по всем ключевым реквизитам.
Методы «ПолучитьПервое» и «ПолучитьПоследнее» позволяют получить соответственно первую или последнюю запись периодического регистра сведений, удовлетворяющую заданному в параметрах метода отбору.
Методы «СрезПервых» и «СрезПоследних» позволяют получить соответственно срез первых или последних записей, удовлетворяющих заданному в параметрах метода отбору.
Кроме этих методов есть еще два метода, «СоздатьМенеджерЗаписи» и «СоздатьНаборЗаписей», с помощью которых можно создать соответсвенно объект «РегистрСведенийМенеджерЗаписи» или «РегистрСведенийНаборЗаписей», после чего задать значения всех или некоторых ключевых реквизитов и с помощью метода объекта «Прочитать» выполнить чтение в объект записей из базы, удовлетворяющих присвоенным значениям ключевых реквизитов.
В итоге получаем объект, содержащий нужные нам одну или несколько записей.
Запись же в регистр сведений производится с помощью уже упомянутых методов «СоздатьМенеджерЗаписи» и «СоздатьНаборЗаписей» объекта «РегистрСведенийМенеджер».
Можно либо создать объект, после чего заполнить реквизиты записи или список записей и записать объект с помощью метода «Записать».
Либо создать объект, задать значения всех или некоторых ключевых реквизитов, чтобы с помощью метода объекта «Прочитать» выполнить чтение в объект записей из базы, удовлетворяющих присвоенным значениям ключевых реквизитов, после чего выполнить метод «Очистить», после чего уже выполнить метод «Удалить» или заполнить реквизиты записи или список записей и записать объект с помощью метода «Записать».
Как добавить запись в непериодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура); НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись. Номенклатура = ТекущаяНоменклатура; НоваяЗапись.Свойство = ТекущееСвойство; НоваяЗапись.Значение = ТекущееЗначение; НаборЗаписей.Записать();
Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
НаборЗаписей = РегистрыСведений.СобственныеКонтрагенты.СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); // Перебрать записи в цикле… Для Каждого Запись из НаборЗаписей Цикл РегистрКонтрагент = Запись.Контрагент; РегистрВидСвязи = Запись.ВидСвязи; РегистрОбъект = Запись.Объект; КонецЦикла; // … или выгрузить записи в таблицу значений. ТаблицаЗаписей = НаборЗаписей.Выгрузить(); ВЫБРАТЬ * ИЗ РегистрыСведений.СобственныеКонтрагенты
Как удалить все записи из независимого регистра сведений?
НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей(); НаборЗаписей.Записать();
Как удалить записи независимого регистра сведений с отбором по конкретной организации?
НаборЗаписей = РегистрыСведений.ОбъектыСтроительстваОрганизаций.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация); НаборЗаписей.Записать();
Как добавить запись в периодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта); НаборЗаписей.Отбор.Период.Установить(ТекущаяДата); НовЗапись = НаборЗаписей.Добавить(); НовЗапись.Валюта = ТекущаяВалюта; НовЗапись.Период = ТекущаяДата; НовЗапись.Курс = ТекущийКурс; НовЗапись.Кратность = ТекущаяКратность; НаборЗаписей.Записать(Истина);
Как прочитать (изменить) записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Чтение и сообщение данных полей записи. Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс)); // Изменение данных полей записи. Запись.Курс = 0; КонецЦикла; НаборЗаписей.Записать();
Как удалить записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Записать();
Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют |ГДЕ | (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1) | ИЛИ | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"") | И | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))"; ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); НаборЗаписей.Записать();
Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
Запрос = Новый Запрос;
МассивВалют = Новый Массив;
МассивВалют.Добавить(Валюта1);
МассивВалют.Добавить(Валюта2);
Запрос.УстановитьПараметр("МассивВалют", МассивВалют);
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения);
Запрос.Текст = "
|ВЫБРАТЬ
| ВалютыСрезПоследних.Валюта,
| ВалютыСрезПоследних.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних";
ТаблицаКурсов = Запрос.Выполнить().Выгрузить();
Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
Процедура ЗаменаПериода() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтветственныеЛицаОрганизации.Период, | ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница, | ОтветственныеЛицаОрганизации.ОтветственноеЛицо |ИЗ | РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации |ГДЕ | ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1) | И | ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг" | И | (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL | ИЛИ | НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец" | ИЛИ | ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи(); Пока Выборка.Следующий() Цикл Запись.Период = Выборка.Период; Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница; Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо; Запись.Прочитать(); Если Запись.Выбран() Тогда Запись.Период = Дата(2004, 1, 1); Запись.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры;
Как «сделать периодическим» реквизит уже заполненного справочника?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &ДатаУстановки КАК Период,
| Проекты.Ссылка КАК Проект,
| Проекты.Ответственный
|ИЗ
| Справочник.Проекты КАК Проекты
|ГДЕ
| (НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))";
Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка());
Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1));
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаРезультат);
НаборЗаписей.Записать();
Как добавить записи в регистр сведений, подчиненный регистратору?
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; НоваяЗапись.ЛимитПоставщика = 50; НаборЗаписей.Записать(); НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; НоваяЗапись.ЛимитПокупателю = 25; НаборЗаписей.Записать(Ложь);
Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Чтение и сообщение данных полей записи. Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) + " " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки)); // Изменение данных полей записи. Запись.ПроцентСкидкиНаценки = 0; КонецЦикла; НаборЗаписей.Записать();
Как удалить записи из регистра сведений, подчиненного регистратору?
Запрос = Новый Запрос; Запрос.Текст = " | ВЫБРАТЬ | ЦеныНоменклатурыКонтрагентов.Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей(); Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Записать(); КонецЦикла;
Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>
Богдан, Касперский ругается на Ваш сайт.
Ошибка следующая:
14.12.2017 14.11.59;Заблокирован опасный веб-адрес;https://coinhive.com/lib/cryptonight.wasm;https://coinhive.com/lib/cryptonight.wasm;Веб-адрес;Веб-адрес обнаружен в базе вредоносных веб-адресов;Yandex;12/14/2017 14:11:59
Проверка показала что нет вирусов:
https://www.virustotal.com/ru/url/00e2051bef688aaf3b8fdcffebf0f6cb43d16a9d629536f3ec4fe78184cbbd8f/analysis/
Да, и подключен Яндекс Вебмастер там нет предупреждений.