Доброго времени суток!

Пишу самописную конфу для учёта движения служебных записок.
Так вот нужно чтобы в зависимости от оставшихся дней до "Срока исполнения" - поле типа "дата" на форме.
Подкрашивалась ячейка.
Например дедлайн через 4 дня - пусть горит красным, 5-7 дней - жёлтый, более 8 дней - зелёный цвет.
С обычными условиям сравнения проблем нет, тут более сложное условие и как-то не пойму где его задать.

Подскажите люди добрые, как лучше реализовать данную задачу?

Всем заранее спасибо за потраченное время и подсказки.
---
В запросе динамического списка запилить поле с количеством оставшихся дней. РАЗНОСТЬДАТ в помощь.
---
В запросе дин списка добавить поле &ТекущаяДата, этот параметр устанавливать программно при открытии формы, далее согласно сообщения 2 добавить поле с числом днем, вычислять через РАЗНОСТЬДАТ. А это числовое поле уже оформить.
---
Откройте свойства списка, установите галочку "ПроизволныйЗапрос", кликните по гиперссылке "Настройка списка". В открывшемся окне в текст запроса вставьте свое расчетное поле количества дней до дедлайна.
---
Попробуйте еще условное оформление задавать не в настройках динамического списка, а в форме.
---
У таблицы значения или у форма списка есть события "ПриПолученииДанных" и "ПриВыводеСтроки", вот пишите такой код:

Процедура ИмяТаблицыПриПолученииДанных(Элемент, ОформленияСтрок)

 Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
                ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
                Если ДанныеСтроки.СрокаИсполнения < Дата(2019, 02, 07) Тогда
   ОформлениеСтроки.Ячейки.СрокаИсполнения.ЦветФона = Новый Цвет(255, 0, 0);
                КонецЕсли;
        КонецЦикла;

КонецПроцедуры
---
В запросе динамического списка запилить поле с количеством оставшихся дней. РАЗНОСТЬДАТ в помощь.
---
В запросе дин списка добавить поле &ТекущаяДата, этот параметр устанавливать программно при открытии формы, далее согласно сообщения 2 добавить поле с числом днем, вычислять через РАЗНОСТЬДАТ. А это числовое поле уже оформить.
---
Можете при создании формы вычислить контрольные даты и программно добавить условное оформление.

```1c
    КонтрольныеДаты = Новый СписокЗначений;
    КонтрольныеДаты.Добавить(ТекущаяДата() - 4*86400, "Зеленый");
    КонтрольныеДаты.Добавить(ТекущаяДата() - 7*86400, "Желтый");
    КонтрольныеДаты.Добавить('00010101000000', "Красный");

    ДатаНачалаПериода = Неопределено;
    ДатаОкончанияПериода = Неопределено;

    Для каждого ЭлементСписка Из КонтрольныеДаты Цикл

    ДатаОкончанияПериода = ДатаНачалаПериода;
    ДатаНачалаПериода = ЭлементСписка.Значение;

    ЭлементУО = УсловноеОформление.Элементы.Добавить();
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета[ЭлементСписка.Представление]);

    ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Дата");

    Если ЗначениеЗаполнено(ДатаНачалаПериода) Тогда
    ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Дата");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ОтборЭлемента.ПравоеЗначение = ДатаНачалаПериода;
    КонецЕсли;

    Если ЗначениеЗаполнено(ДатаОкончанияПериода) Тогда
    ОтборЭлемента = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Дата");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
    ОтборЭлемента.ПравоеЗначение = ДатаОкончанияПериода;
    КонецЕсли;

    КонецЦикла;
```

Но это скорее для любителей хардкора, не советую так делать. :) Лучше как предложили коллеги, вычислить в запросе разность дат.
---
Попробовал так:

Предварительно добавил не видимую колонку "ДнейДоДедлайна"

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПолучитьДнейДоДедлайна()
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьДнейДоДедлайна()
    Запрос = Новый Запрос;
    Запрос.Текст =
    ("ВЫБРАТЬ
    | СлужебнаяЗаписка.Сроки КАК Сроки
    | РАЗНОСТЬДАТ(Сроки, &ТекущаяДата, ДЕНЬ);
    |ИЗ
    | Документ.СлужебнаяЗаписка КАК СлужебнаяЗаписка");
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    РезультатЗапроса = Запрос.Выполнить();
    Выборка=РезультатЗапроса.Выбрать();
    Для Каждого ЭлементСписка из Этаформа.Объект.ДнейДоДедлайна Цикл
    КонецЦикла
    КонецФункции
```

Выдаёт ошибку:
{Документ.СлужебнаяЗаписка.Форма.ФормаСписка.Форма(17)}: Ошибка при вызове метода контекста (Выполнить)
 РезультатЗапроса = Запрос.Выполнить();
по причине:
{(3, 2)}: Синтаксическая ошибка "РАЗНОСТЬДАТ(Сроки,"
<<?>>РАЗНОСТЬДАТ(Сроки, &ТекущаяДата, ДЕНЬ);
---
Запятую в конце первой строки выборки пропустил. Точка с запятой не нужна. И вообще, все не так делается)
---
от "всё не так делается", не очень легко )
Новичок, я не спорю, но я стараюсь )
---
ну натыкайте носом, где косячу, наставьте на путь истинный, так сказать )
---
Откройте свойства списка, установите галочку "ПроизволныйЗапрос", кликните по гиперссылке "Настройка списка". В открывшемся окне в текст запроса вставьте свое расчетное поле количества дней до дедлайна.
---
спасибо, уже сам нашёл, задал значение, но не работает (

```1c
    ВЫБРАТЬ
    ДокументСлужебнаяЗаписка.Ссылка,
    ДокументСлужебнаяЗаписка.ПометкаУдаления,
    ДокументСлужебнаяЗаписка.Номер,
    ДокументСлужебнаяЗаписка.Дата,
    ДокументСлужебнаяЗаписка.Проведен,
    ДокументСлужебнаяЗаписка.Инициатор,
    ДокументСлужебнаяЗаписка.Ответственный,
    ДокументСлужебнаяЗаписка.НаименованиеТоваров,
    ДокументСлужебнаяЗаписка.Цель,
    ДокументСлужебнаяЗаписка.Причины,
    ДокументСлужебнаяЗаписка.Сроки,
    ДокументСлужебнаяЗаписка.ИсточникФинансирования,
    ДокументСлужебнаяЗаписка.СпособЗакупки,
    ДокументСлужебнаяЗаписка.ОбщаяСтоимость,
    ДокументСлужебнаяЗаписка.ГВ,
    ДокументСлужебнаяЗаписка.ЗамГВ,
    ДокументСлужебнаяЗаписка.ГБ,
    ДокументСлужебнаяЗаписка.НачКонтра,
    ДокументСлужебнаяЗаписка.КомментГВ,
    ДокументСлужебнаяЗаписка.КомментЗамГВ,
    ДокументСлужебнаяЗаписка.КомментГБ,
    ДокументСлужебнаяЗаписка.КомментНачКонтра,
    ДокументСлужебнаяЗаписка.КОСГУ,
    ДокументСлужебнаяЗаписка.ЯвляетсяПродолжением,
    ДокументСлужебнаяЗаписка.Статус,
    ДокументСлужебнаяЗаписка.ДокиСданы,
    ДокументСлужебнаяЗаписка.Номенклатура,
    ДокументСлужебнаяЗаписка.ПричиныСЗ,
    ДокументСлужебнаяЗаписка.МоментВремени,
    РАЗНОСТЬДАТ(ДокументСлужебнаяЗаписка.Сроки, &ТекущаяДата, ДЕНЬ) КАК ДДД
    ИЗ
    Документ.СлужебнаяЗаписка КАК ДокументСлужебнаяЗаписка
```

Условия заданы, но не подкрашивает поле по условию...

```1c
    В модуле формы так:

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ТекущаяДата = ТекущаяДата();
    КонецПроцедуры
```
---
Неужели и ошибки при открытии формы никакой? О том, что не задан параметр?
---
сам удивлён
---
Тем не менее установите его:

```1c
    Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", ТекущаяДата());
```
---
в модуле формы же?
сделал в модуле и не помогло...
---
А выведите поле "ДДД" на форму.
---
спасибо за подсказку, там отрицательные значения, но должно же всё равно окрашивать как меньше 5...
---
Попробуйте еще условное оформление задавать не в настройках динамического списка, а в форме.
---
Огромное спасибо! Всё получилось )

Оказывается всё было очень просто...
---
Здравствуйте, вопрос по данной теме, не понял что как и куда, новичок в 1с, если у вас есть возможность можете скинуть базу?
---
Доброго времени суток, базой не получиться поделиться. Решение вопроса подробно расписано в данной теме. Читайте внимательнее.