Существует несколько видов регистров в 1С:
- Накопления, хранящие остатки или обороты в числовом виде;
- Расчета, хранящие виды расчетов и сами расчеты, обычно используются для расчета зарплаты;
- Бухгалтерии с данными о бухгалтерских расчетах в виде Дт-Кт;
- Регистры сведений.
На последних мы остановимся поподробнее, поскольку они позволяют компилировать данные из БД по разрезам измерений. Например, в «Ценыноменклатуры» хранятся данные для конкретной номенклатуры и характеристики по определенному виду цен.
Характеристики
Регистр бывает как периодическим, так и непериодическим, когда не нужно сохранять последовательность изменений. Но если все-таки хранить нужно, то устанавливается, в пределах какого периода программа установит контроль уникальности записей: посекундно, за день, месяц, за квартал и год.
Если попытаться создать две записи в пределах одного периода, программа выдаст ошибку «Запись с такими ключевыми полями существует!» и не даст произвести запись в базу данных.
Также можно указать режим записи. Первый с «Подчинением регистратору», при котором записи будут регистрироваться документами и в каждой из них будет указан документ-регистратор. Если выбирать второй – независимый режим, то данные регистрируются не регистратором, а добавляются, например, непосредственно из списка или как обработка.
Особенность периодического регистра в том, что можно использовать срез крайних или первых, получая готовые значения из базы данных о последнем/первом установленном значении на определенную дату.
Запись в регистр сведений 1С
Строки в регистре с периодом и регистратором, содержащие информацию о ресурсах в разрезе измерений, называются записями.
Чтобы добавить запись в регистр используются или менеджер записей, или набор записей. Если у записей в регистре имеется общий ключ, то необходимо использовать НаборЗаписей. А для записи одной единственной записи, если в регистре все записи уникальны, необходимо использовать МенеджерЗаписи.
Пример записи при использовании объекта РегистрСведенийНаборЗаписей.
Использование менеджера записи:
НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗапись.Период = Дата(31,12,2016);
НоваяЗапись.Курс = 100;
НоваяЗапись.Кратность = 1;
НоваяЗапись.Записать();
При использовании набора записей и метода «Записать» происходит запись в регистр сведений набора записей. При этом может происходить как просто добавление строк, так и замещение уже имеющихся строк в регистре. Для независимых регистров, без установки отборов, будет произведено удаление всех записей в регистре и замещение на добавляемые записи.
Если записать без отбора данные в подчиненны регистр, возникнет ошибка.
Пример записи с использованием набора записей в подчиненный регистратору регистр сведений ЦеныНоменклатуры:
НовыйНаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НовыйНаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
НоваяЗаписьНабора.Период = Ссылка.Дата;
НоваяЗаписьНабора.Номенклатура = Ссылка.Номенклатура;
НоваяЗаписьНабора.Цена = Ссылка.Цена;
НовыйНаборЗаписей.Записать();
Пример записи через менеджер записи:
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = Дата;
Запись.Курс = Курс;
Запись.Валюта = Валюта;
Запись.Записать();
Поиск и чтение в регистре сведений
Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
ЦеныНоменклатуры.Регистратор = &Регистратор
Изменение и удаление записей
Чтобы удалить запись регистра сведений, например, все курсы валюты EUR, воспользуйтесь следующим кодом:
СтруктураОтбора = новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию("EUR"));
Выборка = РегистрыСведений.КурсыВалют.Выбрать(,,СтруктураОтбора);
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;
Для быстрой и полной очистки регистра можно использовать следующий код:
НоваяЗапись = РегистрыСведений.ТестовыйРегистр.СоздатьНаборЗаписей();
НоваяЗапись.Записать();
Чтобы скорректировать и изменить регистр, а также быстро заполнить регистр данными, можно написать универсальную обработку.
консультация эксперта
самые свежие новости 1 раз в месяц