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

контрольная сумма

Добавлено: 28 май 2008, 18:08
eyolkina
Добрый день!
триллер под названием вызов интерфейса PlPorSimple продолжается :)

пробую проверить хотябы примитивный пример:

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

#define componentversion

#include PlPorSimple.vih

interface TEST_PLAT  'Каталог материалов' EscClose, Cyan, DoAccept;
  show at (0,0,79,20);


VAR
  piPlPor : PlPorSimple;
  Bufplpor : tplpor;

window winKatMaterialsEdit 'Каталог материалов' (,,);
  show at (1,1,78,18);
end;

HandleEvent
  cmInit:
  begin
    MESSAGE('Инициализация2!');
   //piPlPor.PlPor_FillDatOb(bufPlPor,cur_date);
   Bufplpor.nrec:=23;
   Message(Bufplpor.nrec);
  end;

end;
End. 
все отрабатывает.

Стоит разкомментировать строкчу
piPlPor.PlPor_FillDatOb(bufPlPor,cur_date);

При выполнении выдает ошибку:
несовпадение контрольной суммы ObjInterface F_PLPOR::ObjPlPorSimple.

В чем может быть дело???

PS мне стало казаться что Галактика для новичка является полным эмулятором юникса - всмысле сексуальных телодвижений для маломальски сложной работы :-?

Добавлено: 29 май 2008, 01:08
edward_K
ну сие потихоньку меняется. Раньше бы вам просто викинуло по runtime 216 и все, а теперь четко пишут что вы чего то делаете не так :).
PlPorSimple.vih у вас какого размера? Вносили ли вы в него исправления ? Последний 8322 от 06.12.2007. Вы уверны, что цепляете именно его? Подключен ли рес F_PLPOR при компиляции?.

Добавлено: 29 май 2008, 05:54
Алексей
VAR
piPlPor : PlPorSimple new;
т.к. PlPorSimple является випинтерфейсовм, то параметр new автоматически его проинициализирует.

Важно что бы используемый вами vih файл совпадал с версией ресурса F_plpor и в нем естественно ничего нельзя менять.

Добавлено: 29 май 2008, 08:55
eyolkina
Важно что бы используемый вами vih файл совпадал с версией ресурса F_plpor и в нем естественно ничего нельзя менять.
А я какраз поменяла!
Я закомментировала
function plpor_deletenumber(_tidkgal: word; _tidk: word;
_Descr: TDescr; _NoDok: tNoDok): boolean;

function Number_CheckInput(_TiDkGal: word; var _NoDok: tNoDok; _OldNoDok: tNoDok): boolean;

function Number_CheckUnique(_TiDkGal: word; _TiDk: word;
_Descr: TDescr; _DatVip: date;
var _NoDok: tNoDok): boolean;

Но не корысти ради, потомучто при компиляции проекта выдаетс ошибку: Ожидалось имя или описание типа -- на эти строчки.

Файл PLPORSIMPLE:

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

//------------------------------------------------------------------------------
//                                                      (c) Корпорация ГАЛАКТИКА
//------------------------------------------------------------------------------
// Галактика 8.1 - Бухгалтерский контур
// Объект для работы с PlPor (облегченный)
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/*
 функции интерфейса, в отличие от ObjPlPor,
 1) работают вне зависимости от текущего положения записи в интефейсе
    просмотра Платежных документов;
 2) не используют RescanPanel, PutCommand
 3) перед их использованием не нужна предварительная инициализация, т.к.
    а) нет глобальных переменных, которые надо предварительно инитить
    б) не вызываются команды:
         RescanPanel(#PlPor);
         ProcessCommand(cmInit);
    в) каждая функция зависит только от своих параметров.

 Функция PlPor_Fill - заполнит буфер PlPor по умолчанию и вернет его.
 Т.е. если ты ее решишь использовать, то сможешь избавиться в своих
 исходниках от много лишнего, + поля по умолчанию все правильно заполнятся.
 Надо просто будет написать

   #include PlPorSimple.vih
   piPlPor : PlPorSimple;
   // заполнение полей по умолчанию
    piPlPor.PlPor_Fill(bufPlPor, TiDkGal, TiDk, DatVip);
    // заполняешь дополнительно свои поля
   bufPlPor.поле := значение;
   ...
    PlPor.buffer := type$PlPor(bufPlPor);
    if (insert current PlPor <> tsOk) {...}
*/
//------------------------------------------------------------------------------

#ifndef __PlPorSimple_vih__
#define __PlPorSimple_vih__

#include TPlPor.vih

#include FinTypes.vpp   // для TInfoDocument
#include ChkSoprHoz.inc // для cgMakeSH, cgMakeDoc или cgSilentMakeSH

!#undef __PLPOR_NEWFUNCS__ // пока не работает - новые функции
#define __PLPOR_NEWFUNCS__ // включил в 58502 - но не факт, что все корректно

#ifdef ComponentVersion
#component "F_PlPor"
#end

//------------------------------------------------------------------------------
#doc
Объект для работы с PlPor (облегченный)
#end
ObjInterface ObjPlPorSimple;

  /////////////////////// РАЗЛИЧНЫЕ АТРИБУТЫ //////////////////////////
  #doc
  Возвращает очередной номер платежного документа
  #end
  function PlPor_GetNewNumber(_TiDkGal: word; _TiDk: word;
                              _Descr: TDescr; _DatVip : date): tNoDok;

  #doc
  Удаление номера платежного документа (при удалении документа)
  #end
  function PlPor_DeleteNumber(_TiDkGal: word; _TiDk: word;
                              _Descr: TDescr; _NoDok: tNoDok): boolean;

  #doc
  Проверка корректности заполнения номера
  #end
  function Number_CheckInput(_TiDkGal: word; var _NoDok: tNoDok; _OldNoDok: tNoDok): boolean;

  #doc
  Контроль уникальности номера документа
  #end
  function Number_CheckUnique(_TiDkGal: word; _TiDk: word;
                              _Descr: TDescr; _DatVip: date;
                              var _NoDok: tNoDok): boolean;

  #doc
  Контрагент для BaseFin, кроме спецификации АВЗ
  #end
  function PlPor_KontrForBaseFin(bufPlPor: TPlPor): comp;

  #doc
  Контрагент для BaseFin'ов спецификации АВЗ
  #end
  function PlPor_KontrForSpecAVZ(bufPlPor: TPlPor; _direct: word): comp;

  #doc
  Филиал банка - по типу документа и ссылке на банк
  #end
  function GetFilBank(_TiDkGal: word; _cKatBank: comp): string;

  #doc
  КПП = Код плательщика НДС организации
  #end
  function KatOrg_GetKodPlatNDS(_cKatOrg: comp): string;

  ///////////////////// СОЗДАНИЕ И УДАЛЕНИЕ ///////////////////////////
  #doc
  Свои организация и банк заполняются по умолчанию
  #end
  function isBankAndOrgFillDefault(_TiDkGal: word): boolean;

  #doc
  Установка даты оплаты при (после) заполнении по умолчанию (без перерасчетов)
  #end
  function PlPor_FillDatOb(var bufPlPor: TPlPor; _date: date): boolean;

  #doc
  Заполнение буфера ++
  #end
  Function PlPor_Fill_Eval_01(var bufPlPor: TPlPor
                                ; _TiDkGal: word
                                   ; _TiDk: word
                                  ; _dForm: date
                               ; _isMaster: boolean
                               ; setDskDef: word
                                         ): boolean;

  #doc
  Заполнение буфера
  #end
  function PlPor_Fill(var bufPlPor: TPlPor;
                      _TiDkGal: word; _TiDk: word; _dForm: date;  setDskDef: word): boolean;
  //----------------------------------------------------------------------------
  #ifdef __PLPOR_NEWFUNCS__ // пока не работает - новые функции
  #doc
  Проверка максимального количества записей
  #end
  function PlPor_CheckMaxRecords(_Message: word): boolean;

  #doc
  Проверка корректности заполнения буфера
  #end
  function PlPor_Check(bufPlPor: TPlPor; _Message: word): boolean;

  #doc
  Добавление PlPor, с проверкой корректности и формированием SoprHoz
  #end
  function PlPor_Insert(bufPlPor: TPlPor): comp;

  #doc
  Обновление записи по позиции
  #end
  function PlPor_UpdateP(_pPlPor: TPlPorX): boolean;

  #doc
  Удаление записи по позиции
  #end
  // isMsg = true выдавать предупреждения
  // isCorPS = true корректировать сальдо в подотчетных лицах
  //         = false в интерфейсе PlatVed_Kassa
  function PlPor_DeleteP(_pPlPor: TPlPorX; isMsg: boolean; isCorPS: boolean): boolean;

  #doc
  Удаление записи по NRec без проверки на закрытый период
  #end
  // isMsg = true выдавать предупреждения
  // isCorPS = true корректировать сальдо в подотчетных лицах
  //         = false в интерфейсе PlatVed_Kassa
  function PlPor_Delete(_cPlPor: comp; isMsg: boolean; isCorPS: boolean): boolean;

  #doc
  Удаление записи по NRec с проверкой на закрытый период
  #end
  // isOt  = true проверять на закрытый период
  // isMsg = true выдавать предупреждения
  // isCorPS = true корректировать сальдо в подотчетных лицах
  //         = false в интерфейсе PlatVed_Kassa
  function PlPor_DeleteZ(_cPlPor : comp; isOt : boolean;
                         isMsg : boolean; isCorPS: boolean): boolean;

  #end //__PLPOR_NEWFUNCS__
  //----------------------------------------------------------------------------

  #doc
  Выбор назначения платежа, запись в строки, начиная с указанной (0 - запись во все строки без проверок)
  #end
  function PlPor_PickNazn(
                 begStrN: word;
                 var _s1: string; var _s2: string;
                 var _s3: string; var _s4: string;
                 var _s5: string; var _s6: string
                ): word;

  #doc
  Назначение платежа - из иерархического справочника
  #end
  function PlPor_TakeNazn(var bufPlPor: TPlPor; _FieldName: string): boolean;

  //----------------------------------------------------------------------------
  #doc
  Функция поиска платежки по полям из Экспорта-Импорта
  #end
  function Find_PlPor(
                 _Tidk        : word;
                 _NoDoc       : string[20];
                 _DatVip      : Date;
                 cPlat, cPol,
                 cPlatFor     : comp) : comp;
  //----------------------------------------------------------------------------
  #doc
  Дата оплаты (PlPor.DatOb) заполняется по умолчанию
  #end
  function HasDefaultDatOb(_TiDkGal: word): boolean;
end;
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
#doc
Расширение №1 объектного интерфейса ObjPlPorSimple
#end
ObjInterface ObjPlPorSimple_Ex1;

  #doc
  Буфер документа в структуре TInfoDocument
  #end
  Function GetDocBuff(bufPlPor: TPlPor): TInfoDocument;

  #doc
  Проверка корректности ХозОпераций документа
  #end
  // awMode = [cgMakeSH, cgMakeDoc или cgSilentMakeSH]
  Procedure PlPor_CheckSH(bufPlPor: TPlPor; awMode: word);

End;


//------------------------------------------------------------------------------
VipInterface PlPorSimple implements ObjPlPorSimple, ObjPlPorSimple_Ex1 #Licensed_Free;

//------------------------------------------------------------------------------
#end // __PlPorSimple_vih__
файл TPlPor.vih

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

//------------------------------------------------------------------------------
//                                                      (c) корпорация Галактика
// Галактика 8.0 - Бухгалтерский контур
// Тип TPlPor
//------------------------------------------------------------------------------

#ifndef __TPlPor__vih__
#define __TPlPor__vih__

#ifdef ComponentVersionInDict
  #include IPlPor.vih
  Public type TPlPor  = record as table PlPor;
  Public type TPlPorX = record as table PlPor with x$position;
#else
         type TPlPor  = record as table PlPor;
         type TPlPorX = record as table PlPor with x$position;
#end

#ifdef Atl51
  #define TPlPorX TPlPorX
#else
  #define TPlPorX type$p_PlPor
#end


#end // __TPlPor__vih__ 



А ВОТ ФАЙЛ FinTypes.vpp у меня пустой - потомучто его у меня нету :(((

Добавлено: 29 май 2008, 08:59
eyolkina
function PlPor_GetNewNumber(_TiDkGal: word; _TiDk: word;
_Descr: TDescr; <----ПОКАЗЫВАЕТ ЧТО ТУТ ОШИБКА! _DatVip : date): tNoDok;

Добавлено: 29 май 2008, 09:06
Алексей
tDescr = String [20]

или подключить файл dictypes.def - описание типов данных.

Добавлено: 29 май 2008, 09:22
eyolkina
Алексей
Спасибо!

Сделала в PLPORSIMPLE:

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

#ifndef __PlPorSimple_vih__
#define __PlPorSimple_vih__
#include dictypes.def

#include TPlPor.vih
Теперь ругается на TPlPor (взятый из FRM рабочей галактики).
Пишет:
Ошибка: Неуизвестный тип: RECORD
#include IPlPor.vih
Public type TPlPor = record <-- Говорит что ошибка тут! as table PlPor;

Кстати, файлика IPlPor.vih у меня нету :(((

Добавлено: 29 май 2008, 09:51
Алексей
инклюдить файлы надо не в вихи а в проект. ВИХИ изменять нежелательно, а то опять получите "контрольную сумму".

ругается у вас скорее всего на #include IPlPor.vih
этот файл не нашел, попробуйте закоментировать инклюд, может соберётся...

Добавлено: 29 май 2008, 10:04
eyolkina
Алексей
комментарить пока не стала - появилось новое чудо:

в файле PlPorSimple.vih

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

#include fintypes.vpp   // для tinfodocument  
самого файла у меня нет - он пустой.

При компиляци дает ошибку:
Ожидалось имя или описаниие типа

Function GetDocBuff(bufPlPor: TPlPor): TInfoDocument; <--Ошибка тут


Файл fintypes.vpp запросила у техподдержки дня 4 назад, но меня терзают смутные сомнения, что я его так и не дождусь - ибо на все мои вопросы по vip они отвечают в духе: мы этим не занимаемся :(

Добавлено: 29 май 2008, 10:08
edward_K
#ifndef __FinTypes__vpp__
#define __FinTypes__vpp__

#include TSoprHoz.vih
#include TBaseFin.vih
#include TBaseDoc.vih

type TDocInfo = record
ID : comp;
SysType : word;
UserType : word;
end;

type TCurrency = record
NDESum : double; // сумма в НДЕ
ValSum : double; // сумма в валюте
cVal : comp; // валюта
Rate : double; // курс валюты
dRate : date; // дата курса
RatePerc : double; // процент к курсу
end;

type TDogovorInfo = record
cDogovor : comp; // ссылка на договор
cAppDogovor : comp; // ссылка на приложение
cCalPlan : comp; // ссылка на кал. план
dSum : TCurrency; // сумма по договору
aSum : TCurrency; // сумма по приложению
cSum : TCurrency; // сумма по кал. плану
cmd : LongInt; // -1 - отвязать договор
end;

type TInfoDocument = record
Descr : string[20] ; // "дескриптор к номеру документа"
DesGr : string[10] ; // "код группы пользователей"
NoDoc : string[20] ; // "Номер документа",
TiDkGal : word ; // "Тип документа системный",
TiDk : word ; // "Тип первичного документа",
SysOper : word ; // "Тип операции",
cSoprDoc : comp ; // "Ссылка на первичный документ",
cSoprHoz : comp ; // "Ссылка на первичный документ",
cHozOper : comp ; // "Ссылка на ТХО",
dDoc : date ; // "Дата документа"
dBeg : date ; // "Начало периода"
dEnd : date ; // "Конец периода"
Summa : double ; // "Сумма операции в НДЕ",
SumVal : double ; // "Сумма операции в валюте",
cVal : comp ; // "Код валюты операции",
Kol : double ; // "Количество по операции",
Price : double ; // "Цена",
cEd : comp ; // "Ссылка на единицу измерения",
wDocSp : word ; // "Тип спецификации",
cDocSp : comp ; // "Ссылка на спецификацию ДО",
ModeDoc : word ; // Параметры обработки документа
wProtect : word ; // Режим блокировки документа
cOrg : comp ; // Контрагент
FilialNo : longint ; // Номер филиала
cFilKor : comp ; // Филиал-корреспондент по операции
Direct : word ; // Направление документа: 0 - собственный, 1 - сторонний
cStepDoc : comp ; // Ссылка на этап ДО
NamePl1 : string ; // Строка 1 назначения платежа
NamePl2 : string ; // Строка 2 назначения платежа
NamePl3 : string ; // Строка 3 назначения платежа

!word
wPole1 : word;
wPole2 : word;
wPole3 : word;
wPole4 : word;
wPole5 : word;
!comp
cPole1 : comp;
cPole2 : comp;
cPole3 : comp;
cPole4 : comp;
cPole5 : comp;
!double
sPole1 : double;
sPole2 : double;
sPole3 : double;
sPole4 : double;
sPole5 : double;
end;

// флаги режима корректировки атрибутов документа ( Function CorrectDoc )
Const
cgCorrect_PickDO = 1;
cgCorrect_DelDO = 2;
cgCorrect_PickTXO = 4;
cgCorrect_DelTXO = 8;
cgCorrect_Summs = 16;
cgCorrect_Org = 32;
cgCorrect_TXO_DO = 64;
End;
#end // __FinTypes__vpp__

Добавлено: 29 май 2008, 10:27
eyolkina
edward_K
ООО!!! СУПЕР!! :))))))
после этого компилятор попросил еще пару-тройку вихов - которые слава богу нашлись в frm.

И теперь ругается вот так:
Ошибка: ожидалась ";"

VipInterface PlPorSimple implements ObjPlPorSimple, ObjPlPorSimple_Ex1 ОШИБКА ТУТ--->#Licensed_Free;

чтото с лицензией? или лучше убрать это из виха от греха?

вот интересно, после всех этих метаний сойдется ли контрольная сумма

Добавлено: 29 май 2008, 10:36
edward_K
если вы inc собрали полный, то в первых строках проекта нужно писать
#statusline "statgal"
#include galnet.inc
end;
#include glovars.inc

Сие гарантирует вам что все константы, дефайны и т.п. определены.
А так это всего лишь макроподстановка, которая определена в inc\GloDefs.inc (сие цепляется через последний инклюд).
Если каких то файлов в galnet.inc не хватит, сделайте пустышки и запросите их в ТП - но вам их содержимое наверное и не пригодиться.

Добавлено: 29 май 2008, 10:45
edward_K
вообще я бы вам посоветовал распаковать все архивы из Frm ( с заменой более старых - каких то полчаса мучений) в какую либо папку (и потом туда добалять из новых патчей).
В cfg прописать /i на каждую папку и подпапку.
можно так сгенерить в бантике (при условии что бантик запускается из папки на одном уровне с inc,COMPSRC и другими)
for /r ..\inc %%i in (.) do @echo /i:%%~fi;>> vip.cfg
for /r ..\compsrc %%i in (.) do @echo /i:%%~fi;>> vip.cfg
и так далее.

Добавлено: 29 май 2008, 11:49
eyolkina
СПАСИБО БОЛЬШОЕ!

пока вроде так компилируется, а потом попробую разобраться в том что мне посоветовали :)
патчи устанавливаю не я, поэтому буду обсуждать с начальством - как это проводится: чтоб ничего не терялось

Добавлено: 29 май 2008, 15:35
eyolkina
ВНИМАНИЕ ВОПРОС!

Чем будет отличаться добавление платежного поручения через интерфейс:

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

piPlPor.PlPor_Fill(bufPlPor, 2, 10684, cur_date,0);  //приход
    // заполняешь дополнительно свои поля
   bufPlPor.NODOK := ....
   nrec_my:=piPlPor.PlPor_Insert(bufPlPor);
от добавления его через insert:

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

insert PLPOR
            set
              PLPOR.NODOK    := ....

            update current PLPOR;

            nrec_my := PLPOR.NRec;
ЧТО ПРЕДПОЧТИТЕЛЬНЕЕ?
Я так понимаю, что второй вариант лучше тем, что не надо ничего дополнительно подключать, и не будешь зависеть от обновлений...