Имя: Пароль:
1C
1C 7.7
v7: Не удаляются движения документа
0 LisaAlisa
 
07.09.20
18:09
Привет!
При установке пометки на удаление или при отмене проведения документа движения в регистре не очищаются. При этом флаг "Автоматическое удаление движений" стоит.
Из-за чего так может быть?
1 Ёпрст
 
07.09.20
18:14
(0) в 7.7 такого быть не может. И галка на этот процесс никак не влияет.
Поэтому, одна из черепашек врёт
2 LisaAlisa
 
07.09.20
18:19
к сожалению, может
3 Ёпрст
 
07.09.20
18:23
(2) ну показывай, как и чем ты это видишь
4 LisaAlisa
 
07.09.20
18:24
5 LisaAlisa
 
07.09.20
18:24
6 Ёпрст
 
07.09.20
18:26
(4,5) очень крупно, можно поменьше картинку ?
7 Ёпрст
 
07.09.20
18:27
И.. че это за самодельный просмоторщик движений ?
8 LisaAlisa
 
07.09.20
18:27
не получается что-то с картинкой...
Главное Меню Действия/Движения документа
9 LisaAlisa
 
07.09.20
18:27
10 Ёпрст
 
07.09.20
18:28
ты ПКМ на документе в журнале то нажми и выведи что там в Движения документа ?
11 Ёпрст
 
07.09.20
18:29
12 LisaAlisa
 
07.09.20
18:29
по ПКМ Движения недоступны, а через главное меню их можно просмотреть. И в SQL их видно
13 LisaAlisa
 
07.09.20
18:30
14 LisaAlisa
 
07.09.20
18:30
вот здесь видно, что документ НЕ проведен, но движения ЕСТЬ
15 Ёпрст
 
07.09.20
18:31
(12) Гы.. значит кто-то шаловливыми ручками поправил поле closed в табличке _1sjourn
16 LisaAlisa
 
07.09.20
18:31
из-за этого при попытке провести этот документ, база отваливается с ошибкой SQL, что запись в таблице регистра неуникальна
17 Ёпрст
 
07.09.20
18:31
Проведи и распроведи до
18 Ёпрст
 
07.09.20
18:31
(16) ;)))))))))))))))))))))))))))))))))))))
19 LisaAlisa
 
07.09.20
18:32
что ДО?
20 LisaAlisa
 
07.09.20
18:33
Эта фигня возникает на некоторых документах, при проведении программа спрашивает "Провести задним числом или изменить время документа?". И при любом ответе возникает *опа
21 LisaAlisa
 
07.09.20
18:34
не, не при любом, а при "Изменить время документа"
22 Ёпрст
 
07.09.20
18:42
Короче, или через QA, или обработкой очисти записи во всех Ra*, там, где closed у документа = 0, потом, обработкой пересчитай итоги.
Профит
23 Ёпрст
 
07.09.20
18:44
Запрос тип того будет :

    Для ном = 1 по Метаданные.Регистр() Цикл
            Рег = Метаданные.Регистр(ном);
            Состояние("движуха регистра "+Рег.Идентификатор);
            Сообщить("движуха регистра "+Рег.Идентификатор,"i");
                ТекстЗапроса ="
                |DELETE
                |FROM $Регистр."+Рег.Идентификатор+"
                |WHERE iddoc in (select Жур.iddoc from _1sjourn Жур where closed=0)";
            Запрос.ВыполнитьСкалярный(ТекстЗапроса);
     КонецЦикла

Если есть еще бух операции и проводки, то и там грохнуть
24 Ёпрст
 
07.09.20
18:46
+23 для скуля так

Closed & 1 <> 1
25 Ёпрст
 
07.09.20
18:48
+и если че,

ЗагрузитьВнешнююКомпоненту("1cpp.dll");
Запрос = СоздатьОбъект("ODBCRecordset");
26 Ёпрст
 
07.09.20
18:48
Занимайся
27 LisaAlisa
 
08.09.20
09:22
Очистить движения в SQL получается. Но не могу понять, ПОЧЕМУ так происходит и как этого избежать.
Перенесла ТА на месяц вперед, документы стали нормально проводиться и распроводиться, движения удаляются. Если же снова дата документа = ТА, то при оперативном проведении движения записываются, но документ в журнале выглядит как непроведенный и система его распознает как непроведенный.
28 Ёпрст
 
08.09.20
09:26
(27) Ошибки же есть при этом при проведении ?
Всё проведение дока идёт в одной транзакции. Не должно быть там зависших движений при невозможности апдейта _1sjourn
29 Ёпрст
 
08.09.20
09:27
И.. случем проведение не переписано на прямые запросы ?
30 Ёпрст
 
08.09.20
09:27
Там можно что угодно написать
31 LisaAlisa
 
08.09.20
09:30
нет, при проведении прямые запросы не исползовали
32 LisaAlisa
 
08.09.20
09:33
Еще такая тема.
Если у документа вручную изменить дату и провести - ОК.
Но если у этого же документа попытаться программно изменить дату, то выводится ошибка:
Ошибка обновления записи

При изменении прочих реквизитов документ сохраняется успешно
33 LisaAlisa
 
08.09.20
09:33
ВыбДокумент.Записать();
{E:\...\...}: Ошибка обновления записи
34 Mikeware
 
08.09.20
09:34
(33) а что  вместо многоточий?
35 LisaAlisa
 
08.09.20
09:35
адрес обработки
36 Ёпрст
 
08.09.20
09:35
(32) каким образом ты программно дату меняешь ? В 7.7 штатно можно менять дату только у НЕ проведенного документа
37 LisaAlisa
 
08.09.20
09:36
(36)
        ВыбДокумент.СнятьПометкуУдаления();
        ВыбДокумент.Провести();
        ВыбДокумент.СделатьНеПроведенным();
        Попытка
            ВыбДокумент.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;

Здесь документ записывается успешно

Далее
        ВыбДокумент.ДатаДок = ДатаКорр;
            ВыбДокумент.Записать();
Здесь валится
38 ДенисЧ
 
08.09.20
09:38
(37) Медленно (по слогам не буду, извини). Проведённому документу менять дату нельзя. Его распровести надо. Поменять дату. Потом провести.
39 LisaAlisa
 
08.09.20
09:39
ВыбДокумент.СделатьНеПроведенным();

так вот же он распроводится
40 ДенисЧ
 
08.09.20
09:40
Не раскрыта тема, что происходит тут
"Здесь документ записывается успешно

Далее"
41 Ёпрст
 
08.09.20
09:40
(39)

а вот это нахрена ?

>>>
        ВыбДокумент.Провести();
        ВыбДокумент.СделатьНеПроведенным();
42 ДенисЧ
 
08.09.20
09:43
(41) Ну как тебе сказать... Для стимуляции роста волос на ладонях )))
43 LisaAlisa
 
08.09.20
09:45
это я уже издеваюсь над документом, проверяю)
в кач эксперимента мне нужно убедиться, что он проводится. Можно этого и не делать
44 LisaAlisa
 
08.09.20
09:45
суть от этого не меняется. Документ НЕ записывается даже непроведенный
45 Ёпрст
 
08.09.20
09:46
(44) чей-та ? Какую ошибку выдаёт при записи?
46 LisaAlisa
 
08.09.20
09:48
(45) ВыбДокумент.Записать();
{E:\...\...}: Ошибка обновления записи
47 Mikeware
 
08.09.20
09:53
(46) перед строкой 45- Сообщить(""+ВыбДок.Проведен() )
48 LisaAlisa
 
08.09.20
10:19
(47) сделала
0
ВыбДокумент.Записать();
{E:\...}: Ошибка обновления записи
49 LisaAlisa
 
08.09.20
10:19
НЕ проведен документ
50 Ёпрст
 
08.09.20
10:22
(49) В транзакции всё это лепишь ?
Покажи скриншот ошибки
51 Ёпрст
 
08.09.20
10:23
ВыбДокумент... случаем, не переменная формы у тебя ?
52 LisaAlisa
 
08.09.20
11:13
(50) https://postimg.cc/FfDPpVkP

(51) ВЫбДокумент получаю через НайтиДокумент()
ВыбДокумент.НайтиДокумент(тз.Ссылка);
53 LisaAlisa
 
08.09.20
11:13
тз - таблица собирается прямым запросом
54 Ёпрст
 
08.09.20
11:22
(53) твой НайтиДокумент(...) что возвращает хоть ? 1 ?
55 Ёпрст
 
08.09.20
11:23
А так, проверь базу на ошибки.
Что iddoc в _1sjourn соответствует шапке дока и тч дока..
56 Ёпрст
 
08.09.20
11:24
и.. датуДок гришь меняешь, на пустую ? :)
57 Ёпрст
 
08.09.20
11:25
И проверь, нет ли пустых дат в _1sjourn. это те которые в скуле ..17530101 которая
58 Ёпрст
 
08.09.20
11:26
+ проверить мд на битость и соответствует ли он словарику и базе
59 Ёпрст
 
08.09.20
11:26
В пофигураторе, полный синтаксис контроль проходит хоть ?
60 uno-group
 
08.09.20
11:37
А где ты это делаешь. Это случаем не открытый в текущий момент документ выбдок?
61 uno-group
 
08.09.20
11:40
И ранее ты его не заблокировала случайно. В УРБД не помню, вроде был флаг на изменение документа только в в центре или месте создания.
62 LisaAlisa
 
08.09.20
11:42
(60) нет, не открытый, не заблокирован никем
63 LisaAlisa
 
