Здравствуйте уважаемые коллеги.
Проявилась такая проблема, я добавил несколько пользовательских полей в Partner.dbf и сделал 6 индексов к ним прописав в Bases_03.dbf, так что общее число индексов стало 52. Мои модули при зтом работают исправно но вот при формировании накладной Торг12 fastreport выдает ошибку - Partner:Error 7200:.... Maximum tag expected ..... Я удалил 2 индекса и ошибка пропала, но они мне нужны, подскажите что нибудь.
Сергей Иваницкий пишет:
Здравствуйте уважаемые коллеги.
Проявилась такая проблема, я добавил несколько пользовательских полей в Partner.dbf и сделал 6 индексов к ним прописав в Bases_03.dbf, так что общее число индексов стало 52. Мои модули при зтом работают исправно но вот при формировании накладной Торг12 fastreport выдает ошибку - Partner:Error 7200:.... Maximum tag expected ..... Я удалил 2 индекса и ошибка пропала, но они мне нужны, подскажите что нибудь.
Добрый день!
Видимо, слишком много индексных выражений...
Быть может лучше сделать для Вашей задачи отдельную таблицу, связав ее с Partner.dbf. Попробуйте еще расположить индексы не в bases_03.dbf, а в bases_00.dbf.
В последнее время, все больше сколняюсь к мнению, что при решении задач плагинами и модулями следует как можно меньше вторгаться в системную часть. Есть каталог USER, в нем формируем свое дерево в котором располагаем базы и индексы.
Так будет потом понятнее, да и транспортабельнее решения получаются.
Конечно же, это сильно повлияет на программный код.
Но избавит от головных болей в дальнейшем.
Не правильно написал, я прописал свои индексы на Partner.dbf в bases_00.dbf.
Может это какие-то ограничения fastreport или advantage?
В таблице Partner.dbf родных 46 индексов при чем последних 12 появились не так давно, то есть у разработчика осталось всего 4, и ещё имеются абсолютно одинаковые индексы с разными названиями "CODE" и "FullCode", "Name" и "FullName". А можно сделать временный индекс с исключениями типа !Empty(Dop1)?
Сергей Иваницкий пишет:
Не правильно написал, я прописал свои индексы на Partner.dbf в bases_00.dbf.
Может это какие-то ограничения fastreport или advantage?
В таблице Partner.dbf родных 46 индексов при чем последних 12 появились не так давно, то есть у разработчика осталось всего 4, и ещё имеются абсолютно одинаковые индексы с разными названиями "CODE" и "FullCode", "Name" и "FullName". А можно сделать временный индекс с исключениями типа !Empty(Dop1)?
Не такие уж они и одинаковые, особенно если посмотреть на FOR-условия
Если количество партнеров не очень велико, попробуйте обычный фильтр.
itman пишет:
В последнее время, все больше сколняюсь к мнению, что при решении задач плагинами и модулями следует как можно меньше вторгаться в системную часть. Есть каталог USER, в нем формируем свое дерево в котором располагаем базы и индексы.
Так будет потом понятнее, да и транспортабельнее решения получаются.
Конечно же, это сильно повлияет на программный код.
Но избавит от головных болей в дальнейшем.
Евгений я с Вами абсолютно согласен но разговор про БЭСТ-4.
Там нет папки User
Сергей Иваницкий пишет:
перепутал типа ordcreate()
Сергей тут дело такое:
Насколько я понял Вы индексы создавали для того, чтобы они уже были на момент формирования печатной формы.
Если же Вы всякий раз перед печатью их будете создавать, то:
1.Вы будете ждать реиндексацию
2.Если своими индексами подменить штатный, то означает еще и ждать реиндексацию таблицы после печатной формы...
Я попросил Сан Саныча подключиться к разговору, чтобы понимать есть такое ограничение и можни ли его обойти. По его ответам я понял, что Сан Саныч предлагает искать другие пути.
А это значит:
1.Нужно иметь вспмогательную таблицу по партнерам.
2.Индексы к этой таблице Вы можете прописать туда же в bases_00
3.В печатной форме настроить селекты к этой таблице...
Нет эффект с печатными формами возник как побочный, я добавил пару индексов в bases_00, переиндексировал и тут выяснилось, что при печати объект TfrADSQuery ругается. На счет ожидания, я пишу отдельный модуль для учета транспортных расходов и при открытии готов подождать, раз не получается иначе.
Сергей Иваницкий пишет:
На счет ожидания, я пишу отдельный модуль для учета транспортных расходов и при открытии готов подождать, раз не получается иначе.
Вероятно Вы меня не правильно поняли.
Речь не идет о каких-то изменениях в штатном БЭСТе которые надо ждать.
речь идет о том, что пользовательский всякий раз будет сидеть ждать построение индексов, прежде чем печатная форма откроется: т.е. построение формы с существенной задержкой....
Тут речь идет о том, что Вам надо свое решение пересматривать на предмет убирания индексов к таблице partner.dbf
Да понял то я правильно. Только то, что вы предлагаете крайне не удобно, и потом что будет делать разработчик если ему понадобится добавить в Partner ещё 5 индексов?
Все таки можно использовать Drdcreate(), что бы создать новый файл .cdx и потом использовать созданный индексный файл вместо штатного?
Сергей Иваницкий пишет:
Да понял то я правильно. Только то, что вы предлагаете крайне не удобно, и потом что будет делать разработчик если ему понадобится добавить в Partner ещё 5 индексов
Разработчик в БЭСТ-4 не будет индексы добавлять.
Последние то несколько были скорее как исключение добавлены.
Цитата
Сергей Иваницкий пишет:
Все таки можно использовать Drdcreate(), что бы создать новый файл .cdx и потом использовать созданный индексный файл вместо штатного
Попробуйте, только вам всякий раз его надо будет строить....
Это намного хуже, чем то, что Вам предлагалось
Спасибо за сделал временный индекс (слегка переделал пример), но вот как вернуть штатный индекс после завершения программы?
вот функция которая у меня получилась:
Код
Function MkTempIndex(cNtxKey,cForKey,cNameTag)
// Создание временных индексов
// все параметры - массивы
// Количество тэгов определяется по 1 параметру
// cNtxKey - ключ для индекса, cForKey - исключения, cNameTag - имя тэга
//
// FUNCTION: FormulParsBlock(cFormul, aPars)
// Назначение.........Преобразование строки символов в блок кода
// cFormul - преобразуемая строка
// aPars - массив параметров для блока кода
//
Local I, aIndex, nPoz
Local cNameNtx := TempFile(m->GlobalTmpPath,'CDX')
If ValType(cNtxKey)='A' .And. ValType(cForKey)='A' .And. ValType(cNameTag)='A' .And. Len(cNtxKey)=Len(cForKey) .And. Len(cNtxKey)=Len(cNameTag)
// Взято из примера
If (nPoz := AScan(aIndex := BsSaveIndex(),{|cNameIdx| Upper(cNameIdx) == Upper(cNameNtx) })) != 0
ADel(aIndex,nPoz)
ASize(aIndex,Len(aIndex)-1)
BsClearIndex()
BsRestIndex(aIndex)
EndIf
FErase(cNameNtx)
DbGoTop()
// Взято из примера
For I:=1 To Len(cNtxKey)
// Исключения
If !Empty(cForKey[I])
ordCondSet(cForKey[I],FormulParsBlock(cForKey[I],{""}),NIL,,,1,RecNo(),,,.T.,,.F.,,.T., .F., .F., .T., .F., .F.)
EndIf
// делаем индекс
ordCreate(cNameNtx, Iif( Empty(cNameTag[I]), "TMP_TAG"+AllTrim(Str(I)), cNameTag[I]),cNtxKey[I],FormulParsBlock(cNtxKey[I],{""}))
Next
ORDSETFOCUS(Iif(Empty(cNameTag[1]), "TMP_TAG"+AllTrim(Str(I)), cNameTag[1]))
DbGoTop()
ReopenDbf()
Else
SayAndWait('в MkTempIndex() Не массив!')
EndIf
Return cNameNtx
Function RstTempIndex(cNameNtx,aBaseName)
// Удаление временного индекса
// cNameNtx-имя индексного файла, aBaseName - имя алиаса
// если имя алиаса не указано, то для поиска используется текущий активный алиас
Local I, aIndex, nPoz , A
A:=Select()
If !(aBaseName == Nil)
Select Select(aBaseName)
Endif
If (nPoz := AScan(aIndex := BsSaveIndex(),{|cNameIdx| Upper(cNameIdx) == Upper(cNameNtx) })) != 0
ADel(aIndex,nPoz)
ASize(aIndex,Len(aIndex)-1)
BsClearIndex()
BsRestIndex(aIndex)
EndIf
FErase(cNameNtx)
ORDSETFOCUS(1)
DbGoTop()
ReopenDbf()
Select A
Return .T.