Не фильтрует в отчетах по наличию модуля Складской учет.
Формирую например, Галактика ERP \ Логистика \ Складской учет \ Отчеты \ Наличие \ Наличие\по складам
Ставлю фильтр по одной группе МЦ, в отчете получаю множество МЦ, в том числе не входящие в эту группу.
Возможно проявление проблемы и на других фильтрах.
Проявляется только на платформах MSSQL и Oracle, т.к. ошибка содержится в той части логики, которая завязана на использование DSQL.
Ошибка состоит в следующем
В интерфейсе L_Ostatki::Store в приватной функции function FillFiltFromPick(_pickConst: word): boolean; (код ниже) допущена ошибка.
Код: Выделить всё
function FillFiltFromPick(_pickConst: word): boolean;
{
var sql_result, cntRec: integer;
cntRec := 0;
result := false;
_loop PickFilter where (( _pickConst == PickFilter.wList ))
{
sql_result := sqlExecDirect('INSERT INTO pick_' + string(_pickConst) + ' (nRec) VALUES (' + ' #comp(' + string(PickFilter.cRec) + '))');
if (sql_result = tsOk)
cntRec++
}
if (cntRec > 0)
result := true;
}
Необходимо поменять тип переменной на Longint.
При фильтрации по ОДНОЙ группе МЦ фильтрация ломается также потому, что логика сразу выбирает все МЦ, подходящие по фильтру по группе МЦ, а потом пытается закачать их в DSQL-фильтр уже не по группе МЦ, а по МЦ, и если МЦ в базе данных много, то _pickConst добирается до отрицательных значений и всё ломается.
ПИР 102.123147
Вот как можно починить до выхода патчей.
Нужно скомпилить нижеследующее счастье в компоненту L_Ostatki (#component "L_Ostatki")
Код: Выделить всё
alter interface Store 'Функция расчета остатка на дату', EscClose, Blue;
overload
function FillFiltFromPick(_pickConst: word): boolean;
end;
function FillFiltFromPick(_pickConst: word): boolean;
{
var sql_result : integer;
var cntRec : longint;
cntRec := 0;
result := false;
_loop PickFilter where (( _pickConst == PickFilter.wList ))
{
sql_result := sqlExecDirect('INSERT INTO pick_' + string(_pickConst) + ' (nRec) VALUES (' + ' #comp(' + string(PickFilter.cRec) + '))');
if (sql_result = tsOk)
cntRec++
}
if (cntRec > 0)
result := true;
}
end.