Восстановил из *.bak-файла базу данных. Развернул на другой машине - все работает, кроме разделов Контакты и Контрагенты. При попытке сохранить dataset вылетает обшибка 'list index out of bounds (0)'

Продукт Terrasoft Sales, версия 3.4.0.53
База данных бекапилась на MS SQL 2005. Восстанавливали и на 2005 и на 2008 - результат одинаковый.
Все остальное работает. Ошибка выскакивает в момент сохранения в скрипте:

function SaveChanges(BaseDBEdit, Window) {
        var AddNewRecordOnPage = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('IsAppend') = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('RecordID') = BaseDBEdit.RecordID;
        var PostResult = BaseDBEdit.Dataset.Post();
        Window.Attributes('AddNewRecordOnPage') =
                (AddNewRecordOnPage && PostResult > 0);
        var Result = ((PostResult == 1) || (BaseDBEdit.RecordAlreadySaved));
        return Result;
}

на строке var PostResult = BaseDBEdit.Dataset.Post();выкидывает сразу в исключение
catch (e) {
                System.MessageDialog(e.message, mdtError, mdbOK, 0);
                Result = false;
        }

        return Result;

функции SaveChangesWithCheck(Window, BaseDBEdit, DoNotSendNotify).
Каким образом это можно исправить?

Нравится

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

Проблему решил сам, хватило лишь выполнить запрос

sp_change_users_login 'auto_fix', 'fkeys'

возможно кому-то поможет

Либо может еще отработать скрипт:
sp_change_users_login 'Update_one', 'fkeys', 'fkeys'

Арсений Белецкий
Техническая поддержка Terrasoft

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

используемый продукт Terrasoft CRM x25 (3.2.0.21)

Предпосылки
Пытаюсь использовать хранимую процедуру Oracle с возвращаемыми параметрами

Вызов средствами террасофт
var Parameters = System.CreateObject('TSObjectLibrary.Parameters');
var ReturnParameter = Parameters.CreateItem();
ReturnParameter.Name = 'P1';
ReturnParameter.ParamType = 2;
ReturnParameter.DataType = pdtInteger;
ReturnParameter.Value = 53;
Parameters.Add(ReturnParameter);
var ReturnParameter2 = Parameters.CreateItem();
ReturnParameter2.Name = 'P2';
ReturnParameter2.ParamType = 2;
ReturnParameter2.DataType = pdtString;
Parameters.Add(ReturnParameter2);
var SQL = 'begin select PKG_DOCUTILS.Test1( :pP1 ) into :pP2 from dual; end;';
try {
Connector.DBEngine.ExecuteCustomSQL(SQL, Parameters);
} catch (e) {
Log.Write(1, e.message);
}

Пакет oracle 10.2

PACKAGE PKG_DOCUTILS
IS
FUNCTION Test1 (t1 IN OUT NUMBER)
RETURN VARCHAR2;
END; -- Package spec

PACKAGE BODY PKG_DOCUTILS
IS
FUNCTION Test1 (t1 IN OUT NUMBER)
RETURN VARCHAR2
IS
BEGIN
t1 := 123;
RETURN 'begin - ' || TO_CHAR (t1) || ' - test-ok';
END;
END;

При выполнении появляется ошибка
"ORA-06572: Функция TEST1 имеет внешний аргумент ORA-06512: на line 1"

Собственно вопрос
Как воспользоваться функциональностью описанной в статьях?
http://community.terrasoft.ua/node/2171
http://terrasoft.com.ua/sdk/_InputOutputParamTypeEnum.html

Нравится

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

спасибо
поменял функцию на процедуру и
var SQL = 'begin PKG_DOCUTILS.Test1( :pP1 ); end;';

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