Страница 1 из 1

Классификатор "группировка по сбору остатков"

Добавлено: 15 янв 2015, 13:55
Marisha_P
Помогите вытащить значение классификатора.. Никак не выходит..
в support запрос выдает нужное значение, а запрограммировать никак не могу в vip'e :(
Запрос вот такой :

Код: Выделить всё

create view grup
var nrec_katsopr: comp;
  select * from exclassname,exclassval,exclassseg
  where ((      coKatpodr==exclassname.wtable
            and 'Группировка по сбору остатков'==exclassname.name
            and exclassname.classcode==exclassval.classcode
            and exclassname.wtable==exclassval.wtable
            and katsopr.cpodrfrom == katpodr.nrec
            and katpodr.nrec ==exclassval.crec
            and exclassval.cclassseg==exclassseg.nrec
            and spmatpropusk.ckatsopr==katsopr.nrec
         ));           
и функция соответственно

Код: Выделить всё

function GetCex(nreckatsopr: comp): word;
 var n:word;
{ n:=0;
  if (grup.getlast fastfirstrow spmatpropusk where ((nreckatsopr==spmatpropusk.ckatsopr))<> tsOk) n:=0
  else n:=grup.exclassseg.name;
  GetCex := n;
  Message(grup.katsopr.cpodrfrom);
  Message(grup.exclassval.crec);
}        
первым сообщением правильно выводится код подразделения, а данные по классификаторам всегда нулевые

Re: Классификатор "группировка по сбору остатков"

Добавлено: 15 янв 2015, 15:53
m0p3e
Зачем изобретать велосипед если есть готовый объект для работы с классификацией?
ExtClass.vih

Код: Выделить всё

//------------------------------------------------------------------------------
//                                                      (c) корпорация Галактика
// Версия      : 8.10
// Назначение  : Функции для работы с внешними класификаторами документов
//------------------------------------------------------------------------------
//  Параметры:
//     _wTable      - co-код Таблицы
//     _ClassName   - наименование классификации
//     _ClassCode   - код классификации
//     _cRec        - ссылка на запись в таблице
//     _NeedMessage - выдавать сообщение об ошибке


#ifndef _ExtClass_Func
#define _ExtClass_Func

#ifdef ComponentVersion
#component "C_ExtClass"
#end

#doc
Функции для работы с внешними класификаторами документов. <br>
</brief>
Параметры: <br>
  <ul>
   <li> _wTable      - co-код Таблицы <br>
   <li> _ClassName   - наименование классификации <br>
   <li> _ClassCode   - код классификации <br>
   <li> _cRec        - ссылка на запись в таблице <br>
   <li> _NeedMessage - выдавать сообщение об ошибке <br>
  </ul>
#end

ObjInterface objExtClass;

//------------------------------------------------------------------------------
//   Набор функций для создания, получения кода, показа ошибки

  #doc
  возвращает Код Класса по названию класса для указанной таблицы
  #end
  Function GetClassCode ( _wTable: word;  _ClassName: string ) : word;

  #doc
  Формирует классификацию для таблицы _wTable по названию; Возвращает код классификации. 0 - ошибка
  #end
  Function CreateClass(_wTable: word; _ClassName: string; _UniqFeat : word) : word;

  #doc
  Добавляет сегмент в вн. классификацию. Возвращает nRec сегмента, иначе 0
  #end
  Function AddSegClass(_ClassCode : word; _SegName: string;  _SegCode: string; _cGroup: comp) : comp;

  #doc
  Установить требование автоматического выдачи сообщения при ошибке; Возвращает предыдущее значение
  #end
  Function SetNeedMessage ( _NeedMessage : boolean ) : boolean;
  #doc
  Выдать сообщение об ошибке
  #end
  Procedure ShowError (_err : word);
  #doc
  получить номер последней ошибки
  #end
  Function LastError : word ;


!------------------------------------------------------------------------------
!   Набор функций для извлечения Названия и кода сегмента вн. классификации
  #doc
  возвращает Название сегмента класса по коду класса для указанной таблицы с номером записи
  #end
  Function GetSegName ( _ClassCode : word; _cRec : comp ) : string ;
  #doc
  возвращает Код сегмента класса по коду класса для указанной таблицы с номером записи
  #end
  Function GetSegCode ( _ClassCode : word; _cRec : comp ) : string ;


