Добрый день! В этой статье рассмотрим вариант по автоматизированной проверке расчетов в 1С с использованием инструмента Vanessa automation.
Думаю, что автоматизация проверки расчетов - довольно интересная тема для рассмотрения. Потому-что, в учетных системах (таких как 1С: Предприятие) довольно много разнообразных расчетов - таких как налоги, зарплата, страховые взносы и прочие. Для этого используются различные формулы и результаты округляются по определенным правилам. Также существуют различные граничные значения - к примеру прогрессивная шкала НДФЛ. Поэтому эти проверки очень хочется автоматизировать - чтобы написанный вами сценарий работал за вас.
Постановка задачи:
Сделать сценарий в Vanessa Automation, который бы проверял корректность расчета заработной платы в документе Начисление зарплаты и взносов.
В чем сложность?
Для того чтобы понять проблему с расчетами - нужно иметь представление о том, что может произойти. Возьмем сотрудника на окладе и попробуем рассчитать ему зарплату.
В самом простом случае получится такая формула:
Получается, что нужно знать три переменные - оклад, число рабочих дней в месяце и число отработанных дней сотрудником за месяц. И мы сможем получить результат. Вроде бы все довольно просто?
К чему может привести ошибка в расчете?
Ошибка же в расчете в документе Начисление зарплаты и взносов приведет к тому, что пользователям придется вручную пересчитывать все суммы. Это довольно объемная работа, которая масштабируется на количество сотрудников в организации. Поэтому такие ошибки лучше не пропускать при тестировании.
Также нужно иметь ввиду, что сотрудник может работать на не полную ставку. Или-же получить исполнительный лист - по которому будет вычитаться определенная сумма. Или-же иметь какие-то вычеты по НДФЛ. Уже получается довольно много неизвестных параметров.
Но все эти моменты должны учитываться при расчете зарплаты в конфигурации 1С ЗУП. Для этого используется один документ Начисление зарплаты и взносов, который всегда должен все учитывать и давать правильный результат.
Для полной проверки всех возможный случаев при расчете ЗП нужно довольно много сценариев. В этой статье рассмотрим самый простой из них - это, что сотрудник отработал все положенные по табелю дни за месяц. Также думаю, все расчет лучше производить на тестовых сотрудниках, т.е. принятых на работу в этом же сценарии.
Если мы возьмем существующего в базе сотрудника может случится, что он ушел в Отпуск и поэтому число его рабочих дней будет отличаться от числа рабочих дней по производственному календарю. И наш сценарий выдаст неправильную ошибку, в которой нужно будет разбираться и тратить на это время.
В итоге получается — что для проверки расчета зарплаты в документе Начисление зарплаты и взносов необходимо знать формулу для расчета, и знать данные для расчета. Тогда получится написать сценарий который будет производить расчет и выдавать результат проверки — соответствует ли фактическая сумма ожидаемой?
Решение
Начнем с приема на работу нового сотрудника. Для этого необходимо создать новое физическое лицо и штатную единицу, т.к. для расчета зарплаты по окладу в Приеме на работу должно быть указан Вид занятости - Основное место работы. Также в документе указываем Оклад сотрудника - именно это число должно быть указано в табличной части документа Начисление зарплаты и взносов.
И чтобы быть уверенными, что он отработал все рабочие дни за месяц его необходимо принять на работу 1 числом месяца. Не важно будет ли этот день рабочим или выходным. А количество рабочих дней в месяце можно получить из запроса к данным производственного календаря.
В таком случае получается, что мы знаем все нужные значения переменных для расчета.
Также будет лучше, если сотрудник принимается в новое тестовое подразделение — чтобы заранее знать, что в табличной части документа Начисление зарплаты и взносов должен быть всего 1 сотрудник.
Далее создаем новый документ Начисление зарплаты и взносов по нашему подразделению. Нажимаем кнопку Заполнить — и в табличной части документа должна быть 1 запись по нашему сотруднику.
Для раскрытия в табличной части всех колонок — используется следующее условие
Далее в переменные мы сохраняем данные по расчету из табличной части.
Далее проверки расчета используется следующая команда — само вычисление происходит на сервере.
Надеюсь, что тут ничего сложного для вас нет. Сохраненные переменные преобразуются в числа для расчета. Далее в строке 914 и 915 производим расчет зарплаты и НДФЛ. В строке 917 проверяем есть ли какая то разница между суммой, что рассчитано в документе Начисление зарплаты и суммой при расчете в тестовом сценарии.
Функция Окр() — нужно для округления расчетов, т.к. зарплата рассчитывается до копеек — поэтому нужно оставить 2 знака после запятой. А НДФЛ рассчитывается до рубля, поэтому нужно оставить 0 знаков после запятой.
И дальше, в условии проверяем, что если разница равно 0 по в переменную Разница расчета сохраняем строку Верно. Иначе сохраняем значение Разницы.
Дальше в самом сценарии выполняется следующее условие которое выполняется, если переменная КорректностьРасчета неравна значению «Верно». И если это так вызывается исключение с нужным нам сообщением.
Далее, в сценарий можно добавить проверки на значения рассчитанного НДФЛ в документе Начисление ЗП и Взносов. И еще если от зарплаты отнять НДФЛ — то получим сумму к выплате, которая должна быть в Ведомости на выплату.
Вывод
Вот, таким способом можно автоматизировать проверки расчетов в документе Начисление зарплаты и взносов. Т.е. если нужно автоматизировать проверки расчетов в 1С с помощью инструмента Vanessa Automation - то нужно знать формулу по которой происходит расчет, знать данные для расчета и создать сценарий, который будет производить вычисления и проверять данные на соответствие.
Таким образом, если появился дефект в учетной системе - наш сценарий выдаст ошибку, что результаты расчетов заложенные в нем отличаются от, того что рассчиталось в системе.
На этом все — спасибо за внимание!
Комментарии (51)
Gippz
19.01.2025 16:41Решаем выдуманные проблемы без понимания БП. Затем такие тестировщики однажды узнают, что бывают вычеты по НДФЛ.
Petr_Strelyaev Автор
19.01.2025 16:41Похоже ты читал статью не внимательно. В ней это упоминается.
Но, чтобы принялись вычеты к доходу нужны заводить дополнительный документ.
В целом это можно рассмотреть в отдельной статье.
Alex65rus
19.01.2025 16:41Выглядит довольно бессмысленно. Сценарий написан под сферического коня в вакууме. НДФЛ, например, имеет прогрессивную ставку, расчёт в пределах налогового периода и вычеты к доходам. Умножить на 0,13 для проверки не даст примерно ничего.
Petr_Strelyaev Автор
19.01.2025 16:41Напиши, пожалуйста, твое представление как можно автоматизировать проверку данного расчета.
Думаю, что прогрессивную шкалу НДФЛ и как автоматизировать ее проверки лучше рассмотреть в отдельной статье.
Alex65rus
19.01.2025 16:41Строго говоря - весь расчет зарплаты это большое количество простых математических операций, произведенных в правильной последовательности. Проверять с помощью ванессы что дважды два четыре - кажется не очень нужным.
И если расчет налогов и взносов, как производную от результата ты можешь относительно быстро сравнить с вычисленными значениями(такая возможность есть в отчетах типовой поставки), то начисление зп зависит от корректности поданных на вход показателей. Следовательно тебе нужно будет вторично выполнить сбор информации о рабочем времени, значениях плановых показателей и отклонений от них. И выполнишь ты его с помощью того же менеджера расчетов, что замкнет круг)
Petr_Strelyaev Автор
19.01.2025 16:41"кажется не очень нужным" - а я думаю, что нужно.
Конечно, можно все считать вручную с помощью калькулятора, или например на листке бумаги в столбик. Кому как удобно)
Но, я думаю, что если можно автоматизировать проверку - то это надо делать.
DvoiNic
19.01.2025 16:41а как вы проверяете правильность умножения?
Petr_Strelyaev Автор
19.01.2025 16:41Не, совсем понял вопрос.
Но, если нужно проверить какой-то вычисление - то нужно его повторить и сравнить со своим результатом.
DvoiNic
19.01.2025 16:41повторяю вопрос: как вы проверяете правильность умножения? Правильно ли получен результат от, скажем, умножения начисленного на 0.13? Правильно ли округлилось в расчете? а то мало ли...
Petr_Strelyaev Автор
19.01.2025 16:41Да, вопрос очень "интересный".
А вычислить нужно один раз или много?)
DvoiNic
19.01.2025 16:41а нужно протестировать нужное количество раз (и протестировать, нужное ли количество раз мы протестировали).
кстати, а вы этот свой тест однократно запускаете? а то вдруг результаты при втором расчете (или при 53-м) изменятся.... Или со временем изменяются. мало ли... сегодня программа правильно посчитала, а завтра результат изменился...
Petr_Strelyaev Автор
19.01.2025 16:41если нужное количество раз - то надо писать алгоритм.
Запускать автотесты нужно каждый релиз (сборку).
А с чего бы должны изменяться результаты во времени?)
Может быть вы куда то летите?) С каким ускорением?)
DvoiNic
19.01.2025 16:41если нужное количество раз - то надо писать алгоритм.
так почему вы его не написали, и ограничиваетесь однократной проверкой типового кода?
А с чего бы должны изменяться результаты во времени?
а с чего они не должны изменяться? вы же не верите вендору, что его типовой код в типовой конфигурации считает правильно, проверяете за ним. почему кто-то должен верить, что результаты не изменятся во времени?
Да, кстати, а как вы тестируете результаты тестов? вдруг типовая конфигурация посчитала правильно, а ваш тест кривой?
Petr_Strelyaev Автор
19.01.2025 16:41"а с чего они не должны изменяться? " - приведи пример.
"вдруг типовая конфигурация посчитала правильно, а ваш тест кривой? " - в жизни все может быть.
vis_inet
19.01.2025 16:41"а с чего они не должны изменяться? " - приведи пример.
Это имеет смысл.
Зависимость может быть от даты, например.
Особенно в зарплатных расчётах, как в вашем примере.
Petr_Strelyaev Автор
19.01.2025 16:41"Зависимость может быть от даты, например." - имеется ввиду, что у каждого документа есть дата, так?
И получается, что есть историческая последовательность документов и каждый новый документ должен учитывать документы заведенные ранее?
vis_inet
19.01.2025 16:41Нет, алгоритм расчёта может зависеть от даты документа.
Например, в зависимости от каких-либо НПА.
DvoiNic
19.01.2025 16:41сегодня НДС 18%, а завтра 20%. Сегодня НДФЛ 13%, завтра 15%. Или прогресссивный (и зависящий от предыдущих). Или вычет изменился. а вычет зависит от даты рождения ребенка. и т.д.
поэтому ваш тупой пример достаточно проверить калькулятором (тупой он потому, что используется не на реальных данных, а на демосотруднике в "идеальных условиях" - завели нового сотрудника, у которого не было начислений, удержаний, нет отпуска и т.п.. Т.е. в тех условиях, в которых невозможно ошибиться до релиза)
Petr_Strelyaev Автор
19.01.2025 16:41Вот, мне совсем не понятно что ты пишешь.
Что значит "Сегодня НДФЛ 13%, завтра 15%."? - Это как?
Ставка НДФЛ зависит от дохода физ лица - а не от "Сегодня" или "завтра".
DvoiNic
19.01.2025 16:41Вот, мне совсем не понятно что ты пишешь.
Ничего удивительного. Если бы было понятно - ты б не писал такую статью :-)
Это так. в 2019 - 13, а в 2025 при том же доходе - 15. и сегодня по доходу с начала года удерживаем 13, а завтра, в новом месяце, уже больше.
Petr_Strelyaev Автор
19.01.2025 16:41Вот, статья. Почитай. https://www.nalog.gov.ru/rn05/news/activities_fts/15068109/
"сегодня по доходу с начала года удерживаем 13, а завтра, в новом месяце, уже больше. " - Если физ лицо сегодня получило доход в 3 млн рублей, то какой НДЛФ должен быть удержан?
ulovka22
19.01.2025 16:41Идея подобного тестирования кажется мне бессмысленной, в силу отсутствия заведомо эталонных данных для сравнения
Petr_Strelyaev Автор
19.01.2025 16:41В том то и дело, что много факторов влияющих на расчет.
Но, если известна формула и известны переменные (значения) - то почему это не сделать автоматизированный сценарий?
ulovka22
19.01.2025 16:41Кажется, что "много факторов" и "известна формула" не сочетаются вместе
Petr_Strelyaev Автор
19.01.2025 16:41В статье я рассмотрел самый простой пример расчета ЗП.
Заранее подумал, что если расписывать все факторы (вычеты, исполнительные листы, неполные ставки) - то получится очень запутанно.
А чем же не сочетаются "много факторов" и "известна формула"?
Чем больше факторов - тем более сложная формула для вычисления.
ulovka22
19.01.2025 16:41Высокая когнитивная сложность не даёт полагаться на умозрительную оценку правильности.
Чтобы подтвердить правильность тестовых данных, нужен такой же объем тестирования, как и для расчетов в 1С.
Petr_Strelyaev Автор
19.01.2025 16:41Можно не знать правильное решение задачи заранее - главное двигаться в нужном направлении. Итеративный подход дает хорошие результаты.
ulovka22
19.01.2025 16:41Так в данном случае направление неизвестно :)
Petr_Strelyaev Автор
19.01.2025 16:41Возможно, с первого взгляда может быть ничего неизвестно.
Главное начать. Можно еще немного подумать :-D
Niki98
19.01.2025 16:41Считаю, что большинство отзывов о данной статье сильно необоснованными, данная статья - не научная или кандидатская диссертация, написана отлично, донесена простым языком, человек даже разъясняет, в чем заключена сложность этого подхода и на понятно примере объясняет саму суть. Также рассматриваются фатальные случаи - «ошибки в расчетах». В чем причина, то что вы так придираетесь, автор молодец, информативная статья, так держать!
vis_inet
19.01.2025 16:41Вы поняли из статьи какая решается проблема?
В чем она проявляется?
Petr_Strelyaev Автор
19.01.2025 16:41Проблема тестирования расчетов и как их можно автоматизировать с помощью инструмента vanessa automation
vis_inet
19.01.2025 16:41А каких именно расчетов?
В типовой конфигурации?
Вы хотите проверить все имеющиеся в ней расчёты?
С какой целью?
Petr_Strelyaev Автор
19.01.2025 16:41"А каких именно расчетов?" - Любых.
"В типовой конфигурации?" - думаю, что это не важно типовая или нет.
"Вы хотите проверить все имеющиеся в ней расчёты? " - Это очень амбиционная цель. Лучше, начать с самого простого.
"С какой целью? " - Чтобы не проверять это вручную.
vis_inet
19.01.2025 16:41На мой взляд любая проверка не может быть самоцелью.
В чём первопричина вашего стремления к проверкам всего и вся?
Petr_Strelyaev Автор
19.01.2025 16:41А что такое тестирование? Это процесс в котором проверяется качество ПО. Если можно автоматизировать какую то проверку - то это нужно сделать, почему нет?
Может быть у вас есть какой то альтернативный способ?
vis_inet
19.01.2025 16:41Всё-таки не понимаю вашей глобальной цели.
Смотрите - возьмём, например, 1С Бухгалтерию, которую используют буквально миллионы предприятий.
И обновления к ней выходят регулярно.
Мне сложно предположить, что все они должны заниматься всеобъемлющим тестированием всех имеющихся в ней расчётов после получения каждого обновления.
Ошибки, конечно, периодически бывают у всех, но вендор чаще всего оперативно их исправляет.
Petr_Strelyaev Автор
19.01.2025 16:41Конечно, с этим согласен.
Может использоваться типовая конфигурация и при обновлении вероятность дефектов невелика.
Может быть вариант, что типовая конфигурация дополнена определенным (самописным) функционалом. Тогда, при обновлении вероятность возникновения ошибок - выше.
Но, тут конечно все зависит от конфигурации и "качества" кода.
DvoiNic
19.01.2025 16:41Ничего он не понял. Это бот (единственный коммент, и тот невообразимо хвалебный к откровенно тупой статье)
Petr_Strelyaev Автор
19.01.2025 16:41Вчера ты писал, что ничего не понял из статьи.
Сегодня ты пишешь, что другой пользователь ничего не понял - и якобы он бот. И что статья "тупая".
Думаешь, твое мнение кому то интересно?
У меня складывается впечатление, что ты представитель альтернативного интеллекта.
vis_inet
Хорошо бы для начала описать решаемую проблему.
Вы проверяете рельзтат расчёта в типовой конфигурации?
Не доверяете вендору?
Petr_Strelyaev Автор
Это статья. Решаемая проблема довольно обширна.
А вопрос вопрос не доверия вендору не обсуждается.
DvoiNic
и для чего эта статья?
Даже зная, что такое VA - я ничего не понял из статьи. Пример взят, на мой взгляд, весьма идиотический - "проверить результат простейшего расчета в типовой конфиге". В общем, ценность статьи - имхо, отрицательная. После таких статей 1с-ников и начинают считать дебилами.
Petr_Strelyaev Автор
Да, взят самый простой пример - и что? Зачем делать сложный?
Кто начинает считать 1с-ников "дебилами"?
ikbarinov
Вендору верить опасно. ) проверено.
Petr_Strelyaev Автор
Доверяй, но проверяй)