Скрипт перестал считать

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

        var Owner1ID = '{DA22F982-37AE-424B-855F-8DD3F728437A}';
        var Owner2ID = '{06789BA0-B0E4-4240-A750-FEA6A25C215F}';
        var Owner3ID = '{4065F8D8-34B5-4406-B052-C2E17010C41E}';

    var TaskCount1 = GetWFTaskCountByOwner(Owner1ID);
//MessageBox(TaskCount1);
    var TaskCount2 = GetWFTaskCountByOwner(Owner2ID);
//MessageBox(TaskCount2);
    var TaskCount3 = GetWFTaskCountByOwner(Owner3ID);
//MessageBox(TaskCount3);
    var ResultOwnerID;

//TaskCount1 = TaskCount1 / 1;
//TaskCount2 = TaskCount2 / 1;
//TaskCount3 = TaskCount3 / 1;

        if (TaskCount1 TaskCount2) {
                if (TaskCount1 TaskCount3) {
                        ResultOwnerID = Owner1ID;
                } else {
                        if (TaskCount2 TaskCount3) {
                                ResultOwnerID = Owner2ID;
                        } else {
                                ResultOwnerID = Owner3ID;
                        }
                }
        } else {
                if (TaskCount1 TaskCount3) {
                        ResultOwner = Owner1ID;
                } else {
                        if (TaskCount2 TaskCount3) {
                                ResultOwner = Owner2ID;
                        } else {
                                ResultOwner = Owner3ID;
                        }
                }
        };
//      MessageBox(ResultOwner);
        ScriptItem.ParentItems.ParentDiagram.Parameters('OwnerID').Value = ResultOwner;

вот код скрипта, из которого берется значение в GetWFTaskCountByOwner
SELECT
        COUNT(CAST([tbl_Task].[ID] AS VARCHAR(38))) AS [TaskCount]
FROM
        [dbo].[tbl_Task] AS [tbl_Task]
WHERE([tbl_Task].[TypeID] = :MeetingTaskTypeID AND
        NOT [tbl_Task].[WorkflowItemID] IS NULL AND
        [tbl_Task].[OwnerID] = :OwnerID)

все хорошо и замечательно, вот только решили добавить в запрос новое ограничение в where, а точнее отбирать еще и по статусу задач
после этого скрипт по прежнему работает корректно, значения в TaskCount-ы присваиваются корректные (проверял закомментированными messagebox-ами), но ResultOwner становится не определенным, из-за чего в программе возникает ошибка, судя по всему сравнения не производится, но вот почему?
может кто подскажет что могло случится

Нравится

3 комментария

Два вопроса:
1. Почему такие сравнения для определения наименьшего из трех? Если нужно определить меньшее из TaskCount1, TaskCount2, TaskCount3, то вполне логично это делать таким образом:

if (TaskCount1 < TaskCount2) {
	if (TaskCount1 < TaskCount3) {
		Result = TaskCount1;
	} else { //TaskCount3 <= TaskCount1
		Result = TaskCount3;
	}
} else { //TaskCount2 <= TaskCount1
	if (TaskCount2 < TaskCount3) {
		Result = TaskCount2;
	} else { //TaskCount3 <= TaskCount2
		Result = TaskCount3;
	}
}

При том что код был излишен, так еще и неправильный.
Пусть в Вашем случае TaskCount1 = 5, TaskCount2 = 1, TaskCount3 = 10 (любые значения для условия TaskCount2 < TaskCount1 < TaskCount3). Ваш код выполнит присвоение ResultOwner = Owner1ID, что неправильно. Остальные варианты значений количества задач отработаются правильно.

2. Какой код функции GetWFTaskCountByOwner? Туда все еще передается один параметр, или же после добавления нового параметра и фильтра в запрос для подсчета количества задач нужный параметр также передается и в функцию? Добавлены ли и новый параметр, и фильтр сравнения в запрос на подсчет количества, совпадают ли их названия со значением аргумента функции фильтрации датасета?

function GetWFTaskCountByOwner(OwnerID) {
	var SelectQuery = GetSingleItemByCode('sq_GetWFTaskCountByOwner');
 
    ApplySelectQueryFilter(SelectQuery, 'OwnerID', OwnerID, true);
 
	var Dataset = SelectQuery.Open();
	var TaskCount = Dataset.Values('TaskCount');
 
	Dataset.Close();
	return TaskCount;
}

фильтр один, изменился только код sql на

SELECT
	COUNT(CAST([tbl_Task].[ID] AS VARCHAR(38))) AS [TaskCount]
FROM
	[dbo].[tbl_Task] AS [tbl_Task]
WHERE([tbl_Task].[TypeID] = :MeetingTaskTypeID AND
	NOT [tbl_Task].[WorkflowItemID] IS NULL AND
	[tbl_Task].[OwnerID] = :OwnerID AND
	[tbl_Task].[StatusID] = :StatusID)

:StatusID прописан в запросе

нашел свою ошибку, вопрос снимается

Показать все комментарии