Имя: Пароль:
1C
1C 7.7
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]

Но как это сделать практически?
Какие мысли?
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 ?