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

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

Добавлено: 28 окт 2015, 19:42
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 подключен на уровне проекта. Без данной строки компилируется без ошибок. Описание функции приведено в вихе, скопировано оттуда.

В чем может быть причина????

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

Добавлено: 28 окт 2015, 22:06
Den
ну ожидает компилятор метод LinkSegClass из ExtClass.vih. А на вашей конфигурации сборки не виден он. Нужно definе посмотреть

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

Добавлено: 29 окт 2015, 12:01
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;
//=========================================

Этого что, недостаточно?

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

Добавлено: 29 окт 2015, 13:02
Алексей
Может ComponentVersion забыли в дефайне?

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

Добавлено: 29 окт 2015, 14:18
savov
Уважаемые форумчане подсказали правильный путь, куда смотреть, а причина в том, что в проект надо дописать
#define Gal9_1, т.к. в новой версии виха стоит

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

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

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

Добавлено: 29 окт 2015, 18:29
savov
Как говорится, недолго музыка играла!
Скомпилировать то она скомпилировала, а вот при работе выдала ошибку "Возникло необработанное исключение ExifBadCheckSum(ExRef) несовпадение контрольной суммы ObjInterface C_EXTCLASS:: objExtClass"
И что теперь?

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

Добавлено: 30 окт 2015, 07:56
Алексей
#define ComponentVersion
и найдите свежий вих из своих патчей, возможно у вас старый.

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

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

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

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

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

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

Interface clpostpol	;
#define ComponentVersion
....
#undef ComponentVersion
end. // interface

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

Добавлено: 30 окт 2015, 12:59
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