Как правильно выбрать регистр для учета пробега автомобиля в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет
← На главную

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

Давайте подробно разберем эту ситуацию, проанализируем возможные варианты реализации и выясним причины частых ошибок, с которыми сталкиваются начинающие разработчики.

Анализ задачи и постановка бизнес-логики

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

  1. Регистрация транспортного средства в автопарке с фиксацией начального пробега.
  2. Вывод автомобиля на маршрут (документ поездки), который добавляет пройденные километры к текущему значению.
  3. Если накопленный пробег превышает максимально допустимый (межсервисный интервал), систему нужно обнулить.

Для решения этой задачи нам предстоит выбрать между Регистром Сведений (РС) и Регистром Накопления (РН). На практике, в профессиональных типовых решениях (например, в 1С:УАТ), используется комбинированный подход. Рассмотрим подробнее каждый вариант.

Вариант 1: Использование Регистра Сведений для показаний одометра

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

Структура такого регистра будет выглядеть так:

При использовании этого подхода разработчики часто сталкиваются с критической ошибкой. При попытке провести второй документ по одному и тому же автомобилю система выдает предупреждение: «Запись с такими ключевыми полями существует». Выясним причину этой ошибки. Она возникает, если в свойствах регистра сведений не включена периодичность. В непериодическом регистре для одного автомобиля можно сохранить значение лишь один раз. Чтобы документы могли регулярно обновлять пробег, регистр обязательно должен быть периодическим. Наилучшей практикой здесь будет установка периодичности ПоПозицииРегистратора. Это жестко привяжет показания к конкретному документу и точному времени его проведения.

Для извлечения текущих показаний пробега из такого регистра мы будем использовать виртуальную таблицу:

РегистрСведений.ПробегАвтомобилей.СрезПоследних

Вариант 2: Использование Регистра Накопления (Остатки) для логики обнуления

Теперь проанализируем условие: «если пробег больше максимального, нужно его обнулить». Скорее всего, речь идет о контроле пробега до планового технического обслуживания (ТО). Для алгоритмов, подразумевающих накопление ресурса и последующее его списание (обнуление), Регистр Сведений не подходит. Здесь нам понадобится Регистр накопления с видом «Остатки».

Создадим следующую структуру:

Как будет работать алгоритм проведения в этом случае? Разберем по шагам:

  1. Когда машина выполняет рейс (документ «Путевой лист» или «Маршрут»), документ делает движение типа Приход. Если машина проехала 200 км, остаток ресурса ПробегДоТО увеличивается на 200.
  2. При каждом проведении поездки система может программно проверять текущие остатки. Для этого обращаются к таблице РегистрНакопления.ПробегТСТК.Остатки.
  3. Если накопленный остаток достигает установленного лимита (например, 10 000 км), создается документ «Проведение ТО» или «Сброс счетчика». Этот документ делает движение типа Расход ровно на накопленную сумму (10 000 км).
  4. В результате остаток снова становится равен нулю, и цикл накопления начинается заново.

Пример кода формирования движения прихода для документа маршрута:


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

Вариант 3: Оборотный Регистр Накопления для аналитики

Если бы задача требовала получения суммарных данных за определенный период (например, сколько километров проехал каждый автомобиль за прошедший месяц для расчета зарплаты или списания ГСМ по нормам), нам бы потребовался Регистр накопления с видом «Обороты».

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

Оптимальная комплексная архитектура системы

Давайте сведем все воедино и посмотрим на пример идеальной архитектуры для подобной задачи, к которой не будет вопросов ни у преподавателей на защите диплома, ни у реальных заказчиков:

  1. Документ «Ввод начальных остатков». Применяется один раз при регистрации автомобиля в парке. Записывает изначальный пробег (например, 50 000 км) в Регистр Сведений.
  2. Документ «Путевой лист». При проведении делает сразу два движения:
    • В Периодический регистр сведений записывается новое абсолютное значение на одометре (старое значение + пройденный путь по документу).
    • В Регистр накопления (Остатки) записывается Приход на количество пройденных километров для контроля ТО.
  3. Документ «Техническое обслуживание». Делает движение Расход по Регистру Накопления, обнуляя счетчик до следующего ремонта, при этом Регистр Сведений с абсолютным пробегом этот документ не трогает.

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

← На главную