|
|
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Помогите настроить Clipper программу.плз. при запуске просит провести индексацию, выбираем да или нет независимо от выбранного, при последующем появлении диалогово окна не реагирует клавиатура, работает ESC,закрывает программу в оконном режиме,стоит XP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 13:13 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
А подождать? Тем более, если у вас открывается DOS-приложение в окне, через ntvdm , то ресурсов процессора может ему быть выделено очень и очень мало... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 15:55 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
harbour-project.org На первый взгляд работает, и imho более стабильно чем оригинал. Объем переделки зависит от того, что использовалось в Clipper-программе. Ради любопытства попробовал перевести пару старых программ - переделать пришлось только написанные на Си модули вывода на экран и опроса мыши + несколько строк для установки кодировки символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2012, 22:50 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Помогите пожалуйста разобрать код процедуры, в которую надо внести небольшие изменения. Известно, что написана она на языке Alaska xBase++, который как я понял из яндекса, есть приемник Clipper'а. После FoxPro синтаксис выглядит не совсем понятным. Из имеющихся вопросов: 1. что означают скобки {} ? 2. Что означает -> ? 3. Что за команды EXTRACT(), ListToArray(), CDDialog() ? 4. Что за конструкци: RESTR->( DB_SETORDER("SEARCH") ) ? opJournSelect := JournSelect():new() ? opJournSelect:AddVar( "DOCUM", ".T." ) ? opJournSelect:SetExpression( "OPDATE.AND.CREDIT.AND.ACC.AND.DOCUM" ) ? //реестр закупок товаров и услуг LOCAL aParam LOCAL cFilter LOCAL opJournSelect LOCAL cTabName := "RESTR" LOCAL xTemp, nCount, aBR, aTemp, nRefBU, cFileAgree, aAcc, nI LOCAL aGauge := {} LOCAL cVendrAcc := "" LOCAL cFacesAcc := "" PRIVATE cpPeriod := "" PRIVATE apParamF := {} BEGIN_SEQUENCE WindOpen( "RESTR",,"Реестр закупок товаров и услуг" ) aParam := CDDialog( "CDRZTU",,"Реестр закупок товаров и услуг" ) IF VALTYPE(aParam) == "A" apParamF := ACLONE(aParam) ENDIF cFileAgree := FILE_NAME( "AGREE" ) IF !T_FILE( cFileAgree ) IF aParam[ 10 ] ALERT( "SВ параметрах сборки указано что необходимо проверять суммы по реестру обязательств, хотя сам реестр обязательств не заполнен!!!" ) BREAK ENDIF ENDIF IF !DBUSE( cFileAgree, "AGREE", .F. ) BREAK ENDIF AGREE->( DB_SETORDER( "DOCID" ) ) IF VALTYPE( aParam ) <> "A" BREAK ENDIF IF !MacroFunc( "CreateDSD", { cTabName } ) BREAK ENDIF Moment("Анализ параметров сборки...") cpPeriod := "с " + AllTrim( SayDate( aParam[4], "DD MMMMMM YYYY г." ) ) + " по " + AllTrim( SayDate( aParam[5], "DD MMMMMM YYYY г." ) ) aParam[1] := RTRIM( aParam[1] ) IF EMPTY( aParam[1] ) .OR. ( "ВСЕ"$UR( aParam[1] ) ) xTemp := EXTRACT( {}, "ARR", SprPath + "accnf.dbf", "CODE", ".T." ) aParam[1] := ArrayTOList( xTemp) ENDIF aTemp := ARRAY( 2 ) IF EMPTY( aParam[7] ) .OR. ( "ВСЕ"$UR( aParam[7] ) ) aTemp[1] := EXTRACT( {}, "ARR", SprPath + "refbu.dbf", "ITEMCODE", ".T." ) ELSE aTemp[1] := ListToArray( aParam[7] ) ENDIF IF EMPTY( aParam[2] ) .OR. ( "ВСЕ"$UR( aParam[2] ) ) aTemp[2] := getAccAnalitGroups(,,"FIELD->GROUP=7.OR.FIELD->GROUP=8") ELSE aTemp[2] := ListToArray( aParam[2] ) ENDIF aParam[2] := "" FOR xTemp := 1 TO LEN( aTemp[1] ) FOR nCount := 1 TO LEN( aTemp[2] ) aParam[2] += PADR( ALLTRIM(aTemp[1][xTemp]) + ALLTRIM(aTemp[2][nCount]), 10 ) + "," NEXT NEXT IF EMPTY( aParam[6] ) .OR. ( "ВСЕ"$UR( aParam[6] ) ) xTemp := EXTRACT( {}, "ARR", SprPath + "such.dbf", "ENT", ".T." ) aParam[6] := ArrayTOList( xTemp ) ENDIF IF EMPTY( aParam[2] ).OR.EMPTY( aParam[1] ).OR.EMPTY( aParam[6] ) BREAK ENDIF aAcc := ListToArray(aParam[2]) FOR nI := 1 TO LEN(aAcc) IF GetAccField(aAcc[nI],"GROUP")== 7 // подотчетные лица cFacesAcc += ";"+aAcc[nI]+" " ELSE // поставщики cVendrAcc += ";"+aAcc[nI]+" " ENDIF NEXT cFilter := "KFKR $ '" + aParam[1] + "'.AND. ENTER_D $ '" + aParam[6] + "'" IF !EMPTY( aParam[ 9 ] ) cFilter += ".AND. FIELD->ONAME == '" + aParam[ 9 ] + "'" ENDIF cFilter +=".AND.(" IF !EMPTY(cVendrAcc) aParam[ 8 ] := RTRIM(aParam[ 8 ]) cFilter += "( KACC $ '"+cVendrAcc+"'.AND.TYPE_D==1.AND.!EMPTY(DONOR)"+IF(!EMPTY( aParam[ 8 ]),".AND.FIELD->DONOR $ '" +RTRIM(aParam[ 8 ]) + "'","")+")" ENDIF IF !EMPTY( cFacesAcc ) cFilter += IF(!EMPTY(cVendrAcc),".OR.","")+"( KACC $ '"+cFacesAcc+"'.AND.TYPE_D==2.AND.!EMPTY(DONOR)"+IF(!EMPTY( aParam[ 11 ]),".AND.SUBSTR(FIELD->DACC,2,3)!='302'"+".AND. FIELD->DONOR $ '" +RTRIM(aParam[ 11 ]) + "'","")+")" ENDIF cFilter +=")" RESTR->( DB_SETORDER("SEARCH") ) opJournSelect := JournSelect():new() IF !opJournSelect:Create( aParam[4], aParam[5] ) ALERT( "Невозможно открыть ЖБО. ") Moment(.F.) BREAK ENDIF opJournSelect:AddVar( "OPDATE", "DTOS(OPDATE)>='" + DTOS( aParam[4] ) + "'.AND.DTOS(OPDATE)<='" + DTOS( aParam[5] ) + "'" ) opJournSelect:AddVar( "CREDIT", cFilter ) opJournSelect:AddVar( "ACC", "!( SUBSTR( FIELD->KACC, 2, 3 ) == '206' ) " ) IF !EMPTY( aParam[ 12 ] ) .AND. UR( aParam[ 12 ] ) <> "[ВСЕ]" opJournSelect:AddVar( "DOCUM", "ALLTRIM( DOCTYPE ) $ '" + ALLTRIM( aParam[ 12 ] ) + "' " ) ELSE opJournSelect:AddVar( "DOCUM", ".T." ) ENDIF opJournSelect:SetExpression( "OPDATE.AND.CREDIT.AND.ACC.AND.DOCUM" ) opJournSelect:Top() Moment(.F.) IF !opJournSelect:Eof aGauge := { InitGauge( "Обработка ЖБО" ), 0, D( 1, JOURN->( REC() ) ) } DO_WHILE !opJournSelect:Eof UpdateGauge( aGauge[2]+=aGauge[3] ) IF opJournSelect:IsVisible() IF !aParam[ 10 ] .OR. ( aParam[ 10 ] .AND. MacroFunc( "ПроверитьСуммуДоговора") ) MacroFunc("ADDREC") ENDIF ENDIF opJournSelect:Skip() ENDDO WindClose( aGauge[1] ) ENDIF opJournSelect:Destroy() SETFKEY ( {"Помощь;Help('RESTR')","Печать;Print( 'RESTR' )",,,,,,,"Кальк.;Calculator()"} ) aBr := InitTableBrowse( { OkStructure(), MEMVAR->SysPath + "dynamic.dsc", MEMVAR->SysPath + "macro.dat" } ) TableBrowse( LocalPath + cTabName + ".dbf", LocalPath+ cTabName + ".dsd", "RESTR",,,,,,,,,, 3 ) InitTableBrowse( aBr ) RESTFKEY() END_SEQUENCE WindClose() RETURN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 12:58 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
ГлазуновПосле FoxPro синтаксис выглядит не совсем понятным. Из имеющихся вопросов: 1. что означают скобки {} ?В Клиппере такого кажется не было (или я уже не помню), но чисто по коду смахивает на задание массивов. Глазунов2. Что означает -> ?Запуск табличной функции на неактивной таблице. Вместо: Код: sql 1. 2. 3. можно сделать Код: sql 1. и не переключаться между таблицами. Глазунов3. Что за команды EXTRACT(), ListToArray(), CDDialog() ?Вызов функций... Документацию в руки и читать-читать. Глазунов4. Что за конструкци: RESTR->( DB_SETORDER("SEARCH") ) ? opJournSelect := JournSelect():new() ? opJournSelect:AddVar( "DOCUM", ".T." ) ? opJournSelect:SetExpression( "OPDATE.AND.CREDIT.AND.ACC.AND.DOCUM" ) ? Смена сортировки на неактивной таблице. Создание нового объекта. Вызов методов этого объекта. Класс JournSelect скорее всего собственный класс программы. В стандартных библиотеках я такого не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 19:06 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Всем привет, проконсультируйте по одной проблеме. Была база написанная на Clipper, но в один прекрасный момент пропала,т.е. был файл .DBF с данными,а стал фал .DBF пустой,с таким же названием только размер 0 Кб ,вопрос, мог ли файл сам себя перезатереть?или еще какой нибудь сбой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 13:31 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
sindarfanразмер 0 Кб ,вопросdbf не м.б. 0 Кб, т.к. всегда содержит заголовок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 13:45 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Согласен,там есть 3 пустых записи на этом файле,а должно быть 130 - 150 тысяч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 13:46 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
точнее даже так,можно ли его восстановить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 13:55 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
sindarfanточнее даже так,можно ли его восстановить) Дык если нет длины у файла, откуда его восстанавливать? Если только из backup... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 15:56 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
а по какой причине это могло произойти?причина само стерлось начальство не устраивает почему то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 18:19 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
sindarfanа по какой причине это могло произойти?причина само стерлось начальство не устраивает почему тоВариантов почему пропал файл - миллиард. Начиная от злодея который мстит за невыплаченную зарплату и кончая гремлинами. DBF это простой файл подчиняющийся всем законам файлов. Его можно стереть, его можно открыть в Ворде или Экселе и подивившись на странные закорючки "поправить", чаще всего они умирают по причине шаловливых ручек. Никаких встроенных механизмов восстановления данных в Клиппере нет. Если нету бэкапа - то опаньки, окончательные и бесповоротные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2012, 19:11 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться с функцией ASORT(). Из справки ASORT() Сортировка элементов массива по возрастанию значений ASORT(<массив>, [<вырN1>], [<вырN2>]] [блок]) -->массив Пример сортировки вложенного массива: aKids := { {"Mary", 14}, {"Joe", 23}, {"Art", 16} } aSortKids := ASORT(aKids,,, { |x, y| x[2] < y[2] }) Результат: { {"Mary", 14}, {"Art", 16}, {"Joe", 23} } У меня есть массив apData, элементами которого являются также являются массивы из 6 элементов. Пример: имеем исходный массив apData = { {"Name1", "n", "10531", "Petr", "14", "345"}, {"Name3", "n", "10531", "Ivan", "14", "345"}, {"Name2", "n", "10532", "Petr", "34", "545"}, {"Name1", "n", "10532", "Petr", "44", "645"}, {"Name1", "n", "10532", "Ivan", "74", "569"}, {"Name2", "n", "10531", "Ivan", "33", "987"} } надо отсортировать его следующим образом (по возрастанию): сначала по элементу 4, потом по элементу 3, потом по элементу 1. Т.е. надо получить в итоге { {"Name2", "n", "10531", "Ivan", "33", "987"} {"Name3", "n", "10531", "Ivan", "14", "345"}, {"Name1", "n", "10532", "Ivan", "74", "569"}, {"Name1", "n", "10531", "Petr", "14", "345"}, {"Name1", "n", "10532", "Petr", "44", "645"}, {"Name2", "n", "10532", "Petr", "34", "545"}, } Как должна выглядеть команда ASORT() ? Пишу asort(apData,,,{|x,y| x[4] < y[4]}), получаю сортировку по имени (элемент 4), а как дальше не знаю. Подскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 11:39 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
может чонить навроде asort(apData,,,{|x,y| x[4] < y[4] .AND. x[5] < y[5] }) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 16:49 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
sldможет чонить навроде asort(apData,,,{|x,y| x[4] < y[4] .AND. x[5] < y[5] }) Пробовал с .AND., вообще не понял как отсортировалось. Т.е. и не 4, и не 5, и не 4 и внутри по 5, и не по 5 и внутри по 4. Неужто в Clipper такой простейшей операции, как сортировка массива по нескольким признакам сразу нет? Столкнулся с Clipper впервые и после FoxPro просто в шоке, насколько все заморочено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:14 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
ГлазуновПробовал с .AND., вообще не понял как отсортировалось. Т.е. и не 4, и не 5, и не 4 и внутри по 5, и не по 5 и внутри по 4. Все элементарно: asort(apData,,,{|x,y| x[4] < y[4] .OR . (x[4] = y[4] .AND. x[3] < y[3]) .OR . (x[4] = y[4] .AND. x[3] = y[3] .AND. x[1] < y[1])}) ГлазуновНеужто в Clipper такой простейшей операции, как сортировка массива по нескольким признакам сразу нет?Неа, нету. Если есть возможность писать свои функции для сортировки, зачем делать специальную функцию в языке? ГлазуновСтолкнулся с Clipper впервые и после FoxPro просто в шоке, насколько все заморочено.Зато у Клиппера намного больше возможностей чем у Фокса. Когда я был вынужден перейти с Клиппера на Фокс я весь изматерился на дурацкие ограничения Фокса и его примитивный синтаксис. Переход обратно был просто счастьем и наслаждением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 18:50 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
White OwlВсе элементарно: asort(apData,,,{|x,y| x[4] < y[4] .OR . (x[4] = y[4] .AND. x[3] < y[3]) .OR . (x[4] = y[4] .AND. x[3] = y[3] .AND. x[1] < y[1])}) Можно еще элементарней asort(apData,,,{|x,y| x[4]+x[3]+x[1] < y[4]+y[4]+y[3]}) если элементы массива могут иметь различную длину, дополнить падлом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 00:20 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
AlexLearnsApexy[4]+y[4]+y[3] Прошу прощения, здесь, конечно, y[4]+y[3]+y[1] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 00:25 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
AlexLearnsApexWhite OwlВсе элементарно: asort(apData,,,{|x,y| x[4] < y[4] .OR . (x[4] = y[4] .AND. x[3] < y[3]) .OR . (x[4] = y[4] .AND. x[3] = y[3] .AND. x[1] < y[1])}) Можно еще элементарней asort(apData,,,{|x,y| x[4]+x[3]+x[1] < y[4]+y[4]+y[3]}) если элементы массива могут иметь различную длину, дополнить падлом.Можно и так. Но это будет чуть-чуть медленнее на больших объемах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 02:00 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Всем спасибо! Результат достигнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 09:05 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
White OwlЗато у Клиппера намного больше возможностей чем у Фокса. Когда я был вынужден перейти с Клиппера на Фокс я весь изматерился на дурацкие ограничения Фокса и его примитивный синтаксис. Переход обратно был просто счастьем и наслаждением. Можно чуть подробнее про возможности Клиппера, т.к. это моя первая доработка проекта, но чуствую не последняя. И если не затруднит приведите пример ограничения Фокса и примитивный синтаксис. Не ради дискуссии, а просвещения для. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 09:09 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
ГлазуновWhite OwlЗато у Клиппера намного больше возможностей чем у Фокса. Когда я был вынужден перейти с Клиппера на Фокс я весь изматерился на дурацкие ограничения Фокса и его примитивный синтаксис. Переход обратно был просто счастьем и наслаждением.Можно чуть подробнее про возможности Клиппера, т.к. это моя первая доработка проекта, но чуствую не последняя. И если не затруднит приведите пример ограничения Фокса и примитивный синтаксис. Не ради дискуссии, а просвещения для. Ну полный список я дать не смогу - давно это все было. Да и с современным Фоксом я не знаком, мой опыт лисоводства остановился в середине 90-х. Так что с учетом этого: В FoxPro 2.5, мне жутко не хватало уже упомянутого синтаксиса с блоками: somefunc(params, {|arg| subfunc } ) У досового Фокса были очень примитивные UI элементы и они были целиком "вещью в себе", Клипперский UI из коробки тоже был не особо удобен, но его можно было расширять. У пятого Клиппера UI уже был сделан на основе почти полноценного ООП и там можно было нарисовать все что угодно. В Фоксе нельзя было запускать табличные функции по неактивной таблице, надо было обязательно переключить на нужную таблицу, выполнить функцию, потом переключаться обратно. У Клиппера такого ограничения нет, там есть синтаксис alias->func(). Вставки на С или ASM в Клиппере делались совершенно элементарно. Достаточно было скомпилировать объектник с нужным алгоритмом и он напрямую подхватывался rtlink'ом. Для Фокса писать на С было далеко не так просто. Кажется это было возможно, но... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 18:38 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Глазунов, В фоксе нет создания массивов как в Вашем вопросе, с фигурными скобками. Нет операторов типа ++, += и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 17:40 |
|
||
|
CLIPPER
|
|||
|---|---|---|---|
|
#18+
Кодовые блоки в Clipper - имхо самое сильное его преимущество для того времени, они компилировались перед выполнением, при этом их текст мог храниться в таблицах. Для работы пользователя с табличными даными можно было обойтись без псевдоклассов, вызывая пользовательскую функцию из DBEDIT, а в ней реализуя нужный функционал + визуальное оформление (простой пример - выделение красным отрицательных чисел). Недостаток Clipper-а - отсутствие дефолтной поддержки мыши (я работал с версией 5.01). Давно уже было, поздабыл, но вроде так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 19:32 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37943046&tid=1341862]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 544ms |

| 0 / 0 |