08.09.20
11:43
(54) 1
(56) нет, проверяла в отладчике
64 LisaAlisa
 
08.09.20
11:44
(56) ДатуДок меняю на значение реквизита этого же документа, реквизит с типом Дата, заполнен
65 uno-group
 
08.09.20
11:49
(62) Сообщить(ВыбДокумент.Блокировка()) Перед записать что сообщает. Запусти эту обработку в монопольном режиме.
66 Mikeware
 
08.09.20
11:51
(61) нет такого в урбд
(0) выложи куда-нибудь свою обработку на посмотреть
67 uno-group
 
08.09.20
11:52
И что в процедуре ПриЗаписи() в документе есть, может там собака зарыта?
68 Mikeware
 
08.09.20
11:54
(67) в клюшках ПриЗаписи отрабатывает только при интерактивной записи.
ну, или в перехватчике
69 Ёпрст
 
08.09.20
12:06
И еще, эти документы, хоть в журнае открываются ? Форма дока показывается ?
70 uno-group
 
08.09.20
12:16
На фотке 5 строками выше как по мне два удаленных документа с точно такими же номерами. контроль уникальность номеров отключена что ли или база глюкнула
71 LisaAlisa
 
08.09.20
12:36
(70) контроль уникальности отключен
72 LisaAlisa
 
08.09.20
12:36
(69) открываются и даже проводятся
73 LisaAlisa
 
08.09.20
12:36
(67) интерактивно документ записываться
74 HawkEye
 
08.09.20
12:36
чё тут? опять попытки угадать ошибку в не показаном коде? )))

(0) движения у не проведенного документа - очищаются, все остальное - это твоя интерпретация...
75 LisaAlisa
 
08.09.20
12:39
76 LisaAlisa
 
08.09.20
12:40
(74) я уже делала скрин, где показала, что НЕТ. Очищаем движения в итоге только напрямую в SQL
77 HawkEye
 
08.09.20
12:42
(76) "по ПКМ Движения недоступны" )))
78 LisaAlisa
 
08.09.20
12:58
(77) а в главном меню через Действия/Движения документа?
79 Mikeware
 
08.09.20
13:06
Анахрена такие телодвижения:

        ВыбДокумент.СделатьНеПроведенным();
        Попытка
            ВыбДокумент.Записать();

и
        ВыбДокумент.Удалить(0);
        ВыбДокумент.Записать();
?
80 Ёпрст
 
08.09.20
13:09
(78) оно аналогично ПКМ-Движения документа.
Если только там не своя обработка для просмотра движений регистра
И там тоже будет залочено, если документ не проведен
81 HawkEye
 
08.09.20
13:10
(78) кто же тебя знает, на каком ты документе споцизионирована в этот момент...

в клюшках все до ужаса просто...

есть ОбработкаПроведения, есть ОбработкаУдаленияПроведения пока нет текстов этих процедур, весь разговор - безсмысленен...
82 LisaAlisa
 
08.09.20
13:16
(79) так я разными способами пыталась предварительно очистить движения. Это уже изврат, согласна, но это эксперименты. Что с ними, что без них не рабоатет
83 Ёпрст
 
08.09.20
13:17
на вот, тест на вшивость, а то тебе веры нет


    Процедура Сформировать()
        Запрос = СоздатьОбъект("ODBCRecordset");
        ТекстЗапроса = "
        |select *  
        |from $Регистр.Отгрузка (nolock)
        |where iddoc in (select Жур.iddoc from _1sjourn  Жур where Жур.closed&1 <> 1)
        |";
        тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
        тз.ВыбратьСтроку();
    КонецПроцедуры



В ТЗ, есть че ?
84 Mikeware
 
08.09.20
13:54
(83) не было  бы - в цикл бы не зашло
85 Ёпрст
 
08.09.20
14:29
(84) ... ээ..в какой цикл ? В ёё коде ?
86 Ёпрст
 
08.09.20
14:29
пусть картинку покажет сперва :)
87 Mikeware
 
08.09.20
14:40
(85) ага
88 Ёпрст
 
08.09.20
14:42
(87) ну..она нигде не написала что туда заходит и сообщает что есть движуха :)
89 Mikeware
 
08.09.20
14:45
(88)     тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
    
    ВыбДокумент = СоздатьОбъект("Документ");
    тз.ВыбратьСтроки();
    Пока тз.ПолучитьСтроку() = 1 Цикл
        ВыбДокумент.НайтиДокумент(тз.Ссылка);
        
        ВыбДокумент.СнятьПометкуУдаления();
        ВыбДокумент.Провести();
        ВыбДокумент.СделатьНеПроведенным();
        
        Попытка
            ВыбДокумент.Записать();
        Исключение
90 trad
 
08.09.20
14:48
(75) к сабжу не имеет отношения, но тут
Рег.ВыбратьДвиженияДокумента(ВыбДокумент);
надо так
Рег.ВыбратьДвиженияДокумента(ВыбДокумент.ТекущийДокумент());
ну или
Рег.ВыбратьДвиженияДокумента(тз.Ссылка);
91 LisaAlisa
 
08.09.20
14:51
Пока не могу предоставить пример, потому что вчера вычистили все такие движения:
(22) Короче, или через QA, или обработкой очисти записи во всех Ra*, там, где closed у документа = 0
новых косячных еще не сгенерировала, т.к. после переноса точки актуальности на более позднюю дату, косяков с движениями не стало
92 Злопчинский
 
08.09.20
15:01
трэш и угар какой-то в обработке.
еще и прямой запрос прилепили непонятно зачем, чорным можно обойтись.
.
ну и для начала - ввиду того что мудрячат что-то с прямыми запрсоами - проверить есть ли у непроведенных доков движения. почитстить их для непроведенных. а потом делать все по порядку с ДатаКорр и ДатаДок.
.
главное - не митуситься...
93 trad
 
08.09.20
15:06
(92) зачем писать чорный, если всегда можно прямой - это же проще
94 Злопчинский
 
08.09.20
15:10
(93) ну, мы уже видим что получилось при "проще".. видимо такими "проще" и покурочили базу вусмерть...
95 trad
 
08.09.20
15:12
(94) нет, не это причина проблемы
96 trad
 
08.09.20
15:13
(95) да, даже если бы и прямой запрос был причиной, то это повод разобраться, а не отказываться от прямых (из соображений кабы чего не вышло)
97 Mikeware
 
08.09.20
15:21
(94) ну, во-первых, сдуру можно и шарик от подшипника разбить...
во-вторых, если используешь нормальные запросы - пишешь сразу на них, не задумываясь об извращенных черных. И плевать, что это не освящено БГНом.
в третьих, прямой запрос к проблемам никаким боком.
98 Злопчинский
 
08.09.20
15:24
ВыбДокумент.Записать();
{E:\...\...}: Ошибка обновления записи
- вот мне мутно это все. ни разу такого не встречал...
99 HawkEye
 
08.09.20
15:26
(90) это 7.7, какая .Ссылка )))
100 Mikeware
 
08.09.20
15:27
(99) ну называет она ид дока ссылкой.
я вон и в клюшках писал "регистратор" и "ссылка"
101 trad
 
08.09.20
15:27
(99) а что в 7.7 колонке ТЗ запрещено так называться?
102 Mikeware
 
08.09.20
15:29
(101) греховно так зваться в клюшках православных...
103 trad
 
08.09.20
15:29
(100) ну я тоже такие поля Ссылка называю, потому как это и есть ссылка
Даже унутре ее этот тип данных имеет в названии Ref
104 HawkEye
 
08.09.20
15:35
(101) не запрещено, но не кошерно ))
105 trad
 
08.09.20
15:38
(102) (104) почему?
106 Mikeware
 
08.09.20
15:39
(105) /sarcasm
107 trad
 
08.09.20
15:49
(103) Мое утверждение по поводу Ref будем считать ложным, память в этом вопросе подверглась эррозии.
Попробовал вспомнить - фиг там
108 Ёпрст
 
08.09.20
15:58
(91) та вперёд не надо толкать. Так вы работаете всегда задним числом, и если используете штатное проведение. это очень замедляет работу, ибо везде есть рассчет итогов на дату дока, в отличие от проведения в потоке, т.е тогда, когда док та сам толкает вперёд
109 Злопчинский
 
08.09.20
16:56
Короче. кто косячит - у того и косячит.
110 LisaAlisa
 
10.09.20
14:56
https://postimg.cc/sGS6yfCQ

вот результат выполнения кода
    Процедура Сформировать()
        рс = СоздатьОбъект("ODBCRecordset");
        ТекстЗапроса = "
        |select *  
        |from $Регистр.Отгрузка (nolock)
        |where iddoc in (select Жур.iddoc from _1sjourn  Жур where Жур.closed&1 <> 1 and (Cast(Left(Жур.DATE_TIME_IDDOC, 8) AS datetime) >= :Дата1)
        |    AND (Cast(Left(Жур.DATE_TIME_IDDOC, 8) AS datetime) <= :Дата2))
        |";
        
    рс.УстановитьТекстовыйПараметр("Дата1", Дата1);
    рс.УстановитьТекстовыйПараметр("Дата2", Дата2);

        тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
        тз.ВыбратьСтроку();
    КонецПроцедуры
111 Mikeware
 
10.09.20
14:59
(110) документы проведены не по упручету?
112 LisaAlisa
 
10.09.20
15:00
сейчас документы вообще распроведены
113 Mikeware
 
