Редиктирование данных с помощью Dataset. Вставка.
Salud los colegas!
Товарищи, продолжаю погружаться в дебри Terrasoft, собирая все грабли на этом тернистом пути.
Играя с SDK, решил налить Dataset, несколькими записями, и посмотреть на метод Append() в действии.
Дано:
tbl + sq + ds
scr
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().
В ожидании луча света, и с уважением
Ваш коллега.
Нравится
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. Данные методы являются глобальными встроенными методами Terrasoft ( кроме ShowInformationDialog('Text') явно не глобальный :smile:)?
- 2. И в чём принципиальная разница каждого? Только в гибкости настроек вывода (доп. кнопки, выбор иконки и т.п.) или что-то ещё?
Егор, покажите скриншоты всех трёх сервисов.
Идеология конфигурации Terrasoft 3.X такова, что методы встроенных глобальных объектов стараются использовать минимально. Взамен им в скриптах-библиотеках scr_Utils, scr_WindowUtils и других написаны функции-обёртки, часто с дополнительными возможностями или скрытием ненужных обычно параметров. Например, одному методу System.MessageDialog с кучей параметров соответствует семейство ShowInformationDialog, ShowErrorDialog, ShowWarningDialog с одним параметром — текстом сообщения.
Аналогично, вместо Services.GetNewItemByUSI лучше использовать функцию GetSingleItemByCode (она уже есть в какой-то библиотеке), не создающую лишних сущностей без необходимости.
Метод MessageBox является одной из обёрток, о которых писал Александр. Его использование вполне уместно.
Ошибка говорит о том, что свойство Dataset.State != dstInsert(dstEdit).
Это значит, что метод
Dataset.Append();
не отработал.
Поставьте галочку в сервисе датасета "Добавление", а также определите первичное поле для отображения.
Hallelujah
Дмитрий, благодарю! +1 к Dataset :smile:
Всех благодарю за уделённое внимание!
С уважением Ваш коллега