Как выделить строку красным цветом и переместить ее в начало списка при наступлении даты в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

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

Способ 1. Настройка динамического списка через условное оформление (без изменения кода)

В управляемом приложении платформы 1С:Предприятие 8.3 формы списков строятся на базе элемента ДинамическийСписок. Он позволяет гибко настроить как цвет строк, так и порядок их вывода без внесения изменений в конфигурацию и написания кода.

Проанализируем пошаговый порядок настройки оформления и сортировки:

  1. Откроем форму списка нужного документа (например, ПриемНаРаботу).
  2. Нажмем кнопку Еще и выберем пункт Настроить список....
  3. Перейдем на вкладку Условное оформление и добавим новый элемент оформления.
  4. В поле Оформление установим галочку напротив параметра Цвет текста или Цвет фона и выберем красный цвет.
  5. Перейдем на вкладку Условие. Добавим новое условие для поля с датой (например, ДатаОкончанияСрокаДоговора). В качестве вида сравнения укажем Меньше или равно, а в значении выберем относительную дату — Начало этого дня или Сегодня.
  6. Перейдем на вкладку Сортировка окна настройки списка и добавим поле ДатаОкончанияСрокаДоговора с порядком По возрастанию. В таком случае документы с прошедшими датами будут выводиться в самом начале списка.

Способ 2. Программное заполнение признака и работа с регламентными заданиями

Если требуется зафиксировать статус истечения срока непосредственно в базе данных или форма списка работает в режиме обычного приложения, рассмотрим вариант с использованием дополнительного реквизита типа Булево.

Разберем логику реализации этого подхода:

  1. В конфигураторе добавляем в документ реквизит СрокДоговораИстек с типом Булево.
  2. Создаем регламентное задание, которое запускается каждое утро и проверяет условия по всем активным документам:

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПриемНаРаботу.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ПриемНаРаботу КАК ПриемНаРаботу
    |ГДЕ
    |	ПриемНаРаботу.ДатаОкончанияСрокаДоговора <= &ТекущаяДата
    |	И НЕ ПриемНаРаботу.СрокДоговораИстек";

Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДата()));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ДокументОбъект.СрокДоговораИстек = Истина;
    ДокументОбъект.Записать();
КонецЦикла;

После выполнения этого задания в форме списка достаточно настроить условное оформление по условию СрокДоговораИстек = Истина, а также установить сортировку по этому полю по убыванию, чтобы все просроченные записи сгруппировались в начале таблицы.

Способ 3. Использование встроенных подсистем «Заметки и напоминания» и «Задачи»

Рассмотрим альтернативный вариант решения бизнес-задачи. Принудительное перекрашивание и постоянная пересортировка общего списка документов могут мешать повседневной работе других пользователей. В типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП) для подобных целей предусмотрены специальные механизмы:

  1. Подсистема напоминаний: позволяет привязывать персональные напоминания к произвольным объектам базы данных. Пользователь может установить напоминание на конкретную дату или за несколько дней до события. При наступлении указанного времени программа выведет всплывающее окно.
  2. Бизнес-процессы и задачи: если по истечении срока договора требуется выполнить конкретное действие, целесообразно формировать объект ЗадачаИсполнителя. В этом случае нужная запись появится у ответственного сотрудника на рабочем столе в виджете «Мои задачи».
← На главную