10.09.20
15:02
select Жур.iddoc,
Жур.closed
from _1sjourn  Жур
where Жур.closed&1 <> 1
and Жур.DATE_TIME_IDDOC>= :Дата1
AND Жур.DATE_TIME_IDDOC<= :Дата2

что даст?
114 Mikeware
 
10.09.20
15:10
(112) вам вообще вашу проблему решить надо, или как?
115 LisaAlisa
 
10.09.20
15:12
(113) выдает 4 строки (4 документа)
116 Mikeware
 
10.09.20
15:14
(115) я ж справшивал не "сколько", а что?
что в поле проведения? что в поле "количество движений", стоит ли флаг наличия движений по вашему регистру "Отгрузка"?
117 LisaAlisa
 
10.09.20
15:14
118 Mikeware
 
10.09.20
15:15
(117) докуметы проведены по бухучету
119 Mikeware
 
10.09.20
15:16
ACTCNT?
RF*** (соответсвующий регистру)?
120 LisaAlisa
 
10.09.20
15:18
(119) там для всех строк стоит 0
121 Mikeware
 
10.09.20
15:22
(120) чем с проведения снимают? и почему стоят проведенными по бухучету?
122 Ёпрст
 
10.09.20
15:23
closed=4 - документ имеет операцию, если память не изменяет
123 Ёпрст
 
10.09.20
15:24
Кто -то видать балуется прямыми запросами в части апдейта _1sjourn
124 Mikeware
 
10.09.20
15:25
(122) 1-опер, 2-расчет,4-бух, 8-периодика, операция - или 16, или 32.
125 LisaAlisa
 
10.09.20
15:25
(121) просто пытаются провести документ. Программа вываливается с ошибкой, что не может сделать запись в регистр с неуникальным ключом. При повторном запуске документы в журнале выглядят как непроведенные, а по факту есть движения в регистре
126 Ёпрст
 
10.09.20
15:27
(124)5 - док имеет проводки
127 Ёпрст
 
10.09.20
15:28
(125) т.е аварийное завершение 1с при этом ?
128 Ёпрст
 
10.09.20
15:29
проверьте свои регистры этим:

https://www.1cpp.ru/forum/YaBB.pl?num=1228926967
129 Mikeware
 
10.09.20
15:29
(126) 5 - это 4+1.
130 trad
 
10.09.20
15:29
(124) это про аппкод, а не про крозет
131 trad
 
10.09.20
15:30
(130) *клозед
132 Mikeware
 
10.09.20
15:30
(123) или пишут сразу в регистр, не устанавливая флаг. в этом случае при проведении она пытается инсертить, ну и подает
133 Mikeware
 
10.09.20
15:30
(131) так они вроде одинаковы
134 trad
 
10.09.20
15:31
(125) То что сейчас вываливается, это уже следствие нарушения согласованности данных.
С этим бороться не надо
Нужно устранить рассогласование
135 trad
 
10.09.20
15:33
(133) не уверен
136 LisaAlisa
 
10.09.20
15:36
137 trad
 
10.09.20
15:39
(136) либо closed установить, либо движения удалить. Все, ничего больше делать не надо
В начале вроде писали об этом
138 Mikeware
 
10.09.20
15:40
(135) ну по крайней сере первые три. хотя могу и ошибаться - а под рукой нет клюшек чтоб проверить
139 Ёпрст
 
10.09.20
15:40
(136) ясно, ну.. инструмент для обнаружения в (128)
+ желательно проверить,
1. что мд соответствует словарю и и таблицам в скуле
2. что мд не битый
140 LisaAlisa
 
10.09.20
15:40
(137) так и делаем. Очищаем движения в SQL

но как только документ создается датой = дате актуальности итогов, возникают вот такие ошибки снова
141 trad
 
10.09.20
15:40
(137) то и другое можно сделать, имхо, только напрямую
142 trad
 
10.09.20
15:41
(140) ааа, вот этот артефакт я упустил
143 Ёпрст
 
10.09.20
15:42
(140) да ё..
скачай обработку еще для пересчета итогов прямым запросом, можешь и грохнуть все записи в rg регистра перед этим, тупо truncate table rg****
144 Ёпрст
 
10.09.20
15:43
их чтук 5 разных модификаций валяется
145 Franchiser
 
гуру
10.09.20
18:16
Может быть кроме удаления движения нужно еще что-то делать? Например, в таблице Журнала менять флаг RF?
146 Ёпрст
 
10.09.20
18:23
(145) он влияет только на показ галок в меню просмотра движений
147 LisaAlisa
 
10.09.20
18:27
Ошибка появилась после того, как в базе стали создавать документы обработкой.
Сделали копию базы, грузила документы этой же обработкой, но без использования функции, создающей гуиды. Может причина быть в этом?
Функция глСоздатьИдентификатор() Экспорт
    
    Если ЗагрузитьВнешнююКомпоненту("V7Plus.dll") <> 1 Тогда
        Сообщить("Ошибка загрузки компоненты V7+");
        Возврат "";
    КонецЕсли;                                        
    
    НТТРСистИнформ = СоздатьОбъект("AddIn.V7SysInfo");
    
    Возврат СокрЛП(НТТРСистИнформ.СоздатьGUID());
    
КонецФункции   // глСоздатьИдентификатор()
148 LisaAlisa
 
10.09.20
18:27
(147) в копии базы не появляется ошибка с движениями.
149 ДенисЧ
 
10.09.20
18:29
(148) А теперь в копии используй эту функцию. Что будет?
150 Ёпрст
 
10.09.20
19:28
(149) ну выложи это изделие на поглядеть.
Зы и куда этот гуид пихаете хоть?
151 LisaAlisa
 
10.09.20
20:30
(150) пишем в текстовый реквизит
обработку выложила https://yadi.sk/d/WQPwzSmYvgpJbw
152 Злопчинский
 
10.09.20
23:08
поток мутного сознания...
153 Злопчинский
 
10.09.20
23:09
1. ПЕРЕСТАТЬ МИТУСИТЬСЯ.
2. ДЕЛАТЬ ВСЕ МЕДЛЕННО И ВДУМЧИВО. ШАГ ЗА ШАГОМ.
всё!!!!!
154 Cthulhu
 
11.09.20
03:07
1) 1с 77 не поддерживает вложенных транзакций
2) выполнена отмена проведения в транзакции - при этом возникла ошибка.
155 Mikeware
 
11.09.20
08:32
(151) криминала не вижу.
Ну, если есть подозрение на генерацию гуида V7+ом - попробуйте генерить его 1с++
156 tgu82
 
11.09.20
08:53
(155) Сколько лет работаю с 1С - и ни разу не пользовался созданием гуидов. Хотя через 36-ричную что-то было но не гуид. Для чего собственно он нужен если за столько лет как-то не пригодилось
157 trad
 
11.09.20
09:01
(151) в ветке условия флСоздатьИСО = 1 иначе
при передаче в ЗаписатьОбъект(Флаг,ДокументСоздаваемый);
в ДокументСоздаваемый нет нового документа
наверно туда хотели передать Объект
158 LisaAlisa
 
11.09.20
09:13
(157) Объект - это документ, на основании которого заполняется ДокументСоздаваемый
159 trad
 
11.09.20
09:28
(158) по коду явно видно, что это не так
я говорю про ветку флСоздатьИСО = 1 иначе
160 trad
 
11.09.20
09:31
(147) Если проблема не повторяется в копии, то, возможно, дело в состоянии базы (или сервера), но маловероятно, что в создании гуида.
161 ДенисЧ
 
11.09.20
09:33
(156) А я пользовался. Когда рисовал свою РИБ ))) Тогда 1с++ ещё не было
162 Ёпрст
 
11.09.20
09:48
(159) дас ис так.. по-коду там Объект должен быть

И да, в коде ничего такого нет, что ломало бы базу в призаписи.
И создание гуида тут не при чем
163 Ёпрст
 
11.09.20
09:50
(158)

в пофигураторе, если выполнить полный синтаксис контроль, проходит хоть ?
164 tgu82
 
11.09.20
09:50
(161) А я пользовался 26-ричным идентификатором для примерно тех же целей. У справочника он кажется длиннее а у документа короче по длине
165 LisaAlisa
 
11.09.20
10:00
(163) Синтаксических ошибок не обнаружено!
166 Ёпрст
 
11.09.20
10:05
(165) ну тогда см. (128)

+ на копии (надеюсь, е средствами скуля делаешь ?) пересоздай словарик, и сравни словарик с рабочей базой. Для этого в пофигураторе сделай конфигурация - загрузить измененную конфигурацию и укажи на мд из каталога базы. После сохранения сравни словарики
167 Mikeware
 
11.09.20
10:05
(164) 26-ричный идентификатор?
168 tgu82
 
11.09.20
10:07
(167) 36-ричный
169 LisaAlisa
 
11.09.20
10:13
(166) копия и рабочая уже отличаются тем, что в рабочей введен новый реквизит типа Дата в РасходнуюНакладную. При отмене проведения это РН не удаляются движения в рабочей. В копии такой ошибки нет
170 Ёпрст
 
11.09.20
10:24
(169) да ё.. копия делается за 5 минут
171 Ёпрст
 
11.09.20
10:24
средствами скуля
172 LisaAlisa
 
11.09.20
10:26
(171) вот эта процедура выполняется часов 12:
Для этого в пофигураторе сделай конфигурация - загрузить измененную конфигурацию и укажи на мд из каталога базы. После сохранения сравни словарики
173 LisaAlisa
 
11.09.20
10:26
конкретно - сохранение, т.к. запустится реструктуризация
174 Mikeware
 
