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



Пост N: 1
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 14.10.11 15:31. Заголовок: Компиляция-декомпиляция


Добрый день.
Есть программа , написаная на 5 клиппере.
После декомпиляции при помощи RESCUE5.EXE попробовал её вновь скомпилировать .
С 642048 байт исходного размера получаю упорно 614400 байт.
при этом ругается на фукции FIELDWBLOCK.
"Ошибка BASE/1001 Undefined function:FIELDWBLOCK"
Бьюсь над проблемой, а нужно декомпилировать, исходники - Бог знает где...
Кто-нить поможет?

Среду программирования скачал отсюда же - http://files.mail.ru/N84IIM
(спасибо администратору DIMA-s)


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 15 [только новые]





Пост N: 297
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.11 16:05. Заголовок: tkandrey пишет: С 6..


tkandrey пишет:

 цитата:
С 642048 байт исходного размера получаю упорно 614400 байт.


Это размер чего - исходников или exe?

tkandrey пишет:

 цитата:
Бьюсь над проблемой, а нужно декомпилировать


Так декомпилировать получилось или нет?

tkandrey пишет:

 цитата:
Среду программирования скачал отсюда же


Какая среда то?

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




Пост N: 2163
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.11 16:35. Заголовок: AlexMyr пишет: Кака..


AlexMyr пишет:

 цитата:
Какая среда то?


Полагаю Clipper 5.2e из темы http://clipper.borda.ru/?1-0-0-00000528-000-0-0-1315823697

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



Пост N: 2
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 15.10.11 20:50. Заголовок: Декомпилировать полу..


Декомпилировать получилось. Все размеры в байта х - это размеры EXE модулей.Исходный и после компиляции декомпилированного. Версия - да - Clipper 5.2e

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



Пост N: 3
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 15.10.11 20:55. Заголовок: И ещё, я ж не знаю, ..


И ещё, я ж не знаю, корректно ли всё декомпилировано. Программа сия - для учёта основных средств, требует правки, исходников нет, режимы формирования всяких там отчётов, переиндексации, расчётов вроде работают, а вот режимы, в которых осуществляется правка таблиц при помощи команд MYBROWSE (ну , и там в построении формы для правки таблицы используется функция FIELDWBLOCK - на ней и обрывается работа программы)...

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



Пост N: 36
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 17.10.11 08:34. Заголовок: Выложите исходный те..


Выложите исходный текст того места, где произошла ошибка. Если ошибка возникает на этапе выполнения, CLIPPER по идее должен был сказать
FIELDWBLOC , FIELDWBLOCK так как CLIPPER обрезает все символы переменных и функций до длины 10 символов

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



Пост N: 4
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 17.10.11 10:14. Заголовок: Буду предельно подро..


Буду предельно подробен.
Например.Вот процедура(полученная в результате декомпиляции), которая обеспечивает режим работы "Работа с ОС".

 цитата:

PROCEDURE PR_POK()
DBSELECTAR("1")
IF .NOT. YES_DBF_NT(DBF_SERVER + "OS", 0, 0, "INV_NOM", DBF_SERVER + ;
"OS")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSETFILTE({||LIK_PER == 0}, "LIK_PER==0")
DBSELECTAR("20")
IF .NOT. YES_DBF_NT(DBF_SERVER + "SP_PODR", 0, 0, "KOD", DBF_SERVER + ;
"SP_PODR")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSELECTAR("21")
IF .NOT. YES_DBF_NT(DBF_SERVER + "SP_WORKS", 0, 0, "TAB_N", DBF_SERVER ;
+ "SP_WORKS")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
IF .T.
DBCLEARREL()
ENDIF
DBSETRELAT("SP_PODR", {||KOD_POD}, "KOD_POD")
DBSELECTAR("22")
IF .NOT. YES_DBF_NT(DBF_SERVER + "SP_MOL", 0, 0, "TAB_N", DBF_SERVER + ;
"SP_MOL")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
IF .T.
DBCLEARREL()
ENDIF
DBSETRELAT("SP_WORKS", {||TAB_N}, "TAB_N")
DBSELECTAR("6")
IF .NOT. YES_DBF_NT("SP_NAO", 0, 0, "KOD", "SP_NAO")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSELECTAR("7")
IF .NOT. YES_DBF_NT("SP_GR", 0, 0, "KOD", "SP_GR")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSELECTAR("8")
IF .NOT. YES_DBF_NT("SP_NAZN", 0, 0, "KOD", "SP_NAZN")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSELECTAR("9")
IF .NOT. YES_DBF_NT("SP_IST", 0, 0, "KOD", "SP_IST")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF

DBSELECTAR("10")
IF .NOT. YES_DBF_NT(DBF_SERVER + "SUBSCHET", 0, 0, "SUBSCHET", ;
DBF_SERVER + "SUBSCHET")
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN
ENDIF
DBSELECTAR("1")
IF .T.
DBCLEARREL()
ENDIF
DBSETRELAT("SP_MOL", {||TAB_N}, "TAB_N")
DBSETRELAT("SP_NAO", {||K_NAO}, "K_NAO")
DBSETRELAT("SP_GR", {||K_GR}, "K_GR")
DBSETRELAT("SP_NAZN", {||K_NAZN}, "K_NAZN")
DBSETRELAT("SP_IST", {||K_IST}, "K_IST")
DBGOTOP()
PRIVATE NCOL := 30
PRIVATE NCOL1 := 9
PRIVATE NCOL2 := 6
PRIVATE NCOL3 := 1
PRIVATE MCOLUMNRUS[NCOL], MFIELD[NCOL], MALIAS[NCOL], MNOTEMPTY[NCOL1], ;
REM[NCOL], NOWRITE[NCOL2], NOWRITEMOD[NCOL3], PICT[NCOL], POS[;
NCOL], PRE[NCOL], MHELP[NCOL], MAUTO[NCOL]
PRIVATE ZAGOLOVOK
PRIVATE MGETVAR
PRIVATE STR_END
PRIVATE VARHELP
PRIVATE YN_RES
PRIVATE FGO
PRIVATE NEMPTY := .T.
MEMVAR->ZAGOLOVOK := " Работа с ОС "
MEMVAR->STR_END := " F1 "+CHR(24)+CHR(25)+;
" Enter Ct+Enter F6 Sh+F6 F2 Sh+F2 F8 F4 Sh+F1 Esc "
MEMVAR->VARHELP := "pri"
MEMVAR->YN_RES := .T.
MEMVAR->MCOLUMNRUS[1] := "ИнвN "
MEMVAR->MCOLUMNRUS[2] := "Наименование ОС"
MEMVAR->MCOLUMNRUS[3] := "Завод-изготовитель"
MEMVAR->MCOLUMNRUS[4] := "Модель"
MEMVAR->MCOLUMNRUS[5] := "Паспорт"
MEMVAR->MCOLUMNRUS[6] := "Д.вып."
MEMVAR->MCOLUMNRUS[7] := "Куп/Пол"
MEMVAR->MCOLUMNRUS[8] := "Д.пок."
MEMVAR->MCOLUMNRUS[9] := "Д.экспл."
MEMVAR->MCOLUMNRUS[10] := "Д.платы"
MEMVAR->MCOLUMNRUS[11] := "ТабN МОЛ"
MEMVAR->MCOLUMNRUS[12] := "Фамилия МОЛ"
MEMVAR->MCOLUMNRUS[13] := "Кгр"
MEMVAR->MCOLUMNRUS[14] := "Группа"
MEMVAR->MCOLUMNRUS[15] := "Кназ"
MEMVAR->MCOLUMNRUS[16] := "Назначение"
MEMVAR->MCOLUMNRUS[17] := "Кфин"
MEMVAR->MCOLUMNRUS[18] := "Источник финансирования"
MEMVAR->MCOLUMNRUS[19] := "Субсч"
MEMVAR->MCOLUMNRUS[20] := "Перв.стоим."
MEMVAR->MCOLUMNRUS[21] := "Перв.износ"
MEMVAR->MCOLUMNRUS[22] := "Тек.износ"
MEMVAR->MCOLUMNRUS[23] := "Кнорм"
MEMVAR->MCOLUMNRUS[24] := "Норма"
MEMVAR->MCOLUMNRUS[25] := "Мес.аморт."
MEMVAR->MCOLUMNRUS[26] := "Ав"
MEMVAR->MCOLUMNRUS[27] := "АП"
MEMVAR->MCOLUMNRUS[28] := "Nдок"
MEMVAR->MCOLUMNRUS[29] := "Отправитель"
MEMVAR->MCOLUMNRUS[30] := "Nттн"
MEMVAR->MFIELD[1] := "INV_NOM"
MEMVAR->MFIELD[2] := "NAME_OS"
MEMVAR->MFIELD[3] := "ZAVOD"
MEMVAR->MFIELD[4] := "MODEL"
MEMVAR->MFIELD[5] := "PASPORT"
MEMVAR->MFIELD[6] := "D_VIP"
MEMVAR->MFIELD[7] := "POK_POL"
MEMVAR->MFIELD[8] := "D_POK"
MEMVAR->MFIELD[9] := "D_EKSPL"
MEMVAR->MFIELD[10] := "D_PLATA"
MEMVAR->MFIELD[11] := "TAB_N"
MEMVAR->MFIELD[12] := "FAM"
MEMVAR->MFIELD[13] := "K_GR"
MEMVAR->MFIELD[14] := "NAME"
MEMVAR->MFIELD[15] := "K_NAZN"
MEMVAR->MFIELD[16] := "NAME"
MEMVAR->MFIELD[17] := "K_IST"
MEMVAR->MFIELD[18] := "NAME"
MEMVAR->MFIELD[19] := "SUBSCHET"
MEMVAR->MFIELD[20] := "STOIM"
MEMVAR->MFIELD[21] := "IZN"
MEMVAR->MFIELD[22] := "T_IZN"
MEMVAR->MFIELD[23] := "K_NAO"
MEMVAR->MFIELD[24] := "NAME"
MEMVAR->MFIELD[25] := "M_AMORT"
MEMVAR->MFIELD[26] := "AVTO"
MEMVAR->MFIELD[27] := "ACT_PAS"
MEMVAR->MFIELD[28] := "NOM_DOC"
MEMVAR->MFIELD[29] := "OTPR"
MEMVAR->MFIELD[30] := "NOM_TTN"
MEMVAR->MALIAS[1] := 1
MEMVAR->MALIAS[2] := 1
MEMVAR->MALIAS[3] := 1
MEMVAR->MALIAS[4] := 1
MEMVAR->MALIAS[5] := 1
MEMVAR->MALIAS[6] := 1
MEMVAR->MALIAS[7] := 1
MEMVAR->MALIAS[8] := 1
MEMVAR->MALIAS[9] := 1
MEMVAR->MALIAS[10] := 1
MEMVAR->MALIAS[11] := 1
MEMVAR->MALIAS[12] := 21
MEMVAR->MALIAS[13] := 1
MEMVAR->MALIAS[14] := 7
MEMVAR->MALIAS[15] := 1
MEMVAR->MALIAS[16] := 8
MEMVAR->MALIAS[17] := 1
MEMVAR->MALIAS[18] := 9
MEMVAR->MALIAS[19] := 1
MEMVAR->MALIAS[20] := 1
MEMVAR->MALIAS[21] := 1
MEMVAR->MALIAS[22] := 1
MEMVAR->MALIAS[23] := 1
MEMVAR->MALIAS[24] := 6
MEMVAR->MALIAS[25] := 1
MEMVAR->MALIAS[26] := 1
MEMVAR->MALIAS[27] := 1
MEMVAR->MALIAS[28] := 1
MEMVAR->MALIAS[29] := 1
MEMVAR->MALIAS[30] := 1
MEMVAR->POS[1] := "CheckSpace(mGetVar).AND.CHK_INV()"
MEMVAR->POS[7] := "!EMPTY(mGetVar).AND.(mGetVar=='0'.OR.mGetVar=='1')"
MEMVAR->POS[8] := "!EMPTY(mGetVar)"
MEMVAR->POS[11] := " sverka('mGetVar',22)"
MEMVAR->POS[13] := " sverka('mGetVar',7)"
MEMVAR->POS[15] := " sverka('mGetVar',8)"
MEMVAR->POS[17] := " sverka('mGetVar',9)"
MEMVAR->POS[19] := " sverka('mGetVar',10)"
MEMVAR->POS[20] := " mGetVar>0"
MEMVAR->POS[21] := " mGetVar<=STOIM"
MEMVAR->POS[22] := " mGetVar<=STOIM.AND.mGetVar>=IZN"
MEMVAR->POS[23] := " sverka('mGetVar',6)"
MEMVAR->POS[26] := " (mGetVar==0.OR.mGetVar==1)"
MEMVAR->POS[27] := " (mGetVar==0.OR.mGetVar==1)"
MEMVAR->PRE[2] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[3] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[4] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[5] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[6] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[7] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[8] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[9] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[10] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[12] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[14] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[16] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[18] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[19] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[20] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[21] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[22] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[25] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[26] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[27] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[28] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[29] := "!EMPTY(INV_NOM)"
MEMVAR->PRE[30] := "!EMPTY(INV_NOM)"
MEMVAR->REM[1] := "Инвентарный номер"
MEMVAR->REM[2] := "Завод-изготовитель"
MEMVAR->REM[3] := "Наименование ОС"
MEMVAR->REM[4] := "Модель,тип,марка"
MEMVAR->REM[5] := "Паспорт"
MEMVAR->REM[6] := "Дата выпуска"
MEMVAR->REM[7] := "Источник приобретения: 0 - куплено , 1 - получено"
MEMVAR->REM[8] := "Дата покупки"
MEMVAR->REM[9] := "Дата ввода в эксплуатацию"
MEMVAR->REM[10] := "Дата начала платы"
MEMVAR->REM[11] := "Табельный номер МОЛ"
MEMVAR->REM[12] := "Фамилия МОЛ"
MEMVAR->REM[13] := "Код группы"
MEMVAR->REM[14] := "Группа"
MEMVAR->REM[15] := "Код назначения"
MEMVAR->REM[16] := "Назначение"
MEMVAR->REM[17] := "Код ист.финанс."
MEMVAR->REM[18] := "Источник финансирования"
MEMVAR->REM[19] := "Субсчет отнесения затрат"
MEMVAR->REM[20] := "Первоначальная стоимость"
MEMVAR->REM[21] := "Износ при поступлении"
MEMVAR->REM[22] := "Текущий износ"
MEMVAR->REM[23] := "Код нормы амортизации"
MEMVAR->REM[24] := "Норма амортизации"
MEMVAR->REM[25] := "Величина мес.амортизации(для авто-на 1000км)"
MEMVAR->REM[26] := "Признак автотранспорта(1-автотранспорт)"
MEMVAR->REM[27] := "Актив(1)/пассив(0)"
MEMVAR->REM[28] := "Авизо"
MEMVAR->REM[29] := "Отправитель"
MEMVAR->REM[30] := "Номер ТТН"
MEMVAR->MNOTEMPTY[1] := 1
MEMVAR->MNOTEMPTY[2] := 2
MEMVAR->MNOTEMPTY[3] := 8
MEMVAR->MNOTEMPTY[4] := 11
MEMVAR->MNOTEMPTY[5] := 13
MEMVAR->MNOTEMPTY[6] := 15
MEMVAR->MNOTEMPTY[7] := 17
MEMVAR->MNOTEMPTY[8] := 19
MEMVAR->MNOTEMPTY[9] := 23
MEMVAR->NOWRITE[1] := 12
MEMVAR->NOWRITE[2] := 14
MEMVAR->NOWRITE[3] := 16
MEMVAR->NOWRITE[4] := 18
MEMVAR->NOWRITE[5] := 24
MEMVAR->NOWRITE[6] := 25
MEMVAR->NOWRITEMOD[1] := 1
MEMVAR->MAUTO[1] := "Aut_pr"
MEMVAR->MHELP[11] := "HLP_MOL"
MEMVAR->MHELP[13] := "HLP_GR"
MEMVAR->MHELP[15] := "HLP_NAZN"
MEMVAR->MHELP[17] := "HLP_IST"
MEMVAR->MHELP[19] := "HLP_SUB"
MEMVAR->MHELP[23] := "HLP_NAO"
SETCOLOR(COL5)
SCROLL()
SETPOS(0, 0)
SETCOLOR(COL2)
SCROLL(0, 0, 0, MAXCOL())
SETPOS(0, 0)
DEVPOS(0, 2)
DEVOUT(AVTOR)
DEVPOS(0, MAXCOL() - 9)
DEVOUT(DATE())
SETCOLOR(COL5)
SET(4, IF(__SETCENTU(), "dd.mm.yyyy", "dd.mm.yy"))
BEGIN SEQUENCE
MYBROWSE(2, 2, MAXROW() - 2, 78, 1, .T., .T., .T., (&(;
" { || F8_pok() } ")), 1, NIL, NIL, (&("{ ||App_pok() }")), (&(;
"{ ||LMod_pr() }")), (&("{ || FUser_pr() }")), .F., NIL, NIL, ;
NIL)
END SEQUENCE
SET(4, IF(__SETCENTU(), "dd/mm/yyyy", "dd/mm/yy"))
DBCLOSEALL()
__MRELEASE("*", .T.)
RETURN


