новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
gen_mal
Приватное сообщение

ЗУП. Внешний отчёт без печатной формы по расчёту суммы по данным. Вроде калькулятора.

2 |  0
сегодня в 17:59:24 (2 часа назад)
5300
Текст задания
Организация, Сотрудник, ДатаУвольнения = выбираются пользователем. Используются на входе в функцию.
1. Определяем Интервал работы с данными. Функция. На выходе НачалоИнтервала, КонецИнтервала
а) 12 месяцев до месяца увольнения, т.е. конец интервала = ДатаКонец(МесяцУвольнения - 1)
б) начало интервала первичное = ДатаНачала(МесяцУвольнения – 12)
в) Находим ДатаПриема для данной ДатаУвольнения
г) Если приём на работу ранее или равно началу интервала первичное, то конец, выход из функции. Интервал найден.
д) Если приём на работу позднее начала интервала первичное, то ветвление:
Если дата приёма 1-е число, то именно она и есть НачалоИнтервала. Выход из функции.
А если не первое число, то НачалоИнтервала = ДатаНачала(МесяцПриема + 1) = 1-е число следующего месяца
е) Выход из функции, которая, получив на входе Организация, Сотрудник, ДатаУвольнения, выдала на выходе НачалоИнтервала, КонецИнтервала

Если НачалоИнтервала > КонецИнтервала Тогда большой выход из отчёта с выдачей СЗ_Ц = 0

2. Итак имеем Сотрудник и Интервал от 1-го до 12 конкретных месяцев
Маркировка Да/Нет этих месяцев (хороший или плохой)
Идём в РС СостоянияСотрудников
По нашему сотруднику внутри найденного ранее Интервала проверяем ресурс Состояние на предмет равенства Перечисление.Состояния.Болезнь или БолезньБезОплаты или ОтпускПоБеременностиИРодам
Месяцы, в которых присутствуют эти состояния маркируем Нет (плохой)
Если не осталось ни одного хорошего, то большой выход из отчёта с выдачей СЗ_Ц = 0

Если хорошие месяцы в Интервале остались, то только по ним находим Доход. Для этого идём в РН СведенияОДоходахСтраховыеВзносы
Важно: здесь берём не реквизит сотрудника, а измерение ФизическоеЛицо, потому что суммируем доходы и по совместительствам.
Нас интересуют только доходы, для которых для Период = рассматриваемый пока хороший месяц измерение ВидДохода = Справочник. ВидыДоходовПоСтраховымВзносам.ВходитВБазу2023 или ОблагаетсяВзносамиЧастично = Истина
Забираем числа из ресурсов Сумма и Скидка: Доход = Сумма – Скидка
К плохим месяцам Интервала добавляем те месяца, для которых Доход = 0
Если в Интервале не осталось хороших месяцев, то большой выход из отчёта с выдачей СЗ_Ц = 0

3. Окончательно имеем Таблицу, сортируем от настоящего в прошлое:
1-ый Месяц до увольнения = Месяц КонецИнтервала … Доход1
2-ой Месяц до увольнения = Месяц КонецИнтервала - 1 … Доход2

Месяц НачалоИнтервала = Месяц КонецИнтервала – N … ДоходN+1
В Таблице всего N+1 строк
Маркировка хороший/плохой уже не нужна, т.к. всегда уже для плохих месяцев Доход = 0. Это и есть уже цвет месяца, т.к. месяца с БЛ мы даже не искали в РН доходов, значит они остались нулевыми.
В нашей таблице хороший месяцi = когда Доходi > 0.
Для отладки давайте пока выведем эту табличку на просмотр.

4. Проверяем на хорошесть основной расчётный период = три месяца, предшествующих месяцу перед месяцем увольнения, т.е. (Доход2 > 0) И (Доход3 > 0) И (Доход4 > 0)
Если Истина Тогда большой выход из отчёта с выдачей СЗ_Ц = (Доход2 + Доход3 + Доход4) / 3
Иначе продолжаем.

5. Перебор одиночных интервальчиков.
Находим в цикле перебора i от 1 до N+1 первый же хороший месяц (очевидно ближайший к дате увольнения) Доходi > 0
Запоминаем: ДоходУно и K=1 (как количество месяцев одиночных интервальчиков)
Если нет - то большой выход из отчёта с выдачей СЗ_Ц = 0

6. Перебор двойных интервальчиков
Цикл перебора: i от 1 до N
Только теперь смотрим два подряд хороших (доходных) месяца (Доходi > 0) И (Доходi+1 > 0)
Если нашли, то запоминаем ДоходДабл = Доходi + Доходi+1 и K=2 (как количество месяцев в дабле)
Если не нашли, то большой выход из отчёта с выдачей СЗ_Ц = ДоходУно

7. Перебор тройных интервальчиков
Цикл перебора: i от 1 до N-1
Только теперь смотрим три подряд хороших (доходных) месяца (Доходi > 0) И (Доходi+1 > 0) И (Доходi+2 > 0)
Если нашли, то запоминаем ДоходТребл = Доходi + Доходi+1 + Доходi+2 и K=3 (как количество месяцев в требле)
Большой выход из отчёта с выдачей СЗ_Ц = ДоходТребл / 3
Если не нашли, то большой выход из отчёта с выдачей СЗ_Ц = ДоходДабл / 2

Печатная форма не нужна. Результат СЗ_Ц как в калькуляторе показывается тут же в окне формы в поле. Рядом для наглядности - какой был выбран интервальчик в виде, например, Март 2025 - Май 2025 или Февраль 2025 - Февраль 2025.
0
Отклики (9)
Чтобы добавить свое предложение, Вам необходимо авторизоваться либо зарегистрироваться.