Страница 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
Не работает! :cry:
Функции, ессно, были подключены. Тут все норм.
точно код отрабатывает у вас из Планирования (документ Планы производства)?