Окрасить строку табличной части по условию

1. amadeus2011 13.09.15 23:03 Сейчас в теме
Добрый вечер столкнулся с такой ситуацией. В УТ 10.3 в документе поступление товаров, реализация товаров необходимо окрашивать строки табличной части если срок годности номенклатуры меньше или равно 30, 60, 90 дней от срока годности. Решение: в процедуре товары при выводе строки создал такой код:
Дата90дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -3);
Дата60дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -2);
Дата30дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -1);
СрокГодности = ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности;



Если СрокГодности <=Дата90дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Зеленый;
ИначеЕсли СрокГодности <= Дата60дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Оранжевый;

ИначеЕсли СрокГодности <= Дата30дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Красный;
КонецЕсли;
при открытии документа вся табличная часть окрашена в зеленый цвет за исключением тех строк в колонке которых указан срок годности. Срок годности добавляется в серии номенклатуры. Пока никак не могу сообразить как сделать правильную проверку по условию
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. YNik 14.09.15 02:07 Сейчас в теме
(1) amadeus2011, как срок годности может быть меньше, чем тот же срок годности, уменьшенный на 3(2,1) месяца?
Поэтому строки и не окрашиваются, а окрашиваются зеленым только строки с пустым сроком, т.к. вычитая от пустой даты 3 месяца, пустую дату и получим.
Вам, наверное, надо сравнивать Дата90дней (и другие) с датой документа или текущей датой.
3. TMV 14 14.09.15 08:35 Сейчас в теме
4. TMV 14 14.09.15 08:36 Сейчас в теме
(1) amadeus2011, и лучше использовать ПриПолученииДанных, а не ПриВыводеСтроки.
7. Prionix 14.09.15 10:02 Сейчас в теме
(1) amadeus2011, в своем условии поменяй проверку местами. Вначале Дата30дней, Дата60дней, Дата90дней
superkuzja; +1 Ответить
8. superkuzja 3 14.09.15 10:28 Сейчас в теме
(1) amadeus2011, (6) и (7) - тебе точно помогут!
5. amadeus2011 14.09.15 09:07 Сейчас в теме
по существу надо сделать такую проверку. Если до истечения срока годности товара остается 30 или 60 дней тогда строка должна окрашиваться в определенный цвет.
6. Xershi 1496 14.09.15 09:10 Сейчас в теме
(5) amadeus2011, проверка:
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности) Тогда 
ТвойКод
superkuzja; +1 Ответить
9. amadeus2011 14.09.15 10:42 Сейчас в теме
я изменил свой код по вашим советам на такой
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности) Тогда

Если СрокГодности <Дата30дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Красный;
ИначеЕсли СрокГодности < Дата60дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Оранжевый;

ИначеЕсли СрокГодности < Дата90дней Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Зеленый;
КонецЕсли;
КонецЕсли;
но при открытии в полях где не указан срок годности товара строки окрашены в зеленый цвет, а где срок годности есть без цвета. Мне нужно сделать такую проверку что если срок годности 30.12.15 меньше срок годности 30.12.15.-30 дней тогда цвет строки красный.
11. Xershi 1496 14.09.15 10:49 Сейчас в теме
(9) amadeus2011, очерти границы в своем условии через "и".
12. Xershi 1496 14.09.15 10:50 Сейчас в теме
(9) amadeus2011, у тебя выходит срок годности = 10, ага он меньше 30, цвет красный, ага он меньше 60 уже цвет оранжевый и опа он меньше и 90 и теперь он зеленый.
13. YNik 14.09.15 11:47 Сейчас в теме
(9) amadeus2011, прочитай внимательно (2),
если срок годности 30.12.15 меньше срок годности 30.12.15.-30 дней тогда цвет строки красный

как срок годности 30.12.15 может быть меньше срок годности 30.12.15.-30 дней(=30.11.15)?
10. amadeus2011 14.09.15 10:45 Сейчас в теме
возможно условие не работает из-за того что не во всех полях указан срок годности
14. amadeus2011 14.09.15 12:06 Сейчас в теме
т.е предлагаете сделать так если срок годности меньше 90 и срок годности больше 60 тогда цвет зеленый
иначе если срок годности меньше 60 и больше 30 то цвет оранжевый
иначе если меньше равно 30 то цвет красный?
правильно понял?
15. Xershi 1496 14.09.15 12:11 Сейчас в теме
16. spacecraft 14.09.15 12:34 Сейчас в теме
(14) amadeus2011, похоже Вам морочат голову :)
Проблема вот тут:
Дата90дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -3);
Дата60дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -2);
Дата30дней = ДобавитьМесяц(Дата(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности), -1); 

СрокГодности сравниваете со СрокГодности-30, -60 и -90.
Смотрите, что у Вас получается:
С = 1;
А = С - 30;
Б = С - 60;
В = С - 90;
Если С < А Тогда
...//1
ИначеЕсли С < Б Тогда
...//2
ИначеЕсли С < В Тогда
...//3
КонецЕсли;
Показать

