← вся теориятеория к собесу · Регистры 1С

Регистры накопления 1С: остатки и обороты

разбор писал Даниил, автор Сеньорчика

Зачем это спрашивают

Регистр накопления отвечает на вопросы «сколько осталось» и «сколько прошло за период». На собесе спрашивают, чем остатки отличаются от оборотов, что ставить в измерения, а что в реквизиты, и кто следит за отрицательными остатками. Ответ на последний вопрос удивляет многих.

// Так спрашивают: «Чем регистр остатков отличается от оборотного?» «Что ставить в измерения, а что в реквизиты?» «Запретит ли платформа уйти в минус?» «Как правильно записать расход?»

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

Регистр вида «Остатки» хранит приход и расход и умеет отдать остаток на любую дату: товары на складах, взаиморасчёты, деньги. Оборотный регистр хранит только суммы за периоды и понятия остатка не знает: продажи, выручка, план продаж. Ресурсы регистра накопления бывают только числами, потому что их складывают.

Измерения, ресурсы, реквизиты

Измерения задают разрезы учёта: товар, склад, партия. Ресурсы складываются: количество, сумма. Реквизиты хранятся в движении, но итоги не дробят: комментарий, строка документа, ответственный.

Каждое измерение умножает число строк в таблице итогов. Если сделать измерением «строку документа», итоги разрастутся до размера самих движений и перестанут ускорять что-либо. Порядок измерений задаёт индекс таблицы итогов, поэтому первыми ставят те, по которым чаще отбирают.

Движения и остаток

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

Четыре движения по складу Север и остаток после них:

Молоко: 10 − 4 − 3 = 3, хлеб 6. Платформа складывает приходы и вычитает расходы по каждому сочетанию измерений, а за счёт таблицы итогов не пересчитывает всю историю движений при каждом запросе.

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

Кто следит за минусом

Платформа примет любые движения, в том числе такие, после которых остаток станет отрицательным. Встроенного запрета нет. Контроль остатков пишут в коде проведения: записывают движения и запросом ищут минус по товарам документа, а чтобы параллельный документ не списал тот же остаток, ставят управляемую блокировку.

Вторая частая ошибка с записью: в документе стоит режим «Записывать выбранные», движения сформированы, а флажок Записывать = Истина у набора не поставлен. Документ проведётся, а в регистр ничего не попадёт.

Как отвечать: «Запретит ли платформа списать больше, чем есть на складе?»

Нет, регистр накопления примет любые движения, и остаток спокойно уйдёт в минус. Контроль пишу сам в проведении: после записи движений одним запросом проверяю остатки по товарам документа и при минусе ставлю Отказ. Чтобы два документа не списали один остаток одновременно, перед этим ставлю управляемую блокировку на товары и склады документа.

Правильный ответ «нет» многие не дают, а дальше кандидат сразу описывает рабочую схему контроля и думает о параллельных документах. Это мост к вопросам про блокировки.

На чём валят

  • −Делают измерением строку документа или комментарий. Итоги разрастаются до размера движений. Такие поля делают реквизитами.
  • −Пишут расход отрицательным приходом. Портятся обороты прихода. Расход пишут ДобавитьРасход().
  • −Считают, что платформа не даст уйти в минус. Встроенного контроля нет. Его пишут в проведении под управляемой блокировкой.
  • −Забывают Записывать = Истина при «Записывать выбранные». Движения не попадут в базу. Флажок ставят у каждого изменённого набора.

Проверь себя

Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.

  1. #oc_accum_reg1 / 5
    Может ли регистр накопления существовать без регистратора?
    A)Да, если он оборотный и пишется обработкой
    B)Нет, у каждой записи есть регистратор
    C)Да, если включить независимый режим записи
    D)Да, для записей ввода начальных остатков
    показать ответ и разбор
    +B)Нет, у каждой записи есть регистратор

    // разбор: Регистр накопления всегда подчинён регистратору: записи — это движения документа, по регистратору их удаляют и перезаписывают. Даже ввод начальных остатков делают документом. Независимого режима, как у регистра сведений, у накопления нет.

  2. #oc_accum_reg2 / 5
    Какого типа могут быть ресурсы регистра накопления?
    A)Только Число
    B)Число или Строка, как у реквизитов
    C)Любого типа, как у регистра сведений
    D)Число или ссылка на справочник
    показать ответ и разбор
    +A)Только Число

    // разбор: Ресурсы регистра накопления складываются в остатки и обороты, поэтому только числовые. Строки и ссылки, которые нужно хранить вместе с движением, кладут в реквизиты: они записываются, но в итоги не попадают.

  3. #oc_accum_reg3 / 5
    Как документу записать расход в регистр остатков «ТоварыНаСкладах»?
    A)ДобавитьРасход() в наборе движений
    B)Записать в приход отрицательное количество товара
    C)РегистрыНакопления.ТоварыНаСкладах.Списать()
    D)Удалить приходную запись
    показать ответ и разбор
    +A)`ДобавитьРасход()` в наборе движений

    // разбор: ДобавитьРасход() добавляет в набор движений строку с видом движения Расход, дальше заполняют период, измерения и ресурсы. Можно и Добавить() с явным ВидДвижения. Отрицательный приход формально уменьшит остаток, но испортит обороты прихода и отчёты.

  4. #oc_accum_reg4 / 5
    Номер документа-основания нужно хранить в движении, но остатки по нему не нужны. Что сделать полем регистра?
    A)Отдельный регистр
    B)Измерение
    C)Ресурс
    D)Реквизит
    показать ответ и разбор
    +D)Реквизит

    // разбор: Реквизит хранится в записи движения, но в таблицу итогов не попадает и разрез остатков не создаёт. Измерение «основание» размножило бы итоги на каждое основание, а ресурс должен быть числом. В отчёте по движениям реквизит виден.

  5. #oc_accum_reg5 / 5
    Чем оборотный регистр отличается от регистра остатков с точки зрения записи?
    A)Оборотный пишет только расход, приход ему не нужен
    B)Оборотный не хранит движения, только итоги периода
    C)Нет вида движения: записи — просто суммы оборота
    D)Оборотный пишется без регистратора, напрямую
    показать ответ и разбор
    +C)Нет вида движения: записи — просто суммы оборота

    // разбор: У оборотного регистра нет прихода и расхода: каждое движение — сумма, которая войдёт в оборот периода. Поэтому у него только таблица Обороты, а остатка нет. Записи движений он хранит так же, как регистр остатков, и тоже подчинён регистратору.

дальше

Теорию прочитал. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, бесплатная часть практики — одна сессия дня в сутки.