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

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

Мой шаблон не претендует на соответствие всем действующим нормам, а в первую очередь нацелен на кардинальное уменьшение времени, которое тратится на заполнение путевого листа.

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

Новый путевой лист с 2023 года

В настоящий момент, в 2023 году форма путевого листа может быть произвольной, но должна быть утверждена руководителем предприятия, и всё же в ней необходимо отразить определенную информацию, такую как:

  • Информацию о водителе

  • Данные о транспортном средстве

  • Данные о ТС

  • Срок действия путевого листа

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

Как работает таблица

Моя форма путевого листа доступна по ссылке. По ссылке откроется запрос на создание вашей копии. При согласии будут также созданы копии прикрепленного файла Apps Script и относящихся к нему функций генерации адресов.

Верхняя часть путевого листа. Красным выделены изменяемые поля
Верхняя часть путевого листа. Красным выделены изменяемые поля

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

  1. Информация о владельце транспортного средства: наименование, ИНН, ОГРН, адрес, телефон;

  2. Информация об автомобиле: модель, государственный регистрационный знак, идентификационный номер (VIN);

  3. Информация о водителе: фамилия имя отчество, номер водительского удостоверения.

Автоматизация начинается с первой даты выезда - ячейки B24 - как только вы введете эту дату таблица сама заполнит оставшиеся даты этого столбца рабочими днями - там прописана формула.

Нижняя часть путевого листа. Красным выделены изменяемые поля
Нижняя часть путевого листа. Красным выделены изменяемые поля

Нижняя часть путевого листа содержит очень важные исходные данные для автоматизации:

  1. Начальный километраж по одометру.

  2. Конечный километраж по одометру.

Как только вы заполните эти две ячейки таблица через формулы заполнит ежедневные показания одометра и дневной пробег - каждый день будет разный пробег, но в усредненных значениях. 

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

Самые нижние строчки, связанные с остатком топлива в баке и количеством заправленного топлива и на автоматизацию не влияют.

Как настроить случайное место назначения в нужном районе

После того как даты и времена заезда и выезда, а ещё показаниями одометра на каждый день заполнены переходим к случайным адресам. Здесь пригодятся функции Apps Script. 

В файл скриптов, привязанных к этой таблице, уже внесён следующий код обратного геокодирования (вычисления адреса по координатам) :
/**
 * Use Reverse Geocoding to get the address of
 * a point location (latitude, longitude) on Google Maps.
 *
 * =GOOGLEMAPS_REVERSEGEOCODE(latitude, longitude)
 * 
 * https://www.labnol.org/google-maps-sheets-200817
 * 
 * https://developers.google.com/apps-script/reference/maps/geocoder#setlanguagelanguage
 *
 * @param {String} latitude The latitude to lookup.
 * @param {String} longitude The longitude to lookup.
 * @return {String} The postal address of the point.
 * @customFunction
 */

const GOOGLEMAPS_REVERSEGEOCODE = (latitude, longitude) => {
    const {
        results: [data = {}] = []
    } = Maps.newGeocoder().setLanguage('ru').reverseGeocode(latitude, longitude);
    return data.formatted_address;
};

Скрипт позволит запускать формулу вида =GOOGLEMAPS_REVERSEGEOCODE(58,0205391879819; 56,2652395772995) которая возвращает адрес по координатам из гугл карт. Например, для этого запроса возвращается адрес Краснокамская ул., 20, Пермь, Пермский край, Россия, 614060.

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

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

Данный код позволяет получить случайную географическую точку рядом с заданной точкой, внутри определенного радиуса, например 2 километра.
/**
 * Get random geo point [latitude, longitude] within some distance from specified geo point (lat, long)
 *
 * Points will be uniformly-distributed on multiple calls.
 *
 * @param lat Latitude in degrees
 * @param lng Longitude in degrees
 * @param distance Distance in meters to limit point distribution to.
 *                 If negative value is provided, points will be generated on exact distance (e.g. on circle border).
 * @returns {*[]} Array with [latitude, longitude]
 */

