ух ты... а давайте попробуем, на самом деле
итак.
ЗАДАЧА:
в действии над объектами понять, есть ли запущенные работы по текущему объекту. На основе этого действие уже будет принимать решение, разрешать запускать какие либо работы по этому объекту или нет.
РЕШЕНИЕ:
получаем строку, содержащую названия работ, запущенных по текущему объекту, но пока незавершенных. при этом работы, которые находятся на последнем этапе (то есть процесс практически закончен - юзер только кнопку ОК не нажал) в эту строку не попадают. и затем уже стандартными функциями редактора действий
Код: Выделить всё
GoTo ( if((var_temp_str not like '%внешнее согласование%'), 'Марка_next2', 'Марка_err2') )
или
GoTo ( if((var_temp_str not like '%окончательное согласование%'), 'Марка_next3', 'Марка_err3') )
настраиваем логику работы.
SQL-запрос:
Код: Выделить всё
var_temp_str = Set ( f_ExecSQLSelect_2('
select maps.description
from
lsdbo.wf_maps_view maps
where
id in
( SELECT DISTINCT lsdbo.wf_mail_v.map_id
FROM
lsdbo.wf_attachments_view
, lsdbo.wf_mail_docs_v
, lsdbo.wf_mail_v
WHERE
lsdbo.wf_attachments_view.id = lsdbo.wf_mail_docs_v.attachment_id
and
lsdbo.wf_mail_docs_v.mail_id = lsdbo.wf_mail_v.id
and
lsdbo.wf_mail_v.map_id is not NULL
and
lsdbo.wf_attachments_view.app_id = ~'' + Var_P + '~'
and
lsdbo.wf_attachments_view.object_id = ~''+ Var_OBJ + '~'
and
lsdbo.wf_attachments_view.doc_id = ~''+string(a_Object)+'~')
and
maps.state = ~''+Var_map_state+'~'
and
maps.id not in
(select pos.map_id
from lsdbo.wf_map_cur_pos_v pos
, lsdbo.wf_map_nodes_view nodes
where pos.map_object_id = nodes.map_object_id
and
nodes.text =~''+var_map_node_name+ '~')',
'',''))
смысл переменной a_Object понятен, поясню остальные.
Var_P и Var_OBJ - строковые переменные, в которых записано 'P' и 'OBJ' соответственно
Var_map_state - строковая переменная, содержит 'B' (то есть "Не завершена"
Var_map_node_name - строковая переменная, содержит 'Окончание работы'
пришлось делать строковые переменные, так как я не смог быстро понять, как вставлять строку в текст запроса