11.09.20
10:34
(172) копию сделай. копию!
175 LisaAlisa
 
11.09.20
10:46
(128) Проверка: rf = 0 и есть 1 или > движений ra
Ошибки 3 = Для регистра = Отгрузка найдено ошибок = 3
Сформировать 3 Отгрузка  cast( rf1159 as int )
Ном строки = 1 iddoc = '1GRZU8   ' rf =  cast( rf1159 as int ) док = Отгрузка товаров, продукции 12163467 (30.09.20)
Ном строки = 2 iddoc = '1GRZVK   ' rf =  cast( rf1159 as int ) док = Отгрузка товаров, продукции ШАТУ-00046 (30.09.20)
Ном строки = 3 iddoc = '1GRZVM   ' rf =  cast( rf1159 as int ) док = Отгрузка товаров, продукции ШАТУ-00050 (30.09.20)
176 Ёпрст
 
11.09.20
11:06
(172) не вопрос. Разверни пустую базу из мд, создай словарик и сравни
177 Cthulhu
 
11.09.20
11:37
(161): накуа??? без 1с++ вполне можно было штатно получать ID объектов данных (и получать объекты данных по их ID).
(164),(167): 24 вообще-то (с не свернутыми в 36-ричную строку id вида и id объекта): Тип (1 символ) + id Вида (10 цифр) + id Объекта (10 цифр) + КодИБ (3 символа).
я вообще удивлялся - зачем в мод было огород с ключами городить - при том, что "все уже украли до нас"...
и - да, свернутые в 36-ричные строки id вида и id объекта - прямо прописаны в ключевые поля таблиц базы данных...
178 ДенисЧ
 
11.09.20
11:38
(177) Чтобы понять ответ на ТКВ -- это было в 2004м году. Тогда и интернета у меня практически не было (по модему, дома и на 19600). И информации такой в нём (интернете) тоже практически не было.
179 Franchiser
 
гуру
11.09.20
18:25
В скульной базе не работает изменение времени документа у непроведенных документов через контекстное меню, в то время как в файловой работает. Почему такое может быть?
180 Franchiser
 
гуру
11.09.20
23:26
(176) выявил несоотвествие поля Date_time_iddoc в _1SJourn полям таблиц: _System, _1SOper (но так вроде и раньше было), _1SCRDOC.
Что еще может мешать изменению времени?
181 Ёпрст
 
12.09.20
00:15
(180) не надо массово записывать доки со временем 23:59:59, в журнале при этом будет одна позиция дока а в операциях и проводках другая
182 Ёпрст
 
12.09.20
00:30
(179) хз, не встречал такого, вроде норм время ставится и там и там у не проведенного дока
183 Cthulhu
 
12.09.20
02:29
(179): кстати - возможно именно из-за наличия движений, оставшихся при кривой отмене проведения. там вполне возможно в движок зашита молчаливая проверка (чтобы в результате не получилось гораздо большего искажения данных)...
184 Franchiser
 
гуру
12.09.20
09:52
(183) движения в регистрах ra адалили, в system попал также документ с кривыми движениями, там тоже поправил, 1srdoc  откорректировал child_date_time. Где то ещё косяки есть а таблицах, либо в других периодах.
185 Franchiser
 
гуру
12.09.20
11:12
Нашел такую тему: "Данная обработка 1С 7.7 помогает, когда кто-то установил точку актуальности на конец текущего дня (провел документ концом дня) и документы перестали проводиться. Теперь, чтобы нормализовать ситуацию, время документов нужно изменить и документы перепровести, затем перенести точку актуальности на последний проведенный документ."
http://catalog.mista.ru/public/1132089/
Может у меня проблема из этой области?
186 Ёпрст
 
12.09.20
16:33
(184) ну дык (128) проверяй...
187 Franchiser
 
гуру
12.09.20
16:40
(186) пробовал уже. Пересобрал мдшник через gcomp, подсунул его в тестовой базе.
Вообщем сейчас такая проблема : при изменении времени во всех таблицах время меняется время меняется кроме 1sjourn. Начал смотреть заполненность полей: у новых документов какое то новое заполнение поле dnprefix. Почему он могло измениться?
188 Franchiser
 
гуру
12.09.20
16:41
Раньше поле dnprefix было 1302020, стало 1302021.
Обработка из 128 очень долго работает и там нет фильтра на период...
189 Ёпрст
 
12.09.20
16:53
(188) :)

поправить её как 2 пальца жешь, под любой период
190 Franchiser
 
гуру
12.09.20
16:53
Понял : в dnprefx год стоит
191 Ёпрст
 
12.09.20
16:54
(188)
DNPREFIX    Префикс номера документа. Тип - Строка(18). Для документов, у которых код числовой, это поле равно десятичному ID вида документа. Если нумерация в пределах периода - то также хранится и период в виде ГГГГММДД (например 2006 для нумерации в пределах года).

http://www.script-coding.com/v77tables.html#1.2.4.
192 Franchiser
 
гуру
12.09.20
16:55
(189) я правлю по отдельным документам date_time затем пробую в 1с поменять время и снова время в 1sjourn остаётся без изменений, а в 1soper , _1scrdoc время меняется.
193 Franchiser
 
гуру
12.09.20
17:30
В профайлере нет также установки нового date_time_iddoс, хотя данные в журнале меняются:
exec sp_executesql N'Update _1SJOURN set  IDJOURNAL=@P1, IDDOCDEF=@P2, APPCODE=@P3, DNPREFIX=@P4, DOCNO=@P5, CLOSED=@P6, ISMARK=@P7, ACTCNT=@P8, VERSTAMP=@P9, RF1159=@P10, RF1287=@P11, RF1296=@P12, SP697=@P13, SP696=@P14, SP425=@P15, SP1123=@P16 where  IDDOC=@P17 and DATE_TIME_IDDOC=@P18 and SP652=@P19',N'@P1 int,@P2 int,@P3 smallint,@P4 varchar(18),@P5 varchar(20),@P6 tinyint,@P7 bit,@P8 int,@P9 int,@P10 bit,@P11 bit,@P12 bit,@P13 varchar(9),@P14 varchar(9),@P15 varchar(45),@P16 numeric(1,0),@P17 varchar(9),@P18 varchar(23),@P19 varchar(13)',174,130,21,'       1302021    ','00000000000000000004',4,0,0,3,0,0,0,'     K   ','    QI   ','                                             ',0,'1FOVYH   ','202112313M7I001FOVYH   ','   0     0   '
194 Franchiser
 
гуру
12.09.20
17:47
Вот так выглядит изменение времени в восстановленной копии:
exec sp_executesql N'Update _1SJOURN set  IDJOURNAL=@P1, IDDOC=@P2, IDDOCDEF=@P3, APPCODE=@P4, DATE_TIME_IDDOC=@P5, DNPREFIX=@P6, DOCNO=@P7, CLOSED=@P8, ISMARK=@P9, ACTCNT=@P10, VERSTAMP=@P11, RF1159=@P12, RF1287=@P13, RF1296=@P14, SP697=@P15, SP696=@P16, SP652=@P17, SP425=@P18, SP1123=@P19 where  ROW_ID=@P20',N'@P1 int,@P2 varchar(9),@P3 int,@P4 smallint,@P5 varchar(23),@P6 varchar(18),@P7 varchar(20),@P8 tinyint,@P9 bit,@P10 int,@P11 int,@P12 bit,@P13 bit,@P14 bit,@P15 varchar(9),@P16 varchar(9),@P17 varchar(13),@P18 varchar(45),@P19 numeric(1,0),@P20 int',174,'1GRZU7   ',130,21,'2020090776AWSW1GRZU7   ','       1302020    ','УТ-157              ',4,0,0,5,0,0,0,'  KC6M   ','   194   ','  3M1BF2WJ   ','                                             ',0,64228314
195 Franchiser
 
гуру
12.09.20
18:12
Отличие как видно в том что не устанавливается, IDDOC, Date_Time_IDDOC. И разная секция where: раньше при update было условие на rowid
196 Ёпрст
 
12.09.20
18:58
(193) Вроде время нормальное, 06:04:30
197 Ёпрст
 
12.09.20
18:59
Т.е ты для непроведенного дока выбираешь в меню установить новое время и оно не алё ?
198 Ёпрст
 
12.09.20
18:59
и "в восстановленной копии".. старая копия этой же базы ?
199 Franchiser
 
гуру
12.09.20
19:09
В восстановленной 3х дневной копии время устанавливается, а в текущей базе не устанавливается.
Скрипты из профайлера привел
200 Ёпрст
 
12.09.20
19:23
(199) Для всех видов дока или конкретного ? покажи select * from _1sjourn where iddoc = ...для этого дока
201 Ёпрст
 
12.09.20
19:34
И.. если штатненько, через
Док = СоздатьОбъект..
Док.НайтиДокумент(выбДок)
Док.АвтоВремяОтключить()
Док.УстановитьВремя ..

устанавливается ?
202 Franchiser
 
гуру
12.09.20
19:40
(200) я могу скрин привести из разных таблиц, трэйс с утра делал потом у там уже может быть другое время
203 Ёпрст
 
12.09.20
19:40
И ты документ операция правишь ? судя по апкоде 21
204 Franchiser
 
гуру
12.09.20
19:40
(200) в базе только 1 вид документа
205 Franchiser
 
гуру
12.09.20
19:41
(23) документ отгрузка. Это самописка.
206 Ёпрст
 
12.09.20
19:47
(205) документ с какими галками ? бухня+упр ?
207 Ёпрст
 
12.09.20
19:48
в сервис-параметры ничего не менял ? там тоже есть галки для времени..для бух учета точно и для опер учета для новых доков
208 Franchiser
 
гуру
12.09.20
19:52
Не параметры одинаковые в обеих базах
209 Franchiser
 
гуру
12.09.20
19:54
Документ с галочками бух+упр
210 Franchiser
 
гуру
12.09.20
19:58
Штатно время тоже не устанавливается
211 Franchiser
 
гуру
12.09.20
20:00
В конце нужно записать()?
Если с Записать, то ошибка "ошибка обновления записи".
212 Franchiser
 
гуру
12.09.20
20:07
В резервной копии время меняется, в текущей базе "ошибка обновления записи"
213 Ёпрст
 
12.09.20
20:37
(211) для любых доков ?
214 Ёпрст
 
12.09.20
20:37
в _1soper поменял время ?
215 Ёпрст
 
12.09.20
20:37
в свойствах дока стоит что.. создавать операуию вместе с доком ?
216 Franchiser
 
гуру
12.09.20
20:39
(214) я вообще беру очень старые документы (разные) и на них проверяю
217 Franchiser
 
гуру
12.09.20
20:41
(215) стоит создавать операцию = всегда
218 Ёпрст
 
12.09.20
20:43
(216)
вот еще, на ночь чтиво
https://www.1cpp.ru/forum/YaBB.pl?num=1281425103
219 Ёпрст
 
12.09.20
20:44
И это проапдейть табличку _1soper на предмент не совпадения date_time с 1s_journ
220 Ёпрст
 
12.09.20
20:45
Короче, нужно во всех табличках всё засинхрить с табличкой журнала в части date_time_iddoc, для начала
221 Franchiser
 
гуру
12.09.20
20:46
(220) там полмиллиона рассинхрон с 1Soper
222 Ёпрст
 
12.09.20
20:48
223 Ёпрст
 
12.09.20
20:48
(221) ну дык.. исправляй :)
224 Ёпрст
 
12.09.20
20:49
На копии, сперва..
225 Ёпрст
 
12.09.20
20:49
тренируйся
226 Ёпрст
 
12.09.20
20:51
Основной [:]||||||[:]
это кучка документов с временем 23:59:59.. где позиция дока в журнале и операций будет отличаться для каждого нового дока "в конец дня"..в операциях она "продолжается", а в журнале нет..
227 Ёпрст
 
12.09.20
20:52
вот и рассинхрон
228 Franchiser
 
гуру
12.09.20
20:53
Мне казалось что если в резервной копии такие же расхождения с 1soper то значит не в этом дело. Ещё кажется я видел, что date time отличается не только по времени но и по дате.
229 Ёпрст
 
12.09.20
20:55
(228) по дате.. был прикол, что 1с-ина казала, типа время 24 часа 01 минута..или че-то в этом роде
230 Ёпрст
 
12.09.20
20:55
хороче, какой-то явный мусор
231 Ёпрст
 
12.09.20
20:56
апдейти таблички, не забывая про _1scrdoc
232 Ёпрст
 
12.09.20
20:56
и про 1sentry
233 Ёпрст
 
12.09.20
20:57
ф табличках регистров такого нет, вся шняга, только в бухне.
234 Ёпрст
 
12.09.20
21:00
+ заодно проверить, нет ли пустых дат в журнале и в 1сопер, те которые 01.01.1753
235 Franchiser
 
гуру
12.09.20
21:14
1sentry пустая
236 Ёпрст
 
12.09.20
21:24
(235) как это ? проводок нету что ле ?
237 Ёпрст
 
12.09.20
21:25
если проводок нет, то отключи вообще бух учет у документа и прибей план счетов, если есть
238 Franchiser
 
гуру
12.09.20
22:24
(237) если убрать бу то что будет с actcnt в существующих записях журнала?
239 Ёпрст
 
12.09.20
22:40
(238) да на него вообще плевать с высокой колокольни :)
240 Ёпрст
 
12.09.20
22:41
и.. он же не учитывает движения по бу.
241 Ёпрст
 
12.09.20
22:41
так что, усё хорошо будет
242 Ёпрст
 
12.09.20
22:42
короче, это поле никак не изменится
243 Ёпрст
 
12.09.20
22:42
а вот апкоде можешь сам проапдейтить, и поставить 1 туда.
244 Franchiser
 
гуру
12.09.20
22:43
(220) исправил во всех таблицах date_time_iddoc. Проблема осталась.
245 Franchiser
 
гуру
12.09.20
22:49
(234) как искать пустые даты в журнале и 1soper? Дата же содержится в строке datetimeiddoc
246 Ёпрст
 
12.09.20
22:56
where date_time_iddoc like '17530101%'
247 Ёпрст
 
12.09.20
22:56
И грохни бух учет, если не используешь, не будет таблички 1сопер (план счетов еще удали)
248 Ёпрст
 
12.09.20
22:57
И..база большая ? выгрузка есть на посмотреть ?
249 Ёпрст
 
12.09.20
23:01
И..точная ошибка какая, на счет обновления записи ?
250 Ёпрст
 
12.09.20
23:02
Обновление какое было перед этим ?
251 Ёпрст
 
12.09.20
23:02
что в архиве работает ?
252 Franchiser
 
гуру
12.09.20
23:09
(248) база очень большая, выгрузку не могу дать
253 Franchiser
 
гуру
12.09.20
23:09
В архиве работает
254 Franchiser
 
гуру
12.09.20
23:12
(249) Док.Записать();
{E:\тЕСТ ВРЕМЯ.ERT(9)}: Ошибка обновления записи
255 Franchiser
 
гуру
12.09.20
23:12
(250) в обновлении добавили реквизит типа дата в таблицу документов
256 Franchiser
 
гуру
12.09.20
23:14
То что читал по поводу этой ошибки, она обычно возникала у других при записи констант, но у меня константы нигде не пишутся.
257 Franchiser
 
гуру
12.09.20
23:21
Проверил : пустых дат нет
258 Ёпрст
 
12.09.20
23:24
(255) общий реквизит дока что ле ?
259 Ёпрст
 
12.09.20
23:25
И поди еще есть строковый реквизит неогр длины в общих реквизитах ?
260 Franchiser
 
гуру
12.09.20
23:25
(258) нет, не общий. Реквизит в таблицу DH
261 Franchiser
 
гуру
12.09.20
23:27
Нет общих реквизитов неогр длины
262 Franchiser
 
гуру
12.09.20
23:29
Ну и начали грузить документы на 30.09, при этом дату актуальности опер учёта тоже сместили на 30.09
263 Ёпрст
 
12.09.20
23:29
(260) и реструктуризация при этом нормально прошла ? Или добавлял поле сам руками и подсовывал словарик и мд ?
264 Ёпрст
 
12.09.20
23:30
И в доке, в шапке, есть строковые реквизиты неогр длины ?
265 Franchiser
 
гуру
12.09.20
23:30
Реструктуризация прошла штатно примерно за 8-10ч
266 Franchiser
 
гуру
12.09.20
23:33
(264) нет в шапке неогр длины
267 Ёпрст
 
12.09.20
23:35
(265) ой ё...
268 Ёпрст
 
12.09.20
23:37
проверь еще вот что :

select iddoc from _1sjourn
group by iddoc
having count(*)>1
269 Ёпрст
 
12.09.20
23:38
возможно, есть доки с разными row_id
270 Ёпрст
 
12.09.20
23:38
но с одним iddoc
271 Franchiser
 
гуру
12.09.20
23:45
(268) нет, пустой запрос
272 Franchiser
 
гуру
12.09.20
23:49
_1soper тоже проверил на дубли
273 Franchiser
 
гуру
12.09.20
23:52
Может быть кто то залезал в исходники? В каком случае по установки времени документа выполняется запрос с условием на на row_id, а на iddoc + date_time_iddoc + документ основание?
274 Franchiser
 
гуру
12.09.20
23:54
У нас есть как раз такой собственный некластерный индекс в таблице _1sjourn. Может в этом проблема?
275 Ёпрст
 
12.09.20
23:55
(272) а в 1crdoc?
276 Ёпрст
 
12.09.20
23:56
(274) ну отключи его.. Какой состав этого индекса ?
277 Franchiser
 
гуру
12.09.20
23:59
(276)iddoc + date_time_iddoc + документ основание
278 Franchiser
 
гуру
12.09.20
23:59
(275) там как проверять? Там графы отбора же могут быть разные и ещё подчинённые документы?
279 Ёпрст
 
13.09.20
00:10
(278) короче, надо сперва локализовать проблему, подыми копию скульной базы, то что есть.
В ней проапдейть 1sjourn , set appcode=1 + truncate table _1soper, это для начала, если не помогает, то truncate table _1scrdoc
280 Ёпрст
 
13.09.20
00:11
+ можешь на пустышке создать новый мд и словарик, в котором выкинишь бух учет и удалишь план счетов.
Потом эти мд и ддс подсунешь в копию, можешь и таблички с операциями там прибить потом. И проверяешь
281 Ёпрст
 
13.09.20
00:12
если работает, в рабочию кидаешь мд и словарик и апдейтишь журнальчик
282 Ёпрст
 
13.09.20
00:12
только _1scrdoc придётся пересоздать
283 Ёпрст
 
13.09.20
00:13
да, еще проверь, нет ли в 1sconst периодики, установленной документами (мало ли осталась от непроведенных доков)
284 Franchiser
 
