[УФ] Условное форматирование таблицы формы по сложному условию

1. Drivingblind 232 25.01.21 06:15 Сейчас в теме
Всем привет!
Столкнулся со следующей задачей: в документе "Установка цен номенклатуры" (ERP 2.4) необходимо выделять цветом те ячейки, которые отличаются от минимальных или максимальных цен продажи за какой-либо период больше, чем на заданный процент отклонения. При выделении цветом ячеек также необходимо пересчитывать валюты (т.к. у разных видов цен валюты могут отличаться) и упаковки.

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

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

Подскажите, пожалуйста, каким образом наиболее правильно решить поставленную задачу.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 25.01.21 06:46 Сейчас в теме
Зачем куча реквизитов? Всего одного реквизита формы в тч будет достаточно. Заполнять его по условию и красить.
3. Drivingblind 232 25.01.21 07:05 Сейчас в теме
(2) нет, одного реквизита будет недостаточно.
Условие получается примерно следующее: ([ЦенаВКолонке] больше или равно [МинимальнаяЦена] - [ДопустимоеОтклонение] И [ЦенаВКолонке] меньше или равно [МинимальнаяЦена] + [ДопустимоеОтклонение]) ИЛИ ([ЦенаВКолонке] больше или равно [МаксимальнаяЦена] - [ДопустимоеОтклонение] И [ЦенаВКолонке] меньше или равно [МаксимальнаяЦена] + [ДопустимоеОтклонение])
такое условие нужно будет задать для каждой колонки с ценой, которых пользователей может выбрать достаточно много.

...и это условие без учета валют и упаковок. Каждая цена может быть в своей валюте и упаковке, которые тоже нужно пересчитывать при сравнении с максимальной и минимальной ценой.
4. comptr 35 25.01.21 07:18 Сейчас в теме
Не нужно загонять всё условие в условное оформление. Можно на каждую колонку цены добавить свою колонку с типом булево, которая будет хранить расчет условия, и уже на неё вешать простое условие "ВалютаХ_Отличается Равно Истина".
Скорее всего, условное оформление придётся делать программно, если количество валют неизвестно.
Drivingblind; +1 Ответить
5. Drivingblind 232 25.01.21 07:27 Сейчас в теме
(4) интересная мысль, спасибо.
Программная установка условного оформления меня не смущает. Вся модификация формы предполагается программно.

Вопрос тогда следующий: как, на ваш взгляд, обрабатывать изменение цены? Каждый раз вызывать сервер и пересчитывать значение? Закешировать рассчитанные значение в реквизит формы?
6. comptr 35 25.01.21 07:32 Сейчас в теме
(5)
как, на ваш взгляд, обрабатывать изменение цены? Каждый раз вызывать сервер и пересчитывать значение?

А какие ещё варианты? Насколько я помню, там не динамический список, который бы мог сам всё пересчитывать. И в этой форме уже есть процедуры типа "ЦенаХ_ПриИзменении", скорее всего этот обработчик подключен программно, либо висит обработчик "ТабличноеПолеПриИзменении" или "ТабличноеПолеПриОкончанииРедактирования".
Drivingblind; +1 Ответить
7. Drivingblind 232 25.01.21 07:55 Сейчас в теме
(6) Пока попробую следующий вариант:
На каждую колонку таблицы добавить колонку с типом булево, как вы посоветовали в (4)
Закешировать на форме таблицу с колонками: Номенклатура, Характеристика, Валюта, МинЦена1, МинЦена2, МаксЦена1, МаксЦена2.
Закешировать курсы валют (для этого есть типовые механизмы).
Тогда всё можно будет пересчитывать на клиенте. К серверу обращаться только при изменении упаковки. В типовом поведении формы, кстати, тоже идёт обращение к серверу при изменении упаковки.
8. SlavaKron 25.01.21 08:21 Сейчас в теме
(7) Лучше иметь 1 явный серверный вызов, чем неопределенное количество неявных. А при работе с данными формы коллекция, они гарантированы.
Оставьте свое сообщение

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