Добрый день! В этой статье рассмотрим вариант по автоматизированной проверке расчетов в 1С с использованием инструмента Vanessa automation.

Думаю, что автоматизация проверки расчетов - довольно интересная тема для рассмотрения. Потому-что, в учетных системах (таких как 1С: Предприятие) довольно много разнообразных расчетов - таких как налоги, зарплата, страховые взносы и прочие. Для этого используются различные формулы и результаты округляются по определенным правилам. Также существуют различные граничные значения - к примеру прогрессивная шкала НДФЛ. Поэтому эти проверки очень хочется автоматизировать - чтобы написанный вами сценарий работал за вас.

Постановка задачи:

Сделать сценарий в Vanessa Automation, который бы проверял корректность расчета заработной платы в документе Начисление зарплаты и взносов.

В чем сложность?

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

В самом простом случае получится такая формула:

Зарплата = (Оклад / Число Рабочих Дней В Месяце) х Число ОтработанныхДнейЗаМесяц

Получается, что нужно знать три переменные - оклад, число рабочих дней в месяце и число отработанных дней сотрудником за месяц. И мы сможем получить результат. Вроде бы все довольно просто?

К чему может привести ошибка в расчете?

Ошибка же в расчете в документе Начисление зарплаты и взносов приведет к тому, что пользователям придется вручную пересчитывать все суммы. Это довольно объемная работа, которая масштабируется на количество сотрудников в организации. Поэтому такие ошибки лучше не пропускать при тестировании.

Также нужно иметь ввиду, что сотрудник может работать на не полную ставку. Или-же получить исполнительный лист - по которому будет вычитаться определенная сумма. Или-же иметь какие-то вычеты по НДФЛ. Уже получается довольно много неизвестных параметров.

Но все эти моменты должны учитываться при расчете зарплаты в конфигурации 1С ЗУП. Для этого используется один документ Начисление зарплаты и взносов, который всегда должен все учитывать и давать правильный результат.

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

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

Документ Начисление зарплаты и взносов
Документ Начисление зарплаты и взносов

В итоге получается — что для проверки расчета зарплаты в документе Начисление зарплаты и взносов необходимо знать формулу для расчета, и знать данные для расчета. Тогда получится написать сценарий который будет производить расчет и выдавать результат проверки — соответствует ли фактическая сумма ожидаемой?

Решение

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

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

В таком случае получается, что мы знаем все нужные значения переменных для расчета.

Документ Прием на работу
Документ Прием на работу

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

Далее создаем новый документ Начисление зарплаты и взносов по нашему подразделению. Нажимаем кнопку Заполнить — и в табличной части документа должна быть 1 запись по нашему сотруднику.

Для раскрытия в табличной части всех колонок — используется следующее условие

Раскрытие табличной части
Раскрытие табличной части

Далее в переменные мы сохраняем данные по расчету из табличной части.

Табличная часть документа Начисление зарплаты и взносов.
Табличная часть документа Начисление зарплаты и взносов.

Далее проверки расчета используется следующая команда — само вычисление происходит на сервере.

Проверка расчета данных из документа Начи
Проверка расчета данных из документа Начи

Надеюсь, что тут ничего сложного для вас нет. Сохраненные переменные преобразуются в числа для расчета. Далее в строке 914 и 915 производим расчет зарплаты и НДФЛ. В строке 917 проверяем есть ли какая то разница между суммой, что рассчитано в документе Начисление зарплаты и суммой при расчете в тестовом сценарии.

Функция Окр() — нужно для округления расчетов, т.к. зарплата рассчитывается до копеек — поэтому нужно оставить 2 знака после запятой. А НДФЛ рассчитывается до рубля, поэтому нужно оставить 0 знаков после запятой.

И дальше, в условии проверяем, что если разница равно 0 по в переменную Разница расчета сохраняем строку Верно. Иначе сохраняем значение Разницы.

Дальше в самом сценарии выполняется следующее условие которое выполняется, если переменная КорректностьРасчета неравна значению «Верно». И если это так вызывается исключение с нужным нам сообщением.

Условие по корректности расчета
Условие по корректности расчета

Далее, в сценарий можно добавить проверки на значения рассчитанного НДФЛ в документе Начисление ЗП и Взносов. И еще если от зарплаты отнять НДФЛ — то получим сумму к выплате, которая должна быть в Ведомости на выплату.

Вывод

Вот, таким способом можно автоматизировать проверки расчетов в документе Начисление зарплаты и взносов. Т.е. если нужно автоматизировать проверки расчетов в 1С с помощью инструмента Vanessa Automation - то нужно знать формулу по которой происходит расчет, знать данные для расчета и создать сценарий, который будет производить вычисления и проверять данные на соответствие.

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

На этом все — спасибо за внимание!

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


  1. vis_inet
    19.01.2025 16:41

    Хорошо бы для начала описать решаемую проблему.

    Вы проверяете рельзтат расчёта в типовой конфигурации?

    Не доверяете вендору?


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

      Это статья. Решаемая проблема довольно обширна.

      А вопрос вопрос не доверия вендору не обсуждается.


      1. DvoiNic
        19.01.2025 16:41

        Это статья.

        и для чего эта статья?

        Даже зная, что такое VA - я ничего не понял из статьи. Пример взят, на мой взгляд, весьма идиотический - "проверить результат простейшего расчета в типовой конфиге". В общем, ценность статьи - имхо, отрицательная. После таких статей 1с-ников и начинают считать дебилами.


        1. Petr_Strelyaev Автор
          19.01.2025 16:41

          Да, взят самый простой пример - и что? Зачем делать сложный?

          Кто начинает считать 1с-ников "дебилами"?


    1. ikbarinov
      19.01.2025 16:41

      Вендору верить опасно. ) проверено.


      1. Petr_Strelyaev Автор
        19.01.2025 16:41

        Доверяй, но проверяй)


  1. ulovka22
    19.01.2025 16:41

    А как проверить расчет для проверки расчета?


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

      Это можно сделать только перепроверив расчет.


  1. Gippz
    19.01.2025 16:41

    Решаем выдуманные проблемы без понимания БП. Затем такие тестировщики однажды узнают, что бывают вычеты по НДФЛ.


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

      Похоже ты читал статью не внимательно. В ней это упоминается.

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

      В целом это можно рассмотреть в отдельной статье.


      1. DvoiNic
        19.01.2025 16:41

        В целом это можно рассмотреть в отдельной статье.

        "горшочек, не вари!"©


      1. DvoiNic
        19.01.2025 16:41

        В целом это можно рассмотреть в отдельной статье.

        "горшочек, не вари!"©


  1. Alex65rus
    19.01.2025 16:41

    Выглядит довольно бессмысленно. Сценарий написан под сферического коня в вакууме. НДФЛ, например, имеет прогрессивную ставку, расчёт в пределах налогового периода и вычеты к доходам. Умножить на 0,13 для проверки не даст примерно ничего.


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

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

      Думаю, что прогрессивную шкалу НДФЛ и как автоматизировать ее проверки лучше рассмотреть в отдельной статье.


      1. Alex65rus
        19.01.2025 16:41

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

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


        1. Petr_Strelyaev Автор
          19.01.2025 16:41

          "кажется не очень нужным" - а я думаю, что нужно.

          Конечно, можно все считать вручную с помощью калькулятора, или например на листке бумаги в столбик. Кому как удобно)

          Но, я думаю, что если можно автоматизировать проверку - то это надо делать.


          1. DvoiNic
            19.01.2025 16:41

            а как вы проверяете правильность умножения?


            1. Petr_Strelyaev Автор
              19.01.2025 16:41

              Не, совсем понял вопрос.

              Но, если нужно проверить какой-то вычисление - то нужно его повторить и сравнить со своим результатом.


              1. DvoiNic
                19.01.2025 16:41

                повторяю вопрос: как вы проверяете правильность умножения? Правильно ли получен результат от, скажем, умножения начисленного на 0.13? Правильно ли округлилось в расчете? а то мало ли...


                1. Petr_Strelyaev Автор
                  19.01.2025 16:41

                  Да, вопрос очень "интересный".

                  А вычислить нужно один раз или много?)


                  1. DvoiNic
                    19.01.2025 16:41

                    а нужно протестировать нужное количество раз (и протестировать, нужное ли количество раз мы протестировали).

                    кстати, а вы этот свой тест однократно запускаете? а то вдруг результаты при втором расчете (или при 53-м) изменятся.... Или со временем изменяются. мало ли... сегодня программа правильно посчитала, а завтра результат изменился...


                    1. Petr_Strelyaev Автор
                      19.01.2025 16:41

                      если нужное количество раз - то надо писать алгоритм.

                      Запускать автотесты нужно каждый релиз (сборку).

                      А с чего бы должны изменяться результаты во времени?)

                      Может быть вы куда то летите?) С каким ускорением?)


                      1. DvoiNic
                        19.01.2025 16:41

                        если нужное количество раз - то надо писать алгоритм.

                        так почему вы его не написали, и ограничиваетесь однократной проверкой типового кода?

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

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

                        Да, кстати, а как вы тестируете результаты тестов? вдруг типовая конфигурация посчитала правильно, а ваш тест кривой?


                      1. Petr_Strelyaev Автор
                        19.01.2025 16:41

                        "а с чего они не должны изменяться? " - приведи пример.

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


                      1. vis_inet
                        19.01.2025 16:41

                        "а с чего они не должны изменяться? " - приведи пример.

                        Это имеет смысл.

                        Зависимость может быть от даты, например.

                        Особенно в зарплатных расчётах, как в вашем примере.


                      1. Petr_Strelyaev Автор
                        19.01.2025 16:41

                        "Зависимость может быть от даты, например." - имеется ввиду, что у каждого документа есть дата, так?

                        И получается, что есть историческая последовательность документов и каждый новый документ должен учитывать документы заведенные ранее?


                      1. vis_inet
                        19.01.2025 16:41

                        Нет, алгоритм расчёта может зависеть от даты документа.

                        Например, в зависимости от каких-либо НПА.


                      1. DvoiNic
                        19.01.2025 16:41

                        сегодня НДС 18%, а завтра 20%. Сегодня НДФЛ 13%, завтра 15%. Или прогресссивный (и зависящий от предыдущих). Или вычет изменился. а вычет зависит от даты рождения ребенка. и т.д.

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


                      1. Petr_Strelyaev Автор
                        19.01.2025 16:41

                        Вот, мне совсем не понятно что ты пишешь.

                        Что значит "Сегодня НДФЛ 13%, завтра 15%."? - Это как?

                        Ставка НДФЛ зависит от дохода физ лица - а не от "Сегодня" или "завтра".


                      1. DvoiNic
                        19.01.2025 16:41

                        Вот, мне совсем не понятно что ты пишешь.

                        Ничего удивительного. Если бы было понятно - ты б не писал такую статью :-)

                        Это так. в 2019 - 13, а в 2025 при том же доходе - 15. и сегодня по доходу с начала года удерживаем 13, а завтра, в новом месяце, уже больше.


                      1. Petr_Strelyaev Автор
                        19.01.2025 16:41

                        Вот, статья. Почитай. https://www.nalog.gov.ru/rn05/news/activities_fts/15068109/

                        "сегодня по доходу с начала года удерживаем 13, а завтра, в новом месяце, уже больше. " - Если физ лицо сегодня получило доход в 3 млн рублей, то какой НДЛФ должен быть удержан?


  1. ulovka22
    19.01.2025 16:41

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


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

      В том то и дело, что много факторов влияющих на расчет.

      Но, если известна формула и известны переменные (значения) - то почему это не сделать автоматизированный сценарий?


      1. ulovka22
        19.01.2025 16:41

        Кажется, что "много факторов" и "известна формула" не сочетаются вместе


        1. Petr_Strelyaev Автор
          19.01.2025 16:41

          В статье я рассмотрел самый простой пример расчета ЗП.

          Заранее подумал, что если расписывать все факторы (вычеты, исполнительные листы, неполные ставки) - то получится очень запутанно.

          А чем же не сочетаются "много факторов" и "известна формула"?

          Чем больше факторов - тем более сложная формула для вычисления.


          1. ulovka22
            19.01.2025 16:41

            Кажется, я промахнулся и написал ответ комментарием к статье


  1. ulovka22
    19.01.2025 16:41

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

    Чтобы подтвердить правильность тестовых данных, нужен такой же объем тестирования, как и для расчетов в 1С.


    1. Petr_Strelyaev Автор
      19.01.2025 16:41

      Можно не знать правильное решение задачи заранее - главное двигаться в нужном направлении. Итеративный подход дает хорошие результаты.


      1. ulovka22
        19.01.2025 16:41

        Так в данном случае направление неизвестно :)


        1. Petr_Strelyaev Автор
          19.01.2025 16:41

          Возможно, с первого взгляда может быть ничего неизвестно.

          Главное начать. Можно еще немного подумать :-D


  1. Niki98
    19.01.2025 16:41

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


    1. vis_inet
      19.01.2025 16:41

      Вы поняли из статьи какая решается проблема?

      В чем она проявляется?


      1. Petr_Strelyaev Автор
        19.01.2025 16:41

        Проблема тестирования расчетов и как их можно автоматизировать с помощью инструмента vanessa automation


        1. vis_inet
          19.01.2025 16:41

          А каких именно расчетов?

          В типовой конфигурации?

          Вы хотите проверить все имеющиеся в ней расчёты?

          С какой целью?


          1. Petr_Strelyaev Автор
            19.01.2025 16:41

            "А каких именно расчетов?" - Любых.

            "В типовой конфигурации?" - думаю, что это не важно типовая или нет.

            "Вы хотите проверить все имеющиеся в ней расчёты? " - Это очень амбиционная цель. Лучше, начать с самого простого.

            "С какой целью? " - Чтобы не проверять это вручную.


            1. vis_inet
              19.01.2025 16:41

              На мой взляд любая проверка не может быть самоцелью.

              В чём первопричина вашего стремления к проверкам всего и вся?


              1. Petr_Strelyaev Автор
                19.01.2025 16:41

                А что такое тестирование? Это процесс в котором проверяется качество ПО. Если можно автоматизировать какую то проверку - то это нужно сделать, почему нет?

                Может быть у вас есть какой то альтернативный способ?


                1. vis_inet
                  19.01.2025 16:41

                  Всё-таки не понимаю вашей глобальной цели.

                  Смотрите - возьмём, например, 1С Бухгалтерию, которую используют буквально миллионы предприятий.

                  И обновления к ней выходят регулярно.

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

                  Ошибки, конечно, периодически бывают у всех, но вендор чаще всего оперативно их исправляет.


                  1. Petr_Strelyaev Автор
                    19.01.2025 16:41

                    Конечно, с этим согласен.

                    Может использоваться типовая конфигурация и при обновлении вероятность дефектов невелика.

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

                    Но, тут конечно все зависит от конфигурации и "качества" кода.


      1. DvoiNic
        19.01.2025 16:41

        Ничего он не понял. Это бот (единственный коммент, и тот невообразимо хвалебный к откровенно тупой статье)


        1. Petr_Strelyaev Автор
          19.01.2025 16:41

          Вчера ты писал, что ничего не понял из статьи.

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

          Думаешь, твое мнение кому то интересно?

          У меня складывается впечатление, что ты представитель альтернативного интеллекта.