26.05.2015, 16:13 | #1 |
Участник
|
Заполнение временной таблицы
Добрый вечер!
Есть форма. на ней в гриде должна выводиться временная таблица. Заполнение временной таблицы выполняется в методе init данной таблицы в Data Sources PHP код:
В этом для меня и загвоздка, не могу понять как занести данные в таблицу Я новичок, так что пожалуйста не судите строго |
|
26.05.2015, 16:20 | #2 |
Участник
|
прежде всего необходимо начать с чтения книжки по программированию в X++. после многие вопросы отпадут и код у вас будет гораздо короче и появится вопрос отображения на форме данных из временной таблицы
|
|
|
За это сообщение автора поблагодарили: axotnik88 (1). |
26.05.2015, 16:27 | #3 |
Участник
|
если честно времени на чтение книги нет. Проект срочный . доработки для упрощения кода, будут делаться позже. Есть ли какая то определенная книга, глава, а лучше даже пример, что бы простой junior понял?
|
|
26.05.2015, 16:51 | #4 |
Участник
|
Данный пример будет работать при условии, что у вас Tmp_DeliverShipProducts_ZTR - название таблицы, привязанной к одноименному источнику данных на вашей форме.
В начале метода объявите новую переменную с типом вашей временной таблицы: X++: public void init() { Tmp_DeliverShipProducts_ZTR tmp; //Дальше идет ваш код .................... 1) в самом начале добавьте строку X++: tmp.clear(); 3) в конце добавьте строку X++: tmp.insert(); X++: Tmp_DeliverShipProducts_ZTR.setTmpData(tmp);
Tmp_DeliverShipProducts_ZTR_DS.executeQuery(); //это внутри init() необязательно, но на всякий случай Последний раз редактировалось Ace of Database; 26.05.2015 в 17:08. |
|
26.05.2015, 16:53 | #5 |
Участник
|
пример:
X++: while select mytable join myTable2 where myTable2.id == mytable.Id { myTmpTable.clear(); myTmpTable.Value = mytable.Value; myTmpTable.Value2 = mytable2.Value2; myTmpTable.insert(); } |
|
26.05.2015, 16:59 | #6 |
Участник
|
выдает ошибку "[Microsoft][SQL Native Client]Invalid cursor state" когда пытается выполнить while (myResult.next())
а так же ругается на X++: Tmp_DeliverShipProducts_ZTR_DS.setTmpData(tmp); |
|
26.05.2015, 17:04 | #7 |
Участник
|
я знаю что можно прописать это все средствами аксапты, но в данном случае я хотела бы использовать SQL. Так как он для меня более привычен.
И как прописать весь этот селект в аксапте не представляю (хотела оставить этот вариант на крайний случай) |
|
26.05.2015, 17:05 | #8 |
Участник
|
Перепутал, надо написать
X++: Tmp_DeliverShipProducts_ZTR.setTmpData(tmp); Tmp_DeliverShipProducts_ZTR_DS.executeQuery(); |
|
26.05.2015, 17:12 | #9 |
Участник
|
Самый тупой вариант в вашем случае, это сделать временную таблицу в Аксапте постоянной.
Свойство SaveDataPerCompany выставить в No. Написать на SQL хранимую процедуру, которая ее очищает и заполняет заново. А потом из Аксапты просто открыть форму, и она безо всякого кода вам отобразит данные. При этом надо позаботиться заполнением поля RecId уникальными значениями из хранимой процедуры. |
|
|
За это сообщение автора поблагодарили: Emka (1). |
26.05.2015, 17:16 | #10 |
Участник
|
теперь на функцию не ругается)
Думала о таком варианте, но такое у нас под запретом)) |
|
26.05.2015, 17:50 | #11 |
Участник
|
ваш проект обречен
|
|
|
За это сообщение автора поблагодарили: macklakov (0). |
26.05.2015, 17:53 | #12 |
Участник
|
Цитата:
PS: Код можно смело перенести в тему "The daily Axapta WTF". |
|
26.05.2015, 17:59 | #13 |
Участник
|
|
|
26.05.2015, 19:18 | #14 |
Участник
|
Цитата:
X++: server static ResultSet callSqlOnServer_ZTR(Statement _stmt, str _sql, boolean _update = true) { ResultSet rs = null; ; new SqlStatementExecutePermission(_sql).assert(); if (_update) _stmt.executeUpdate(_sql); else rs = _stmt.executeQuery(_sql); CodeAccessPermission::revertAssert(); return rs; } |
|
26.05.2015, 19:19 | #15 |
Участник
|
|
|
27.05.2015, 09:18 | #16 |
Участник
|
callSqlOnServer_ZTR прекрасен. Особенно если учесть, что _stmt создан на форме.
|
|
27.05.2015, 10:13 | #17 |
NavAx
|
Цитата:
Сообщение от Ace of Database
Самый тупой вариант в вашем случае, это сделать временную таблицу в Аксапте постоянной.
Свойство SaveDataPerCompany выставить в No. Написать на SQL хранимую процедуру, которая ее очищает и заполняет заново. А потом из Аксапты просто открыть форму, и она безо всякого кода вам отобразит данные. При этом надо позаботиться заполнением поля RecId уникальными значениями из хранимой процедуры.
__________________
Isn't it nice when things just work? |
|
27.05.2015, 11:38 | #18 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Ace of Database (2). |
27.05.2015, 16:18 | #19 |
Участник
|
Цитата:
А права доступа - это конечно да. Хранимая процедура вернет данные независимо от прав. Но я в этой ветке занял сторону конкретного человека. Как бы адвокат. Что делать девушке: отказываться от задания или выполнить любой ценой? Жизнь сложная штука. PS. И в то же время я понимаю, что наличие таких специалистов снижает стоимость позиции "специалист по Аксапте". Жизнь сложная штука. Так как девушка худо-бедно решит проблему подручными средствами, то проект не получит профессионал. Зритель поневоле встает на сторону главного героя фильма. Девушка - главный герой этой темы. А если бы тему начал другой человек, с вопросом: "допускать ли таких специалистов к этому заданию"? То я бы встал на его сторону, так как он был бы главным героем. И я бы не стал тогда защищать девушку. Это вопрос психологии. Последний раз редактировалось Ace of Database; 27.05.2015 в 16:28. |
|
27.05.2015, 16:27 | #20 |
Участник
|
"Жизнь сложная штука" (с)
Возможно не все проекты достойны профессионала?
__________________
Здесь могла быть Ваша реклама! |
|