Buenos Dias, Amigos!

Господа, я человек новый, и ранее опыта работы с системой Terrasoft не имел, поэтому вопрос может быть через чур тривиальный (не судите строго).

Дано:
Таблица + select query + dataset
Скрипт

Найти:
Из скрипта хочу получить доступ к dataset'у через метод глобального объекта Services.GetNewItemByUSI('')*, дабы в нём поковыряться и в конечном итоге запустить код прямо из Дизайнера скрипта.

Имеем: ошибку выполнения jscript 5009 Undefined identifier в строке с инструкцией * (переменная Services в которой априори является глобальной) при сохранении файла.

Прошу пролить луч света и поделиться опытом в данных вопросах.

С уважением
Ваш коллега.

Нравится

17 комментариев

"Litvyakov Yegor Vladimirovich" написал:пролить луч света

http://msdn.microsoft.com/en-us/library/vstudio/6a8k3cz9

"Litvyakov Yegor Vladimirovich" написал:поделиться опытом

проверьте код. если не сохраняет сервис - 99% ошибка в синтаксисе кода

Благодарю, но первая ссылка в никуда. О чём говорит ошибка я знаю - переменная не объявлена а точнее равна undefined. Services - является глобальной переменной, сравни window в DOM верно? Соответственно, по логике, объявляться не должна. Вопрос был в этом.

"Андросов Дмитрий" написал:проверьте код. если не сохраняет сервис - 99% ошибка в синтаксисе кода

Это тоже ясно, я же написал что за ошибка.

Вопрос в том, как получить доступ из скрипта к глобальной переменной. (Возможно необходимо подключать дополнительные модули, или какие либо иные манипуляции с настройками сервиса скрипта?)

"Litvyakov Yegor Vladimirovich" написал:первая ссылка в никуда

приведите проблемный код с контекстом

Покажите фрагмент кода, на который ругается.

В информативном плане, на вопрос ссылка не отвечает.

var Dataset = Services.GetNewItemByUSI('<Здесь код моего dataset>'); // как раз на этой строчке компилятор выдаёт ошибку 5009
...

А что вместо многоточия?

"Зверев Александр" написал:А что вместо многоточия?

Может быть ошибаюсь, интерпретатору JS должно быть всё равно.

    Dataset.Open(); 
    Dataset.Edit();
    var Name = 'Hello World';
    Dataset('String') = Name;
    Dataset.Close();

Возможно здесь собака не глубоко зарыта. В большей степени я взаимодействовал с клиентским JS (ECMAScript).
В terrasoft объектная модель, стандартные функции и переменные, плохо документированы, хорошее представление сложно получить.
Поэтому рассчитываю на Вашу квалифицированную помощь, господа.

вообще-то компилятор может и неправильно строчку указывать

ради интереса попробуйте подключить скрипт scr_Utils и попробуйте использовать

var Dataset = GetSingleItemByCode('Здесь код моего dataset', 'любая строка (в т.ч. пустая)');

а еще - укажите версию бинарников

"Litvyakov Yegor Vladimirovich" написал:В большей степени я взаимодействовал с клиентским JS

эта фраза наводит на мысль, что взаимодействовали вы не из приложения Terrasoft...
а вы где пишете код, если не секрет?

"Андросов Дмитрий" написал:вообще-то компилятор может и неправильно строчку указывать
тоже верно
"Андросов Дмитрий" написал:а вы где пишете код, если не секрет?

В приложении Terrasoft CRM Administrator.

"Андросов Дмитрий" написал:ради интереса попробуйте подключить скрипт scr_Utils и попробуйте использовать var Dataset = GetSingleItemByCode('Здесь код моего dataset', 'любая строка (в т.ч. пустая)');

