Salud los colegas!

Товарищи, продолжаю погружаться в дебри Terrasoft, собирая все грабли на этом тернистом пути.
Играя с SDK, решил налить Dataset, несколькими записями, и посмотреть на метод Append() в действии.
Дано:
tbl + sq + ds
scr

function Main() {
    var Dataset = Services.GetNewItemByUSI('ds_DBDataset');
    Dataset.Open();
    var String = 'Some text ';
    var i;
    for (i = 0; i 5; i++) {
        Dataset.Append();
        Dataset('String') = String + i;
        Dataset.Post();
    }
    MessageBox(Dataset.RecordCount);
    Dataset.Close();

Найти:
В результате выполнения скрипта имею ошибку Terrasoft - Dataset not in edit or insert mode (Dataset.Edit(); - совершенно иная конструкция) Вот здесь шаблоны рушатся.
Возможно я не верно понимаю логику инструкции Append().

В ожидании луча света, и с уважением
Ваш коллега.

Нравится

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

Yegor, проверила Ваш код - работает корректно.
Только подправила

Dataset.RecordCount

на

Dataset.RecordsCount

Тестировала на версии 3.4.1
Результаты тестирования во вложенных скриншотах (1 - до записи в БД, после записи БД).

На какой версии Вы работаете?

У меня тоже работает, не считая того, что вместо MessageBox надо писать

System.MessageDialog('Hello world', mdtInformation, mdbOK, 0);

или обёртку из scr_WindowUtils

ShowInformationDialog('Hello world')

"Бондарь Наталия" написал:На какой версии Вы работаете?

Версия - 3.3.2.222
В строке

Dataset('String') = String + i;

ругается.
Я задумываться начинаю, может собака глубже зарыта, и своими неопытными ручками я tbl + sq + ds не по человечески связал :confused:?
Здесь всё просто (на сколько понял) Одна таблица с полем String (остальные по дефолту). Select Query завязанный на таблицу с селектами по ID и String. Ну и Dataset завязанный на Select Query с ключевым полем ID.
Ударьте по рукам пожалуйста если что не так :neutral:

Александр, прошу Вас, дабы полностью разрушить мои стереотипы пояснить моменты по поводу окон сообщений.
Привычного alert() декларированного в ECMAScript я не обнаружил. Случайно наткнувшись на MessageBox('Text'), ужаснулся и стал ностальгировать о Delphi (синтаксис идентичен)

  1. 1. Данные методы являются глобальными встроенными методами Terrasoft ( кроме ShowInformationDialog('Text') явно не глобальный :smile:)?
  2. 2. И в чём принципиальная разница каждого? Только в гибкости настроек вывода (доп. кнопки, выбор иконки и т.п.) или что-то ещё?

Егор, покажите скриншоты всех трёх сервисов.

Идеология конфигурации Terrasoft 3.X такова, что методы встроенных глобальных объектов стараются использовать минимально. Взамен им в скриптах-библиотеках scr_Utils, scr_WindowUtils и других написаны функции-обёртки, часто с дополнительными возможностями или скрытием ненужных обычно параметров. Например, одному методу System.MessageDialog с кучей параметров соответствует семейство ShowInformationDialog, ShowErrorDialog, ShowWarningDialog с одним параметром — текстом сообщения.

Аналогично, вместо Services.GetNewItemByUSI лучше использовать функцию GetSingleItemByCode (она уже есть в какой-то библиотеке), не создающую лишних сущностей без необходимости.

"Зверев Александр" написал:Егор, покажите скриншоты всех трёх сервисов.




Спасибо, уяснил момент.
Только под резюмирую - исторически сложилось, что MessageBox('Text') не является правилом хорошего тона, верно?

Метод MessageBox является одной из обёрток, о которых писал Александр. Его использование вполне уместно.

Ошибка говорит о том, что свойство Dataset.State != dstInsert(dstEdit).
Это значит, что метод

Dataset.Append();

не отработал.

Поставьте галочку в сервисе датасета "Добавление", а также определите первичное поле для отображения.

Hallelujah

Дмитрий, благодарю! +1 к Dataset :smile:
Всех благодарю за уделённое внимание!
С уважением Ваш коллега

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