![]() |
#1 |
Участник
|
Добрый день.
Возникла следующая задачка. Есть таблица с двумя полями. Одно поле - это Дата. Другое - Статус. Хочу сделать Статус вычисляемым полем: если Дата < Текущей даты, то Статус = Закрыт (иначе Активный) Как сделать? Цель сделать выч поле именно в таблице (а не на форме) в том, чтобы повесить на него validateField() и отслеживать изменение статуса. Подскажите, пожалуйста. Спасибо. |
|
![]() |
#2 |
Участник
|
Может стоит попробовать создать метод в таблице, который будет при определенном условии (например при переходе системной даты) бежать по таблице и менять значение этого поля? Насколько я знаю, такого типа как вычисляемое поле в таблицах Аксапты нет, для вычислений обычно используются display-методы
|
|
![]() |
#3 |
Участник
|
Как бы его написать только?
То есть как поставить обработчик на изменение системной даты. Кроме периодической пакетной обработки я пока ничего не придумал... Хотя вылядит слишком тяжеловесно. |
|
![]() |
#4 |
Участник
|
Идея смешная, но все таки - сделать табличку с 1 полем и одной записью. Назначение поля - дата последней обработки требуемой таблицы. И на вход юзеров в систему повесить запуск job'a, который проверяет соответствие системной даты и значения этого поля. Если оно меньше системной даты, вызывается обработчик на таблице и модифицируется значение этого поля значением системной даты. Т.о. юзер, который первым на текущую дату зайдет в систему, вызовет модификацию таблицы, а остальные ничего не заметят
![]() |
|
![]() |
#5 |
Участник
|
Не - так низя)).
Хотя бы потому, что не только люди используют данные, а еще и всякие программы. Получается вобще нельзя закладываться на активность пользователя. По-видимому, действительно нас спасет только обычная периодическая обработка... |
|
![]() |
#6 |
Участник
|
Тогда событие можно повесить на обращение к этой таблице при считывании данных. Первое обращение в день будет несколько замедлено, а остальные - нормально.. Просто я не знаю, как в Аксапте демона можно написать
![]() |
|
![]() |
#7 |
Участник
|
Вроде нужно класс RunBaseBacth отнаследовать и добавить там свою функциональность.
Там все вроде довольно удобно. Только я не знаю - мне кажется (пусть меня поправят если я ошибаюсь), что это метод для массивной (возможно распределенной) обработки данных, которую напр. нельзя проводить днем. А отслеживать значение поле - это вроде как из пушки по воробьям.. |
|
![]() |
#8 |
Участник
|
Попробуйте сделать средствами SQL
|
|
![]() |
#9 |
Участник
|
![]() Цитата:
Цитата:
![]() p.s. Вот тут прикольный совет на тему всяческого креатива в коде ![]() |
|
![]() |
#10 |
Участник
|
да тяжелая задачка
|
|
![]() |
#11 |
Участник
|
а зачем вообще такое поле, если оно всегда вычисляемое?
Проще сделать display метод. + если работать из других программ, то там тоже его вычислять в момент обработки |
|