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) тоже отменил сортировку по наименованию и завел просто порядковый номер табличной части в надежде, что он
совпадет с системным идентификатором... В новых документах помогло, а для старых - кнопка - "Пересчет"