On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 15.11.12 14:42. Заголовок: Вопрос по сборке проекта


использую Clipper 5.2e portable выкачанный по адресу http://softclipper.narod.ru/download.html. При сборке проекта rtlink предлагает указать путь до библиотеки CE50.LIB. Подскажите пожалуйста где найти данный файлик... или полноценную папку со всеми библиотеками. Опыт работы с clipper отсутсвует а экзешник собрать очень хочется. Please help...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 67 , стр: 1 2 3 4 All [только новые]


moderator


Пост N: 446
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 20.11.12 09:57. Заголовок: Про отладчик ничего ..


Про отладчик ничего не скажу - я 5.3 никогда не пользовался. Попробуйте расставить в начале программы, например, вызовы Alert("какой-то текст") - эта функция выдает на экран box с текстом - для простейшей трассировки.
Warning'и эти не критичны. Они означают, что данная переменная не объявлена как Memvar, это не преступление. Если какая-то переменная вообще не объявлена, может в процессе исполнения выскочить ошибка - что нет такой-то переменной, но никак не Processor stack fault.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 20.11.12 11:34. Заголовок: Закомментировал все ..


Закомментировал все init procedure т.к. они по названию и содержанию повторяют процедуры, например, со страницы http://www.mythologics.com/c53/_cliplib.html ( init procedure CLIPINIT ) и др. Я так понимаю что инит процедуры автоматитически прилинковываются после присоединения файла библиотки в скрипте линкера или надо как то явно указывать необходимость вызова той же CLIPINIT, т.к. у меня после комментирования всех уже и так существующих в CLIPPER.LIB инит процедур экзешник запускается и тут же завершается без каких либо сообщений, соответсвенно до alert не доходим.

