Как в 1С связать расход материалов с меняющимся местоположением объекта?

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

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

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

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

Рассмотрим рекомендуемую структуру объектов конфигурации.

  1. Регистр сведений "Местоположение Объектов"

    Этот регистр будет хранить историю перемещений нашей техники ("бортов"). Сделаем его периодическим.

    • Тип: Регистр сведений.
    • Периодичность: По позиции регистратора или по секунду. Это позволит отслеживать несколько перемещений в течение дня.
    • Измерения: Борт (ссылка на справочник с техникой).
    • Ресурсы: Группа, Направление, Ответственный, Подразделение. Все те аналитики, которые определяют "местоположение".
    • Регистратор: Документ "Перемещение борта".
  2. Регистр накопления "Расход Материалов"

    Этот регистр будет максимально простым. Его задача — фиксировать только сам факт расхода.

    • Тип: Регистр накопления.
    • Вид регистра: Обороты.
    • Измерения: Борт, Номенклатура (топливо, ГСМ и т.д.).
    • Ресурсы: Количество, Сумма.
    • Регистратор: Документы "Списание ТМЦ", "Расход ГСМ" и т.п.

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

Построение отчета: связываем данные

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

Логика запроса будет следующей:

  1. Берем данные из виртуальной таблицы оборотов регистра накопления РасходМатериалов за нужный нам период. Отсюда мы получим информацию о том, что, когда и в каком количестве было списано по каждому борту.
  2. Для каждой записи о расходе нам нужно узнать, где находился борт в момент списания. Для этого используем виртуальную таблицу СрезПоследних регистра сведений МестоположениеОбъектов. Мы получим срез данных о местоположении на дату документа списания (Период).
  3. Соединяем эти две таблицы по общему измерению Борт.

Примерная структура запроса может выглядеть так:


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

Важный момент: для корректного соединения оборотов за период со срезом данных лучше использовать соединение с виртуальной таблицей РегистрНакопления.РасходМатериалов.Обороты, где периодичность установлена в "Регистратор" или "Секунда". Затем для каждой записи оборотов получать срез на ее Период.

В итоге для каждой операции списания система автоматически "подтянет" актуальное на тот момент местоположение, и вы сможете группировать затраты по нужным аналитикам.

Решение сложных случаев

В реальной жизни возникают ситуации, которые усложняют учет. Проанализируем самые частые из них.

1. Один документ списания за длительный период

Проблема: Пользователь вводит один документ списания ГСМ в конце месяца, а за этот месяц техника успела поработать в десяти разных местах с разными бюджетами. На какую локацию отнести весь этот расход?

Решение 1 (Организационное — самое правильное): Изменить бизнес-процесс. Документы расхода должны вводиться оперативно и отражать работу на конкретном объекте. Например, по итогам смены, путевого листа или еженедельного отчета. Это обеспечит максимальную точность данных.

Решение 2 (Техническое — если процесс не изменить): Реализовать механизм пропорционального распределения.

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

Пример: За месяц списано 300 литров топлива. Техника 10 дней была в "Локации А" и 20 дней в "Локации Б". На "Локацию А" будет отнесено 100 литров (300 * 10/30), а на "Локацию Б" — 200 литров (300 * 20/30). Этот алгоритм требует более сложного запроса, но позволяет получить приемлемый результат даже при неидеальном вводе первички.

2. Остаток топлива в баке при переезде

Проблема: В Мухосранске в бак залили топливо за счет одного бюджета. Затем технику с полным баком перевезли в Бобруйск, где она начала работать за счет другого бюджета, расходуя "мухосранское" топливо. Как это корректно учесть?

Решение: Если такая точность необходима, придется усложнить модель учета и внедрить партионный учет в разрезе местоположений.

  1. Регистр накопления РасходМатериалов нужно будет сделать регистром остатков, а не оборотов.
  2. В него добавляется измерение, характеризующее место заправки/бюджет, например, Местоположение.
  3. При переезде техники с остатком топлива в баке оформляется специальный документ "Внутреннее перемещение ТМЦ". Этот документ делает расход по старому местоположению (например, "Бюджет Мухосранска") и приход на новое ("Бюджет Бобруйска").

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

← На главную