Не понятная ошибка при работе с внешним классификатором

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Не понятная ошибка при работе с внешним классификатором

Сообщение savov »

Доброго времени суток.
Получаю при компиляции непонятную ошибку:

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

 var  imyClass: iExtClass;
  var err: Boolean;
...
    if( GetFirst TblPost = tsOK )      
    do { 

        err:=imyClass.LinkSegClass (1418, Comp(tblpost.NrecPost), 'Типы контрагентов',  'Поставщик');  //  Здесь ругается!!!!!

    } while GetNext TblPost = tsOK ;
...
ОШИБКА Ожидалось поле структурного или ссылочного типа, указывает на скобку после LinkSegClass.

Vih подключен на уровне проекта. Без данной строки компилируется без ошибок. Описание функции приведено в вихе, скопировано оттуда.

В чем может быть причина????
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение Den »

ну ожидает компилятор метод LinkSegClass из ExtClass.vih. А на вашей конфигурации сборки не виден он. Нужно definе посмотреть
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение savov »

А что там собственно может быть не то?
Код проекта

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

// Для определения необходимых Define'ов.
  #include Defs.inc
  #include PreDefs.inc

  #include StrFunc_Vero.vih

  #include ExtAttr.vih
  #include ExtClass.vih

  #include MySoprDocFilters.inc

  const
    #include GlobalConst.csc
    #include galnet.inc
  end;
//=========================================

Этого что, недостаточно?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение Алексей »

Может ComponentVersion забыли в дефайне?
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение savov »

Уважаемые форумчане подсказали правильный путь, куда смотреть, а причина в том, что в проект надо дописать
#define Gal9_1, т.к. в новой версии виха стоит

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

#ifdef Gal9_1
  #doc
  Привязывает запись таблицы к указанному сегменту классификации. Возвращает True если успешно.
  #end
  Function LinkSegClass (_wTable : word; _cRec : comp; _ClassName: string; _SegName: string) : boolean;
#end
В такой записи все компилируется.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение savov »

Как говорится, недолго музыка играла!
Скомпилировать то она скомпилировала, а вот при работе выдала ошибку "Возникло необработанное исключение ExifBadCheckSum(ExRef) несовпадение контрольной суммы ObjInterface C_EXTCLASS:: objExtClass"
И что теперь?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение Алексей »

#define ComponentVersion
и найдите свежий вих из своих патчей, возможно у вас старый.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение savov »

Ничего не помогает. Вих посмотрел, последняя версия из имеющихся у нас.
Код проекта изменил:

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

#define ComponentVersion
#define Gal9_1
#param /linc:autoexec.vpp
#ifdef ComponentVersion
#component "C_ExtClass"
#end

воткнул даже в сам интерфейс

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

Interface clpostpol	;
#define ComponentVersion
....
#undef ComponentVersion
end. // interface
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Не понятная ошибка при работе с внешним классификатором

Сообщение edward_K »

Вам надо искать свеженький ExtClass.vih. Взять его можно в каталоге FRM, и брать именно тот, что пришел вместе с вашим патчем .
Проверьте - нет ли у вас еще где то такого же файла. Самое простое - внести ошибку.
Вот мой от 14.08.2015

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

//------------------------------------------------------------------------------
//                                                      (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;

#ifdef Gal9_1
  #doc
  Привязывает запись таблицы к указанному сегменту классификации. Возвращает True если успешно.
  #end
  Function LinkSegClass (_wTable : word; _cRec : comp; _ClassName: string; _SegName: string) : boolean;
#end

  #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;

ObjInterface objExtClassEx1;
  #doc
  Возвращает код таблицы классификации по коду класса
  #end
  Function GetClassTable(_ClassCode: word): word;
End;

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

#endif
Ответить