var getRandomLocation = function(lat, lng, distance = 10000) {
    // Convert to radians
    lat *= Math.PI / 180;
    lng *= Math.PI / 180;

    var radius;

    // Distance should be set in meters, negative for exact distance
    if (distance < 0) {
        // Exact distance
        radius = Math.abs(distance);
    } else {
        // Get uniformly-random distribution within peovided distance
        // http://stackoverflow.com/questions/5837572/generate-a-random-point-within-a-circle-uniformly
        radius = Math.random() + Math.random();
        radius = radius > 1 ? 2 - radius : radius;
        radius *= distance ? distance : 10000; // multiply by distance meters
    }

    // Convert radius from meters to degrees to radians
    // 111319.9 meters = one degree along the equator
    radius /= 111319.9;
    // Correction for the actual distance from equator is NOT needed here
    // radius *= Math.cos(lat);
    // Convert to radians
    radius *= Math.PI / 180;

    // Random angle
    var angle = Math.random() * Math.PI * 2;

    // Get a point {nLat,nLng} in a distance={radius} out on the {angle} radial from point {lat,lng}
    // From Aviation Formulary V1.46 By Ed Williams:
    // → http://williams.best.vwh.net/avform.htm#LL
    // → ftp://ftp.bartol.udel.edu/anita/amir/My_thesis/Figures4Thesis/CRC_plots/Aviation%20Formulary%20V1.46.pdf
    // → https://github.com/arildj78/AvCalc/blob/master/avform.txt
    // [section "Lat/lon given radial and distance"]
    var nLng,
        nLat = Math.asin(Math.sin(lat) * Math.cos(radius) + Math.cos(lat) * Math.sin(radius) * Math.cos(angle));
    if (Math.cos(nLat) == 0) {
        nLng = lng;
    } else {
        nLng = (lng - Math.asin(Math.sin(angle) * Math.sin(radius) / Math.cos(nLat)) + Math.PI) % (Math.PI * 2) - Math.PI
    }

    // Convert to degrees
    nLat *= 180 / Math.PI;
    nLng *= 180 / Math.PI;

Пошаговое руководство по заполнению

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

Выбор географических координат для рандомной генерации других точек в округе
Выбор географических координат для рандомной генерации других точек в округе

Далее перейдите в гугл скрипты - для этого выбирайте пункт меню Apps Script.

Перейдите в пункт меню Apps Script
Перейдите в пункт меню Apps Script

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

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

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

Результат успешной генерации случайных адресов
Результат успешной генерации случайных адресов

После этого все места назначения на указанной вкладке будут заполнены случайными координатами, которые при помощи формулы обратного геокодирования будут сразу преобразованы в адреса.

Что делать после заполнения данных

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

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

Вставка формул обратно в виде обычного текста
Вставка формул обратно в виде обычного текста

Итог

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

  • начального и конечного показания одометра автомобиля;

  • задания точного района, где эксплуатируется этот автомобиль.

Когда начальные данные уже заданы, то следующий месяц можно полностью заполнить данными меньше чем за минуту.

Автор: Михаил Шардин,

17 января 2023 г.

Комментарии (13)


  1. abNomen
    17.01.2023 08:39
    +2

    Ну вы же сами пишете, что путевой лист является основанием для списания топлива в бух и налоговом учете. При этом место назначения - некое рандомное место, и у проверяющего сразу должен возникнуть вопрос, какое экономическое обоснование прибыть в это некое место. Так же автомобиль у вас с утра выехал, приехал куда-то и не вернулся. Было бы более правильным создать некое количество мест, в которые автомобиль может ездить и из них рандомом выбирать + добавить возвращение на первоначальное место.


    1. empenoso Автор
      17.01.2023 08:40

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


      1. aborouhin
        17.01.2023 14:02
        +1

        Не будут смотреть по камерам, проверять же налоговая будет, у них ни доступа к камерам, ни желания на это время тратить. Просто возьмут рандомный день и адрес и спросят - мил человек, что конкретно ты на этом адресе в этот день делал? Покажи бумажку. Заказ доставлял - где этот заказ? И после фиаско с парой случайно выбранных адрсов - снесут из расходов все затраты по таким путевым листам (топливо, а ещё ТО автомобиля). Оно, конечно, есть шанс, что прокатит, но если выездная проверка будет и ничего серьёзнее не найдут - то и до путевых листов докопаются.


        1. empenoso Автор
          17.01.2023 14:54

          Как раз вот и будут. Лизинговые машины обладают какой-то особенной привлекательностью для налоговой.

          И путевые листы ведь в более общем плане - не только курьеры. Может работы какие-то проводились на сетях связи например.


          1. aborouhin
            17.01.2023 15:12
            +1

            Как раз вот и будут.

            У Вас есть конкретные примеры? Не в рамках уголовного дела, а просто в ходе проверки? Я с трудом себе представляю, чтобы ИФНС сначала писала запрос в МВД о предоставлении выписки из данных системы "Поток", потом корпела над картой, сопоставляя точки в путевых листах с точками из этой выписки... Скорее на нестыковках во внутренних документах поймают (маршрут в листе в день N в одной части города, а чек с заправки в тот же день - с совершенно другой).

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

            Может работы какие-то проводились на сетях связи например.

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

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

            P.S. Нашёл несколько дел, когда налоговая реально данные "Потока" запрашивала и на них ссылалась. А53-9473/2021, А54-9379/2021,  А63-12114/2014. Но там возили щебень самосвалами (по первым двум делам) и алкоголь (по третьему) - и во всех случаях налоговой оспаривалось не только списание топлива, но и фиктивность поставок самого этого щебня/вина в целом, т.е. смысл заморочиться у них был.


            1. empenoso Автор
              17.01.2023 15:56

              У вас очень осмысленные ответы. Спасибо вам.

              Особенно согласен "дурацким требованиям - дурацкое исполнение".


    1. empenoso Автор
      17.01.2023 08:44

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


  1. HiLander
    17.01.2023 09:52
    +1

    Много лет назад делал для себя подобную штуку на дельфях. Выбираешь месяц - он автоматом прописывает количество дней убирая выходные. Прописываешь общий расход топлива (сколько талончиков надо списать), он автоматически разбрасывает случайным километражом/литражом по всем дням. Итог выгружался в эксель готовый для печати (двусторонней). Подписи в шапке настраивались опционально. Место назначения прописывал универсально "по объектам" ибо работал снабженцем и поставщиков было 100500 и возить надо было на десяток разных объектов (в т.ч. на удалении до 300Км). Ни у кого вопросов не возникало ни разу... Если интересно могу поискать исходники.


    1. empenoso Автор
      17.01.2023 10:50

      Интересный опыт, спасибо!


  1. Dart55
    17.01.2023 13:26

    Я бы хотел написать что гугл скрипты это классно и до подделки путевых листов мне нет дела, но вы ведь знаете как это влияет на безопасность участников дорожного движения.


    1. empenoso Автор
      17.01.2023 13:40
      +1

      А как это влияет на безопасность участников дорожного движения?


  1. Vlad_VM333
    18.01.2023 07:11
    +1

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

    Замечания по шаблону:

    -"Приказ № 368 не содержит указаний на максимальный срок действия путевого листа, однако учитывая приведенные выше правила, можно сделать вывод, что закон позволяет оформлять один путевой лист сразу на несколько дней или недель, но только в том случае, если рейс длится весь срок действия путевого листа. Под рейсом в данном случае следует понимать поездку с момента выезда транспортного средства с места стоянки до момента его возвращения на стоянку", т.е. в случае возвращения ТС на место базирования обязательно оформлять новый путевой лист!

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

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


    1. empenoso Автор
      18.01.2023 07:12

      Хорошие замечания, спасибо!