Надо условие проверки (с чем сравнивать) менять.
17. amadeus2011 14.09.15 13:47 Сейчас в теме
(16) это понятно что должно быть сравнение с чем-то. Вопрос в том что как программа узнает что до истечения срока годности осталось 30 дней или 60 дней от даты создания документа или текущей даты?
18. spacecraft 14.09.15 13:57 Сейчас в теме
(17) amadeus2011, В том-то и дело, что программе все равно. Это Вы сами должны бизнес логику написать.
СекундВСутках = 3600*24;
ОасталосьСрокГодности = ТекущаяДата() - СрокГодности;
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности) Тогда

Если ОасталосьСрокГодности  < 30*СекундВСутках Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Красный;
ИначеЕсли ОасталосьСрокГодности  < 60*СекундВСутках Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Оранжевый;

ИначеЕсли ОасталосьСрокГодности  < 90*СекундВСутках Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Зеленый;
ИначеЕсли ОасталосьСрокГодности  < 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Малиновый;
КонецЕсли;
КонецЕсли; 
Показать
20. Frogger1971 14.09.15 14:01 Сейчас в теме
(18) spacecraft,
ОасталосьСрокГодности = ТекущаяДата() - СрокГодности;

по логике здесь ВСЕГДА будет отрицательное число, вы же не торгуете просроченным товаром! ))))
21. spacecraft 14.09.15 14:03 Сейчас в теме
(20) Frogger1971, да. спасибо. Поменять местами надо.
19. Frogger1971 14.09.15 13:59 Сейчас в теме
(17) amadeus2011, вообще-то у вас должно быть так
СрокГодности = (ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности - ДатаДок) / 60 * 60 * 24;
Если СрокГодности < 30 Тогда
 // красный
ИначеЕсли СрокГодности < 60 Тогда
 // желтый
ИначеЕсли СрокГодности < 90 Тогда
 // зеленый
Иначе
 // не расскрашиваем
КонецЕсли;
Показать
22. amadeus2011 14.09.15 14:52 Сейчас в теме
23. amadeus2011 14.09.15 14:54 Сейчас в теме
конечно же компания не торгует просроченным товаром, нужно просто знать менеджерам и руководству у какого товара истекает срок годности
24. amadeus2011 14.09.15 15:15 Сейчас в теме
(19 spacecraft, я на основе вашего кода сделал так
СрокГодности = (ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности - Дата) / 60 * 60 * 24;
Если СрокГодности < 30 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Красный;
ИначеЕсли СрокГодности < 60 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Оранжевый;
ИначеЕсли СрокГодности < 90 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Зеленый;
КонецЕсли;

при этом в документе все строки окрашены в зеленый цвет, кроме тех в которых в поле срок годности стоит срок годности. Связано ли это как-то с тем что не все поля срок годности заполнены?
25. spacecraft 14.09.15 17:10 Сейчас в теме
(24) amadeus2011, это не на основе моего...
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности) Тогда
26. Frogger1971 14.09.15 17:42 Сейчас в теме
(24) amadeus2011, создайте в табличной части две колонки - Дата годности, куда будете писать СерияНоменклатуры.СрокГодности, вторую, в которую будете писать СрокГодности и сразу увидите ВСЕ варианты ответов на ваши вопросы
27. amadeus2011 15.09.15 10:05 Сейчас в теме
спасибо, сейчас в документе изменяется цвет строки номенклатура. Я сделал так:
СрокГодности = ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности;


СекундВСутках = 3600*24;
ОасталосьСрокГодности = ТекущаяДата() - СрокГодности;
Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки.СерияНоменклатуры.СрокГодности) Тогда

Если ОасталосьСрокГодности < 30*СекундВСутках Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = WebЦвета.Красный;
ИначеЕсли ОасталосьСрокГодности < 60*СекундВСутках Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона= WebЦвета.Оранжевый;

ИначеЕсли ОасталосьСрокГодности < 90*СекундВСутках Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = WebЦвета.Зеленый;
ИначеЕсли ОасталосьСрокГодности < 0 Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона= WebЦвета.Малиновый;
КонецЕсли;
КонецЕсли;
Хотел бы по ходу спросить как можно сделать так чтобы колонка цена изменяла цвет при изменении значения цены и при пересчете типа цен
28. Xershi 1496 15.09.15 10:31 Сейчас в теме
(27) amadeus2011, точно так же. Пишешь условие, меняешь цвет.
30. spacecraft 15.09.15 13:12 Сейчас в теме
(27) amadeus2011, я тут не совсем верно указал
ИначеЕсли ОасталосьСрокГодности < 0 Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона= WebЦвета.Малиновый; 

Это условие поставить первым, иначе оно никогда не выполнится. (Если конечно оно нужно).
29. amadeus2011 15.09.15 12:00 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот