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

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

Разработка системы учета транспортных средств (ТС) в среде «1С:Предприятие 8.3» требует понимания основ архитектуры метаданных. Задача фиксации пробега и расхода топлива — это классический пример управленческого учета, где важно не только записывать данные, но и эффективно их извлекать для формирования отчетности, такой как «Эксплуатационная карта ТС» с нарастающим итогом. Рассмотрим пошагово, как правильно спроектировать этот функционал.

Выбор архитектурного решения: Документы или Регистры?

В процессе обсуждения на форумах часто возникает вопрос: можно ли строить отчеты напрямую по документам? Разберем, почему это решение является тупиковым. Документ — это объект для регистрации события (факта расхода или заправки). Запрос к документам для получения итогов за несколько лет заставит систему перебирать все реквизиты и табличные части, что неизбежно приведет к деградации производительности.

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

Шаг 1. Настройка справочников

Прежде всего, проанализируем структуру справочника ТранспортныеСредства. Нам понадобятся следующие поля:

  1. ГосНомер (Строка)
  2. ИнвентарныйНомер (Строка)
  3. ТипТоплива (Ссылка на перечисление или справочник ВидыГСМ)
  4. НормаРасходаЗима и НормаРасходаЛето (Число) — для последующей автоматизации расчетов.

Шаг 2. Проектирование регистра накопления

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

Настроим структуру регистра УчетПробегаИГСМ:

Шаг 3. Создание документа «Учет ГСМ и пробега»

Рассмотрим логику документа. Он должен создаваться ежемесячно для каждой машины или содержать табличную часть со списком всех ТС. Для удобства пользователя создадим документ, где в шапке указывается ПериодРегистрации (месяц), а в табличной части — список авто.

Реквизиты табличной части:

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


Процедура ОбработкаПроведения(Отказ, Режим)
    Для Каждого ТекСтрока Из СписокАвто Цикл
        Движение = Движения.УчетПробегаИГСМ.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход; // Для регистра остатков
        Движение.Период = Дата;
        Движение.ТранспортноеСредство = ТекСтрока.ТранспортноеСредство;
        Движение.Пробег = ТекСтрока.ПробегЗаМесяц;
        Движение.РасходТоплива = ТекСтрока.РасходФактический;
    КонецЦикла;
КонецПроцедуры

Шаг 4. Контроль последовательности данных

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

Рассмотрим пример функции получения последнего пробега:


Функция ПолучитьПоследнийПробег(ВыбАвто)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	УчетПробегаИГСМ.Пробег КАК Пробег
        |ИЗ
        |	РегистрНакопления.УчетПробегаИГСМ КАК УчетПробегаИГСМ
        |ГДЕ
        |	УчетПробегаИГСМ.ТранспортноеСредство = &ТранспортноеСредство
        |УПОРЯДОЧИТЬ ПО
        |	УчетПробегаИГСМ.Период УБЫВ";
    
    Запрос.УстановитьПараметр("ТранспортноеСредство", ВыбАвто);
    // ... выполнение запроса и возврат значения
КонецФункции

Шаг 5. Формирование «Эксплуатационной карты» в СКД

Теперь разберем, как включить данные в отчет с нарастающим итогом. Самый эффективный способ — использовать Систему компоновки данных (СКД). В СКД есть мощный механизм работы с ресурсами.

Для реализации нарастающего итога пробега в настройках СКД на закладке «Ресурсы» можно использовать выражение с функцией ВычислитьВыражение. Посмотрим на пример выражения для поля ПробегСНачалаЭксплуатации:

ВычислитьВыражение("Сумма(Пробег)", , "Группировка", "Первая", "Текущая")

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

Рекомендации по оптимизации и развитию

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

  1. Автоматизация норм: В документе можно добавить кнопку «Рассчитать по норме». Система возьмет пробег, умножит на базовую норму из справочника ТС и применит поправочные коэффициенты (например, зимнюю надбавку +10%).
  2. Интеграция с мониторингом: Если на автомобилях установлены GPS-трекеры, данные о пробеге можно загружать автоматически через API сервисов мониторинга, сравнивая их с данными, введенными вручную. Это позволит выявить приписки пробега или сливы топлива.
  3. Использование характеристик: Если виды топлива часто меняются (например, переход на другой октановый номер), лучше использовать характеристики номенклатуры для более детального учета ГСМ в разрезе партий или поставщиков.

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

← На главную