гуру
13.09.20
00:16
1sconst проверял.
А как пересоздать _1scrdoc?
285 Ёпрст
 
13.09.20
00:37
(284) штатно, тии с галкой одной, пересчет служ данных (вроде, точно не помню, помню, одну втыкать надо)
Или запрос поискать, где-то валялся
286 Franchiser
 
гуру
13.09.20
09:41
(285) после удаления индекса в журнале проблема пропала
287 Ёпрст
 
13.09.20
09:51
(286) теперь заново его создай
288 Ёпрст
 
13.09.20
10:14
+ внеси в словарик, по-аналогии с системными индексами
289 Franchiser
 
гуру
13.09.20
12:22
Создал заново индекс, время пока изменяется.
290 Franchiser
 
гуру
13.09.20
12:38
Тему можно считать закрытой, всем спасибо!
291 Ёпрст
 
13.09.20
13:32
но всё же, прибей следы от бухни, если  не используешь
292 Franchiser
 
гуру
14.09.20
18:46
(291)  похоже имеет значение порядок индексов который указан в файле DDS.
Скрипт, который добавляется индексы через openconf после внесения изменений добавляет индексы перед блоком индексов в dds. Так вот не работает именно когда индекс идет вначале.
293 Franchiser
 
гуру
14.09.20
18:53
Скрипт:

'------------------------------------------------------------------
'Добавление строк в dd(dds)
Sub ProcessDD()

    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".bak", True
    
        'Обработка расширенного словаря - ddx
        'Строки на символ "X" состоят из двух частей:
        '  до символа "%" - имя сушествующей в dd таблицы(Т) к которой необходимо применить доп. описание
        '  после символа "%" - строка дополнительного описание которая вставляется после описания полей Т
        'Все другие строки добавляются в конец dd
        
        'Построение ассоциативного массива, где: Ключ - имя таблицы, Значение - строки доп. описания
        Set XDict = CreateObject("Scripting.Dictionary")
        Set TS = FSO.OpenTextFile(IBDir & "1cv7.ddx", 1)
        AppendStr = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            Ch = Left(Str, 1)
            If Ch = "X" Then
                Arr = Split(Mid(Str,3), "%", 2)
                TableName = RTrim(Arr(0))
                If XDict.Exists(TableName) Then
                    XDict.Item(TableName) = XDict.Item(TableName) & vbNewLine & Arr(1)
                Else
                    XDict.Add TableName, Arr(1)
                End If
            Else
                AppendStr = AppendStr & vbNewLine & Str
            End If
        Loop
        TS.Close()
        
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".bak", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            SubStr = Left(str, 2)
            Select Case SubStr
                Case "T="
                    Arr = Split(Str, "|", 3, 0)
                    CurTable = RTrim(Mid(Arr(0),3))
                Case "F="
                    Mode = "F"
                Case Else
                    If Mode = "F" Then
                        Mode = ""
                        If XDict.Exists(CurTable) Then
                            TS_Out.WriteLine(XDict.Item(CurTable)) 'Запись строк доп. описания
                        End If
                    End If
            End Select
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        
        If AppendStr > "" Then
            TS_Out.Write("### ddExtension ###")
            TS_Out.Write(AppendStr) 'Добавление строк в конец
        End If
        TS_Out.Close()
        
        MsgBox "Внесены изменения в 1cv7." & ext
        
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
'Удаление строк описания доп.таблиц из dd(dds) перед реорганизацией
'чтобы Конфигуратор не удалил таблицы из базы данных
Sub UnProcessDD()
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".tmp", True
    
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".tmp", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            If Str = "### ddExtension ###" Then
                MsgBox "del ddExtension"
                Exit Do
            End If
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        TS_Out.Close()
        
        FSO.DeleteFile(IBDir & "1cv7." & ext & ".tmp")
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer)
    If Left(Text,49) = "При сохранении метаданных будет произведен анализ" Then
        UnProcessDD()
    ElseIf Text = "Реорганизация информации закончена!" Then
        ProcessDD()
    End If
End Sub
294 Ёпрст
 
14.09.20
19:28
(292) в дбф так и есть, в скуле ,возможно, что свой индекс в ддс должен быть после кластерного
Типа кластерный первый в словарике
295 Ёпрст
 
14.09.20
19:33
Хотя нет.. Проверил на демке, пофик, в какой место свой индекс пихать, главное, блок описания индексов от нужной таблички
296 Ёпрст
 
14.09.20
19:34
Вот например, запихал.. усё работает
и время меняется и движуха пишется и никаких "неудачное обновления записи нет"
#----Indexes------
# Name                           |Descr         |Unique|Indexed fields                                              |Type      
I=MY                             |Id Doc+Type   |0     |IDDOC,IDDOCDEF                                              |0          
I=PK__1SJOURN                    |ROW_ID        |1     |ROW_ID                                                      |1          
I=IDDOC                          |Id Doc        |1     |IDDOC                                                       |0          
I=ACDATETIME                     |Date+Time+ID  |1     |DATE_TIME_IDDOC                                             |0          
I=DOCNO                          |Prefix+No     |1     |DNPREFIX,DOCNO,ROW_ID                                       |0          
I=DOCTYPE                        |Type+Date+Time|1     |IDDOCDEF,DATE_TIME_IDDOC                                    |0          
I=JOURNAL                        |Journal+Date+T|1     |IDJOURNAL,DATE_TIME_IDDOC                                   |0
297 Franchiser
 
гуру
14.09.20
19:47
Вот так у меня выглядит когда не работает:

#Доп. индекс Журналы
I=K_IX1                    |              |0     |IDDOC,DATE_TIME_IDDOC,SP652                                |0                  
#----Indexes------
# Name                           |Descr         |Unique|Indexed fields                                              |Type      
I=PK__1SJOURN                    |ROW_ID        |1     |ROW_ID                                                      |1          
I=IDDOC                          |Id Doc        |1     |IDDOC                                                       |0
298 Franchiser
 
гуру
14.09.20
19:50
SP652 - документ-основание...
299 Ёпрст
 
14.09.20
19:58
(297) ну, надо его пихать после #----Indexes------
300 Ёпрст
 
14.09.20
19:58
тогда полетит
301 Ёпрст
 
14.09.20
19:59
Или, попробуй ему еще имя задать.. MyIndex в поле descr
302 Franchiser
 
гуру
14.09.20
20:00
(300) нужно скрипт тогда переписывать, нашел где-то его на форуме.
303 Ёпрст
 
14.09.20
20:00
И это, а чего он у тебя неуникальный то ?
304 Ёпрст
 
14.09.20
20:01
поставь ему уникальность еще
305 Franchiser
 
гуру
14.09.20
20:03
(301) имя задал произвольное, не помогло
306 Franchiser
 
гуру
14.09.20
20:05
(304) указал 1 для уникальности в DDS - не помогло
307 Ёпрст
 
14.09.20
20:41
(306) проверил на демке, пофик, где указан индекс, можно сразу за полями как у тебя.
В самом скуле он хоть создан и соответствует описанию в ддс ?
308 tgu82
 
14.09.20
21:04
(0) Куда круче любых лент новостей. Столько полезного узнал для себя
309 Franchiser
 
гуру
14.09.20
23:01
(307) да в скуле он есть, я как раз теперь все сделал на рабочей базе, просто потом решил восстановить строку индекса в том месте где он был в словаре и вылез этот косяк. Переставка индекса в ддс приводит к такому результату: уже проверил на четырех базах (₽ копии и 1 рабочая).
310 Franchiser
 
гуру
14.09.20
23:02
Проверял на Sql 2008
311 Franchiser
 
гуру
14.09.20
23:05
(308) ага все-то 150 сообщений с того момента как я пришел в тему)
312 Franchiser
 
гуру
14.09.20
23:46
(296) в твоём индексе нет date_time_iddoc. 1с ищет по полям индекса и не изменяет поля которые в него входят. В частности при изменении времени, должно меняться поле date_time_iddoc.
313 Franchiser
 
гуру
14.09.20
23:47
(300) его нужно пихать после строки I=PK__1SJOURN
314 Franchiser
 
гуру
14.09.20
23:53
Как можно отлаживать скрипты для openconf или в принципе vbs скрипты?
315 Ёпрст
 
15.09.20
01:42
(312) может быть, проверю потом
(314) https://1c.alterplast.ru/faq/openconf.html
316 Ёпрст
 
15.09.20
01:46
317 Ёпрст
 
15.09.20
01:46
Есть всё что нужно
318 Franchiser
 
гуру
15.09.20
12:19
Доработал скрипт:
'------------------------------------------------------------------
'Добавление строк в dd(dds)
Sub ProcessDD()

    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".bak", True
    
        'Обработка расширенного словаря - ddx
        'Строки на символ "X" состоят из двух частей:
        '  до символа "%" - имя сушествующей в dd таблицы(Т) к которой необходимо применить доп. описание
        '  после символа "%" - строка дополнительного описание которая вставляется после описания полей Т
        'Все другие строки добавляются в конец dd
        
        'Построение ассоциативного массива, где: Ключ - имя таблицы, Значение - строки доп. описания
        Set XDict = CreateObject("Scripting.Dictionary")
        Set TS = FSO.OpenTextFile(IBDir & "1cv7.ddx", 1)
        AppendStr = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            Ch = Left(Str, 1)
            If Ch = "X" Then
                Arr = Split(Mid(Str,3), "%", 2)
                TableName = RTrim(Arr(0))
                If XDict.Exists(TableName) Then
                    XDict.Item(TableName) = XDict.Item(TableName) & vbNewLine & Arr(1)
                Else
                    XDict.Add TableName, Arr(1)
                End If
            Else
                AppendStr = AppendStr & vbNewLine & Str
            End If
        Loop
        TS.Close()
        
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".bak", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            SubStr = Left(str, 2)
            Select Case SubStr
                Case "T="
                    Arr = Split(Str, "|", 3, 0)
                    CurTable = RTrim(Mid(Arr(0),3))
                Case "F="
                    Mode = "F"
                Case "I="
                    Mode = "I"    
                Case Else
                    If Mode = "I" Then
                        Mode = ""
                        If XDict.Exists(CurTable) Then
                            TS_Out.WriteLine(XDict.Item(CurTable)) 'Запись строк доп. описания
                        End If
                    End If
            End Select
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        
        If AppendStr > "" Then
            TS_Out.Write("### ddExtension ###")
            TS_Out.Write(AppendStr) 'Добавление строк в конец
        End If
        TS_Out.Close()
        
        MsgBox "Внесены изменения в 1cv7." & ext
        
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
'Удаление строк описания доп.таблиц из dd(dds) перед реорганизацией
'чтобы Конфигуратор не удалил таблицы из базы данных
Sub UnProcessDD()
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".tmp", True
    
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".tmp", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            If Str = "### ddExtension ###" Then
                MsgBox "del ddExtension"
                Exit Do
            End If
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        TS_Out.Close()
        
        FSO.DeleteFile(IBDir & "1cv7." & ext & ".tmp")
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer)
    If Left(Text,49) = "При сохранении метаданных будет произведен анализ" Then
        UnProcessDD()
    ElseIf Text = "Реорганизация информации закончена!" Then
        ProcessDD()
    End If
End Sub
319 Ёпрст
 
15.09.20
13:18
(318) еще немного и дорастешь до своих вьюх\триггеров\прямой записи...
320 Ёпрст
 
15.09.20
13:22
Хотя, всё потом в снеговике пригодится, там те же грабли вид сбоку.
Борьба за универсальность ограничивает возможности платформы.
Хотя могли бы на селезнёвке выпускать релизы 1с-ины чисто под контретную бд - сскуль\постриги\..и т.д Где использовался весь функционал того же tsq в запросах + создание своих индексов, а не там где галочка "индексировать" ну и т.д
321 Franchiser
 
гуру
15.09.20
13:30
(319) Я уже setattrs переделал на прямую запись в скуль...
322 Mikeware
 
16.09.20
13:06
(320) Скинь, плз, какую-нибудь свою обработку с разворачиванием 1с++ и формекса из этой обработки.
домашний архив пока недоступен, а знакомая попросила наваять ей отчетик...
323 Ёпрст
 
16.09.20
13:40
(322) на вот, тока там не совсем актуальные версии
http://catalog.mista.ru/public/79515/

тут бесплатно, тока мыло надо ввести, на мыло придёт ссылка
324 Ёпрст
 
16.09.20
13:41
в поделке есть описание, чем запакованы dll, или в коде не помню.
325 Franchiser
 
гуру
16.09.20
13:45
(324) попробовал отключить бух учет штатно, выдает сообщение "Бухгалтерский учет не может быть отключен. Есть проведенные документы..."
326 Franchiser
 
гуру
16.09.20
13:55
Как сейчас получается APPCODE 21 ?
Из описания:
Число, отражающее принадлежность документа к компонентам. Возможные значения:
0 - не принадлежит никакому учету.
(1) 000001 - опер учет.
(2) 000010 - расчет.
(4) 000100 - бух учет.
(8) 001000 - движения периодических реквизитов.
(16) 010000 - существует документ операция у документа (документ может быть не проведен, но тогда должно быть выбрано "Создавать операцию - Всегда" в окне свойств документа).
(32) 100000 - Выполнен метод Операция.Записать(); в документе, принадлежащем бух. учету.
(20) 010100 - Это документ "Операция".
Возможна их комбинация, например 6 = 2+4 (бух. учет + расчет), 7 = все три компоненты. Тип - Число(2).
327 Mikeware
 
16.09.20
13:56
(323) Спасибо!
328 Mikeware
 
16.09.20
13:57
(326) Существует операция+проведен по бухучету+проведне  по оперучету
329 Mikeware
 
16.09.20
13:58
(325) апдейтом замени все CLOSED>0 на 1
330 Franchiser
 
гуру
16.09.20
13:59
(328) при отключении бух. учета (оставить только опер. уч) нужно проставить appcode = 1 и удалить таблицу _1Soper ?
331 Franchiser
 
гуру
16.09.20
13:59
(329) это зачем?
332 Mikeware
 
16.09.20
14:00
(330) я не помню, проверяет ли он аппкод. емнип, только проведение проверяет
(331) чтоб был проведен только по упручету
333 Franchiser
 
гуру
16.09.20
14:00
Сейчас Closed = 4 это не проведен
Closed = 5 это проведен
334 Mikeware
 
16.09.20
14:02
(333) 4 - проведен по бухучету
335 Franchiser
 
гуру
16.09.20
14:03
(332) так получится что все документы проведенные, а нужно непроведенные оставить непроведенными.
336 trad
 
16.09.20
14:03
(333) Closed = 4 - проведен, по бух
337 trad
 
16.09.20
14:04
(329) не корректно. Например так можно 20 превратить в 1, а это фигня.
338 Mikeware
 
16.09.20
14:04
(333) ну проверь на копии. вот чесслово, не помню - лет 20 назад делал
(335) значит,  CLOSED&1=1 на 1
339 Franchiser
 
гуру
16.09.20
14:05
Мне нужны значения которые нужно поставить в поле closed при отключении  бух. учета
340 trad
 
16.09.20
14:05
надо так
update _1sjourn
set closed = closed&1
341 Franchiser
 
гуру
16.09.20
14:05
А CLOSED&1=0 заменить на 0 ?
342 trad
 
16.09.20
14:08
CLOSED&1=1 на 1, а CLOSED&1=0 на 0
записывается так (340)
343 Mikeware
 
16.09.20
14:08
(341) - см (340)
344 trad
 
16.09.20
14:09
аппкод - аналогично
345 Franchiser
 
гуру
16.09.20
14:15
(344) Так?

update _1sjourn
set appcode = 1
346 Mikeware
 
16.09.20
14:21
(345) update _1sjourn
set appcode = appcode&1
347 Mikeware
 
16.09.20
14:22
Хотя по идее, без принадлежности документов быть не должно
348 Franchiser
 
гуру
16.09.20
14:23
(346)
Select
21&1

Возвращает 1
349 Ёпрст
 
16.09.20
14:26
(348) через метаданные обойди доки и сделай условие, что если есть галка опер учет, то апкоде =1 иначе 0 и привет
в запросе условие на iddocdef и case воткнешь и всё
350 Ёпрст
 
16.09.20
14:28
а можешь и еще тупее, 2 запроса и

update _1sjourn set appcode = 1 where iddocdef in ($ВидДокумента.Один,....$ВидДокумента.Y)
351 Ёпрст
 
16.09.20
14:29
для тех кто в опер учете и 0 для всех остальных
352 Ёпрст
 
16.09.20
14:29
ну и truncate table _1soper и 1sentry
353 Franchiser
 
гуру
16.09.20
14:29
Уже поправил такими запросами:
update _1sjourn
set closed = closed&1
where IDDOCDEF = 130

update _1sjourn
set AppCode = 1
where IDDOCDEF = 130

Но сообщение осталось, truncate не делал
354 Ёпрст
 
16.09.20
14:33
При желании, можешь и на пустышке нужный мд и словарик создать и хоть на ходу подсунуть в рабочую базу
355 Ёпрст
 
16.09.20
14:33
эт чтоб оно реструктуризацию потом не делало
356 Franchiser
 
гуру
16.09.20
14:47
(355) все удалил, заменил, и все равно ругается...
357 Franchiser
 
гуру
16.09.20
14:49
(254) подсунуть только мд? dd от пустышки не подойдет
358 Ёпрст
 
16.09.20
14:50
(357) чей та ? словари тоже нужен
359 Ёпрст
 
16.09.20
14:51
очисти еще таблицы итогов и итоги по субконто
360 Ёпрст
 
16.09.20
14:51
и табличку плана счетов до кучи
361 Franchiser
 
гуру
16.09.20
14:56
(358) у меня dds файл со своими добавленными индексами. Структура DD сильно отличается от DDS
362 Ёпрст
 
16.09.20
14:59
(361) дык пустышку вскуле создай, и добавь свои поля
363 Franchiser
 
гуру
16.09.20
15:02
а что меняется в словаре, если я отключаю бу в МД?
364 Franchiser
 
гуру
16.09.20
15:03
Не достаточно перетащить МД из скульной базы в файловую и там внести исправление?
365 trad
 
16.09.20
15:03
(363) на подобные вопросы лучше (полезнее) отвечать самому. Делаешь да смотришь
366 Mikeware
 
16.09.20
15:05
Да, блин, без опенконнфа - пофигуратор 7.7 действительно неприятен...
367 Franchiser
 
гуру
16.09.20
15:11
(365) Ну вроде сделал: все работает в моем варианте.
368 Ёпрст
 
16.09.20
15:13
(367) это в каком ? просто с мд ?
369 Franchiser
 
гуру
16.09.20
15:16
(368) да, создал файловую пустышку, там поменял признак, вернул мд на место в скуль
370 Ёпрст
 