(((Меня начинают посещать мысли о неосуществимости моей затеи по получению рабочей программы.....

Еще сегодня помучаюсь и завтра начну, наверное, пробовать декомпилировать.....



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 20.11.12 11:37. Заголовок: Где можно посмотреть..


Где можно посмотреть полный список ф-ций/процедур содержащихся в клиппер.либ версии 5.2е?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 447
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 20.11.12 12:56. Заголовок: yukirin пишет: у ме..


yukirin пишет:

 цитата:
у меня после комментирования всех уже и так существующих в CLIPPER.LIB инит процедур экзешник запускается и тут же завершается без каких либо сообщений, соответсвенно до alert не доходим.


Я бы в таком случае действовал следующим образом:
урезал бы программу до минимума, скомпилировал, запустил. Если работает ( если - нет, значит с моим компилятором что-то не то ), то добавляем фрагмент, проверяем - и т.д.
yukirin пишет:

 цитата:
Где можно посмотреть полный список ф-ций/процедур содержащихся в клиппер.либ версии 5.2е?


В ng ( Norton Guide ) соответствующем. А если совсем полный :), то какой-нибудь утилитой, выдающей листинг .lib файла, у меня тут несколько таких - libra.exe, libview.exe, lib.exe

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 70
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 20.11.12 13:20. Заголовок: Для запуска DEBUGGER..


Для запуска DEBUGGER в CLIPPER 5.3 необходимо в файле .LNK для
blinker'а поставить команду
FI CLD.lib
В программе после запуска нажать комбинацию ALT+D

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 20.11.12 15:20. Заголовок: Есть прогресс выходи..


Есть прогресс выходит первоначальная заставка затем прога вываливается на первой встретившейся ф-ции dbcreate с сообщением - ДБ КРЕАТЕ ИНТЕРНАЛ ЭРРОР.

Еще почемуто попытка вставить код - alert( "ku-ku" ) приводит появлению окошка с надписью типа - OMPT (4606) и программа завершается.
Но и это уже прогресс буду ковырять дальше.

Непонятно зачем в текст программы были вставлены куски из декампилированного clipper.lib, причем вставлены они хаотично...
Засяду ка я за очистку проги от ненужного текста....хотя это и не быстрая процедура...


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2545
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.11.12 16:00. Заголовок: Исходники как я пони..


Исходники как я понимаю получены декомпилятором. А декомпилятор берет весь пи-код, который содержится в exe.
Это и пользовательский пи-код, и пи-код функций клиппера, реализованных на уровне prg и содержащихся в стандартных библиотеках
Декомпилятору неизвестно, из какого модуля получен пи-код, вот он и декомпилирует все, что может.
Поэтому конечно стандартные функции лучше удалить, все равно они будут прилинкованы из библиотек.
Скажем, можно взять модуль source\sys\getsys.prg и смело удалять из текста все функции, в нем присутствующие
Правда, там есть еще static-переменные, с ними не так просто
А по поводу предупреждений: перед первой функцией можно добавить строку:

memvar GetList

и предупреждения по этой переменной исчезнут

Что до остальных предупреждений, то они могут быть и безобидными, а могут и опасными, в зависимости от того, в каком стиле написана программа.
Могут быть неприятности из-за декомпиляции при разбивке текста на несколько модулей
Скажем, если функция использует static-переменную, то эта переменная должна остаться в том же модуле, что и сама функция.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 71
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 20.11.12 17:18. Заголовок: Я просто как-то проп..


Я просто как-то пропустил, для того чтобы отладчик запускался с произвольного места необходимо вставить вызов функции ALTD()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2412
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.12 20:10. Заголовок: yukirin пишет: Нужн..


yukirin пишет:

 цитата:
Нужна помощь в сборке проекта. У меня имеется голый исходник размером в 28700 строк который мне достался от одного человека со словами - что это единственный существующий текст программы - другого нет. У меня получить работоспособный экзешник не получается



Давай исходник, я тебе его на хХарбор переведу и не будешь мучиться с Клипером.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2549
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.12 22:03. Заголовок: Andrey пишет: Давай..


Andrey пишет:

 цитата:
Давай исходник, я тебе его на хХарбор переведу и не будешь мучиться с Клипером.


Ну тогда ждем результата

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 22.11.12 15:40. Заголовок: Программа начинает о..


Программа начинает оживать.... собс-но уже работает за исключением печати. Печать реализована в классе TPrinter. линкуется с библиотекой objects без предупреждений... Но при попытке печати прога вываливается с ошибкой - ERROR BASE/1004 No exported method: LOAD. Расскажите пожалуйста про варианты возникновения данной ошибки.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2551
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.11.12 16:21. Заголовок: В коде должно быть п..


В коде должно быть по первых определение класса TPrinter и его методов: что-то вроде

function TPRINTER

_objaddmet(StaticNNN, Nil, .T., 0, "Load", {|| Load()})

Return _objclsins(StaticNNN)

методы:

static function load(...)
return ...

и где-то создание объекта класса: вызов

TPrinter():new(...)

В исходном коде это было бы оформлено в виде команд, а в декомпилированном - функциями.
Что-нибудь подобное есть ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 14
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 22.11.12 22:26. Заголовок: В переданном мне исх..


В переданном мне исходнике (кстати данный текст полчен при помощи rescue5 - мной проверено) отсутствует текст одного метода класса TPrinter, т.к. он присутствует в объявлении класса. Вопрос - можно ли как-нибудь его вычленить из экзешника (rescue - получается отказывается его извлекать)?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2552
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.11.12 23:32. Заголовок: Здесь есть 2 вариант..


Здесь есть 2 варианта: или этот метод написан на C, и тогда его декомпилировать невозможно. Но это маловероятно.
2-й вариант - декомпилятор действительно декомпилировал не весь пи-код. Но тогда это проблема небольшая, можно декомпилировать этот exe Валькирией.
Валькирия имеет лучшую репутацию, чем rescue5. Чтобы труд по обработке текста и сборке проекта не пропал даром, можно перенести в уже обработанный текст программы только один этот метод, полученный Валькирией.
Саму Valkyrie думаю найти несложно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 23.11.12 12:09. Заголовок: увы и ах.....Valkyri..


увы и ах.....Valkyrie тоже ниче не выдала. Есть мелкая надежда на то что используемый класс не полное творение разработчика.
Поэтому ниже приведен текст фнукция где этот класс создается мож с подобным классом уже кто сталкивался....

function TPRINTER

static Static26
local Local1
if (ISNIL(Static26))
Static26:= _newclass("TPrinter", Local1)
_addmethod({"Text1"}, Nil, Nil, 1)
_addmethod({"aOpr"}, Nil, Nil, 1)
_addmethod({"aVar"}, Nil, Nil, 1)
_addmethod({"nStr"}, Nil, Nil, 1)
_addmethod({"nList"}, Nil, Nil, 1)
_addmethod({"Auto"}, Nil, Nil, 1)
_addmethod({"IsPrn"}, Nil, Nil, 1)
_addmethod({"Device"}, Nil, Nil, 1)
_addmethod({"ReportName"}, Nil, Nil, 1)
_addmethod({"cHead"}, Nil, Nil, 1)
_addmethod({"cEject"}, Nil, Nil, 1)
_addmethod({"cHeadFoot"}, Nil, Nil, 1)
_addmethod({"cFoot"}, Nil, Nil, 1)
_addmethod({"cTitul"}, Nil, Nil, 1)
_addmethod({"nHeadWidth"}, Nil, Nil, 1)
_addmethod({"KolStr"}, Nil, Nil, 1)
_addmethod({"Ustanovki"}, Nil, Nil, 1)
_addmethod({"lContinue"}, Nil, Nil, 1)
_addmethod({"cFile"}, Nil, Nil, 1)
_addmethod({"cSource"}, Nil, Nil, 1)
_addmethod({"lLoadError"}, Nil, Nil, 1)
_addmethod({"Rulon"}, Nil, Nil, 1)
_addmethod({"lTempFile"}, Nil, Nil, 1)
_addmethod({"Init", {|| tprninit()}}, Nil, .T., 0)
_addmethod({"Load", {|| tprnload()}}, Nil, .T., 0)
_addmethod({"SetDevice", {|| tprnsetdev()}}, Nil, .F., 0)
_addmethod({"Process", {|| tprnproces()}}, Nil, .F., 0)
_addmethod({"PrintTitul", {|| tprntitul()}}, Nil, .F., 0)
_addmethod({"PrintHead", {|| tprnhead()}}, Nil, .F., 0)
_addmethod({"PrintHeadFoot", {|| tprnheadfo()}}, Nil, .F., 0)
_addmethod({"PrintStr", {|| tprnstr()}}, Nil, .F., 0)
_addmethod({"PrintFoot", {|| tprnfoot()}}, Nil, .F., 0)
_addmethod({"PrintFormula", {|| tprnprintf()}}, Nil, .F., 0)
_addmethod({"Set", {|| tprnset()}}, Nil, .F., 0)
_addmethod({"Done", {|| tprndone()}}, Nil, .F., 0)
_addmethod({"StrTransform", {|| tprntransf()}}, Nil, .F., 0)
_addmethod({"NewPage", {|| newpage()}}, Nil, .F., 0)
_addmethod({"ResetPage", {|| resetpage()}}, Nil, .F., 0)
_addmethod({"AddnStr", {|| tprnaddnst()}}, Nil, .F., 0)
endif
return __classins(Static26)

********************************
один из методов класса
static function TPRNLOAD(Arg1)

local Local1:= qself(), Local2, Local3:= {}, Local4:= {}, Local5, ;
Local6, Local7, Local8, Local9
Local1:lloaderro(.F.)
Local1:aopr({})
Local1:avar({})
if (!file(Arg1))
alert("Отсутствует файл отчетной формы " + Arg1)
Local1:lloaderro(.T.)
return .F.
endif
Local1:nstr(1)
Local1:nlist(1)
Local1:isprn(.T.)
Local1:ctitul("")
Local1:nheadwidt(40)
Local1:kolstr(getcfg("KOLSTR", Arg1, "N"))
if (Local1:kolstr() == 0)
Local1:kolstr(75)
endif
Local1:device(getcfg("DEVICE", Arg1, "C"))
Local1:rulon(getcfg("RULON", Arg1, "C"))
if (Upper(Local1:rulon()) = "ДА")
Local1:rulon(.T.)
else
Local1:rulon(.F.)
endif
Local1:ustanovki("")
Local1:ustanovki(getcfg("Ustanovki", Arg1, "C"))
Local1:ceject(getcfg("EJECT", Arg1, "C"))
if (Empty(Local1:ceject()))
Local1:ceject(" ")
endif
if (Empty(Local1:ustanovki()) .AND. Type("cUstanovki") != "U")
Local1:ustanovki(custanovki)
elseif (Upper(Local1:ustanovki()) == "НЕТ")
Local1:ustanovki("")
endif
Local1:lcontinue(.T.)
Local2:= memoread(Arg1)
Local1:cfile(SubStr(Arg1, 1, Len(Arg1) - 3) + "prn")
Local1:csource(memoread(Arg1))
Local1:ctitul(beforatnum(Chr(13) + Chr(10) + "ENDTITUL", ;
afteratnum("TITUL" + Chr(13) + Chr(10), Local1:csource(), 1), ;
1))
Local1:chead(beforatnum(Chr(13) + Chr(10) + "ENDPAGEHEAD", ;
afteratnum("PAGEHEAD" + Chr(13) + Chr(10), Local1:csource(), ;
1), 1))
Local1:cheadfoot(beforatnum(Chr(13) + Chr(10) + "ENDPAGEFOOT", ;
afteratnum("PAGEFOOT" + Chr(13) + Chr(10), Local1:csource(), ;
1), 1))
Local1:cfoot(beforatnum(Chr(13) + Chr(10) + "ENDMAINFOOT", ;
afteratnum("MAINFOOT" + Chr(13) + Chr(10), Local1:csource(), ;
1), 1))
Local1:reportnam("Отчет")
tokeninit(@Local2, Chr(13) + Chr(10), 2)
Local5:= 0
Local9:= .F.
do while (!tokenend())
Local7:= tokennext(Local2)
Local6:= alltrim(Local7)
Local5++
do case
case Left(Local6, 1) == "#"
if (!Local9)
Local1:reportnam(SubStr(Local7, 2))
Local9:= .T.
endif
loop
case Upper(Local6) = "KOLSTR" .OR. Upper(Local6) = "USTANOVKI" ;
.OR. Upper(Local6) = "RULON" .OR. Upper(Local6) = ;
"DEVICE" .OR. Upper(Local6) = "LIST" .OR. Upper(Local6) ;
= "EJECT"
loop
case Upper(Local6) = "TITUL"
do while (!tokenend() .AND. Upper(Local6) != "ENDTITUL")
Local7:= tokennext(Local2)
Local5++
Local6:= alltrim(Local7)
enddo
case Upper(Local6) = "PAGEHEAD"
do while (!tokenend() .AND. Upper(Local6) != "ENDPAGEHEAD")
Local7:= tokennext(Local2)
Local5++
Local6:= alltrim(Local7)
enddo
case Upper(Local6) = "PAGEFOOT"
do while (!tokenend() .AND. Upper(Local6) != "ENDPAGEFOOT")
Local7:= tokennext(Local2)
Local5++
Local6:= alltrim(Local7)
enddo
case Upper(Local6) = "MAINFOOT"
do while (!tokenend() .AND. Upper(Local6) != "ENDMAINFOOT")
Local7:= tokennext(Local2)
Local5++
Local6:= alltrim(Local7)
enddo
case Upper(Local6) = "VAR"
Local6:= alltrim(SubStr(Local6, 4))
numelem:= numtoken(Local6, "," + Chr(13) + Chr(10))
for Local8:= 1 to numelem
AAdd(Local1:avar(), alltrim(token(Local6, "," + Chr(13) ;
+ Chr(10), Local8)))
Local5++
next
case Upper(Local6) = "AUTO"
Local5++
Local1:auto(.T.)
case SubStr(Local6, 1, 2) = "@ "
Local6:= LTrim(SubStr(Local6, 2))
Local7:= alltrim(Local6)
do case
case Upper(Local7) = "IF"
AAdd(Local1:aopr(), {"IF", alltrim(SubStr(Local7, 3)), ;
Local5, 0, &("{||" + alltrim(SubStr(Local7, 3)) + ;
"}")})
AAdd(Local3, Len(Local1:aopr()))
case Upper(Local7) = "ELSE"
if (Len(Local3) == 0)
alert("Ошибка в составлении условных операторов;Строка" ;
+ Str(alltrim(Local5)))
Local1:lloaderro(.T.)
return .F.
endif
if (Empty(SubStr(Local7, 5)))
AAdd(Local1:aopr(), {"ELSE", alltrim(SubStr(Local7, ;
5)), Local5, 0})
else
AAdd(Local1:aopr(), {"ELSE", alltrim(SubStr(Local7, ;
5)), Local5, 0, &("{||" + alltrim(SubStr(Local7, ;
5)) + "}")})
endif
Local1:aopr()[ATail(Local3)][4]:= Len(Local1:aopr())
Local3[Len(Local3)]:= Len(Local1:aopr())
case Upper(Local7) = "ENDIF"
if (Len(Local3) == 0)
alert("Ошибка в составлении условных операторов;Строка " ;
+ alltrim(Str(Local5)))
Local1:lloaderro(.T.)
return .F.
endif
AAdd(Local1:aopr(), {"ENDIF", "", Local5, 0})
Local1:aopr()[ATail(Local3)][4]:= Len(Local1:aopr())
asize(Local3, Len(Local3) - 1)
case Upper(Local7) = "WHILE"
AAdd(Local1:aopr(), {"WHILE", alltrim(SubStr(Local7, ;
6)), Local5, 0, &("{||" + alltrim(SubStr(Local7, 6)) ;
+ "}")})
AAdd(Local4, Len(Local1:aopr()))
case Upper(Local7) = "ENDWHILE"
if (Len(Local4) == 0)
Local1:lloaderro(.T.)
alert("Ошибка в составлении условных операторов;Строка " ;
+ alltrim(Str(Local5)))
return .F.
endif
AAdd(Local1:aopr(), {"ENDWHILE", "", Local5, ;
ATail(Local4)})
Local1:aopr()[ATail(Local4)][4]:= Len(Local1:aopr())
asize(Local4, Len(Local4) - 1)
case "{|" $ Upper(Local7) .OR. "&" $ Upper(Local7)
AAdd(Local1:aopr(), {"OP", Local7, Local5, 0, "{||" + ;
Local7 + "}"})
otherwise
AAdd(Local1:aopr(), {"OP", Local7, Local5, 0, &("{||" + ;
Local7 + "}")})
endcase
case SubStr(Local6, 1, 1) != "@"
AAdd(Local1:aopr(), {"STR", Local7, Local5, 0})
endcase
enddo
for Local8:= 1 to Len(Local1:avar())
Local6:= Local1:avar()[Local8]
if (Type("M->" + Local6) = "U")
public &Local6
endif
next
return
********************************
процедура через которую осуществляется печать форм:
procedure PRINTFORM(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)

local Local1, Local2
if (demoflag)
demo()
else
showmessag("Формирую отчет.")
Arg3:= iif(Arg3 = Nil, .F., Arg3)
Arg4:= iif(Arg4 = Nil, .F., Arg4)
Arg5:= iif(Arg5 = Nil, .F., Arg5)
Arg6:= iif(Arg6 = Nil, 0, Arg6)
if (file(dallvod + Arg1))
Local1:= tprinter():load(dallvod + Arg1)
else
Local1:= tprinter():load(dvod + Arg1)
endif
if (Local1:lloaderror())
showmessag()
else
if (Arg2 != Nil)
Local1:device(Arg2)
endif
Arg2:= iif(!Empty(ctempdir), ctempdir + "\", "") + ;
Local1:device()
if (Local1:setdevice(Arg4, Arg5))
Local2:= Local1:reportname()
if (Local1:process())
if (Arg3 .AND. file(Arg2 + ".prn"))
edittext(Arg2 + ".prn", Local2 + Space(10) + Arg1, ;
Arg6)
endif
endif
endif
showmessag()
return
endif
endif

********************************

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2555
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.12 12:16. Заголовок: А какого именно мето..


А какого именно метода не хватает ? Метод TPrinter:Load как раз есть

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 23.11.12 12:44. Заголовок: забыл сообщение.... ..


забыл сообщение.... а возможности проверить нет. но ругань идет на (если память не изменяет) lloaderro . На LOAD не ругаемся уже. Точнее не скажу... только вечером. 3-я строка TPRNLOAD. Вечером попробую дописать там букву 'r'.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2556
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.12 12:53. Заголовок: Понятно. Это связано..


Понятно. Это связано с органичением длины символов в клиппере 10 знаков, и легко лечится.
Вызовы типа Lodal1:lloaderro надо заменить:

Local1:lloaderro() -> Local1:lloaderror
Local1:lloaderro(.T.) -> Local1:lloaderror := .T.
Local1:lloaderro(.F.) -> Local1:lloaderror := .F.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 17
Зарегистрирован: 15.11.12
ссылка на сообщение  Отправлено: 28.11.12 15:27. Заголовок: Здравствуйте. Продол..


Здравствуйте.
Продолжаю мучить программу и вот вылезла интересная ошибка...
ошибка лезет из класса TPRINTER. Кормом для этого класса являются текстовые файлы типа:


 цитата:

#Абоненты
var Sum,ItGaz,kodk1,mNaimg,nom
KOLSTR=60
RULON=Да
DEVICE=abonement
EJECT=&l0H
TITUL
ОТЧЕТ ПО АБОНЕМЕНТАМ
ПЕРИОД С @{dtoc(mD1)+' ПО '+dtoc(mD2)}
ENDTITUL
MAINFOOT
Итого @{str(Sum,9)}


@{saytime()} 1/A/2
ENDMAINFOOT
PAGEHEAD
----------------------T----------T----------¬
¦ Наименование ¦Код киоска¦Количество¦
+---------------------+----------+----------+
ENDPAGEHEAD
PAGEFOOT
L---------------------+----------+-----------
ENDPAGEFOOT
@ Sum:=0
@ dbSelectArea('tmp')
@ dbGoTop()
@ while !eof()
@ itGaz:=0
@ mNaimg:=tmp->naimg
@ nom:=0
@ while mNaimg=tmp->naimg
@ if tmp->kol#0
@ nom:=nom+1
$@{' | '+if(nom=1,tmp->naimg,space(len(tmp->naimg)))+'| '+str(tmp->kodk,4)+' | '+str(tmp->kol,4)+' |'}
@ ItGaz:=ItGaz+tmp->kol
@ Sum:=Sum+tmp->kol
@ endif
@ dbSkip()
@ endwhile
@ if nom>1
$@{' | Итого '+space(28)+str(ItGaz,4)+' |'}
@ endif itGaz#0
@ if NOM>0.AND.!eof()
+---------------------+----------+----------+
@ endif
@ endwhile



Эти файлы обрабатываются методом TPRNLOAD приведенный в 15 посте(аргументом ARG1 для него будет путь к файлу). По ходу выполнения этого метода заполняется массив tprinter::aopr. В него заносятся строки кода, которые потом динамически будут выполняться.
Есть один отчет (вернее разнарядка) на которой программа вываливается с сообщение об ошибке - BASE/1449 Syntax error: &.
Ошибка возникает в строке

 цитата:

otherwise
AAdd(Local1:aopr, {"OP", Local7, Local5, 0, &("{||" + Local7 + "}")}) // при выполнении этой строки
endcase



метода TPRNLOAD, при обработке строки текстового файла отчета -

 цитата:

var nSel,tmp,i,kolrec,cString,KolGor,Kol,SumR,SumO
var aKodRaion,aNamRaion,aSumRaion,j,Sum,aSumRAll
#,part
var zagol,zagol1,zagol2,zagol3,zagol4,aCena,aKol,aKolO,cString1,kolrec1,SumAllG,SumAllO
#Печать разнарядки на город
@1=dtoc(rrh0->date)
@2=trim(rrh0->time)
@3=alltrim(str(rrh0->NomRasn,3))
@4='('+trim(rrh0->prim)+')'
KOLSTR=55
RULON=Нет
EJECT=&l0H
Ustanovki=&l1O(s12H&l8D
LIST=Нет
#mod(oPrn:nList,2)
PAGEHEAD
Р А З Н А Р Я Д К А N @3 @1 @4 лист @{str(oPrn:nList,3)} часть @{str(part,2)} @{saytime()} 1/3/2/Enter/F5 @{if(oPrn:nList%2=0,chr(13)+chr(10)+zagol,'')}
ENDPAGEHEAD
@ part:=1
@ SumAllO:=0
@ SumAllG:=0
@ aKodRaion:={}
@ aNamRaion:={}
@ aSumRaion:={}
@ aSumRAll:={}
@ aCena:={}
@ zagol:=''
@ dbSelectArea('raig')
@ dbGoTop()
@ while !eof()
@ aAdd(aKodRaion,raig->kodr)
@ aAdd(aNamRaion,raig->naim)
@ aAdd(aSumRaion,0)
@ aAdd(aSumRAll,0)
@ dbSkip()
@ endwhile
@ while !empty(aLockList)
@ dbSelectArea('rrh')
@ kolrec:=len(aLockList)
@ aKol:=array(kolrec)
@ aKolO:=array(kolrec)
@ aFill(aKol,0)
@ aFill(aKolO,0)
@ Zagol1:=' РАЙОН:'
@ Zagol2:=' :'
@ Zagol3:=' :'
@ Zagol4:=' :'
@ i:=1
@ aFill(aSumRaion,0)
@ while i<=kolrec.and.i<=9
@ dbGoTo(aLockList)
@ Zagol1:=Zagol1+rrh->nnom+':'
@ Zagol2:=Zagol2+padr(rrh->naimg,13)+':'
@ Zagol3:=Zagol3+padr(substr(rrh->naimg,14),13)+':'
@ Zagol4:=Zagol4+str(rrh->rcena,8,2)+' :'
@ aAdd(aCena,rrh->rcena)
@ i:=i+1
@ endwhile
@ kolrec1:=i-1
@ if part>1
@ oPrn:NewPage()
@ endif
------------------------------------------------------------------------------------------------------------------------------------
$@{zagol1}
------------------------------------------------------------------------------------------------------------------------------------
$@{zagol2}
$@{zagol3}
------------------------------------------------------------------------------------------------------------------------------------
$@{zagol4}
------------------------------------------------------------------------------------------------------------------------------------
@ zagol:=' ------------------------------------------------------------------------------------------------------------------------------------'+chr(13)+chr(10)
@ zagol:=zagol+zagol1+chr(13)+chr(10)
@ zagol:=zagol+' ------------------------------------------------------------------------------------------------------------------------------------'+chr(13)+chr(10)
@ zagol:=zagol+zagol2+chr(13)+chr(10)
@ zagol:=zagol+zagol3+chr(13)+chr(10)
@ zagol:=zagol+' ------------------------------------------------------------------------------------------------------------------------------------'+chr(13)+chr(10)
@ zagol:=zagol+zagol4+chr(13)+chr(10)
@ zagol:=zagol+' ------------------------------------------------------------------------------------------------------------------------------------'
@ dbSelectArea('raig')
@ dbGoTop()
@ j:=1
@ while !eof()
@ cString:=padr(raig->naim,8)
@ i:=1
@ if raig->type='G'
@ while i<=kolrec1
@ rrh->(dbGoTo(aLockList)) // ПРИ ОБРАБОТКЕ ЭТОЙ СТРОКИ МЫ ОШИБАЕМСЯ
@ if rrd->(dbSeek(str(rrh0->NomRasn,3)+Upper(rrh->naimg)+rrh->nnom+'G'+str(raig->kodr,3)))
@ cString:=cString+str(rrd->prihod,6)+' '
@ else
@ cString:=cString+str(0,6)+' '
@ endif



Причем до этого момента элементы в массив добавлялись исправно не один десяток раз ( точнее 68), а при добавлении 69-го элемента массива tprinter::aopr получаю ошибку..... . Существуют ли какие либо ограничения на размер массива в клиппере ? если есть как их преодолеть ? Если ограничений нет - то подскажите пожалуйста возможные причины возникновения данной ошибки.

И еще один вопрос. Как мне включить(прилинковать) в ЕХЕ модуль функцию/процедуру явно не использующуюся в программе, но присутствующую во внешнем текстовом файле и, соответственно, выполняющуюся динамически. Например - SwpRunCmd().

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 451
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.11.12 15:44. Заголовок: Существуют ли какие ..



 цитата:
Существуют ли какие либо ограничения на размер массива в клиппере ?


4096 элементов.

 цитата:
И еще один вопрос. Как мне включить(прилинковать) в ЕХЕ модуль функцию/процедуру явно не использующуюся в программе, но присутствующую во внешнем текстовом файле и, соответственно, выполняющуюся динамически. Например - SwpRunCmd().


Вставьте в текст программы REQUEST SwpRunCmd

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 67 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 572
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет