Проблема в табличной части

Общий форум

Модератор: app

Re: Проблема в табличной части

Сообщение SergS » Вт дек 08, 2009 10:11 pm

Пользуйтесь методом (в документации, пример более чем подробный):

QString aExtSQL::SqlTableName(aObject * obj, const QString &tableType="") const (http://ananas.su/docs/api/classaExtSQL.html#cb4743860e5b83a79159524897b9f0a1);

Должно быть установлено расширение aExtSQL.

P.S. Читать документацию следует так:
Открытые слоты:- эти методы доступны из скрипта, остальные нет.
Последний раз редактировалось SergS Вт дек 08, 2009 10:46 pm, всего редактировалось 2 раз(а).
Сергей
SergS
 
Сообщения: 15
Зарегистрирован: Вт фев 24, 2009 7:00 pm

Re: Проблема в табличной части

Сообщение anton » Вт дек 08, 2009 10:23 pm

в данном случае будет так
Код: Выделить всё
var sqlTabName = sql.SqlTableName(Current(), tname);
sql.ExecQuery(" OPTIMIZE TABLE '"+sqlTabName+"'");
anton
 
Сообщения: 137
Зарегистрирован: Сб фев 28, 2009 9:00 pm
Откуда: Иркутск

Re: Проблема в табличной части

Сообщение Шалопай » Ср дек 09, 2009 1:40 pm

Не помогает. Проанализировал думаю что надо как-то переиндексировать всю таблицу и пересчитать суммы. Хотя не знаю как это сделать ибо не програмер я.
при оптимизации таблицы следующие строки вставляются нормально , но надо удалять строки с глюком, и в только что вставленых строках опять начинает глючить.
Шалопай
 
Сообщения: 14
Зарегистрирован: Ср фев 25, 2009 8:23 am

Re: Проблема в табличной части

Сообщение NitroGlycerine » Пт мар 26, 2010 10:50 am

Повторяется глюк легко:
Ананас 0.9.5 + Федора 8 или винды.
БС Оперативный учет демо:
1. Создать документ счет
2. Добавить 3 строки в таб. часть
3. удалить предпоследнюю
4. добавить еще строку и... опа при изменение в последней строке цены или кол-ва сумма пересчитывается и пишется в строке выше! А в строке выше все происходит с точностью до наоборот.

По личным наблюдениям глюк в SetTabValue(), параметры 100% верные, причем TabValue отрабатывает корректно
NitroGlycerine
 
Сообщения: 5
Зарегистрирован: Чт мар 18, 2010 11:36 pm

Re: Проблема в табличной части

Сообщение Шалопай » Ср мар 31, 2010 8:20 am

именно, только вот решение надо найти, разработчики молчат
Шалопай
 
Сообщения: 14
Зарегистрирован: Ср фев 25, 2009 8:23 am

Re: Проблема в табличной части

Сообщение s_master` » Вс дек 19, 2010 3:16 pm

Присоединяюсь к вопросу. Опытным путем пришлось идти в обход. Поставил кнопку "Пересчет табличной части".
// пересчитаем и запишем суммы в форму для просмотра
function recalc_tab()
{
var docName="Приходная накладная"; //имя документа в метаданных
var tbname = "Таблица";
var tname = "wDBTable1";
var countRow = TabCount(tname); // количество строк табличной части - wDBTable1 - имя таблицы
if (countRow < 1) return;
var i=0;
var j;
var towar=0;

// запомним индексы столбцов
var znewcost, rnewcost;
var count_val;
var curDoc = new Document(docName); // создаем экземпляр объекта приходной накладной
SetCurrent(curDoc); // осуществляем привязку созданного нами документа

//к текущему объекту, который мы редактируем в данный момент
// curDoc.TableSelect(tbname );
var cat = new Catalogue("Каталог товаров");
if(!cat) return "";
cat.Select();
//к текущему объекту, который мы редактируем в данный момент
for (i=0;i< countRow;i++)
{
// так как после TableUpdate(...);
//происходит потеря текущей строки восстанавливаем ее
curDoc.TableSelect(tbname );
curDoc.TableFirst(tbname); // цикл по всем строкам таблицы
for (j=0;j < i;j++)
{
curDoc.TableNext(tbname);
}
towar = curDoc.TableValue(tbname ,"Наименование");

// znewcost= parseFloat( getCatalogueValue("Каталог товаров", towar, "Цена закуп"));
// rnewcost= parseFloat( getCatalogueValue("Каталог товаров", towar, "Цена отпуск"));
cat.FindById(towar);
znewcost= parseFloat( cat.GetElementValue( towar, "Цена закуп"));
rnewcost= parseFloat( cat.GetElementValue( towar, "Цена отпуск"));
sys.Message(0, towar );
curDoc.TableSetValue(tbname,"Цена", znewcost); // запись значения цены закуп. в таблицу
curDoc.TableSetValue(tbname,"ЦенаОтпуск", rnewcost);
// подсчет сумм и запись их в таблицу
count_val = parseFloat( curDoc.TableValue(tbname,"Количество") );
curDoc.TableSetValue(tbname,"Сумма", count_val *znewcost);
curDoc.TableSetValue(tbname,"СуммаОтпуск", count_val *rnewcost);
curDoc.TableUpdate(tbname );
}
on_tab_sum(tname );

} // recalc_tab() --- ---
Если еще не бросили ананас можете приспособить для себя.
Лирическое отступление:
Документы нуждающиеся в пересчете, в выгрузке МySQL, в текстовом файле имеют порядок строк табличной части по "системному идентификатору" отличный от экранной формы и модификация осуществляется именно согласно порядка строк по "системному идентификатору" а в скрипте мы имеем порядок строк согласно сортировке указанной в дизайнере отсюда проблемы...
в ABSRetail сортировку табличных частей по наименованию не стали делать (вроде - бы).
Я в своей БС (на основе Inventory) тоже отменил сортировку по наименованию и завел просто порядковый номер табличной части в надежде, что он
совпадет с системным идентификатором... В новых документах помогло, а для старых - кнопка - "Пересчет"
s_master`
 
Сообщения: 16
Зарегистрирован: Пн авг 23, 2010 3:47 pm
Откуда: Россошь, Воронежской обл.

Пред.

Вернуться в Общий форум

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron