# Автотранспорт

## Форма для ввода пробега техники

Документ «Форма для ввода пробега техники» предназначен для отражения всех маршрутов движения техники в течении отчетного периода (месяца) и формирования путевых листов на основании введенной информации. 

![Рисунок 1 Реестр документа «Форма для ввода пробега техники»](./image_1.png)

Для формирования документа необходимо указать в шапке:

- Дату документа, 
- Период с / по,
- Автомобиль,
- Водитель,
- Показания одометра на начало,
- Показания одометра на конец,
- Остаток ГСМ на начало,
- Статус документа. 

![Рисунок 2 Форма документа «Форма для ввода пробега техники»](./image_2.png)

При вводе периода и выборе автомобиля  автоматически заполняются поля : «показания одометра на начало», «остаток ГСМ на начало» и «заправлено». 

Данные для полей «показания одометра на начало», «остаток ГСМ на начало» подтягиваются из последнего путевого листа с датой выезда – до начала указанного периода. Есть возможность редактировать эти поля вручную.

Данные для поля «заправлено» подтягиваются из раздаточных ведомостей по указанному автомобилю с датами заправки - в пределах указанного периода.

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

При изменении значений полей «Остаток ГСМ на начало», «Заправлено», «Расход по норме» автоматически рассчитывается значение поля «Остаток ГСМ на конец».

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

В строках, которыми должны будут начинаться путевые листы, необходимо установить флаг в столбце «Стартовый маршрут». 
В строках, которыми должны будут заканчиваться путевые листы, необходимо установить флаг в столбце «Финишный маршрут». 

После заполнения документа необходимо нажать кнопку "Сформировать ПЛ" на верхней панели инструментов. В результате будут сформированы путевые листы по указанному автомобилю и указанному водителю в рабочие дни указанного периода с указанными маршрутами. 

Для каждого путевого листа маршруты подбираются по следующему алгоритму: находится строка, у которой установлен флаг в столбце «Стартовый маршрут», вставляется в путевой лист первым нарядом в таблицу «Заказчики». Из этой строки находится конечная точка (столбец «Куда»), назовем её «Точка 2». Далее ищется строка, в которой в столбце «Откуда» - значение нашей «Точки 2» и не установлен флаг «Финишный маршрут». Если находится такая строка, то вставляется в путевой лист вторым нарядом. Из неё находится «Точка 3». И так далее, пока цикл не дойдёт до строки с установленным флагом «Финишный маршрут». Если не нашлась такая строка, то ищется строка , в которой в столбце «Откуда» - значение нашей «Точки 2» и установлен флаг «Финишный маршрут». Если находится такая строка, то вставляется в путевой лист вторым, последним нарядом.  

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

Все строки из раздаточных ведомостей по указанному автомобилю за указанный период будут вставлены в путевые листы с соответствующими датами в таблицу заправок. Если в раздаточной ведомости указанная дата заправки является  выходным или праздничным днём, то эти строки будут вставлены в путевые листы с ближайшими последующими датами. Если же таковых не будет, тогда строки из раздаточных ведомостей будут вставлены в путевые листы с ближайшими предыдущими датами. Все заправки в пределах каждого путевого листа группируются по видам топлива и общее количество каждого вида топлива записывается в столбец «Заправка» в таблицу «Движение ГСМ» в строку с соответствующим видом топлива.

В сформированных путевых листах автоматически рассчитываются нормы расхода топлива для каждого наряда и общее количество нормативного расхода топлива  записывается в таблицу «Движение ГСМ» в столбцы «Расход факт» и «Расход норма».

В каждом путевом листе в таблице «Движение ГСМ» по каждому виду топлива рассчитывается «Остаток топлива при заезде» по формуле : «Остаток топлива при заезде» = «Остаток топлива при выезде» - «Расход факт» + «Заправлено».

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