При расчете стипендий студентам часто возникает задача настроить удержание за проживание в общежитии, размер которого напрямую зависит от статуса студента. Основная сложность заключается в реализации логики «трех состояний»: когда у студента есть социальная стипендия (удерживаем одну сумму), когда есть только обычная стипендия (удерживаем другую сумму) и когда начислений нет вовсе (удержание должно быть нулевым).
Стандартная формула вида ?(РасчетнаяБаза > 0, X, Y) при назначении только социальной стипендии в базу не решает проблему: если у студента нет вообще никаких начислений, система видит, что условие не выполняется, и ошибочно применяет значение Y. В этой статье мы разберем, как правильно сконструировать формулу и настроить показатели, чтобы избежать подобных ошибок.
Проанализируем ситуацию: нам необходимо, чтобы программа сначала проверяла сам факт наличия какого-либо дохода (стипендии), а затем выбирала тариф удержания. Для реализации этой логики нам потребуется использовать Расчетную базу как предохранитель и Дополнительный показатель как переключатель режимов.
Рассмотрим пошаговый алгоритм настройки системы.
Прежде чем настраивать само удержание, создадим показатели, которые будут участвовать в формуле. Перейдем в раздел Настройка — Показатели расчета зарплаты.
Использование постоянного показателя позволит нам один раз назначить студенту статус «социальщика», и формула будет автоматически подхватывать нужное значение каждый месяц.
Создадим новое удержание в справочнике Удержания (раздел Настройка). На вкладке Основное установим переключатель в положение Результат рассчитывается по формуле.
Разберем логику построения формулы. Нам нужно проверить два условия:
Сформулируем итоговую формулу для поля Редактировать формулу:
?(РасчетнаяБаза = 0, 0, ?(СтудентНаСоцОбеспечении > 0, СуммаОбщежитияСоц, СуммаОбщежитияОбщая))
Проанализируем, как работает эта конструкция:
?() проверяет, больше ли нуля РасчетнаяБаза. Если база пустая (стипендия не начислялась), расчет прекращается и возвращается 0.СтудентНаСоцОбеспечении. Если показатель равен 1 (или больше 0), применяется значение СуммаОбщежитияСоц.СуммаОбщежитияОбщая.Это критически важный этап. Чтобы внешнее условие РасчетнаяБаза = 0 работало корректно, необходимо на вкладке Расчет базы в список Базовые начисления включить все виды стипендий, которые могут быть выплачены студенту: и социальную, и академическую, и прочие.
Важный нюанс: Период расчета базы следует установить как Текущий месяц. Это обеспечит синхронизацию удержания с фактом начисления стипендии в том же документе Начисление зарплаты и взносов.
Рассмотрим, какими документами вводить эти настройки в эксплуатацию. Для того чтобы удержание заработало, нам нужно выполнить два действия:
СтудентНаСоцОбеспечении, его значение можно ввести документом Данные для расчета зарплаты или через Изменение условий оплаты труда.Если работа со сложными формулами вызывает затруднения, рассмотрим более простой, но менее автоматизированный способ. Можно создать два отдельных удержания:
Результат = X.Результат = Y.В этом случае 1С:ЗУП 3.1 по умолчанию не будет рассчитывать удержание, если в текущем месяце нет начислений из его базы. Однако этот метод требует внимательности при назначении: если студенту по ошибке назначить оба удержания, и он получит оба вида стипендий, удержания могут задвоиться.
Если при расчете вы видите, что сумма Y все равно удерживается при нулевом доходе, проверьте следующие настройки:
РасчетнаяБаза.Таким образом, использование вложенного условия в формуле с обязательной проверкой РасчетнаяБаза является наиболее надежным стандартным средством 1С для реализации подобных бизнес-задач.