16.09.20
15:17
(369) по-уму, еще надо в пустышке удалить план счетов, тогда вообще бух учет улетит
371 Franchiser
 
гуру
16.09.20
16:25
(370) да надо бы, но тогда может код править придется: когда новую базу делаешь он автоматически заполняется...
372 Z1
 
16.09.20
18:12
(0) НА инфостарте есть моя обработка  "Поиск Ошибок в регистрах 7.7.
Обработка как раз для Вашей базы. Прогоните базу по всем кнопкам.
Обработка писалась по поиску ошибок ( которые  я смог представить )
373 Z1
 
16.09.20
18:17
(0 , 110 ) В 110 найдите ошибку, лучше найдите сами и это не потому что не хочу сказать,
а потому что пока свои шишки не набъешь не поймешь.
Подсказка: ошибка не с точки зрения правильности выполнения запроса, а сточки зрения производительности.
374 Z1
 
16.09.20
18:22
+ 372  в 128 ссылка дана на 372
375 Z1
 
16.09.20
18:53
(274)  >>> У нас есть как раз такой собственный некластерный индекс в таблице _1sjourn. Может в этом проблема?
Если дополнительный индекс уникальный то скорее всего в нем проблема, уникальность не выполнима вот и получаешь ошибку обновления,
если индекс неуникальный то он никак не может влиять на ситуацию.
376 Z1
 
16.09.20
19:02
(297) назвать индекс IDDIC в таблице где и поля такие есть - это сильно.
Лучеше переименуйте как нибудь по другому.
377 Z1
 
16.09.20
19:07
+ 375 так это его так 1с назвала. Вот уж не разу на это пристально не смотрел.
378 Z1
 
16.09.20
19:14
(330) да не трогай бы бы учет : там есть еще счета и оборотка по счетам.
Если к ним не обращаешься лишние таблицы не мешают а при удалении еще что нибудь поломаешь.
379 Franchiser
 
гуру
16.09.20
23:28
(375) вроде разобрались: переставление строки индекса в файле dds решило проблему
380 Franchiser
 
гуру
16.09.20
23:30
(364) обработка из 128 только ищет ошибки и не исправояет. Я ее запускал. Мне не нужно устранять все ошибки , а решить конкретную проблему.
381 Franchiser
 
гуру
16.09.20
23:32
(376) индекс не называется iddic
382 Franchiser
 
гуру
16.09.20
23:34
(376) индекс K_IX1
383 Z1
 
17.09.20
08:07
(380) Ну это Ваша база, Ваша ответственность, Вам решать что нужно а что нет
384 Z1
 
17.09.20
08:12
(382)
индекс
I=K_IX1                    |              |0     |IDDOC,DATE_TIME_IDDOC,SP652                                |0  

если это индекс на таблицу _1sjourn и описание индекса совпадает с тем что прописано в ms sql
то этот индекс бесполезный - он только замедляет работу сервера ms sql
385 Franchiser
 
гуру
17.09.20
11:41
(384) Почему он замедляет работу сервера, он делался для какого-то отчета для выполнения прямого запроса. Состав индекса не обсуждается.
386 ДенисЧ
 
17.09.20
11:50
(385) Отчёт у тебя выполняется раз в неделю, а индекс обновляется на каждую запись документа... Любого...
387 Franchiser
 
гуру
17.09.20
12:00
(386) я ХЗ, индекс не мой, я его не могу просто так удалить. Какие конкретно претензии к данному индексу?
388 Franchiser
 
гуру
17.09.20
12:02
Так можно про любой индекс сказать, что избыточные индексы замедляют проведение.
389 trad
 
17.09.20
12:02
(385) "Состав индекса не обсуждается."
А почему бы и нет?
Вот я вижу наличие этих полей в порядке индекса (IDDOC,DATE_TIME_IDDOC), и в таком порядке совершенно бессмысленным.

Значение IDDOC однозначно определяет значение DATE_TIME_IDDOC.
Если в условии запроса не указываем IDDOC, то индекс не работает
Если в условии запроса указываем IDDOC, то ему будет соответствовать одно и только одно DATE_TIME_IDDOC, при этом DATE_TIME_IDDOC нужно будет указывать обязательно, когда хотим чтобы и SP652 работало.
390 Franchiser
 
гуру
17.09.20
12:05
(389) как  понимаю Индексы работают если такой же состав полей указан в условии связи с другими таблицыми или секции where. Этот индекс был создан человеком, на основании анализа планов запроса.
391 Franchiser
 
гуру
17.09.20
12:06
Абсолютно пофиг что "Значение IDDOC однозначно определяет значение DATE_TIME_IDDOC".
Даже у 1С есть индексы которые включают IDDOC и DATE_TIME_IDDOC
392 ДенисЧ
 
17.09.20
12:09
(391) А кто тебе сказал такую чушь, что у 1с нормальные индексы?
393 trad
 
17.09.20
12:09
Отсюда рассмотрим два варианта:
1. (IDDOC, SP652)
При указании в запроса IDDOC = А и SP652 = В - индекс будет работать.
2. (DATE_TIME_IDDOC, SP652)
При указании в запроса DATE_TIME_IDDOC = А и SP652 = В - индекс будет работать, но для этого достаточно п.1
Если рассматривать запрос на интервал DATE_TIME_IDDOC между А и Б, то в ключе SP652 - работать все равно не будет, а для интервала уже есть штатный индекс.

Отсюда вывод. Имеет смысл только (IDDOC, SP652)
394 ДенисЧ
 
17.09.20
12:10
(390) Знаешь, почему-то мне кажется, что trad разбирается в индексах на порядок лучше как тебя, так и того человека...
395 Franchiser
 
гуру
17.09.20
12:10
Если есть Join по IDDOC,DATE_TIME_IDDOC,SP652 то этот индекс будет использоваться
396 Franchiser
 
гуру
17.09.20
12:11
(394) Еще раз, я не могу удалить индекс, т.к. он был создан не мной. Это требует согласования и обоснования.
397 trad
 
17.09.20
12:14
(390) "Этот индекс был создан человеком, на основании анализа планов запроса."
Значит анализ был так себе.
См. (393) - почему этот индекс не имеет смысла
398 trad
 
17.09.20
12:14
(396) Индекс можешь и не удалять, но понять не помешает, что бы потом самому делать правильно
399 Franchiser
 
гуру
17.09.20
12:15
(393) Почему индекс будет работать "При указании в запроса DATE_TIME_IDDOC = А и SP652 = В" ?
400 trad
 
17.09.20
12:15
(395) правильно, будет.
Но он также отлично будет работать если будет таким (IDDOC,SP652)
401 trad
 
17.09.20
12:16
(399) в предложенном, гипотетическом варианте (DATE_TIME_IDDOC, SP652) - будет
402 Franchiser
 
гуру
17.09.20
12:18
(401) но ты же предлагаешь индекс IDDOC, SP652. Он не будет использоваться если нет фильтра на IDDOC
403 trad
 
17.09.20
12:19
(391) "Даже у 1С есть индексы которые включают IDDOC и DATE_TIME_IDDOC"
Приведи пример.
На _1sjourn нет таких индексов. Все штатные индексы на этой таблице нормальные и не лишены смыла
404 trad
 
17.09.20
12:20
(402) при индексе  (IDDOC, SP652) я не предлагаю писать условие DATE_TIME_IDDOC = А и SP652 = В
405 Franchiser
 
гуру
17.09.20
12:22
(403) ладно, в _1sJourn нет ни одного индекса на IDDOC
406 trad
 
17.09.20
12:24
(405) а где есть?
407 trad
 
17.09.20
12:25
Плюсом ко всему добавлю, что для отбора SP652 на интервале не лишен смысла индекс (SP652, DATE_TIME_IDDOC)
И для этого существует штатный индекс.
408 Franchiser
 
гуру
17.09.20
12:27
IDDOC есть в таблицах документов
409 Franchiser
 
гуру
17.09.20
12:28
Вообщем индекс создавался для ускорения каких-то отчетов в базе 7.7, каких уже никто не помнит, и лучше этот индекс не трогать
410 trad
 
17.09.20
12:31
(408) индекс на IDDOC конечно есть. Есть он в 1sjourn.
Речь идет про совместное использование IDDOC,DATE_TIME_IDDOC в одном индексе, что лишено смысла
411 Z1
 
17.09.20
12:50
(0, 409)  Порядок полей в составном индексе имеет огромное значение.здесь не применимо  от перемены мест слагаемых ...
Для понимания работы индексов решите самостоятельно (373)
412 trad
 
17.09.20
13:10
(411) эта дурь в (110), на которую ты сделал замечание, кмк, из какого-то букваря распространяется
413 Franchiser
 
гуру
17.09.20
15:33
не знаю что там за ошибка в (110), я этот запрос н запускал
414 trad
 
17.09.20
15:38
(413) там скан всей таблицы журнала, т.к. через такое индексы не работают
Cast(Left(Жур.DATE_TIME_IDDOC, 8) AS datetime) >= :Дата1
415 Franchiser
 
гуру
17.09.20
15:44
(414) какая разница, если это разовый запрос. Понятно что конструкцию IN не желательно использовать.
416 Franchiser
 
гуру
17.09.20
15:48
(414) тогда уж и Left() не желательно использовать
417 trad
 
17.09.20
15:49
(415) "какая разница," да не вопрос

ps
к IN вопросов нет
418 trad
 
17.09.20
15:51
(416) ты не понял.
Проблема в применении условия не к X, а к f(X)
2 + 2 = 3.9999999999999999999999999999999...