Имя: Пароль:
1C
1C 7.7
v7: как найти ошибку преобразования в число в таблице документа
0 vde69
 
10.01.13
08:56
есть база 7.7 SQL, у нее есть табличная часть  DT1320

без этой таблицы база нормально выгружается, с таблицей валится и не выгружается.

что уже смотрел
1. индекс есть и правильный iddoc+lineno_
2. визуально таблица нормальная (размер примерно 10 000 записей)
3. дублей нет, запрос возвращает пусто

SELECT     aaa.*
FROM         (SELECT     a1.IDDOC, a1.lineno_, SUM(1) AS cou
                      FROM          DT1320 AS a1
                      GROUP BY a1.IDDOC, a1.lineno_) aaa
WHERE     (cou <> 1)

4. все значения lineno лежа в дипазоне 1...999


куды дальше копать?
1 Ёпрст
 
гуру
10.01.13
08:59
ну, либо есть задвоенные iddoc (чего не видит твой запрос)
либо есть записи с iddoc, которых нема в 1sjourn
2 vde69
 
10.01.13
09:02
(1) в журнале все есть, запрос ничего не возвращает


SELECT     a1.*
FROM         DT1320 a1 LEFT OUTER JOIN
                     _1SJOURN a2 ON a1.IDDOC = a2.IDDOC
WHERE     (a2.IDDOC IS NULL)
3 vde69
 
10.01.13
09:03
(1) по поводу "не видит дубля", не понял, ведь индекс клатерный по нему с уникальностью...
4 КонецЦикла
 
10.01.13
09:03
удали все индексы, в т.ч. ПК
потом выполни поиск дублей и подозрительных записей
создай индексы
5 mikecool
 
10.01.13
09:04
null на неправильном месте?
6 Ёпрст
 
гуру
10.01.13
09:05
а так ?
SELECT IDDOC
FROM DT1320
GROUP BY IDDOC
having count(*)>1
7 Ёпрст
 
гуру
10.01.13
09:07
тьфу блин, ты же dt смотришь..
8 vde69
 
10.01.13
09:12
(4) ничего подозрительного,
выполняю 3 запроса, все пустые

--------------------------------------

SELECT     *, LINENO_ AS Expr1
FROM         DT1320
WHERE     (NOT (LINENO_ > 0 AND LINENO_ < 999))


--------------------------------------
SELECT     a1.*
FROM         DT1320 a1 LEFT OUTER JOIN
                    _1SJOURN a2 ON a1.IDDOC = a2.IDDOC
WHERE     (a2.IDDOC IS NULL)



--------------------------------------

SELECT     aaa.*
FROM         (SELECT     a1.IDDOC, a1.lineno_, SUM(1) AS cou
                     FROM          DT1320 AS a1
                     GROUP BY a1.IDDOC, a1.lineno_) aaa
WHERE     (cou <> 1)



--------------------------------------
9 vde69
 
10.01.13
09:13
(6)

SELECT     IDDOC, LINENO_
FROM         DT1320
GROUP BY IDDOC, LINENO_
HAVING      (COUNT(*) > 1)

пусто....
10 Ёпрст
 
гуру
10.01.13
09:14
Это, размер базы то какой ?
И есть уверенность, что она в dat без всяких приблуд ромикса выгрузится ?
11 vde69
 
10.01.13
09:16
(5)

пусто

SELECT     *, LINENO_ AS Expr1
FROM         DT1320
WHERE     (LINENO_ IS NULL) OR
                     (LINENO_ IS NULL)
12 mikecool
 
10.01.13
09:17
(11) я имел ввиду не только номер строки, но и везде, где по структуре запрещено незаполненное значение
13 Ёпрст
 
гуру
10.01.13
09:17
(11) ага, хорошее условие
:)
14 vde69
 
10.01.13
09:17
(10) легко, скулевский файл чуть больше гига, кроме того без этой таблички (а она маленькая) все выгружается и работает
15 dk
 
10.01.13
09:17
а ТиИ запустить в режиме без исправлений?
16 Ёпрст
 
гуру
10.01.13
09:18
(14) общие реквизиты дока, с типом строка неогр длины, последние хоть в дереве метаданных ?
17 Ёпрст
 
гуру
10.01.13
09:19
+16 если прибить записи в 1scrdoc, тоже болт ?
18 vde69
 
10.01.13
09:25
(12) пусто

SELECT     *
FROM         DT1320
WHERE     (IDDOC IS NULL) OR
                     (LINENO_ IS NULL) OR
                     (SP1337 IS NULL) OR
                     (SP1338 IS NULL) OR
                     (SP1339 IS NULL) OR
                     (SP1340 IS NULL) OR
                     (SP1343 IS NULL) OR
                     (TSP1343 IS NULL) OR
                     (SP1344 IS NULL) OR
                     (SP1345 IS NULL) OR
                     (TSP1345 IS NULL) OR
                     (SP1346 IS NULL) OR
                     (SP1346 IS NULL) OR
                     (SP1348 IS NULL) OR
                     (SP1347 IS NULL) OR
                     (SP1349 IS NULL)

(17) давно прибиты
(15) без исправления видит ошибки но не относящиеся к этой таблице

