Как в 1C 8.3, 1С 8.2 работать с регистром сведений. Регистры сведений 1C 8.3, 1С 8.2.
Внутренняя структура регистра сведений
Регистр сведений хранит данные в виде записей. Запись регистра сведений содержит значения ресурсов и измерений.
В ресурсах хранится непосредственная информация, а в измерениях описываются разрезы этой информации. Реквизиты регистра сведений позволяют хранить любую дополнительную информацию.
Периодический характер регистра сведений
Одним из главных достоинств регистра сведений является помещение данных в базу не только в соответствии измерениям, но и в разрезе времени. При разработке конфигурации или в процессе ее модернизации можно установить для регистра сведений любую периодичность для занесения данных из предложенных. Это позволяет удобно отслеживать изменение данных во времени.
При применении периодичности к каждой записи регистра будет добавлено поле «Период», в котором будет храниться дата внесения данных в информационную базу.
Опция Подчинение регистратору
В регистры сведений, записи можно вносить как программно вручную, так и при формировании документа-регистратора автоматически. При внесении данных документом в такую запись вносится дополнительное поле, которое содержит информацию об этом документе. переключение режима производится из комбобокса «Режим записи».
Уникальность
Объект конфигурации «Регистр сведений» обязательно контролирует уникальность записей. Т.е. ключ каждой записи создается неповторимым. Этот ключ зависит от вида регистра сведений и собственно сведений содержащихся в записи.
Программирование с использованием регистров сведений
Теперь рассмотрим самые распространенные операции, которые могут быть востребованы при программировании применительно к регистрам сведений.
Чтение записей из регистра сведений
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Процедура ЧтениеЗаписейРегистраСведений() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура, | ШтрихкодыНоменклатуры.Штрихкод |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |УПОРЯДОЧИТЬ ПО | Номенклатура УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить( Строка(ВыборкаДетальныеЗаписи.Номенклатура) + " " + ВыборкаДетальныеЗаписи.Штрихкод ); КонецЦикла; КонецПроцедуры |
Добавление новой записи регистра сведений
1 2 3 4 5 6 7 8 |
Процедура ДобавитьЗаписьРегистраСведений() Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = ТекущаяДата(); Запись.Курс = 50; Запись.Кратность = 1.0; Запись.Валюта = СсылкаНаВалюту; //Запись.Записать(); // закомментировано для безопасности КонецПроцедуры |
Изменение записи регистра сведений
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Процедура ИзменитьЗаписьРегистраСведений1() НаборЗаписей = РегистрыСведений.ХарактеристикиФизлиц.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Период); НаборЗаписей.Отбор.ФизическоеЛицо.Установить(ФизическоеЛицо); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда Запись= РегистрыСведений.ХарактеристикиФизлиц.СоздатьМенеджерЗаписи(); Запись.Период = ТекущаяДата(); Запись.Измерение = ЗначениеИзмерения; Запись.Ресурс = ЗначениеРесурса; //Запись.Записать(); // закомментировано для безопасности ИначеЕсли НаборЗаписей.Количество() >= 1 Тогда Запись= НаборЗаписей[0]; Запись.Ресурс = ЗначениеРесурса; //НаборЗаписей.Записать(); // закомментировано для безопасности КонецЕсли; КонецПроцедуры Процедура ИзменитьЗаписьРегистраСведений2() Выборка = РегистрыСведений.КурсыВалют.Выбрать('20151004','20161004'); Пока Выборка.Следующий() Цикл МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи(); МенеджерЗаписи.Прочитать(); МенеджерЗаписи.Курс = 25; // МенеджерЗаписи.Записать(); //закомментировано для безопасности КонецЦикла; КонецПроцедуры |
Добавить запись в периодический регистр сведений
1 2 3 4 5 6 7 8 9 10 11 |
Процедура ДобавлениеЗаписиВПериодическийРегистр Записи = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Записи.Отбор.Валюта.Установить(ТекущаяВалюта); Записи.Отбор.Период.Установить(ТекущаяДата); Запись = Записи.Добавить(); Запись.Валюта = ТекущаяВалюта; Запись.Период = ТекущаяДата; Запись.Курс = ТекущийКурс; Запись.Кратность = ТекущаяКратность; //Записи.Записать(); //закомментировано для безопасности КонецПроцедуры; |
Удаление записи регистра сведений
1 2 3 4 5 6 7 |
Процедура УдалитьЗаписьРегистраСведений() Выборка = РегистрыСведений.КурсыВалют.Выбрать('20151004','20161004'); Пока Выборка.Следующий() Цикл МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи(); //Выборка.ПолучитьМенеджерЗаписи().Удалить(); //закомментировано для безопасности КонецЦикла; КонецПроцедуры |
Отбор данных по регистратору
1 2 3 4 5 6 7 8 9 10 |
Процедура ОтборДанныхПоРегистратору() Документ = Документы.УстановкаЦенНоменклатуры.Выбрать(); Если Документ.Следующий() Тогда Регистр = РегистрыСведений.ЦеныНоменклатуры.ВыбратьПоРегистратору( СсылкаНаДокумент); Пока Регистр.Следующий() Цикл Сообщить(Регистр.Номенклатура.Наименование + " " + Регистр.Цена); КонецЦикла; КонецЕсли; КонецПроцедуры |
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.