Не работает именно строчка команды MYBROWSE .
Функции:

 цитата:

FUNCTION F8_POK()
LOCAL L1, L2 := RECNO()
L1 := SAVESCREEN(NIL, NIL, NIL, NIL)
BELL(1)
IF ASK(" Вы уверены, что хотите удалить запись ? ", 2)
DBSELECTAR("11")
IF .NOT. YES_DBF_NT(DBF_SERVER + "VN_OS", 1, 0, ;
"INV_NOM+DTOS(D_PEREM)", DBF_SERVER + "VN_OS")
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
RETURN
ENDIF
DBSELECTAR("12")
IF .NOT. YES_DBF_NT(DBF_SERVER + "AO_OS", 1, 0, "INV_NOM", ;
DBF_SERVER + "AO_OS")
VN_OS->(DBCLOSEARE())
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
RETURN
ENDIF
DBSELECTAR("1")
IF .NOT. YES_DBF_NT(DBF_SERVER + "OS", 1, 0, "INV_NOM", DBF_SERVER +;
"OS")
IF .NOT. YES_DBF_NT(DBF_SERVER + "OS", 0, 0, "INV_NOM", ;
DBF_SERVER + "OS")
DBCLOSEALL()
__MRELEASE("*", .T.)
BREAK( NIL )
ELSE
DBSETFILTE({||LIK_PER == 0}, "LIK_PER==0")
IF .T.
DBCLEARREL()
ENDIF
DBSETRELAT("SP_MOL", {||TAB_N}, "TAB_N")
DBSETRELAT("SP_NAO", {||K_NAO}, "K_NAO")
DBSETRELAT("SP_GR", {||K_GR}, "K_GR")
DBSETRELAT("SP_NAZN", {||K_NAZN}, "K_NAZN")
DBSETRELAT("SP_IST", {||K_IST}, "K_IST")
DBGOTO(L2)
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
VN_OS->(DBCLOSEARE())
AO_OS->(DBCLOSEARE())
RETURN .F.
ENDIF
ELSE
SLEEP()
DBGOTO(L2)
DBSELECTAR("VN_OS")
DBEVAL({||DBDELETE()}, {||INV_NOM == OS->INV_NOM}, NIL, NIL, NIL, ;
.F.)
__DBPACK()
DBSELECTAR("AO_OS")
DBEVAL({||DBDELETE()}, {||INV_NOM == OS->INV_NOM}, NIL, NIL, NIL, ;
.F.)
__DBPACK()
DBSELECTAR("OS")
DBDELETE()
__DBPACK()
MEMVAR->NEMPTY := .T.
BELL(3)
ENDIF
DBSELECTAR("1")
IF .NOT. YES_DBF_NT(DBF_SERVER + "OS", 0, 0, "INV_NOM", DBF_SERVER +;
"OS")
DBCLOSEALL()
__MRELEASE("*", .T.)
BREAK( NIL )
ELSE
DBSETFILTE({||LIK_PER == 0}, "LIK_PER==0")
IF .T.
DBCLEARREL()
ENDIF
DBSETRELAT("SP_MOL", {||TAB_N}, "TAB_N")
DBSETRELAT("SP_NAO", {||K_NAO}, "K_NAO")
DBSETRELAT("SP_GR", {||K_GR}, "K_GR")
DBSETRELAT("SP_NAZN", {||K_NAZN}, "K_NAZN")
DBSETRELAT("SP_IST", {||K_IST}, "K_IST")
DBGOTOP()
BROWSE:REFRESHALL()
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
VN_OS->(DBCLOSEARE())
AO_OS->(DBCLOSEARE())
RETURN .F.
ENDIF
ENDIF
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
RETURN .F.

