Регистры накопления 1С: остатки и обороты
Регистр накопления отвечает на вопросы «сколько осталось» и «сколько прошло за период». На собесе спрашивают, чем остатки отличаются от оборотов, что ставить в измерения, а что в реквизиты, и кто следит за отрицательными остатками. Ответ на последний вопрос удивляет многих.
// Так спрашивают: «Чем регистр остатков отличается от оборотного?» «Что ставить в измерения, а что в реквизиты?» «Запретит ли платформа уйти в минус?» «Как правильно записать расход?»
Остатки и обороты
Регистр вида «Остатки» хранит приход и расход и умеет отдать остаток на любую дату: товары на складах, взаиморасчёты, деньги. Оборотный регистр хранит только суммы за периоды и понятия остатка не знает: продажи, выручка, план продаж. Ресурсы регистра накопления бывают только числами, потому что их складывают.
Измерения, ресурсы, реквизиты
Измерения задают разрезы учёта: товар, склад, партия. Ресурсы складываются: количество, сумма. Реквизиты хранятся в движении, но итоги не дробят: комментарий, строка документа, ответственный.
Каждое измерение умножает число строк в таблице итогов. Если сделать измерением «строку документа», итоги разрастутся до размера самих движений и перестанут ускорять что-либо. Порядок измерений задаёт индекс таблицы итогов, поэтому первыми ставят те, по которым чаще отбирают.
Движения и остаток
Документ при проведении добавляет движения в набор регистра. Расход пишут методом ДобавитьРасход(): отрицательное количество в приходе тоже уменьшит остаток, но испортит обороты прихода в отчётах.
Четыре движения по складу Север и остаток после них:
Молоко: 10 − 4 − 3 = 3, хлеб 6. Платформа складывает приходы и вычитает расходы по каждому сочетанию измерений, а за счёт таблицы итогов не пересчитывает всю историю движений при каждом запросе.
Движение = Движения.ТоварыНаСкладах.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = Строка.Количество;
Движения.ТоварыНаСкладах.Записывать = Истина;Кто следит за минусом
Платформа примет любые движения, в том числе такие, после которых остаток станет отрицательным. Встроенного запрета нет. Контроль остатков пишут в коде проведения: записывают движения и запросом ищут минус по товарам документа, а чтобы параллельный документ не списал тот же остаток, ставят управляемую блокировку.
Вторая частая ошибка с записью: в документе стоит режим «Записывать выбранные», движения сформированы, а флажок Записывать = Истина у набора не поставлен. Документ проведётся, а в регистр ничего не попадёт.
Как отвечать: «Запретит ли платформа списать больше, чем есть на складе?»
Нет, регистр накопления примет любые движения, и остаток спокойно уйдёт в минус. Контроль пишу сам в проведении: после записи движений одним запросом проверяю остатки по товарам документа и при минусе ставлю Отказ. Чтобы два документа не списали один остаток одновременно, перед этим ставлю управляемую блокировку на товары и склады документа.
Правильный ответ «нет» многие не дают, а дальше кандидат сразу описывает рабочую схему контроля и думает о параллельных документах. Это мост к вопросам про блокировки.
На чём валят
- −Делают измерением строку документа или комментарий. Итоги разрастаются до размера движений. Такие поля делают реквизитами.
- −Пишут расход отрицательным приходом. Портятся обороты прихода. Расход пишут ДобавитьРасход().
- −Считают, что платформа не даст уйти в минус. Встроенного контроля нет. Его пишут в проведении под управляемой блокировкой.
- −Забывают
Записывать = Истинапри «Записывать выбранные». Движения не попадут в базу. Флажок ставят у каждого изменённого набора.
Проверь себя
Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.
- Может ли регистр накопления существовать без регистратора?A)Да, если он оборотный и пишется обработкойB)Нет, у каждой записи есть регистраторC)Да, если включить независимый режим записиD)Да, для записей ввода начальных остатков
показать ответ и разбор
+B)Нет, у каждой записи есть регистратор// разбор: Регистр накопления всегда подчинён регистратору: записи — это движения документа, по регистратору их удаляют и перезаписывают. Даже ввод начальных остатков делают документом. Независимого режима, как у регистра сведений, у накопления нет.
- Какого типа могут быть ресурсы регистра накопления?A)Только ЧислоB)Число или Строка, как у реквизитовC)Любого типа, как у регистра сведенийD)Число или ссылка на справочник
показать ответ и разбор
+A)Только Число// разбор: Ресурсы регистра накопления складываются в остатки и обороты, поэтому только числовые. Строки и ссылки, которые нужно хранить вместе с движением, кладут в реквизиты: они записываются, но в итоги не попадают.
- Как документу записать расход в регистр остатков «ТоварыНаСкладах»?A)
ДобавитьРасход()в наборе движенийB)Записать в приход отрицательное количество товараC)РегистрыНакопления.ТоварыНаСкладах.Списать()D)Удалить приходную записьпоказать ответ и разбор
+A)`ДобавитьРасход()` в наборе движений// разбор: ДобавитьРасход() добавляет в набор движений строку с видом движения Расход, дальше заполняют период, измерения и ресурсы. Можно и Добавить() с явным ВидДвижения. Отрицательный приход формально уменьшит остаток, но испортит обороты прихода и отчёты.
- Номер документа-основания нужно хранить в движении, но остатки по нему не нужны. Что сделать полем регистра?A)Отдельный регистрB)ИзмерениеC)РесурсD)Реквизит
показать ответ и разбор
+D)Реквизит// разбор: Реквизит хранится в записи движения, но в таблицу итогов не попадает и разрез остатков не создаёт. Измерение «основание» размножило бы итоги на каждое основание, а ресурс должен быть числом. В отчёте по движениям реквизит виден.
- Чем оборотный регистр отличается от регистра остатков с точки зрения записи?A)Оборотный пишет только расход, приход ему не нуженB)Оборотный не хранит движения, только итоги периодаC)Нет вида движения: записи — просто суммы оборотаD)Оборотный пишется без регистратора, напрямую
показать ответ и разбор
+C)Нет вида движения: записи — просто суммы оборота// разбор: У оборотного регистра нет прихода и расхода: каждое движение — сумма, которая войдёт в оборот периода. Поэтому у него только таблица Обороты, а остатка нет. Записи движений он хранит так же, как регистр остатков, и тоже подчинён регистратору.
дальше
Теорию прочитал. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, бесплатная часть практики — одна сессия дня в сутки.