В процессе автоматизации учета работы транспортных средств часто возникает задача: перенести фиксацию пробега с ежемесячного ручного ввода в ПутевыхЛистах на ежедневную автоматическую загрузку данных с внешних трекеров. Разберем, почему попытка записи в регистр «без регистратора» — это путь к критическим ошибкам, и как построить архитектуру правильно.
Технически платформа 1С позволяет использовать НаборЗаписей для записи в любой регистр, включая те, что подчинены регистратору, не указывая сам документ. Однако опытные разработчики предостерегают от этого по нескольким причинам:
Это самое надежное решение для хранения «сырых» данных. Поскольку данные с трекеров приходят потоком, их не нужно «привязывать» к конкретному ПутевомуЛисту в момент поступления. Рассмотрим шаги реализации:
ДанныеТрекеров).Период (дата/время), Автомобиль (измерение) и ресурсы для хранения данных: Пробег, Координаты, ОстатокТоплива и т.д.Преимущество этого подхода в том, что данные хранятся в неизменном виде. Если вам потребуется проанализировать пробег за любой период, вы всегда сможете обратиться к этому регистру.
Если специфика вашей конфигурации требует наличия регистратора, не стоит портить старые документы. Создайте новый специализированный документ, который будет выполнять роль «технического» регистратора. Чтобы документ не перегружал систему, его можно сделать максимально простым:
В типовых конфигурациях существует документ КорректировкаЗаписейРегистров. Это легальный способ внести записи в любой регистр, если создание нового полноценного документа кажется избыточным. Это решение сохраняет прозрачность, так как запись будет видна в списке движений и понятно, что она была внесена программно или вручную как корректировка.
Чтобы отчеты работали корректно и не «зависали» при больших объемах данных, проанализируем следующие рекомендации:
Агрегация данных: Не заставляйте отчеты пересчитывать миллионы записей за каждый день. Создайте дополнительный регистр накопления (оборотный), где будут храниться ежедневные итоги пробега. В отчетах используйте соединение данных:
// Пример логики получения данных для отчета
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РС.Автомобиль,
| СУММА(РС.Пробег) КАК Пробег
|ИЗ
| РегистрСведений.ДанныеТрекеров КАК РС
|ГДЕ
| РС.Период МЕЖДУ &ДатаНачала И &ДатаКонца
|СГРУППИРОВАТЬ ПО
| РС.Автомобиль";
Если вы столкнулись с необходимостью автоматизации трекинга пробега, ни в коем случае не записывайте движения в регистр без регистратора. Лучшим решением будет:
ПутевойЛист, реализовать подтягивание итоговых данных из этого регистра.Такой подход позволит вам сохранить чистоту архитектуры, обеспечить легкую поддержку системы в будущем и избежать внезапных проблем с производительностью базы данных.