Перейти к основному содержимому

Регистры 1С — записи, срезы, остатки

Разработчику Архитектору

Play ITЗагрузка интерактивного демо…


Регистр в жизненном цикле документа

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

Записи в регистр обычно попадают при проведении документа — в модуле объекта документа формируют движения. Платформа записывает движения в транзакции вместе с документом.

Тип регистраВопрос, на который отвечает
Сведений (независимый)Какое значение реквизита сейчас?
Сведений (периодический)Какое значение было на дату?
Накопления (остатки)Сколько осталось на складе?
Накопления (обороты)Сколько пришло/ушло за период?

Обзор метаданных — в Архитектура и мета-объекты 1С; проведение — в Объекты и классы 1С.


Запись в регистр программно

Набор записей

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

Запись = Набор.Добавить();
Запись.Период = ДатаЗаписи;
Запись.Номенклатура = Номенклатура;
Запись.Цена = Цена;

Набор.Записать();
КонецПроцедуры

Набор записей — коллекция строк регистра с отбором. Типичный сценарий: установить отбор → Прочитать() → изменить или добавить → Записать().

Движения документа

При проведении в процедуре ОбработкаПроведения заполняют Движения.ИмяРегистра:

Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = Номенклатура;
Движение.Склад = Склад;
Движение.Количество = Количество;

Отмена проведения удаляет связанные движения автоматически.


Чтение регистра сведений

Менеджер записи и СрезПоследних

Для периодического регистра "цена на дату":

&НаСервере
Функция ЦенаНаДату(Номенклатура, Дата)
Возврат РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(
Дата, Новый Структура("Номенклатура", Номенклатура)).Цена;
КонецФункции

В запросе используют виртуальную таблицу СрезПоследних / СрезПервых:

"ВЫБРАТЬ
| Цены.Номенклатура,
| Цены.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК Цены"

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


Регистры накопления в запросах

Остатки

"ВЫБРАТЬ
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(, Номенклатура = &Номенклатура) КАК Остатки"

Виртуальная таблица Остатки возвращает текущий (или на конец периода) остаток по измерениям.

Обороты и ОстаткиИОбороты

Виртуальная таблицаДанные
ОборотыПриход и расход за интервал
ОстаткиОстаток на момент
ОстаткиИОборотыОстаток на начало, обороты, остаток на конец
"ВЫБРАТЬ
| ОстаткиИОбороты.Номенклатура,
| ОстаткиИОбороты.КоличествоПриход,
| ОстаткиИОбороты.КоличествоРасход,
| ОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&Нач, &Кон) КАК ОстаткиИОбороты"

Параметры дат и отборов подставляют через &Нач, &Кон и условия в скобках после имени таблицы.


Выборка по регистратору

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

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

Или запрос с условием ГДЕ Регистратор = &Документ.


Практические правила

  • Движения документа формируйте только в проведении, а не при каждой записи черновика.
  • Для отчётов по большим объёмам используйте виртуальные таблицы, а не обход документов в цикле.
  • Индексируйте измерения регистра, по которым часто фильтруют в ГДЕ.
  • Срезы сведений и остатки накопления — разные виртуальные таблицы; не путайте синтаксис.
Конструктор запроса

В конфигураторе откройте "Конструктор запроса" → выберите регистр → платформа подставит корректное имя виртуальной таблицы и параметры.


Связанные материалы