PROCEDURE APP_POK()
IF LASTKEY() = 27
RETURN
ENDIF
FIELD->D_POK := DATE()
FIELD->POK_POL := "0"
FIELD->LIK_PER := 0
FIELD->AVTO := 0
FIELD->ACT_PAS := 1
RETURN

PROCEDURE LMOD_PR()
LOCAL L1, L2 := SELECT()
L1 := SAVESCREEN(NIL, NIL, NIL, NIL)
IF LASTKEY() = 27
RETURN
ENDIF
DBSELECTAR("OS")
IF PROCNAME(2) == "DOGET" .AND. MEMVAR->MFIELD[BROWSE:COLPOS] == "K_NAO" ;
.OR. PROCNAME(2) == "DOGET1" .AND. MEMVAR->MFIELD[GETMEN] == ;
"K_NAO"
DBSELECTAR("SP_NAO")
DBSEEK(MGETVAR)
DBSELECTAR("OS")
IF OS->AVTO = 0
FIELD->M_AMORT := STOIM / 1200 * SP_NAO->NAME
ELSE
FIELD->M_AMORT := STOIM / 100 * SP_NAO->NAME
ENDIF
ENDIF
IF PROCNAME(2) == "DOGET" .AND. MEMVAR->MFIELD[BROWSE:COLPOS] == "AVTO" ;
.OR. PROCNAME(2) == "DOGET1" .AND. MEMVAR->MFIELD[GETMEN] == ;
"AVTO"
IF MGETVAR = 0
FIELD->M_AMORT := STOIM / 1200 * SP_NAO->NAME
ELSE
FIELD->M_AMORT := STOIM / 100 * SP_NAO->NAME
ENDIF
ENDIF
IF (PROCNAME(2) == "DOGET" .AND. MEMVAR->MFIELD[BROWSE:COLPOS] == ;
"STOIM" .OR. PROCNAME(2) == "DOGET1" .AND. MEMVAR->MFIELD[GETMEN] ;
== "STOIM") .AND. .NOT. EMPTY(OS->K_NAO)
IF OS->AVTO = 0
FIELD->M_AMORT := MGETVAR / 1200 * SP_NAO->NAME
ELSE
FIELD->M_AMORT := MGETVAR / 100 * SP_NAO->NAME
ENDIF
ENDIF
RESTSCREEN(NIL, NIL, NIL, NIL, L1)
DBSELECTAR(L2)
RETURN

PROCEDURE FUSER_PR()
IF LASTKEY() = -9
IF NOTEMPTY()
OTCUZ()
IF OS->LIK_PER <> 0
DBGOTOP()
BROWSE:REFRESHALL()
ENDIF
ENDIF
RETURN
ELSEIF LASTKEY() = -6
INV_KART()
RETURN
ELSE
BELL(0)
ENDIF
RETURN


Функции APP_POK() и FUSER_PR() входят в состав модуля LIB.UDF, который прописан
в sredstva.grp,sredstva.lnk и в sredstva.rmk. Там же прописаны отдельно декомпилированные
LMOD_PR.UDF и F8_POK.UDF
Компилирую... Запускаю на выполнение...
Получаю ошибку :

 цитата:

"Ошибка BASE/1001 Undefined function:FIELDWBLOCK
Вызов из LOCKERRHAN(0)
Вызов из (b) INITHANDL$(0)
Вызов из FIELDWBLOCK(0)
Вызов из STOCKBROWS(4691)
Вызов из MYBR(4484)
Вызов из MYBROWSE(2287)
Вызов из PR_POK(352)
Вызов из (b) MAIN(0)
Вызов из RUNMENU(1043)
Вызов из MAIN(450)



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




Пост N: 2133
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.10.11 10:30. Заголовок: Это ошибка не компил..


Это ошибка не компиляции или линковки, а ошибка выполнения
Судя по всему, fieldwblock используется неявно

что в строке 4691 функции stockbrows ?

STOCKBROWS(4691)

Добавьте в начало модуля перед первым оператором procedure или function строку:

request FieldWBlock

и ошибка должна уйти

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



Пост N: 5
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 17.10.11 11:03. Заголовок: Строчка 4691 выделен..


Строчка 4691 выделена красным.
Добавил request FieldWBlock (синий цвет).
 цитата:

STATIC FUNCTION STOCKBROWS(NTOP, NLEFT, NBOTTOM, NRIGHT)

LOCAL BROWSE := TBROWSEDB(NTOP, NLEFT, NBOTTOM, NRIGHT)
LOCAL N, COLUMN, CTYPE
request FieldWBlock
FOR N := 1 TO NCOL

COLUMN := TBCOLUMNNE(MEMVAR->MCOLUMNRUS[N], (&(MFIELDBLOC[N])))
IF .NOT. MEMVAR->PICT[N] == NIL .AND. ( .NOT. AT("S", MEMVAR->PICT[N]);
== 0 .OR. .NOT. AT("s", MEMVAR->PICT[N]) == 0)

COLUMN:WIDTH := VAL(SUBSTR(MEMVAR->PICT[N], MAX(AT("S", MEMVAR->;
PICT[N]), AT("s", MEMVAR->PICT[N])) + 1, 2))

ENDIF

BROWSE:ADDCOLUMN(COLUMN)

NEXT

RETURN BROWSE



Я правильно сделал?



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




Пост N: 2134
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.10.11 11:20. Заголовок: tkandrey пишет: Я п..


tkandrey пишет:

 цитата:
Я правильно сделал?



Лучше эту строку поместить в самом начале prg-модуля, в котором находися эта функция, перед первым оператором function

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

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




Пост N: 2137
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 17.10.11 14:52. Заголовок: tkandrey пишет: Пол..


tkandrey пишет:

 цитата:
Получается, мне во всех местах, где такая функция вызывается , переделать на:

цитата:

MYERROR("<R090> Запись с таким кодом в таблице уже существует.",0)

Правильно?



Да.
Можно еще в самой функции добавить строки:
if par == nil
par := 0
endif
Тогда не надо будет добавлять 0 в вызовах функции.

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



Пост N: 7
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 17.10.11 16:29. Заголовок: Спасибо...


Спасибо.

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



Пост N: 8
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 21.10.11 17:11. Заголовок: Продолжим. Есть поля..


Продолжим. Есть поля таблицы , которые открыты командой Browse() для редактирования, они числовые, с 2 знаками после запятой.
Подскажите, пожалуйста, какой командой в клиппере символ разделителя дробной части.

После компиляции декомпилированного модуля в качестве разделителя используется запятая (","), а нужно привычную точку (".").

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



Пост N: 9
Зарегистрирован: 14.10.11
ссылка на сообщение  Отправлено: 21.10.11 17:20. Заголовок: пробоваль ставить se..


пробоваль ставить set fixed on и set decimals to 2 - не помогает.

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




Пост N: 2168
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.11 17:33. Заголовок: tkandrey Собрал про..


tkandrey
Собрал простую программу
Use test
browse()

В базе test есть числовые поля с 2 цифрами после запятой, в browse вижу точку в качестве разделителя.
Может у тебя совсем не Browse() для этих целей используется ?

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 22.10.11 10:09. Заголовок: Где размещен разделитель дробной части


Поскольку в приведенных фрагментах кода есть вызовы "TBROWSEDB("
COLUMN:WIDTH := ...MEMVAR->PICT[N]..
применяется класс TBROWSE с возможностью задавать формат столбцов
командами вида COLUMN:PICTURE :="9999,99"
и часть настроек применяется через массив PICT

Можно поискать в текстах фрагмент :PICTURE или 9,99 и заменить на 9.99




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

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