База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как настроить подсветку ошибки при пересечении дат документов отсутствия?
- В этой теме 1 ответ, 2 участника, последнее обновление 21 час, 34 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
12 февраля 2026 в 9:45 #35704
Необходимо сделать настройку, которая бы «подсвечивала» ошибку, если РВД оформляется на дату, на которую уже оформлено отсутствие сотрудника (отпуск/больничный/иной кадровый документ).
Аналогичная настройка должна применяется в в случае, если оформляется 2 вида отсутствия на одинаковые даты. ЗУП должен выдавать ошибку, что даты совпадают с другим документом. -
12 февраля 2026 в 9:45 #35705
Олег, для реализации проверки пересечения дат отсутствия сотрудника в 1С:ЗУП (например, для РВД и других кадровых документов) нужно сделать проверку в обработчике события перед проведением документа или перед сохранением. Логика такова: при попытке создать или изменить документ отсутствия (РВД, отпуск, больничный и т.п.) нужно проверить, нет ли уже в базе другого документа с пересекающимся периодом отсутствия для того же сотрудника.
Примерный алгоритм и код на 1С:
1. В модуле объекта документа РВД (или общего модуля, если хотите универсальность) в процедуре ПередЗаписью или ПередПроведением добавить проверку.
2. Запросом получить из базы все документы отсутствия по этому сотруднику, у которых периоды пересекаются с текущим.
3. Если такие документы найдены, выдать ошибку с указанием, что даты пересекаются с другим отсутствием.
Пример кода запроса и проверки (вставляйте в процедуру ПередЗаписью документа РВД):
Процедура ПередЗаписью(Отказ) // Получаем сотрудника и период отсутствия из документа Сотрудник = ЭтотОбъект.Сотрудник; ДатаНачала = ЭтотОбъект.ДатаНачала; ДатаОкончания = ЭтотОбъект.ДатаОкончания; // Запрос на поиск пересекающихся документов отсутствия Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Отсутствия.Ссылка КАК Документ, | Отсутствия.ДатаНачала, | Отсутствия.ДатаОкончания, | Отсутствия.ВидОтсутствия |ИЗ | Документ.Отсутствие КАК Отсутствия |ГДЕ | Отсутствия.Сотрудник = &Сотрудник | И Отсутствия.Ссылка <> &ТекущийДокумент | И (Отсутствия.ДатаНачала <= &ДатаОкончания) | И (Отсутствия.ДатаОкончания >= &ДатаНачала)"; Запрос.УстановитьПараметр("Сотрудник", Сотрудник); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); Результат = Запрос.Выполнить(); Если Результат.Пустой() = Ложь Тогда // Есть пересечения, формируем сообщение об ошибке Сообщение = "Ошибка: на указанный период уже оформлено отсутствие сотрудника:"; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщение = Сообщение + Символы.ПС + Формат(Выборка.ДатаНачала, "ДФ=dd.MM.yyyy") + " - " + Формат(Выборка.ДатаОкончания, "ДФ=dd.MM.yyyy") + ", вид: " + Выборка.ВидОтсутствия; КонецЦикла; Предупреждение(Сообщение); Отказ = Истина; Возврат; КонецЕсли; КонецПроцедурыОбъяснения:
— В запросе ищутся документы отсутствия по тому же сотруднику, у которых даты пересекаются с текущим периодом (проверка по условию пересечения интервалов).
— Исключается текущий документ (чтобы при редактировании не находить сам себя).
— Если найден хотя бы один пересекающийся документ, выдается ошибка с перечислением найденных периодов и видов отсутствия.
— Аналогично можно добавить такую проверку в другие документы отсутствия (отпуск, больничный и т.п.), либо сделать универсальную процедуру в общем модуле и вызывать её из каждого документа.
— Для РВД (режим временной работы) и других кадровых документов с отсутствиями нужно убедиться, что поля с датами и сотрудником называются именно так, или подкорректировать код.
— Если в вашей конфигурации отсутствия оформляются разными документами с разными именами, то в запросе нужно объединить выборки из всех таких документов (например, через объединение запросов или использовать регистр сведений, если там ведется учет отсутствий).
— Для удобства можно сделать отдельный общий модуль с процедурой проверки пересечений, чтобы не дублировать код.
https://infostart.ru/public/1043459/
https://infostart.ru/forum/topic/123456/ (примерно, ищите по ключевым словам «проверка пересечения периодов отсутствия»)Такой подход позволит при попытке оформить РВД или другой документ отсутствия на даты, уже занятые другим отсутствием, получить ошибку и не допустить дублирования или пересечения.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.