Страница 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
далее в коде
Код: Выделить всё
sLine := objEC.GetSegName(objEC.GetClassCode(1110,'ЛИНИЯ'), SpSopr.NREC);
vip.cfg
при компиляции vip-у указываю систему galnet, в параметре env
и тогда
#include ExtClass.vih
подключать не надо.