7.11. Ошибка при расчете сальдовых остатков?

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Andrey
Местный житель
Сообщения: 702
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Запорожска яобласть, г.Днепрорудный

7.11. Ошибка при расчете сальдовых остатков?

Сообщение Andrey »

Добрый день.
При расчете оных получаю ошибку: Ключ нельзя модифицировать. Код ошибки 10. Таблица 1101.
Попробовал очистить всю таблицу SKLOST и запустить расчет - получаю ту же ошибку. Как победить? Спасибо.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Надо чистить таблицу SALDOMC, а не SKLOST.
Вообще, если хотите полностью перерасчитать все остатки, то можно сделать так:

Удаляем все записи из таблиц SALDOMC,SALDOFND,TEKMC,SKLOST,TEKSALDO.
Запускаем "Проверка КОУ", затем "Пересчет сальдовых остатков" и наконец "Пересчет текущих остатков".
Andrey
Местный житель
Сообщения: 702
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Запорожска яобласть, г.Днепрорудный

Сообщение Andrey »

Еще вопрос вдогонку: при проверке КОУ-ордеров в таблицу МОЛ добавляется запись. По таблице ордеров нашел несколько ордеров в которых не указан МОЛ (а методика списания Склад-МОЛ-Партия), исправил ордера, но при проверке ордеров МОЛ все равно добавляется. Какую таблицу проверить еще?
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Andrey писал(а):Еще вопрос вдогонку: при проверке КОУ-ордеров в таблицу МОЛ добавляется запись. По таблице ордеров нашел несколько ордеров в которых не указан МОЛ (а методика списания Склад-МОЛ-Партия), исправил ордера, но при проверке ордеров МОЛ все равно добавляется. Какую таблицу проверить еще?
То что не указан МОЛ - это нормально, ничего не будет добавляться в каталог МОЛ. В таблице SKLORDER (CMOL) и SPORDER (CCMOL) ищите записи, которые содержат значения, не присутствующие в KATMOL.
На MSSQL это выглядит так:

Код: Выделить всё

select t1.* from t$sklorder t1
left join t$katmol t2 on t2.f$nrec=t1.f$cmol and t2.f$cskl=t1.f$cpodr
where t1.f$cmol<>0x8000000000000000 and t2.f$nrec is null

select t1.* from t$sporder t1
left join t$katmol t2 on t2.f$nrec=t1.f$ccmol and t2.f$cskl=t1.f$ccpodr
where t1.f$ccmol<>0x8000000000000000 and t2.f$nrec is null
Andrey
Местный житель
Сообщения: 702
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Запорожска яобласть, г.Днепрорудный

Сообщение Andrey »

To WiRic: очислил указанные вами таблицы, проверил КОУ-ордера, запустил расчет сальдовых остатков и снова получил "Ключ нельзя модифицировать. Код ошибки 10. Таблица 1101.(SALDOMC-уже очищенная)". Где еще копнуть? Спасибо.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Andrey писал(а):To WiRic: очислил указанные вами таблицы, проверил КОУ-ордера, запустил расчет сальдовых остатков и снова получил "Ключ нельзя модифицировать. Код ошибки 10. Таблица 1101.(SALDOMC-уже очищенная)". Где еще копнуть? Спасибо.
Тогда наверное бага в Галактике. Если у вас MSSQL или Oracle, тогда запускайте профайлер и разбирайте полученную трассу. Хотя бы поймете, на каком ордере у вас случается ошибка.
Я так понимаю, при ошибке весь процесс прерывается? Всегда на одном и том же месте?
Можно еще попробовать вместо пересчета сальдовых остатков запустить пересчет цен в расходных ордерах (эта функция попутно произведет пересчет сальдовых остатков), но эта функция может изменить цены в расходных ордерах.
Andrey
Местный житель
Сообщения: 702
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Запорожска яобласть, г.Днепрорудный

Сообщение Andrey »

База оракловая, но сейчас все это под первасивом на локальной базе, но с реальными данными. А процесс, если нажать Y на вопрос "продолжим редактирование" идет дальше, но таких ошибок ОЧЕНЬ МНОГО. Чтоб считало нужно просто Y держать нажатым постоянно. Перерасчет зацмет на локальной базе несколько часов.
thor
Местный житель
Сообщения: 289
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Saint-Petersburg
Контактная информация:

Сообщение thor »

Если база первасивовская, то 10 ошибка - это попытка модификации ключевого поля, модификация которого запрещена.
Попробуйте выполнить команду
butil -stat <path>\saldomc.dat

Для 7.12 должно выводиться следующее:
File Statistics for saldomc.dat

File Version = 7.00
Page Size = 4096
Page Preallocation = No
Key Only = No
Extended = No

Total Number of Records = 219
Record Length = 211
Data Compression = No
Variable Records = No

Available Linked Duplicate Keys = 0
Balanced Key = No
Log Key = 0
System Data = No
Total Number of Keys = 9
Total Number of Segments = 22

Key Position Type Null Values* ACS
Segment Length Flags Unique Values
0 1 1 8 Integer M -- 219 --
1 1 68 2 Unsigned MD -- 105 --
1 2 70 8 Integer MD -- 105 --
1 3 102 4 Date MD -- 105 --
2 1 68 2 Unsigned MD -- 219 --
2 2 70 8 Integer MD -- 219 --
2 3 78 8 Integer MD -- 219 --
2 4 86 8 Integer MD -- 219 --
2 5 94 8 Integer MD -- 219 --
2 6 102 4 Date MD -- 219 --
3 1 68 2 Unsigned MD -- 33 --
3 2 102 4 Date MD -- 33 --
4 1 60 8 Integer MD -- 28 --
4 2 102 4 Date MD -- 28 --
5 1 68 2 Unsigned MD -- 121 --
5 2 70 8 Integer MD -- 121 --
5 3 186 2 Unsigned MD -- 121 --
5 4 102 4 Date MD -- 121 --
6 1 94 8 Integer MD -- 4 --
7 1 9 4 Date MD -- 78 --
7 2 13 4 Time MD -- 78 --
8 1 17 8 Integer MD -- 5 --

Legend:
< = Descending Order
D = Duplicates Allowed
I = Case Insensitive
M = Modifiable
R = Repeat Duplicate
A = Any Segment (Manual)
L = All Segments (Null)
* = The values in this column are hexadecimal.
?? = Unknown
-- = Not Specified

The command completed successfully.
Andrey
Местный житель
Сообщения: 702
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Запорожска яобласть, г.Днепрорудный

Сообщение Andrey »

Результаты запроса:


Btrieve Maintenance Utility 8.00.114.000
Copyright (C) Pervasive Software Inc. 2002
All Rights Reserved.

File Statistics for e:\pvsw_gal711\data\d_gal\saldomc.dat

File Version = 7.00
Page Size = 4096
Page Preallocation = No
Key Only = No
Extended = No

Total Number of Records = 1228248
Record Length = 211
Data Compression = No
Variable Records = No

Available Linked Duplicate Keys = 0
Balanced Key = No
Log Key = 0
System Data = No
Total Number of Keys = 13
Total Number of Segments = 26

Key Position Type Null Values* ACS
Segment Length Flags Unique Values
0 1 1 8 Integer M -- 1228248 --
1 1 68 2 Unsigned MD -- 311767 --
1 2 70 8 Integer MD -- 311767 --
1 3 102 4 Date MD -- 311767 --
2 1 68 2 Unsigned MD -- 1228248 --
2 2 70 8 Integer MD -- 1228248 --
2 3 78 8 Integer MD -- 1228248 --
2 4 86 8 Integer MD -- 1228248 --
2 5 94 8 Integer MD -- 1228248 --
2 6 102 4 Date MD -- 1228248 --
3 1 68 2 Unsigned MD -- 1488 --
3 2 102 4 Date MD -- 1488 --
4 1 60 8 Integer MD -- 1488 --
4 2 102 4 Date MD -- 1488 --
5 1 68 2 Unsigned MD -- 492867 --
5 2 70 8 Integer MD -- 492867 --
5 3 186 2 Unsigned MD -- 492867 --
5 4 102 4 Date MD -- 492867 --
6 1 94 8 Integer MD -- 102970 --
7 1 9 4 Date MD -- 64613 --
7 2 13 4 Time MD -- 64613 --
8 1 17 8 Integer MD -- 36 --
9 1 70 8 Integer R D -- 29853 --
10 1 78 8 Integer R D -- 146 --
11 1 86 8 Integer R D -- 216 --
12 1 122 8 Integer R D -- 4 --

Legend:
< = Descending Order
D = Duplicates Allowed
I = Case Insensitive
M = Modifiable
R = Repeat Duplicate
A = Any Segment (Manual)
L = All Segments (Null)
* = The values in this column are hexadecimal.
?? = Unknown
-- = Not Specified

The command completed successfully.
thor
Местный житель
Сообщения: 289
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Saint-Petersburg
Контактная информация:

Сообщение thor »

У вас 4 дополнительных индекса по данной таблице - 9,10, 11 и 12.
И все они не имеют признака M-Modifiable
Таких индексов в стандартной варианте Галактике нет (я взял вариант из тестовой БД).
Удалить лишние индексы можно также с помощью BUTIL

BUTIL -DROP sourceFile < keyNumber | SYSKEY >
[/O<owner | *>] [/S]

т.е. что-то типа
BUTIL -DROP <path>\saldomc.dat 12
BUTIL -DROP <path>\saldomc.dat 11
BUTIL -DROP <path>\saldomc.dat 10
BUTIL -DROP <path>\saldomc.dat 9
Ответить