после выгрузки в файловую делал ТИИ - все нормально
19 mikecool
 
10.01.13
09:28
(18) некорректные символы в полях?
20 Ёпрст
 
гуру
10.01.13
09:28
(18) словарик хоть соответствует этому мд ?
21 vde69
 
10.01.13
09:29
(19) визуально - вроде нет (хотя конечно глазами не пробежишь нормально), а как проверить?
22 Ёпрст
 
гуру
10.01.13
09:30
а на 16 ?
23 Ёпрст
 
гуру
10.01.13
09:32
можешь еще и проапдейтить последовательно все реквизиты таб части, занося туда пустойИД
24 Ёпрст
 
гуру
10.01.13
09:32
+23 если это ссылочный тип
25 vde69
 
10.01.13
09:33
(20) как получена текущая база

1. выгрузил в файл (без таблицы)
2. загрузил в файловую, сделал ТИИ
3. созранил в выгрузку
4. очистил скуль базу
5. загрузил в нее файловую
6. экспортом из копии базы перелил табличку

должно все соответсвтовать... экспорт не ругался, по этому индексы и дубли нолжны быть в норме....

я склоняюсь к кривому символу где-то, только как найти?
26 dk
 
10.01.13
09:34
прибей все табличные реквизиты по одному - найдешь проблемную колонку
27 dk
 
10.01.13
09:36
либо не найдешь, тогда дело не в ней )
28 vde69
 
10.01.13
09:36
(16) это табличная часть, ты уверен что там это общие реквизиты?
29 Ёпрст
 
гуру
10.01.13
09:43
(25) ну дык, проверь все реквизиты , правильнаяч ли в них ссылка
30 1Сергей
 
10.01.13
09:43
удивительно, что главный восстановитель баз спрашивает что-то :)

В качестве бреда: Создать новую табличку и скопировать в неё всё из DT1320. удалить первую. вторую переименовать в первую
31 Ёпрст
 
гуру
10.01.13
09:43
можешь по-очереди их прибивать (тупо апдейтом и выгружать)
32 Ёпрст
 
гуру
10.01.13
09:45
тем более, у тебя в dt есть реквизиты неопределенного типа - в начале, прибей их..
это поди выписка какая-нить ?
33 Ёпрст
 
гуру
10.01.13
09:46
т.е первым делом прибей SP1343 и SP1345
34 vde69
 
10.01.13
09:48
это КассовыйДень из бюджетки...

счас буду исключением колонок искать...
35 mikecool
 
10.01.13
10:02
(25) "я склоняюсь к кривому символу где-то, только как найти?" я вот даже хз (
36 monsterZE
 
10.01.13
10:07
я ищу кривые символы так.. =) тока это не в скл, но мож поможет..
           Для м=1 по ДлинаТ Цикл
               Если КодСимв(Сред(т,м,1))<32 Тогда
                   Сообщить(""+Док.Вид()+" "+СокрЛП(Док.НомерДок)+" / "+т);
               КонецЕсли;                                      
               
               Если (КодСимв(Сред(т,м,1))>122) и (КодСимв(Сред(т,м,1))<192) Тогда
                   Если КодСимв(Сред(т,м,1))<>185 Тогда
                       Сообщить(""+Док.Вид()+" "+СокрЛП(Док.НомерДок)+" / "+т);
                   КонецЕсли;    
               КонецЕсли;                                      
           КонецЦикла;
37 vde69
 
10.01.13
10:13
ошибка в одной из числовых колонках
СуммаДО, ВалСуммаДО, СуммаКО, ВалСуммаКО.

добавление реквизита через конфигуратор не проходит...
38 vde69
 
10.01.13
10:27
нашел кривую строку запросом

SELECT     *
FROM         DT1320
WHERE     (SP1347 <> 0) OR
                     (SP1349 <> 0)
39 Ёпрст
 
гуру
10.01.13
10:32
и че там было ?
40 mikecool
 
10.01.13
10:34
а у меня как то не задавался заголовок колонки ТЧ на форме
ругался, что он неправильный
если прописывал реквизиту такой синоним - то добавлялся заголовок, но при попытке исправить - снова ругался )
41 КонецЦикла
 
10.01.13
11:05
(39) +1 :)
42 mikecool
 
10.01.13
11:07
я провидец!!!! )))
(41) +1
43 КонецЦикла
 
10.01.13
11:11
(42) Ну обо как бы логично :)
Если нет дублей, то либо null... а что там еще может быть интересно?
44 vde69
 
10.01.13
11:13
(41) (39)

одна строка с мусором в 3х колонках, при этом ключ был нормальный
45 Ёпрст
 
гуру
10.01.13
11:15
мусор то как выглядел и в каких колонках ?
46 mikecool
 
10.01.13
11:15
(45) теперь клещами бум вытягивать правду )
47 vde69
 
10.01.13
11:22
кракозябры в числовых колонках и один уид сдвинут в поле
48 КонецЦикла
 
10.01.13
11:23
Представляю сколько дерьма там в НЕчисловых колонках :)
49 vde69
 
10.01.13
11:25
наверно есть :) хотя ссылочную целостность - проходит
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.