Страница 1 из 2
Формула с пустой датой
Добавлено: 30 мар 2018, 17:01
$Expert
Используя формулу if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400,0) , где [536] - дата фактического выполнения задачи, а [527] - регламентная дата выполнения, расчитываю дни просрочки срока выполнения задачи. Но, если задача ещё не выполнена, но регламентный срок прошёл, то значение [536]>0 не верно и задачи не учитываются. Подскажите, как в данном случае составить формулу, что бы в случае пустого значения [536] считалась текущая дата?
Спасибо.
Re: Формула с пустой датой
Добавлено: 30 мар 2018, 18:29
support
в качестве текущей даты можно использовать функцию now()
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 00:25
$Expert
Сергей! Я, к сожалению, не смог сам разобраться, что с этим делать.
Подскажите, пожалуйста, как это будет выглядеть в моём случае.
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 08:12
support
Если вам нужно взять текущую дату в секундах, то вместо [536] использовать now() или вместо 0, но так как все даты в Руководителе в timestamp то нам еще нужно ее преобразить
Код: Выделить всё
UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))
и вставляем это в нашу формулу
Код: Выделить всё
if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-[527])/86400)
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 11:20
$Expert
support писал(а): 31 мар 2018, 08:12
Если вам нужно взять текущую дату в секундах, то вместо [536] использовать now() или вместо 0, но так как все даты в Руководителе в timestamp то нам еще нужно ее преобразить
Код: Выделить всё
UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))
и вставляем это в нашу формулу
Код: Выделить всё
if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-[527])/86400)
Вставил, но в таком случае получилось, что формула вставляет разницу между текущей датой и датой завершения [527] в случае, если возвращается пустое значение или 0. Но пустое значение должно возвращаться и в случае, если просрочки нет, т.е. если дата фактического выполнения [536] меньше или равна плановой дате завершения [527]. Вот в чем проблема - теперь у в срок завершенных задач появилась просрочка, посчитанная от текущей даты.
Как же составить формулу, что бы разница выводилась только в случае, если [536]=0, а в случае [536]>0 - возвращалось пустое значение ' ' ???
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 12:24
support
ну тут вы можете сделать вложенные условие, к примеру
Код: Выделить всё
if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400, if([536]=0 and [536]>0,...,...))
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 14:36
$Expert
Сергей! Ну что я делаю не так? Ну ни как не получается...
Код: Выделить всё
if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400, if([536]=0 and [527]>0,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-[527])/86400),0)
Вот ошибка:
Код: Выделить всё
Database Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),0) ) as field_528 from app_entity_52 e where e.id>0 and (field_530 in (84) ' at line 1
Query: select e.* , (if(e.field_536>0 and e.field_527>0 and e.field_536>e.field_527,(e.field_536-e.field_527)/86400, if(e.field_536=0 and e.field_527>0,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-e.field_527)/86400),0) ) as field_528 from app_entity_52 e where e.id>0 and (field_530 in (84) and FROM_UNIXTIME(e.field_527,'%Y-%m-%d')0) and e.parent_item_id in (select item_id from (select e.id as item_id , ( (select count(*) from app_entity_52 func100 where func100.id>0 and func100.parent_item_id=e.id ) ) as field_201, ( (select count(*) from app_entity_52 func100 where func100.id>0 and (field_530 in (84) ) and func100.parent_item_id=e.id ) ) as field_202, ( (select count(*) from app_entity_52 func100 where func100.id>0 and (FROM_UNIXTIME(func100.field_527,'%Y-%m-%d')0 and field_530 in (84) ) and func100.parent_item_id=e.id ) ) as field_203 from app_entity_21 e where e.id>0 ) as parent_entity_21 ) limit 0, 10
Page: /index.php?module=items/listing
Re: Формула с пустой датой
Добавлено: 31 мар 2018, 17:10
support
Со скобками напутали, вот должен быть рабочий вариант:
Код: Выделить всё
if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400, if([536]=0 and [527]>0,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-[527])/86400,0))
Re: Формула с пустой датой
Добавлено: 01 апр 2018, 12:27
$Expert
Огромное спасибо! Расчёт заработал, но это странным образом отразилось на другом функционале. У меня была задача, которая не была выполнена в срок по веской причине. Я изменил плановую дату [527] и вот к чему это привело:
Warning: mysqli_query(): (22003/1690): BIGINT UNSIGNED value is out of range in '(unix_timestamp(str_to_date(now(),'%Y-%m-%d')) - `host1497730`.`e`.`field_527`)' in /home/host1497733/vvvgroup.ru/htdocs/tm/includes/functions/database.php on line 65
Database Error: 1690 - BIGINT UNSIGNED value is out of range in '(unix_timestamp(str_to_date(now(),'%Y-%m-%d')) - `host1497730`.`e`.`field_527`)'
Query: select e.* , (if(e.field_536>0 and e.field_527>0 and e.field_536>e.field_527,(e.field_536-e.field_527)/86400, if(e.field_536=0 and e.field_527>0,(UNIX_TIMESTAMP(STR_TO_DATE(now(),'%Y-%m-%d'))-e.field_527)/86400,0))) as field_528 from app_entity_52 e where id='113'
Page: /index.php?module=items/&action=save&id=113
Причём это затронуло всю сущность Задачи в рамках проекта, в котором задача находится. В других проектах всё нормально. А в данном проекте данная ошибка отображается сразу после выбора: Задачи - Показать все
Re: Формула с пустой датой
Добавлено: 01 апр 2018, 12:48
$Expert
Ещё одна особенность: у меня на главной сформирован отчёт по задачам, так вот, при переходе в любую другую Задачу из "проблемного" проекта с этого отчёта, сама задача открывается. Если же я настраиваю фильтры так, чтобы отобразить в отчёте ту задачу, в которой менял дату и подобные ей, то отчёт также выдает ошибку.