Выдаёт другую ошибку 5007 Объект отсутствует.(

если вы это сделали

"Litvyakov Yegor Vladimirovich" написал:попробуйте подключить скрипт scr_Utils

тогда не знаю - видимо у вас какая-то проблема все-таки с Services.

Попробуйте перерегистрировать библиотеки
если не знаете как:
http://www.community.terrasoft.ru/forum/topic/8497#comment-35568
http://www.community.terrasoft.ru/forum/topic/6512
http://www.community.terrasoft.ru/forum/topic/10311

ДА И СКАЖИТЕ ВЕРСИЮ БИНАРНИКОВ - это может быть важно

Благодарю за внимание и помощь господа!
Луч света упал на глобальные переменные - обращение к ним должно идти из функции, не как у меня.

"Андросов Дмитрий" написал:ДА И СКАЖИТЕ ВЕРСИЮ БИНАРНИКОВ - это может быть важно

Был бы признателен за подсказку, где, что и для чего и как)
Из дизайнера скрипт не запустил пока( на другой камень наткнулся.
Очень благодарен за поддержку!

запустить скрипт прямо в TSAdmin (и в его контексте), причем можно и не сохранять сам сервис
добавить function Main() {} и нажать

да, вне функций глобальные переменные не работают (не знаю уж почему)

версии бинарников (но они все же тут ни при чем):

Понял, больше спасибо!

Кстати, чтобы данные сохранились в БД, надо перед

 Dataset.Close(); 

делать

Dataset.Post();

Да, спасибо. Это тоже проследил.

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

Добрый день.

Цель: Необходимо получить GUID документа, договора, продажи в момент его СОЗДАНИЯ. Далее запомнить его как текущую актуальную глобальную переменную, при перемещении в другой документ она заменяется на GUID объекта в который был осуществлен переход ... Ну как бы система постоянно в курсе, какой объект открыт в данный момент и в любой момент (даже сразу после создания) можно получить это значение.

Все как бы не плохо, когда есть такая запись:

DocumentID = FilesDetailGridArea.Dataset.Values('ItemID');

Но если ты только создал документ, то она возвращает null, а когда ты по документы кликаешь - вот тут она отдает кпримеру: {7E589C94-B7A8-42CD-B54D-EE620343C787} Ура. НО как быть, когда нужна она сразу после создания?

помогите пожалуйста

Нравится

5 комментариев

Дело в том, что сразу после создания система генерирует новый идентификатор для записи. Но, поскольку этой записи по факту ещё нет в системе, Вы не можете добавить ссылку на неё в связанные таблицы, пока она не будет сохранена.

Выход - сразу после открытия карточки записи, заполнения значений по умолчанию и отработки базовых обработчиков выполнить dlData.Dataset.Post(). После этого Вы сможете использовать ID данной записи для добавления в другие таблицы.

Но прежде, чем это делать, нужно хорошенько обдумать все возможные моменты реализации, в том числе и такой: что делать, если после открытия карточки документа пользователь передумал и нажал кнопку "Отмена"? Запись-то уже в базе сохранена...

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Хорошо. Допустим мы созлаем новый договор. кликаем добавить ... Окно начальных данных. Называем документ и кликаем ОК. Теперь выбираю Файлы ... Добавить .... В общем в этот момент еще не доступен GUID... если кликнуть на другой договор, а потом обратно на новый - все будет работать ...
из этого возникает вопрос - где же то заветное МЕСТО куда нужно вставить dlData.Dataset.Post() ??????????? :)

В принципе, если Вы уже нажали "OK", ID договора в базе уже существует. Надо смотреть на вызов Вашей функции, в которую Вы передаёте ContractID. Можете выложить код? Либо, если есть возможность подсоединиться к Вашей машине через удалённый доступ, отправьте запрос на support@tscrm.com с параметрами доступа.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег. Большое спасибо.
Вопрос разрешен.
решение крылось в методе извлечения GUID/

Правильно было так:

DocumentID = FilesDetailGridArea.ParentItemID;

Всегда пожалуйста :).

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

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