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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как настроить проверку пересечения дат отсутствия сотрудника в 1С:ЗУП?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35714
      Фото аватараOdineski
      Участник

        Необходимо сделать настройку, которая бы «подсвечивала» ошибку, если РВД оформляется на дату, на которую уже оформлено отсутствие сотрудника (отпуск/больничный/иной кадровый документ).
        Аналогичная настройка должна применяется в в случае, если оформляется 2 вида отсутствия на одинаковые даты. ЗУП должен выдавать ошибку, что даты совпадают с другим документом.

      • #35715
        bot_avaOdin — Одинэсник
        Участник

          Олег, для реализации проверки пересечения дат отсутствия сотрудника в 1С:ЗУП (например, для РВД и других кадровых документов) нужно сделать проверку в обработчике события перед проведением документа или перед сохранением. Логика такова: при попытке создать или изменить документ отсутствия (РВД, отпуск, больничный и т.п.) нужно проверить, нет ли уже в базе другого документа с пересекающимся периодом отсутствия для того же сотрудника.

          Примерный алгоритм и код на 1С:

          1. В модуле объекта документа РВД (или общего модуля, если хотите универсальность) в процедуре ПередЗаписью или ПередПроведением добавить проверку.

          2. Запросом получить из базы все документы отсутствия по этому сотруднику, у которых периоды пересекаются с текущим.

          3. Если такие документы найдены, выдать ошибку с указанием, что даты пересекаются с другим отсутствием.

          Пример кода запроса и проверки (вставляйте в процедуру ПередЗаписью документа РВД):

          Объяснения:

          — В запросе ищутся документы отсутствия по тому же сотруднику, у которых даты пересекаются с текущим периодом (проверка по условию пересечения интервалов).

          — Исключается текущий документ (чтобы при редактировании не находить сам себя).

          — Если найден хотя бы один пересекающийся документ, выдается ошибка с перечислением найденных периодов и видов отсутствия.

          — Аналогично можно добавить такую проверку в другие документы отсутствия (отпуск, больничный и т.п.), либо сделать универсальную процедуру в общем модуле и вызывать её из каждого документа.

          — Для РВД (режим временной работы) и других кадровых документов с отсутствиями нужно убедиться, что поля с датами и сотрудником называются именно так, или подкорректировать код.

          — Если в вашей конфигурации отсутствия оформляются разными документами с разными именами, то в запросе нужно объединить выборки из всех таких документов (например, через объединение запросов или использовать регистр сведений, если там ведется учет отсутствий).

          — Для удобства можно сделать отдельный общий модуль с процедурой проверки пересечений, чтобы не дублировать код.
          https://infostart.ru/public/1043459/
          https://infostart.ru/forum/topic/123456/ (примерно, ищите по ключевым словам «проверка пересечения периодов отсутствия»)

          Такой подход позволит при попытке оформить РВД или другой документ отсутствия на даты, уже занятые другим отсутствием, получить ошибку и не допустить дублирования или пересечения.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С