!------------------------------------------------------------------------------
!   Набор функций для удаления, перемещения и копирования классификации
  #doc
  копирование
  #end
  Function CopyAllClassVal (_wTable: word;  _cRecFrom: comp;  _cRecTo : comp ) : boolean;

  #doc
  копирование в другую таблицу и создание если ее не существует для другой таблицы
  #end
  Function CopyAllClassValEx (_wTableFrom: word;  _cRecFrom: comp;  _wTableTo: word; _cRecTo : comp ) : boolean;

  #doc
  Копирует классификацию (ClassName, ClassSeg, ClassIer) из классификации с кодом _ClassCode в таблицу _wTableTo; <br>
  Возвращает код классификации. 0 - ошибка
  #end
  Function CopyClassEx (_CodeFrom: word; _wTableTo: word) : word;

  #doc
  удаление всех значений (при удалении записи в таблице)
  #end
  Function DeleteAllClassVal (_wTable: word; _cRec: comp) : boolean;

  #doc
  перенос от старой записи к новой (откуда-куда)
  #end
  Function MoveAllClassVal (_wTable: word; _cRecFrom: comp; _cRecTo: comp): boolean;

  #doc
  просмотр/редактирование значения в интерфейсе
  #end
  Function Pick(_CanEdit: boolean; _wTable: word;  _cRec: comp): boolean;

  #doc
  копирование c проверкой на уникальность. <br>
  Если классификация уникальная, то при_bZam = <br>
    true - заменять старое значение на новое, <br>
    false - пропустить. <br>
  #end
  Function CopyAllClassValUniq (_wTable: word;  _cRecFrom: comp;  _cRecTo : comp; _bZam : boolean ) : boolean;

  #doc
  Копирование всех выбранных значений классификатора в указанную запись.
  </brief>
  Значения классификатора помечаются интерфейсом PickExClassVal и сбрасываются в маркер.
  #end
  Function CopyClassValPick (_wTable: word; _cRecFrom: comp; _cRecTo : comp ) : boolean;

End;


VipInterface iExtClass implements objExtClass
#ifdef ATL51
  licensed (FREE)
#end
;

#endif



Re: Классификатор "группировка по сбору остатков"

Добавлено: 15 янв 2015, 16:04
Irina_
Здравствуйте. В Вашем запросе используется несколько таблиц. В приведенной функции Вы сделали движение только по одной таблице spmatpropusk, а далее пытаетесь использовать в операторе присвоения и в message данные из других таблиц. А где позиционирование на записи в этих таблицах??? Хотя бы getfirst.
Еще, переменная n описана как word, но в else Вы присваиваете значение другого типа -string.

Re: Классификатор "группировка по сбору остатков"

Добавлено: 16 янв 2015, 09:00
Marisha_P
Велосипед изобретала потому,что при подключении ExtClass.vih
Выводится ошибка -

Код: Выделить всё

ожидался Interface,const или конец файла
#component "С_ExtClass"
как это исправить не знаю...

поменяла тип переменной и всё получилось. Спасибо большое:)

Re: Классификатор "группировка по сбору остатков"

Добавлено: 16 янв 2015, 11:28
m0p3e
Marisha_P писал(а):Велосипед изобретала потому,что при подключении ExtClass.vih
Выводится ошибка -

Код: Выделить всё

ожидался Interface,const или конец файла
#component "С_ExtClass"
как это исправить не знаю...
Подключать нужно в файле проекта.
make.prj

Код: Выделить всё

#define ComponentVersion
..........
#include ExtClass.vih
..........
#make myinterface.vip
Советую разобраться с принципами использования объектных интерфейсов, ибо без них дальше будет только сложнее.

Re: Классификатор "группировка по сбору остатков"

Добавлено: 19 янв 2015, 08:11
Marisha_P
Я именно там и подключала. #include PickDoc.vih - работает, а с классификаторами нет :(

Re: Классификатор "группировка по сбору остатков"

Добавлено: 21 янв 2015, 09:27
Алексей
Может у вас vih кривой? Я только через объекты стараюсь работать - везде работает.

Re: Классификатор "группировка по сбору остатков"

Добавлено: 21 янв 2015, 12:33
tyu003
В отчете я пользую внешнюю классификацию так:
секция var

Код: Выделить всё

.var
  objEC:iExtClass;
далее в коде

Код: Выделить всё

sLine := objEC.GetSegName(objEC.GetClassCode(1110,'ЛИНИЯ'), SpSopr.NREC);
vip.cfg

Код: Выделить всё

[Compilers]
LoadIds=true
при компиляции vip-у указываю систему galnet, в параметре env

Код: Выделить всё

/env:"galnet"
и тогда
#include ExtClass.vih
подключать не надо.