Формула с пустой датой

Все вопросы/проблемы по установке и использовании.
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Формула с пустой датой

Сообщение $Expert »

Используя формулу if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400,0) , где [536] - дата фактического выполнения задачи, а [527] - регламентная дата выполнения, расчитываю дни просрочки срока выполнения задачи. Но, если задача ещё не выполнена, но регламентный срок прошёл, то значение [536]>0 не верно и задачи не учитываются. Подскажите, как в данном случае составить формулу, что бы в случае пустого значения [536] считалась текущая дата?
Спасибо.
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Формула с пустой датой

Сообщение support »

в качестве текущей даты можно использовать функцию now()
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Re: Формула с пустой датой

Сообщение $Expert »

Сергей! Я, к сожалению, не смог сам разобраться, что с этим делать.
Подскажите, пожалуйста, как это будет выглядеть в моём случае.
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Формула с пустой датой

Сообщение 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)
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Re: Формула с пустой датой

Сообщение $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 - возвращалось пустое значение ' ' ???
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Формула с пустой датой

Сообщение support »

ну тут вы можете сделать вложенные условие, к примеру

Код: Выделить всё

if([536]>0 and [527]>0 and [536]>[527],([536]-[527])/86400, if([536]=0 and [536]>0,...,...))
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Re: Формула с пустой датой

Сообщение $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
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Формула с пустой датой

Сообщение 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))
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Re: Формула с пустой датой

Сообщение $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
Причём это затронуло всю сущность Задачи в рамках проекта, в котором задача находится. В других проектах всё нормально. А в данном проекте данная ошибка отображается сразу после выбора: Задачи - Показать все
$Expert
Спонсор
Спонсор
Сообщения: 371
Зарегистрирован: 06 фев 2017, 23:32
Имя: Сергей
Откуда: Планета Земля

Re: Формула с пустой датой

Сообщение $Expert »

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