Страница 1 из 1
Вернуть данные из нормативной таблицы
Добавлено: 18 апр 2012, 13:28
savov
Доброго времени суток.
У кого есть информация по данному вопросу, подскажите.
В спецификации продуктов легко получалось обратиться к нормативной таблице (НТ).
Но возникла необходимость получить данные в Планировании (документ- План производства) из НТ. Причем нет спецификаций, а в НТ загнана некоторая специфическая информация ( процент квотирования МЦ по определенным отделам. соответственно строки НТ - отделы, столбцы - наименования МЦ)
Пытаюсь использовать код
Код: Выделить всё
if (NormTable.FindBynRec(NormTable_nRec)==0)
{
NormTabl = true;
Message('Find!',0);
}
где NormTable_nRec - нрек НТ по NORMTAN.
Метод возвращает 4 и не позиционирует на таблицу, хотя она есть и все с ней нормально.
В чем причина ? Кстати, а что значит 4 (хоть бы в документации писали значения ошибок!)?
Re: Вернуть данные из нормативной таблицы
Добавлено: 18 апр 2012, 17:32
Dmitry_Sol
Предлагаю посмотреть на часть исходника SFNORMTAN.VIP, который отвечает за работу с нормативными таблицами
вот такой запрос в начале
Код: Выделить всё
interface iSFNormTAn;
create view viSFNormas
var
wGOwner : word;
cGOwner : comp;
cGCode : comp;
cGRHash : comp; // nRec MnAnal строки
cGCHash : comp; // nRec MnAnal колонки
wGAnCode: word;
from
LinkTab,
NormTAn,
NormTAnV
where
((
wGOwner == LinkTab.wDoc and
cGOwner == LinkTab.cDoc and
NormTAn.nRec == NormTAnV.cTable and
cGRHash == NormTAnV.Row and
cGCHash == NormTAnV.Col
))
bounds LinkGroup = LinkTab.cNormTAn == NormTAn.nRec
bounds LinkTable = cGCode == NormTAn.nRec
;
и собственно сама функция
FindBynRec = SetOwnerLink
Код: Выделить всё
'SetOwnerLink':
{
set cGCode:= comp(JavaScript.GetVIPArg(3, false));
if (BoundActive(tbLinkGroup)) PopBounds(tbLinkGroup);
if (not BoundActive(tbLinkTable)) PushBounds(tbLinkTable);
lResult:= GetFirst NormTAn;
bTableSet := false;
if (lResult = tsOk)
if (not NullVIPRef(ifcNTSrvEx))
bTableSet := ifcNTSrvEx.SetNormTable(cGCode);
JavaScript.SetVIPArg(2, string(lResult), false);
}
видно что возвращает он нам результат позиционирования lResult
4 в результатах значит, что
Код: Выделить всё
const
tsOk = 0;
tsInvalidOperation = 1;
tsIOError = 2;
tsFileNotOpen = 3;
tsNotFound = 4;
tsDuplicateKey = 5;
tsInvalidKeyNumber = 6;
это значит, что не тот нрек передается, Выведите этот нрек через Debug.Print
проверьте суппортом в таблице NormTAn есть ли такое значение
Re: Вернуть данные из нормативной таблицы
Добавлено: 18 апр 2012, 20:05
savov
Нрек передается правильный,
в Support записан как 000E00000000000Ch, передаю как 0x000E00000000000C ( синтаксис javascript), запись всего одна в таблице .
Re: Вернуть данные из нормативной таблицы
Добавлено: 19 апр 2012, 14:35
Dmitry_Sol
Вот этот текст у меня в javascript отработал
Проверьте подключенные библиотеки
Должны быть подключены
"Сервисные функции" из раздела Спецификации продуктов
и
"Стандартные функции для работы с нормативными таблицами"
Код: Выделить всё
NormTable_nRec=281474976710659
Debug.Print(NormTable.FindBynRec(NormTable_nRec))
Debug.Print(NormTable.DopInfo('Name'))
Re: Вернуть данные из нормативной таблицы
Добавлено: 19 апр 2012, 17:06
savov
Не работает!
Функции, ессно, были подключены. Тут все норм.
точно код отрабатывает у вас из Планирования (документ Планы производства)?