13.08.2004, 14:26 | #41 |
Модератор
|
Re: Кстати, вот в этих местах возможны проблемы с отрицательным RecId
Цитата:
Изначально опубликовано George Nordic
\Data Dictionary\Tables\CommissionSalesRep\Methods\validateField \Data Dictionary\Tables\CommissionSalesRep\Methods\validateField .. \Forms\RAssetBalance\Methods\init \Reports\WebCmNewsArticle\Methods\init PHP код:
PHP код:
|
|
13.08.2004, 14:28 | #42 |
Administrator
|
Андрей, а можешь привести пример, где сравниваются два RecId (без использования агрегатных функций) кроме как на неравенство?
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 14:43 | #43 |
Модератор
|
Ну, я просто глубже не копал... конечно, не во всех этих случаях ошибка.. Если кто-нибудь занялся бы, да и нашел бы в этом списке все случаи, где действительно есть ошибка - вот это, я понимаю, дело! Но, как я смотрю, таких мест не очень много.. к счастью
Кстати, е если RecId 1 < RecId 2? RecId 1 = -1, RecId2 = 2 000 000 000 ? Так что самый трабл, как уже указал многоуважаемый Андрей, именно при переходе от + к - |
|
13.08.2004, 14:50 | #44 |
Administrator
|
Вот я и говорю, что что-то не могу припомнить, где так делают:
Цитата:
Изначально опубликовано George Nordic
RecId 1 < RecId 2
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 14:58 | #45 |
Moderator
|
Цитата:
Андрей, а можешь привести пример, где сравниваются два RecId (без использования агрегатных функций) кроме как на неравенство?
А в коде, отвечающим за пересчет себестоимости (например InventCostItemDim.updateModelFIFOLIFO), периодически встречается такой код: PHP код:
Это используется, например, при подборе проводки для сопоставления в том случае, если в один день было несколько подходящих проводок. |
|
13.08.2004, 15:04 | #46 |
Модератор
|
Цитата:
Изначально опубликовано Maxim Gorbunov Вот я и говорю, что что-то не могу припомнить, где так делают:
\Data Dictionary\Tables\WMSLocation\Methods\BMNewRecord \Data Dictionary\Tables\WMSLocation\Methods\BMNewRecord \Data Dictionary\Tables\TmpRTax25LedgerAccountList\Methods\findRecIds \Classes\ProdMultiScheduling\updateProdDeleted А вот и меньше 0 \Data Dictionary\Tables\LedgerRRGCellDefVal_RU\Methods\addDefaultValue \Classes\WebFormHtml\controlName \Classes\WebFormHtml\setControls \Classes\WebFormHtml\setControls \Classes\WebLookupWeblet\run \Classes\WebDateLookupWeblet\run \Classes\WebCustomLookupWeblet\run \Classes\webTableLookup\run \Classes\webTableLookup\run \Forms\ReqTransExplosionSetup\Data Sources\TmpReqExplosionTree\Methods\executeQuery \Forms\ReqTransExplosionSetup\Data Sources\InventDimParm\Methods\executeQuery Немного.. В основном - не по делу.. |
|
13.08.2004, 15:08 | #47 |
Модератор
|
Вообще, как я понял - гиблое это дело, RecId сравнивать...
Ярослав, а Ваш скрипт учитывает подобне проблемы? С Уважением, Георгий |
|
13.08.2004, 15:10 | #48 |
Moderator
|
Цитата:
\Classes\ProdMultiScheduling\updateProdDeleted
Цитата:
\Data Dictionary\Tables\TmpRTax25LedgerAccountList\Methods\findRecIds
Остальное проверять не стал. |
|
13.08.2004, 15:11 | #49 |
Administrator
|
Да, хотел написать то же самое, что и Андре.
Дополнение: в \Classes\ProdMultiScheduling\updateProdDeleted тоже Count сначала.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 15:13 | #50 |
Administrator
|
Цитата:
Изначально опубликовано Андре
То есть, используя индекс, мы закладываемся на определенный порядок записей (то же самое сравнение), который в свою очередь зависит от recId. Это используется, например, при подборе проводки для сопоставления в том случае, если в один день было несколько подходящих проводок.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 15:14 | #51 |
Модератор
|
Цитата:
Изначально опубликовано Андре
Остальное проверять не стал. С Уважением, Георгий. |
|
13.08.2004, 15:15 | #52 |
Administrator
|
Кстати, был в какой-то ветке вопрос (в какой, уже не помню), какие таблицы не переживут дефрагментацию RecId.
Исчерпывающего ответа не дам, но внесу первый вклад: smmTransLog
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 15:21 | #53 |
Moderator
|
Цитата:
ИМХО, это не более криминально, чем то, что написано в \Data Dictionary\Tables\TmpRTax25LedgerAccountList\Methods\findRecIds
Хотя... при поиске проводки для сопоставления по FIFO/LIFO система считает, что раньше произошел тот расход, у которого меньше recId, при одной и той же дате. Если нам феноменально не повезет, то может получиться так, что мы будем иметь две складских проводки с одной датой и с recId, равными maxPositiv, minNegative value. При этом, по факту, второе списание произошло позже первого, а система посчитает и сопоставит наоборот. |
|
13.08.2004, 16:16 | #54 |
Administrator
|
Еще две таблицы, которые не перенесут дефрагментацию RecId и экспорт/импорт (только для версии 2.5):
LedgerCorrespondTransLinks_RU VendPBookUpdLog_RU
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 16:33 | #55 |
Участник
|
Исчерпывающий ответ
Цитата:
Изначально опубликовано Maxim Gorbunov
...Исчерпывающего ответа не дам... ... ; for (i = 1; i <= tableCnt; i++) { dt = dictionary.tableObject(dictionary.tableCnt2Id(i)); fieldCnt = dt.fieldCnt(); for (j = 1; j <= fieldCnt; j++) { df = dt.fieldObject(dt.fieldCnt2Id(j)); if(! dt.isTmp() && ! dt.isView() && df.type() == TYPES::UserType && GLOBAL::isType(df.typeId(), extendedTypeNum(RecId)) && ! GLOBAL::isType(df.typeId(), extendedTypeNum(RefRecId)) && df.name() != "RecId") info(StrFmt("Таблица - '%1'. Поле - '%2' \n", dt.name(), df.name())); } } Удачи! |
|
13.08.2004, 16:39 | #56 |
Участник
|
Ух. Какая полезная ветка.
Перенесу, пожалуй, в проекты. Спасибо огромное всем участникам. Ветка не закрывается. Дополнения приветствуются. |
|
13.08.2004, 17:08 | #57 |
Участник
|
Цитата:
За счет его универсальности мы можем снизить цену в разы ...
А нельзя ли сделать более упрощенный (и более дешевый, естесственно) скрипт для тестирования системы на предмет необходимости дефрагментации? Думаю, и с коммерческой точки зрения это будет выгодно |
|
13.08.2004, 17:30 | #58 |
Administrator
|
2ALES,
Поле будет обработано дефрагментацией и импортом, если имеет тип RecId или расширяющий RecId. Такие поля совсем не проблемные.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.08.2004, 17:32 | #59 |
Moderator
|
Цитата:
А нельзя ли сделать более упрощенный (и более дешевый, естесственно) скрипт для тестирования системы на предмет необходимости дефрагментации?
В качестве гипотезы предлагаю такой вариант - количество оставшихся, неиспользованных recId. Зная среднюю скорость "потребления" этих recId несложно предположить сколько "нам осталось" В данном случае и скрипт то не нужен. Достаточно посмотреть табличку SystemSequences. |
|
13.08.2004, 19:55 | #60 |
Участник
|
2Maxim Gorbunov опыт нескольких успешных проектов по подъему данных, позволяет мне называть поля - ссылки по recId "проблемными".
"Разжовыванья" всей технологии, особенностей реализации конкретных проектов и объяснения причин отдельного рассмотрения "не RefRecId" не будет. Воспринимайте как выдранный из контекста кусок реального кода, опубликованный именно в том виде, в котором я счел возможным его опубликовать. |
|