|
v7: И снова "Cannot insert duplicate key in object"... | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
03.04.12
✎
14:19
|
Конфига самописная, база около 20Гб, SQL 2005.
При переносе Бухитогов на 2 кв. 2012 СКЛь выдал: "SQL state 2300 native 2627, Violation of PRIMARY KEY constraint 'PK__1SBKTTL'. Cannot insert duplicate key in object '_1SBKTTL' Предпринималось следующее: Все варианты с http://1csql.ru/: 1. -- есть проводки по непроведенным документам SELECT * FROM _1sentry (nolock) WHERE docid IN (SELECT iddoc FROM _1sjourn (nolock) WHERE closed=0) -- есть проводки, но нет соответствующих документов SELECT * FROM _1sentry (nolock) WHERE docid NOT IN (SELECT iddoc FROM _1sjourn (nolock)) -- есть проводки, но нет соответствующих операций SELECT * FROM _1sentry (nolock) WHERE docid NOT IN (SELECT docid FROM _1soper (nolock)) -- есть операции, но нет соответствующих документов SELECT * FROM _1soper (nolock) WHERE docid NOT IN (SELECT iddoc FROM _1sjourn (nolock)) -- проверка правильности заполнения DATE_TIME_DOCID в _1sentry SELECT _1sentry.DATE_TIME_DOCID,_1sjourn.DATE_TIME_idDOC FROM _1sentry (nolock), _1sjourn (nolock) WHERE _1sentry.DOCID=_1sjourn.idDOC AND _1sentry.DATE_TIME_DOCID<>_1sjourn.DATE_TIME_idDOC 2. SELECT _1SJOURN.IDDOCDEF, _1SJOURN.DOCNO, _1SJOURN.DATE_TIME_IDDOC, _1SOPER.DATE_TIME_DOCID FROM _1SJOURN INNER JOIN _1SOPER ON _1SJOURN.IDDOC = _1SOPER.DOCID GROUP BY _1SJOURN.IDDOC, _1SJOURN.DATE_TIME_IDDOC, _1SOPER.DATE_TIME_DOCID, _1SJOURN.DOCNO, _1SJOURN.IDDOCDEF HAVING (_1SJOURN.DATE_TIME_IDDOC <> _1SOPER.DATE_TIME_DOCID) 3. DELETE FROM _1SCRDOC WHERE EXISTS ( SELECT * FROM _1SCRDOC AS b WHERE b.[CHILDID] = _1SCRDOC.[CHILDID] AND b.[MDID] = _1SCRDOC.[MDID] AND b.[PARENTVAL] = _1SCRDOC.[PARENTVAL] GROUP BY b.[MDID], b.[CHILDID], b.[PARENTVAL] HAVING _1SCRDOC.[ROW_ID] > MIN( b.[ROW_ID]) ) Все запросы - по нулям. (по _1SJOURN.DATE_TIME_IDDOC <> _1SOPER.DATE_TIME_DOCID кое-что поправилось, но не помогло) Кроме этого пытался по своему разумению пописАть запросы к _1SENTRY / _1SOPER на предмет выявления дублей - ничего не получилось (с T-SQL дружу слабо, да плюс к тому устройство таблицы _1SBKTTL и наполнение ее данными взрывает мозг) 4. Далее выгрузка/загрузка базы. Сначала вроде помогло, но при попытке "про запас" посчитать итоги на 3 кв. 2012 - та же песТня. 5. Далее удаление таблиц _1SBKTTL,_1SBKTTLC и полный пересчет итогов. На данный момент по 2 кв. итоги рассчитаны, люди работают, проверят расчет на 3 кв. не решаюсь)) Все процедуры предпринимались на центральной ИБ. Есть кроме прочих еще 2 периферийных больших - там таже песТня. На одной из перифериек голый п.5 результата не дал. Теоретически понимаю, что скорее всего надо найти в таблице проводок (_1SENTRY) записи, итоги по которым при вставке в _1SBKTTL дадут неуникальный индекс по ключу PK__1SBKTTL, который строится по полям [DATE],[SP47481],[KIND],[ACCID],[SC0],[SC1],[SC2],[CURRID] Но как это сделать практически? Какие мысли? |
|||
1
Mikeware
03.04.12
✎
14:42
|
select CURRID, count(*)
from _1SENTRY group by [DATE],[SP47481],[KIND],[ACCID],[SC0],[SC1],[SC2],[CURRID] having count(*)>1 |
|||
2
Mikeware
03.04.12
✎
14:43
|
Пардон,
select CURRID, count(*) from _1SBKTTL group by [DATE],[SP47481],[KIND],[ACCID],[SC0],[SC1],[SC2],[CURRID] having count(*)>1 |
|||
3
МихаилМ
03.04.12
✎
14:52
|
отключите индекс, перенисите итоги
надите задвоенные, проаналицируйте избавте от задвоенных (сверните) пересчитате индекс. проаналицируйте причину длч предотвращения в дальнейшем |
|||
4
Dolly_EV
03.04.12
✎
14:53
|
(2) Ниии ,все это перепробовано... проблема-то не в _1SBKTTL, а где-то в данных.
select CURRID, count(*) from _1SBKTTL group by [DATE],[SP47481],[KIND],[ACCID],[SC0],[SC1],[SC2],[CURRID] having count(*)>1 дает пусто |
|||
5
Dolly_EV
03.04.12
✎
14:54
|
(3) "отключите индекс, перенисите итоги" - как?
делал "удалите индекс". |
|||
6
Mikeware
03.04.12
✎
15:02
|
(3) индекс первичный...
|
|||
7
МихаилМ
03.04.12
✎
15:03
|
если объеснять то ветка будет на сто постов
1) есть бютжет и нет времени обратитесь в софт поинт www.softpoint.ru они подключатся по rdp и полечат 2) если есть бютжет и время найдите месных специалистов или удаленно. сответственно Вам в раздел "работа". |
|||
8
Mikeware
03.04.12
✎
15:06
|
(5) попробуй пересоздать как неуникальный
|
|||
9
Ёпрст
03.04.12
✎
15:14
|
на пустую дату проверь 1sjourn и 1ssentry
|
|||
10
Dolly_EV
03.04.12
✎
15:16
|
(7) есть бюджет, и есть время... и есть желание разобраться самому, что перевешивает первое и второе)))
(5)сделал на индексе 'disable', при попытке переноса итогов ругается, что "Процессор запросов не может продьюс э плэн, ибо индекс PK_1SBKTTL на таблице или вьюхе из дизаблед" пересоздание как неуникальный: попытку снять галочку "unique" в свойствах индекса и дальнейший ребилд обламывает СКЛь со словами "Таблица 1СБКТТЛ уже имеет первичный ключ, обределенный по нему (индексу, я так понимаю)" |
|||
11
Ёпрст
03.04.12
✎
15:17
|
||||
12
Dolly_EV
03.04.12
✎
15:24
|
(9,11) Ёпрст,
select * from _1SENTRY where DATE_TIME_DOCID like '17530101_______________' select * from _1SJOURN where DATE_TIME_IDDOC like '17530101_______________' пусто по ссылке - все испробовал еще вчера |
|||
13
Ёпрст
03.04.12
✎
15:29
|
а как с 2005 дружил то ?
|
|||
14
Dolly_EV
03.04.12
✎
15:30
|
(13) да как, как обычно. База - в режиме совместимости с 2000
|
|||
15
Ёпрст
03.04.12
✎
15:35
|
(14) ну ясно.. попробуй вот это и без режима совместимости:
http://infostart.ru/public/82018/ |
|||
16
Dolly_EV
03.04.12
✎
15:36
|
(15) Блиин... 27.1 это долго... проблема-то где-то на поверхности?,а? -:((
|
|||
17
Dolly_EV
03.04.12
✎
15:43
|
+16 долго, т.к. "реструктуризация", а реструктуризация - это Центральная ИБ, а она сейчас занята (там с грехом пополам посчитались итоги), сейчас можно изгаляться только с периферийкой, а на ней реструкт. сделать затруднительно...
Вобщем, это конечно отговорки. Ёпрст, сколько %-тов "за" ты дашь, что 27.1 решит проблему? :-)) |
|||
18
Ёпрст
03.04.12
✎
15:44
|
(17) какая в п..у реструктуризация ?
|
|||
19
Dolly_EV
03.04.12
✎
15:46
|
(18) "Общие рекомендации
........ вызывать реструктуризацию, если база данных до этого использовалась с родной BkEnd.dll (в хранимых процедурах есть код, который не проходит по ограничениям SQL2005/2008);" |
|||
20
NS
03.04.12
✎
15:46
|
А переиндексацию таблицы делал?
|
|||
21
Ёпрст
03.04.12
✎
15:47
|
(19) ёпт.. там всего лишь надо чтоб новый словарик создался и тексты хранимок, это делов на 1 минуту при любой базе.
|
|||
22
Dolly_EV
03.04.12
✎
15:49
|
(21) ты про %-нт "за" скажи...
|
|||
23
Dolly_EV
03.04.12
✎
15:49
|
и какой "Solution" брать? 5,6,7 ?
|
|||
24
Ёпрст
03.04.12
✎
15:49
|
(23) последний.
|
|||
25
Ёпрст
03.04.12
✎
15:49
|
7 т.е
|
|||
26
Ёпрст
03.04.12
✎
15:50
|
(22) я же не телепат
|
|||
27
Dolly_EV
03.04.12
✎
15:50
|
"новый словарик создался и тексты хранимок" - на периферийной как сделать? DDS удалить?
|
|||
28
Ёпрст
03.04.12
✎
15:50
|
ты хоть на дубли проверил таблички ?
|
|||
29
Dolly_EV
03.04.12
✎
15:50
|
(28) да
|
|||
30
Ёпрст
03.04.12
✎
15:51
|
(27):)
можешь и так + загрузитьт измененную конфу - указать на мд из каталога иб..сохранить |
|||
31
Dolly_EV
03.04.12
✎
15:55
|
(30) Блин, оказывается на СКЛе периф. ИБ молча дает сохранить конфу... век живи век учись
|
|||
32
Dolly_EV
03.04.12
✎
16:05
|
(30) вобщем, не помогло...:-( Все ровно также, только зашевелилось все быстрее
|
|||
33
Ёпрст
03.04.12
✎
16:06
|
сделай реиндекс базы и ищи дубли в 1sentry
|
|||
34
Mikeware
03.04.12
✎
16:09
|
(31) Не должен.
(33) скорее, существующие проводки у непроведенного, или что-то в этом роде (я просто с бухподсистемой знаком весьма поверхностно) |
|||
35
Dolly_EV
03.04.12
✎
16:09
|
реиндекс поставил... потом дубли..дублидублибубли :((
|
|||
36
Dolly_EV
03.04.12
✎
16:11
|
(34) про существующие проводки непроведенного - смотри шапку - они бы все выловились скриптами с 1csql.ru - не раз выручало
|
|||
37
FN
03.04.12
✎
16:11
|
а профайлер не покажет, на каком именно значении индекса валится база?
|
|||
38
Dolly_EV
03.04.12
✎
16:13
|
(37) профайлер кажет только текст запроса вставки/выборки, после которого все валится, ... или я не умею его готовить :-(
Ладно, реиндекс идет, бубли завтра... у меня уже 22.10. Всем спасибо!!! |
|||
39
Dolly_EV
04.04.12
✎
11:33
|
иззапросил 1sentry всеми возможными способами, по всем уникальным индексам, на предмет дублей.... нету ничего :-(
|
|||
40
Ёпрст
04.04.12
✎
11:38
|
(39) а в журнале доков, нет дублей по iddoc ?
|
|||
41
Ёпрст
04.04.12
✎
11:38
|
+ нет ли циклических ссылок в справочниках ?
|
|||
42
Dolly_EV
04.04.12
✎
11:41
|
(41) это как? и как проверить? (42) по [_1SJOURN] нет дублей по iddoc
|
|||
43
Ёпрст
04.04.12
✎
11:44
|
это когда родитель элемента = элементу, а не группе или самому себе.
+ аналогично с владельцами в подчиненном справочнике. |
|||
44
Ёпрст
04.04.12
✎
11:44
|
+ есть подобные косяки со счетами
|
|||
45
Dolly_EV
04.04.12
✎
11:46
|
(44) применительно к _1SACCS можешь набросать запрос на проверку? по справочникам тут смысла нет проверять
|
|||
46
Dolly_EV
04.04.12
✎
11:59
|
(44) визуально - с планом счетов все Ок
|
|||
47
Ёпрст
04.04.12
✎
12:30
|
В видах субконто..нет типа видов "строкового" типа случаем ?
+попробуй поубирать отборы по субконто |
|||
48
Ёпрст
04.04.12
✎
12:31
|
+отборы по счетам
|
|||
49
toypaul
гуру
04.04.12
✎
12:36
|
профайлер надо смотреть. ситуация нестандартная.
|
|||
50
toypaul
гуру
04.04.12
✎
12:41
|
посмотрел как делается перенос итогов... там всего лишь несколько запросов идет. разобраться довольно просто.
|
|||
51
toypaul
гуру
04.04.12
✎
12:44
|
повторить то, что там делается можно в QA. там создается временная таблица за новый период. данные запросом из предыдущего квартала суммируются в этой таблице и вставляются в итоги. причем с группировкой по уникальным полям. откуда там могу взятся дубли не ясно. перед этим итоги за этот период удаляются
|
|||
52
Ёпрст
04.04.12
✎
12:56
|
не ясно еще, что за поле SP47481 в табличке итогов у автора..
|
|||
53
toypaul
гуру
04.04.12
✎
13:44
|
(52) разделитель учета :)
|
|||
54
Dolly_EV
04.04.12
✎
13:47
|
SP47481 - Справочник.Фирмы - Разделитель учета
|
|||
55
Dolly_EV
04.04.12
✎
13:50
|
Как профайлера заставить выдавать трэйс только по одной выбранной базе ?? просто еще три базы на СКЛе, мешают
|
|||
56
viktor_vv
04.04.12
✎
13:52
|
В свойствах трэйс закладка Filters databaseName.
|
|||
57
Ёпрст
04.04.12
✎
13:54
|
(53) точняк.. у нас вырезан
|
|||
58
Ёпрст
04.04.12
✎
13:55
|
(54) что там с нестандартными видами субконто ? Есть такие ?
|
|||
59
Dolly_EV
04.04.12
✎
13:59
|
(58) "строковых" субконто нет, документы, справочники... Вообще - база когда-то была типовая Бухия 4.5
И вся бухгалтерия по возможности оставалась неизменной. Так что с субконто - все стандартно, только кое-где добавлено / удалено |
|||
60
Dolly_EV
04.04.12
✎
14:01
|
(56) все облазил, нету Filters databaseName. :-(
|
|||
61
toypaul
гуру
04.04.12
✎
14:03
|
(60) поставь галку show all columns :)
|
|||
62
Dolly_EV
04.04.12
✎
14:04
|
Все нашел, надо было подсказать "кликни по заголовку колонки" ... Edit colomn filter :-))
|
|||
63
viktor_vv
04.04.12
✎
14:07
|
(60) Это при создании trace.
|
|||
64
viktor_vv
04.04.12
✎
14:09
|
(63)+ и для 2000 mssql. Сорри, может в 2005 по другому.
|
|||
65
Dolly_EV
04.04.12
✎
14:13
|
Вот запрос на сбор данных
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE ID=OBJECT_ID('tempdb..#TMPPROVTBL') AND SYSSTAT & 0xf = 3 ) DROP TABLE #TMPPROVTBL; SELECT DATE, ACCDTID, ACCKTID, CURRID, PROVKIND, SUM_=SUM(SUM_), CURSUM=SUM(CURSUM), AMOUNT=SUM(AMOUNT), DTFLAGS=MAX(DTFLAGS), KTFLAGS=MAX(KTFLAGS), DTSC0, VDTSC0=MAX(VDTSC0), ODTSC0=MAX(ODTSC0), KTSC0, VKTSC0=MAX(VKTSC0), OKTSC0=MAX(OKTSC0), DTSC1, VDTSC1=MAX(VDTSC1), ODTSC1=MAX(ODTSC1), KTSC1, VKTSC1=MAX(VKTSC1), OKTSC1=MAX(OKTSC1), DTSC2, VDTSC2=MAX(VDTSC2), ODTSC2=MAX(ODTSC2), KTSC2, VKTSC2=MAX(VKTSC2), OKTSC2=MAX(OKTSC2), SP47481 INTO #TMPPROVTBL FROM ( SELECT DATE=DATEADD(mm, DATEDIFF(mm, '17530101', CONVERT(CHAR(8), DATE_TIME_DOCID)), '17530101'), ACCDTID, ACCKTID, CURRID, PROVKIND=CASE WHEN CORNO=0 THEN PROVKIND WHEN PROVKIND='D' THEN 'E' WHEN PROVKIND='K' THEN 'J' ELSE ' ' END, SUM_, CURSUM, AMOUNT, DTFLAGS, KTFLAGS, DTSC0, VDTSC0, ODTSC0, KTSC0, VKTSC0, OKTSC0, DTSC1, VDTSC1, ODTSC1, KTSC1, VKTSC1, OKTSC1, DTSC2, VDTSC2, ODTSC2, KTSC2, VKTSC2, OKTSC2, SP47481 FROM _1SENTRY WHERE DATE_TIME_DOCID>='20120401 0 0 ' AND DATE_TIME_DOCID<='20120630FHML6O 0 ' AND ACTIVE=' ' ) AS ENTRY GROUP BY DATE, ACCDTID, ACCKTID, CURRID, PROVKIND , DTSC0, KTSC0 , DTSC1, KTSC1 , DTSC2, KTSC2 ,SP47481 |
|||
66
Dolly_EV
04.04.12
✎
14:14
|
добавляем к нему
Select * FROM #TMPPROVTBL получаем теперь осталось having cout>1 по нужным полям построить :-( |
|||
67
Ёпрст
04.04.12
✎
14:20
|
(66) зачем ? у тебя и так всё свернуто по гроуп бай
|
|||
68
Dolly_EV
04.04.12
✎
14:20
|
Select DATE, ACCDTID, ACCKTID, CURRID, PROVKIND
, DTSC0, KTSC0 , DTSC1, KTSC1 , DTSC2, KTSC2 ,SP47481, "Count"=COUNT(*) FROM #TMPPROVTBL GROUP BY DATE, ACCDTID, ACCKTID, CURRID, PROVKIND , DTSC0, KTSC0 , DTSC1, KTSC1 , DTSC2, KTSC2 ,SP47481 HAVING COUNT(*)>1 дает 0 |
|||
69
Dolly_EV
04.04.12
✎
14:24
|
не, там дальше по профайлеру INSERT идет из SELECT'a из #TMPPROVTBL и UNIONALL с еще одним запросом ...
|
|||
70
Dolly_EV
04.04.12
✎
14:25
|
Как закомментить быстро кусок кода в QA? (Ctrl+/) ??
|
|||
71
Ёпрст
04.04.12
✎
14:26
|
так, есть че ?
select * from _1SBKTTL where (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0) |
|||
72
Dolly_EV
04.04.12
✎
14:28
|
объединил два запроса... получил табличку, которая инсертится.. (61115 row(s) affected)
теперь сообразить, как HAVING COUNT(*)>1 вставить |
|||
73
Dolly_EV
04.04.12
✎
14:29
|
(71) так есть много че = (6981 row(s) affected)
|
|||
74
Dolly_EV
04.04.12
✎
14:35
|
после кода из профайлера пишу:
Select ACCID,CURRID,KIND,SP47481,SC0,SC1,SC2, "Count"=COUNT(*) FROM OB GROUP BY ACCID,CURRID,KIND,SP47481,SC0,SC1,SC2 HAVING COUNT(*)>1 скуль говорит: Invalid object name 'OB'. пните, как из результата теперь выбрать неуникальные?? |
|||
75
Ёпрст
04.04.12
✎
14:36
|
(73) у.. жесть какая..
делай так тогда delete from _1SBKTTL where (OBDT1 = 0) AND (OBKT1 = 0) AND (OBDT2 = 0) AND (OBKT2 = 0) AND (OBDT3 = 0) AND (OBKT3 = 0) AND (SD = 0) потом пробуй итоги пересчитать |
|||
76
Dolly_EV
04.04.12
✎
14:39
|
Епрст ,не, я сначала добью табличку, что инсертится... совсем чуть-чуть осталось
|
|||
77
Ёпрст
04.04.12
✎
14:39
|
ну и аналогичто
delete from _1SBKTTLC where (OB1 = 0) AND (OB2 = 0) AND (OB3 = 0) |
|||
78
Ёпрст
04.04.12
✎
14:41
|
(76) и смысл ?
у тя дохрена нулевых итогов, есть вероятность, что из-за них есть дублирующийся набор. Вообще, грохнул бы целиком 1SBKTTL и 1SBKTTLC и открывал бы по 1 периоду - увидел бы, в каком спотыкается. |
|||
79
Dolly_EV
04.04.12
✎
14:44
|
(78) ну вживую увидеть ту суку (тех сук), что мешают жить))
как из результата (OB) быстро выбрать дубли??... пытаюсь через INTO вставить во временную таблицу - ругаецца, что "не все колонки имеют имена или алиасы": Msg 1038, Level 15, State 5, Line 37 An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Add a name or single space as the alias name. |
|||
80
Dolly_EV
04.04.12
✎
14:45
|
(78) "Вообще, грохнул бы целиком 1SBKTTL и 1SBKTTLC и открывал бы по 1 периоду - увидел бы, в каком спотыкается." - это не наш путь, коль пытаемся освоить прямые запросы))))
|
|||
81
Dolly_EV
04.04.12
✎
14:52
|
(71)Кстати, SELECT на предмет нулевых останков выдал 6981 row(s) affected) на центральной ИБ, в которой каким-то макаром после бубна и танцев 2 кв. 2012 все же открылся.
А на копии, где период открыться не может, твой SELECT выдает 0 |
|||
82
Dolly_EV
04.04.12
✎
14:53
|
(71) так что DELETE'ить нечего :-(
|
|||
83
Ёпрст
04.04.12
✎
14:56
|
(82) ну почему нечего ?
можешь так, например delete from _1SBKTTL whwre date >'20120401' |
|||
84
toypaul
гуру
04.04.12
✎
14:56
|
сначала в QA повторить куски из профайлера
затем уже искать ошибку во втором запросе, убрав из него INTO |
|||
85
Dolly_EV
04.04.12
✎
15:04
|
(84) так это и делаю!
в результате = таблица которую нужно проверить на дубли... и вот это не могу сообразить, как сделать :-(( вот весь код: -- BEGIN Код 1С из профайлера - сбор #TMPPROVTBL IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE ID=OBJECT_ID('tempdb..#TMPPROVTBL') AND SYSSTAT & 0xf = 3 ) DROP TABLE #TMPPROVTBL; SELECT DATE, ACCDTID, ACCKTID, CURRID, PROVKIND, SUM_=SUM(SUM_), CURSUM=SUM(CURSUM), AMOUNT=SUM(AMOUNT), DTFLAGS=MAX(DTFLAGS), KTFLAGS=MAX(KTFLAGS), DTSC0, VDTSC0=MAX(VDTSC0), ODTSC0=MAX(ODTSC0), KTSC0, VKTSC0=MAX(VKTSC0), OKTSC0=MAX(OKTSC0), DTSC1, VDTSC1=MAX(VDTSC1), ODTSC1=MAX(ODTSC1), KTSC1, VKTSC1=MAX(VKTSC1), OKTSC1=MAX(OKTSC1), DTSC2, VDTSC2=MAX(VDTSC2), ODTSC2=MAX(ODTSC2), KTSC2, VKTSC2=MAX(VKTSC2), OKTSC2=MAX(OKTSC2), SP47481 INTO #TMPPROVTBL FROM ( SELECT DATE=DATEADD(mm, DATEDIFF(mm, '17530101', CONVERT(CHAR(8), DATE_TIME_DOCID)), '17530101'), ACCDTID, ACCKTID, CURRID, PROVKIND=CASE WHEN CORNO=0 THEN PROVKIND WHEN PROVKIND='D' THEN 'E' WHEN PROVKIND='K' THEN 'J' ELSE ' ' END, SUM_, CURSUM, AMOUNT, DTFLAGS, KTFLAGS, DTSC0, VDTSC0, ODTSC0, KTSC0, VKTSC0, OKTSC0, DTSC1, VDTSC1, ODTSC1, KTSC1, VKTSC1, OKTSC1, DTSC2, VDTSC2, ODTSC2, KTSC2, VKTSC2, OKTSC2, SP47481 FROM _1SENTRY WHERE DATE_TIME_DOCID>='20120401 0 0 ' AND DATE_TIME_DOCID<='20120630FHML6O 0 ' AND ACTIVE=' ' ) AS ENTRY GROUP BY DATE, ACCDTID, ACCKTID, CURRID, PROVKIND , DTSC0, KTSC0 , DTSC1, KTSC1 , DTSC2, KTSC2 ,SP47481 -- END Код 1С из профайлера - сбор #TMPPROVTBL -- BEGIN моё IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE ID=OBJECT_ID('tempdb..#ResultForInsert') AND SYSSTAT & 0xf = 3 ) DROP TABLE #ResultForInsert; -- END моё -- BEGIN Код 1С из профайлера - UNION ALL #TMPPROVTBL и всего остального...INSERT закомментил -- SET NOCOUNT ON -- INSERT INTO _1SBKTTL SELECT '20120401',ACCID,CURRID,KIND,SUM(OBDT1),SUM(OBKT1),SUM(OBDT2),SUM(OBKT2),SUM(OBDT3),SUM(OBKT3),SUM(SD),MAX(FLAGS) ,SP47481,SC0,MAX(VSC0),MAX(OSC0),SC1,MAX(VSC1),MAX(OSC1),SC2,MAX(VSC2),MAX(OSC2) -- BEGIN моё -- вот здесь СКЛь ругается ! :-( -- Msg 1038, Level 15, State 5, Line 41 -- An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. -- For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. -- Add a name or single space as the alias name. INTO #ResultForInsert -- END моё FROM ( SELECT ACCID,CURRID,KIND,OBDT1=0,OBKT1=0,OBDT2=0,OBKT2=0,OBDT3=0,OBKT3=0,SD=SD+OBDT1+OBDT2+OBDT3-OBKT1-OBKT2-OBKT3, FLAGS,SP47481,SC0,VSC0,OSC0,SC1,VSC1,OSC1,SC2,VSC2,OSC2 FROM _1SBKTTL WHERE DATE='20120101' AND KIND='1' UNION ALL SELECT ACCID=ACCDTID,CURRID=CASE WHEN (DTFLAGS&1)=1 THEN CURRID ELSE ' 0 ' END,KIND='1', OBDT1=CASE DATE WHEN '20120401' THEN SUM_ ELSE 0 END,OBKT1=0, OBDT2=CASE DATE WHEN '20120501' THEN SUM_ ELSE 0 END,OBKT2=0, OBDT3=CASE DATE WHEN '20120601' THEN SUM_ ELSE 0 END,OBKT3=0, SD=0,FLAGS=DTFLAGS ,SP47481,DTSC0=CASE WHEN ODTSC0=1 THEN ' ' ELSE DTSC0 END,VDTSC0=VDTSC0,ODTSC0=ODTSC0 ,DTSC1=CASE WHEN ODTSC1=1 THEN ' ' ELSE DTSC1 END,VDTSC1=VDTSC1,ODTSC1=ODTSC1 ,DTSC2=CASE WHEN ODTSC2=1 THEN ' ' ELSE DTSC2 END,VDTSC2=VDTSC2,ODTSC2=ODTSC2 FROM #TMPPROVTBL WHERE PROVKIND<>'K' AND PROVKIND<>'J' AND ACCDTID<>' 0 ' AND SUM_<>0 UNION ALL SELECT ACCID=ACCKTID,CURRID=CASE WHEN (KTFLAGS&1)=1 THEN CURRID ELSE ' 0 ' END,KIND='1', OBDT1=0,OBKT1=CASE DATE WHEN '20120401' THEN SUM_ ELSE 0 END, OBDT2=0,OBKT2=CASE DATE WHEN '20120501' THEN SUM_ ELSE 0 END, OBDT3=0,OBKT3=CASE DATE WHEN '20120601' THEN SUM_ ELSE 0 END, SD=0,FLAGS=KTFLAGS ,SP47481,KTSC0=CASE WHEN OKTSC0=1 THEN ' ' ELSE KTSC0 END,VKTSC0=VKTSC0,OKTSC0=OKTSC0 ,KTSC1=CASE WHEN OKTSC1=1 THEN ' ' ELSE KTSC1 END,VKTSC1=VKTSC1,OKTSC1=OKTSC1 ,KTSC2=CASE WHEN OKTSC2=1 THEN ' ' ELSE KTSC2 END,VKTSC2=VKTSC2,OKTSC2=OKTSC2 FROM #TMPPROVTBL WHERE PROVKIND<>'D' AND PROVKIND<>'E' AND ACCKTID<>' 0 ' AND SUM_<>0 ) AS OB GROUP BY ACCID,CURRID,KIND,SP47481,SC0,SC1,SC2 HAVING SUM(SD)<>0 OR SUM(OBDT1)<>0 OR SUM(OBKT1)<>0 OR SUM(OBDT2)<>0 OR SUM(OBKT2)<>0 OR SUM(OBDT3)<>0 OR SUM(OBKT3)<>0 -- END Код 1С из профайлера - UNION ALL #TMPPROVTBL и всего остального... -- OB - далее вставляется INSERT'ом в _1SBKTTL и тут наступает ж0па.. -- BEGIN моё Select ACCID,CURRID,KIND,SP47481,SC0,SC1,SC2, "Count"=COUNT(*) FROM #ResultForInsert GROUP BY ACCID,CURRID,KIND,SP47481,SC0,SC1,SC2 HAVING COUNT(*)>1 -- END моё |
|||
86
Dolly_EV
04.04.12
✎
15:07
|
(83)
select * from _1SBKTTL where date >'20120401' дает = 0 на копии, которая валится при открытии 2 кв. в рабочей базе ессно уже есть данные.. |
|||
87
Dolly_EV
04.04.12
✎
15:11
|
(84) Павел, пни по поводу "поправить" код из (85) в нужном направлении?? :-(
|
|||
88
Ёпрст
04.04.12
✎
15:18
|
(87) те ж написали .. добавь алиясы в селект листе
|
|||
89
Ёпрст
04.04.12
✎
15:18
|
SELECT '20120401' as Вася,ACCID as ACCID ..
|
|||
90
Dolly_EV
04.04.12
✎
15:20
|
(88) да лох я в T-SQL :-((... Одинеснег я :-((... и вообще экономист по образованию :-(
(89) во, вот это продуктивнее :-)) |
|||
91
Dolly_EV
04.04.12
✎
15:25
|
(90) П$$$ц какой-то :-(
(0 row(s) affected) |
|||
92
Dolly_EV
04.04.12
✎
15:28
|
(89) "ACCID as ACCID" не надо, только где функции и значения..
Вобщем, результат = 0 дублей(( Какие еще варианты??? |
|||
93
Ёпрст
04.04.12
✎
15:32
|
(92) а какие еще ты хотел увидеть там дубли при group by ?
|
|||
94
toypaul
гуру
04.04.12
✎
15:40
|
(90) тут есть 3 пути
- заплатить и сходить на курсы - заплатить, чтобы сделали за тебя - найти бездельника, который сечет в СКЛ и все разжует тебе (такое редко но возможно) выбери один из этих вариантов :) |
|||
95
Dolly_EV
04.04.12
✎
15:40
|
(93) не андерстенд... результат OB как раз инсертится в 1SBKTTL и всё валится из-за ... ааа... дубль появляется при инсерте, т.е. надо еще результат объединить с имеющимся в 1SBKTTL...
|
|||
96
toypaul
гуру
04.04.12
✎
15:41
|
ах да...есть еще 4й вариант - потратить много времени на изучение и сделать все самому :)
|
|||
97
Dolly_EV
04.04.12
✎
15:44
|
(96) пока идем 4-м путем))...
(94) но согласен на 3-й вариант про "бездельника" за вознаграждение... прямо сейчас.. RDP + Телефон = жуем, имеем результат = Номер карты + СбербанкОнлайн ? :-) |
|||
98
toypaul
гуру
04.04.12
✎
15:47
|
(97) было бы время, помог бы. сам сейчас сижу в профайлере в бухгалтерской базе :)
|
|||
99
Dolly_EV
04.04.12
✎
15:53
|
(98) Вот видишь какая близкая задача! )) а время=деньги... тут возможно осталось то на 20 мин. делов..... оплата - минимум как за час ...? :)
Просто я себе установку дал - если сегодня не побеждаю - завтра режу базу и съезжаю обратно на dbf - когда "забыл да еще и не знал" - медленно все очень продвигается ( |
|||
100
Z1
04.04.12
✎
17:31
|
(0) Сделай в dbf копию.
на копии отмени проводки и проведение за второй квартал 2012. эту базу переноси в sql. В sql при проведении найдешь ошибку. |
|||
101
Z1
04.04.12
✎
17:50
|
(0)читал с конца и не въехал в subj
100 не в тему. попробуй в _1SBKTTL найти максимальную дату. |
|||
102
Z1
04.04.12
✎
18:04
|
(12) написан неправильно
|
|||
103
Ёпрст
04.04.12
✎
18:14
|
(102) ? а чего там не верного ?
|
|||
104
Ёпрст
04.04.12
✎
18:16
|
да надо бы было ешще проверить, что есть проводки, но позиция изх отлична от позиции в журнале доков.
|
|||
105
Z1
04.04.12
✎
18:20
|
(103) для like
многосимвольная замена % односимвольная ? а так like вырождается в проверку на равенство строки |
|||
106
Z1
04.04.12
✎
18:21
|
(104 ) могу это дописать минут за 30 в рамках ветки 1cpp
|
|||
107
Z1
04.04.12
✎
18:24
|
(0) из 0 самый первый оператор тоже не правильный надо так
(меньше равно 1) 0x01 означает что есть только движения а по факту есть и проводки ( оптимальность этого оператора не рассматриваем ) -- есть проводки по непроведенным документам или подокументам где только оперучет SELECT * FROM _1sentry (nolock) WHERE docid IN (SELECT iddoc FROM _1sjourn (nolock) WHERE closed <= 1) |
|||
108
Z1
04.04.12
✎
18:44
|
(86) тоже неправильный
надо так select * from _1SBKTTL where date >= cast('20120401' as datetime) |
|||
109
Z1
04.04.12
✎
18:47
|
(0) ответь на 101
и сделай (12) правильными операторами. на 99% "12" даст положительный результат |
|||
110
Ёпрст
04.04.12
✎
19:13
|
(109) дык в (12) рабочий же код.. я проверил - усё ищет
|
|||
111
Z1
04.04.12
✎
19:20
|
(110) да проверил - ищет.
ну тогда остается 101 |
|||
112
Ёпрст
04.04.12
✎
19:24
|
(111) может быть еще рассогласованность проводок с доками..
|
|||
113
Ёпрст
04.04.12
✎
19:25
|
Ты кстати, с 23 59 59 воспроизвел эффект?
|
|||
114
Z1
04.04.12
✎
19:31
|
(112) если это и имеет место вряд ли приводит к (0)
|
|||
115
Z1
04.04.12
✎
19:32
|
(114) я не проверял время
ищутся просто все расхождения и все. в qa все работает |
|||
116
Z1
04.04.12
✎
19:34
|
(112)тогда получается один вариант в следущем периоде сидят записи и скорее всего из-за ошибки в 86 (0) это не обнаружил
т.е надо проверять 101 |
|||
117
Z1
04.04.12
✎
19:37
|
(110) это я перепутал
? это одиночный символ для Win файла _ это одиночный символ для like t-sql ( просто никогда им не пользуюсь вот и перепутал ) |
|||
118
Dolly_EV
05.04.12
✎
05:16
|
(116) Сделал:
select * from _1SBKTTL where date > cast('20120401' as datetime) пусто. если ">=" то выдает итоги, но оно и понятно - итоги за 1кв. рассчитаны |
|||
119
Dolly_EV
05.04.12
✎
05:22
|
select MIN(date)
from _1SBKTTL select MAX(date) from _1SBKTTL 2010-10-01 00:00:00.000 2012-04-01 00:00:00.000 |
|||
120
Ёпрст
05.04.12
✎
09:02
|
терь вот это запущай
select * from _1SJOURN as j(nolock) inner join _1SENTRY as p on RIGHT(j.date_time_iddoc,9) = RIGHT(p.date_time_docid,9) and j.date_time_iddoc!=p.date_time_docid |
|||
121
Dolly_EV
05.04.12
✎
10:23
|
(120) ПУСТО
|
|||
122
Ёпрст
05.04.12
✎
10:35
|
(118)
если ">=" то выдает итоги ну вот и болт, если установлен расчет по 1 квартал, то итоги там все на 01.01.2012 Если есть записи позже - значит кто-то открывал следующие периоды и потом назад откатывал |
|||
123
Ёпрст
05.04.12
✎
10:37
|
Не знаю, че ты мущаешься.. truncate table файло итогов и полный пересчет.
делов то. Если конечно, в файле проводок мусора нет |
|||
124
Dolly_EV
05.04.12
✎
10:58
|
(123) так в том и дело, что полный пересчет не гарантированно дает результат. на Центральной (после выгрузки/загрузки причем) - получилось. На периферийке - (без выгр/загр) не получилось. На другой периф. - (после выгр/загр) - сейчас идет полный пересчет после удаления таблиц итогов
|
|||
125
Dolly_EV
05.04.12
✎
11:00
|
вот отсюда скриптик:
http://www.1cpp.ru/forum/YaBB.pl?num=1220516625 по запросу -- получаем список документов у которых статус не равен 0 и стоит пометка на удаление select iddoc into #tmpClosedIsMark from _1sjourn where closed <>0 and ismark=1 and appcode & 16 = 0 выдал 4 документа = Операция (помеченные на удаление), грохнул их - не помогло |
|||
126
Dolly_EV
05.04.12
✎
11:02
|
(123) + к(124): вот на периферийке пересчиталось... но 100% уверен, если щас двинуть итоги на 3-й кв. - опять слетит... Т.е. причина таки не ясна :-(
|
|||
127
Ёпрст
05.04.12
✎
11:26
|
дык если у тя столько мусора, че ты хочешь ?
:) |
|||
128
Ёпрст
05.04.12
✎
11:28
|
если ты грохнул операции, может от них остаться проводки
|
|||
129
Dolly_EV
05.04.12
✎
11:33
|
(127) не так уж и много на 15 Гб - всего 4 операции ))
(128) Нии, проводок не осталось, проверил |
|||
130
Ёпрст
05.04.12
✎
11:42
|
(129) дык ты всё остальное то при этом проверил ?
|
|||
131
Z1
05.04.12
✎
13:36
|
(119) надо >= вместо >
|
|||
132
Z1
05.04.12
✎
13:41
|
(119) опиши подробней в какой из баз и по какой квартал там итоги рассчитаны
(125) так надо было проверить по этим документам есть или нет проводки сначала. |
|||
133
Z1
05.04.12
✎
13:51
|
(125) ты удалил sql оператором а что в других пер базах это осталось.
|
|||
134
Dolly_EV
06.04.12
✎
07:05
|
(132) Сейчас во всех базах 2-й кв. открылся. Центр и 2 периферийные (остальные маленькие - dbf). Но это - после выгр/загр + удаление _1SBKTTL/_1SBKTTLC + полный пересчет итогов.
При этом попытка перенести бухитоги на 3 кв. в свежей копии центральной ИБ (копия - после открытия 2 кв.) приводит к (0) Осталась копия центральной, которую мучаю уже ради "научного" интереса. Она не перевыгружалась и _1SBKTTL/_1SBKTTLC не удалялись. (128) Операции удалил обработкой из 1С(Док.Удалить(1)), проводки смотрел так: select * from _1SENTRY where docid=' RH49CNB' or docid=' RH0PCNB' or docid=' RH0QCNB' or docid=' RMMWCNB' |
|||
135
Z1
06.04.12
✎
08:46
|
(134) что на той копии дает 108 а иммено
код возьми именно из этого поста select * from _1SBKTTL where date >= cast('20120401' as datetime) select * from _1SBKTTL where date >= cast('20120701' as datetime) |
|||
136
Dolly_EV
06.04.12
✎
09:32
|
(135)
(1445654 row(s) affected) (0 row(s) affected) |
|||
137
Z1
06.04.12
✎
10:03
|
тогда надо воспользоваться советом из 3
не знаю получиться или нет. все что ниже сам не проверял но вроде все должно получиться сам не могу попробовать нет тестовой базы бухгалтерской 1. сделай копию базы на которой эксперементируем 2. В 1с той базы никого нет 2. удаляем кластерный индекс ALTER TABLE [dbo].[_1SBKTTL] DROP CONSTRAINT [PK__1SBKTTL] 3 создаем свой неуникальный индекс create index PK__1SBKTTL on _1SBKTTL ( [DATE], [KIND], [ACCID], [SC0], [SC1], [SC2], [CURRID] ) прим брал со своей базы может у тебя другие поля ?? 4. в dds для PK__1SBKTTL убираем уникальность вместо 1 0 5. Запускаем 1с смотрим зайдет в базу или нет |
|||
138
Z1
06.04.12
✎
10:05
|
+ к 137 еще один способ можно попробовать вообще строку в dds
I=PK__1SBKTTLC вообще удалить. |
|||
139
Dolly_EV
06.04.12
✎
11:35
|
(137) Поля те же, только плюс разделитель учета еще... попробую сейчас
|
|||
140
Z1
10.04.12
✎
08:09
|
(139) Можешь проверить базу ( Базы ) новой версией моей обработки.
Также чем закончилось 137 ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |