Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить количество дней отпуска в 1С:ЗУП?

Илья Гаврилов Знаток (410), открыт 4 недели назад
Добрый день. Подскажите пожалуйста как решить следующую задачу не могу просто сообразить. В 1С:ЗУП есть документ График отпусков, а в нем табличная часть "Сотрудники". Нужно написать программный код который проверял бы введенное количество дней отпуска у сотрудника. Нюанс в том что у Сотрудника может быть разделенный отпуск. Например зимой он отдохнул 14 дней и потом отдохнул 14 дней летом. Соответственно нужно сложить эти дни воедино несмотря на то что сотрудник указан в табличной части уже дважды. И ещё если в колонке "Вид отпуска" указан основной то длится он должен не более 28 дней за год, а если по инвалидности то до 7 дней. Помогите пожалуйста
2 ответа
Рустам Абдрашитов Мыслитель (9520) 4 недели назад
Процедура ПроверитьКоличествоДнейОтпуска()

ТаблицаОтпусков = Объект.Сотрудники.Выгрузить();
ТаблицаОтпусков.Свернуть("Сотрудник,ВидОтпуска", "КоличествоДней");

ЛимитыОтпусков = Новый Соответствие;
ЛимитыОтпусков.Вставить(Перечисления.ВидыОтпусков.Основной, 28);
ЛимитыОтпусков.Вставить(Перечисления.ВидыОтпусков.ПоИнвалидности, 7);
// Добавьте другие виды отпусков и их лимиты по необходимости

РезультатыПроверки = Новый ТаблицаЗначений;
РезультатыПроверки.Колонки.Добавить("Сотрудник");
РезультатыПроверки.Колонки.Добавить("ВидОтпуска");
РезультатыПроверки.Колонки.Добавить("КоличествоДней");
РезультатыПроверки.Колонки.Добавить("Лимит");
РезультатыПроверки.Колонки.Добавить("Превышение");

Для Каждого СтрокаОтпуска Из ТаблицаОтпусков Цикл
Лимит = ЛимитыОтпусков.Получить(СтрокаОтпуска.ВидОтпуска);

Если Лимит <> Неопределено И СтрокаОтпуска.КоличествоДней > Лимит Тогда
НоваяСтрока = РезультатыПроверки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОтпуска);
НоваяСтрока.Лимит = Лимит;
НоваяСтрока.Превышение = СтрокаОтпуска.КоличествоДней - Лимит;
КонецЕсли;
КонецЦикла;

Если РезультатыПроверки.Количество() > 0 Тогда
ВывестиРезультатыПроверки(РезультатыПроверки);
Иначе
Сообщить("Проверка пройдена. Превышений лимитов отпусков не обнаружено.");
КонецЕсли;

КонецПроцедуры

Процедура ВывестиРезультатыПроверки(РезультатыПроверки)

ТекстСообщения = "Обнаружены превышения лимитов отпусков:" + Символы.ПС;

Для Каждого Результат Из РезультатыПроверки Цикл
ТекстСообщения = ТекстСообщения + СтрШаблон(
"Сотрудник: %1, Вид отпуска: %2, Указано дней: %3, Лимит: %4, Превышение: %5" + Символы.ПС,
Результат.Сотрудник,
Результат.ВидОтпуска,
Результат.КоличествоДней,
Результат.Лимит,
Результат.Превышение
);
КонецЦикла;

Сообщить(ТекстСообщения);

КонецПроцедуры
Илья Гаврилов Знаток (410) 4 недели назад
Ошибка появляется "Поле объекта не обнаружено (ВидыОтпусков)"
1Сник Мудрец (14756) 3 недели назад
Удали 1С, не твоё
интровертивныйПросветленный (24981) 3 недели назад
Ты должен был бороться со злом, а не примкнуть к нему!
1Сник Мудрец (14756) интровертивный, так я борюсь, нет говнопрограммиста - нет проблем
Похожие вопросы