|
Очищается регистр сведений | ☑ | ||
---|---|---|---|---|
0
Sunny-irk
07.12.12
✎
09:41
|
Очень странная ситуация сложилась. Непонятно как чистится регистр сведений. С непонятной периодичностью, может раз день, может день простоять спокойно, может по несколько раз за полчаса. Чистка проходит максимум за 20 секунд на sql-ной базе размером в 22Гб. В регистре порядка 80 000 записей. Регистр подчинен владельцу. в модуле набора записей в процедуре ПриЗаписи стоит защита от записи с хотябы одним пустым измерением или владельцем. Голову уже сломали, что может быть и как с этим бороться.
|
|||
1
Kvestin
07.12.12
✎
09:44
|
Если в 1С совсем не докопаетесь, то поставьте профайлер SQL с отбором по таблице регистра и ловите запросы на удаление. Получите время когда удалили. Потом смотрите кто и что делал в это время по журналу регистрации.
|
|||
2
Reset
07.12.12
✎
09:46
|
Защита, надеюсь, отбор в наборе проверяет, а не сам набор?
|
|||
3
Maxus43
07.12.12
✎
09:50
|
чо за регистр и как там записи появляются? и к чему высказывание "Чистка проходит максимум за 20 секунд"? ты же чистить не хочешь, а наоборот сохранить
|
|||
4
Undefined vs NULL
07.12.12
✎
09:51
|
(0) потому фото нет
|
|||
5
Reset
07.12.12
✎
09:54
|
Точно, раз узнали время (20 секунд), значит знают и момент, когда это происходит - значит причину легче найти.
|
|||
6
s03
07.12.12
✎
09:55
|
(0) Добавьте ещё защиту от записи пустого набора записей, а не только с пустыми измерениями или владельцем
|
|||
7
Heckfy
07.12.12
✎
09:56
|
Ищите код, вида:
Регистр=РегистрыСведений.ВашРегистр; НаборЗаписей=Регистр.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); |
|||
8
Aprobator
07.12.12
✎
09:56
|
(0) значит по какому то событию чистится. Отладчик в помощь.
|
|||
9
Sunny-irk
07.12.12
✎
09:56
|
(1) журнал регистрации в самой 1с чист, записи по изменению этого регистра одиночные. Время, когда очищается вычислили записью в лог количества записей в регистре.
(3) регистр контактной информации. 20 секунд, потому что интервал записи лога поставили 10 секунд, в течение 20 секунд количество постепенно уменьшилось до 0. |
|||
10
Sunny-irk
07.12.12
✎
09:57
|
(7) не пройдет, без отбора по владельцу записать не дает, и не дает записать с владельцем - пустой ссылкой
|
|||
11
Maxus43
07.12.12
✎
09:57
|
(9) время знаете? смотрите ЖР, там будет видно Кто делал, потом паяльник в руки и допытывать - Что делал.
|
|||
12
Sunny-irk
07.12.12
✎
09:58
|
(8) событие оставило бы хоть какие-то следы в журнале регистраций, а их нет!
|
|||
13
Reset
07.12.12
✎
09:58
|
(10) Дает, судя по (0)
|
|||
14
Heckfy
07.12.12
✎
09:58
|
(10) Поверь мне.
|
|||
15
Maxus43
07.12.12
✎
09:58
|
(12) на регистры событие "Данные: Изменение" только
|
|||
16
Sunny-irk
07.12.12
✎
09:59
|
(2)
Процедура ПередЗаписью(Отказ, Замещение) // проверка для предотвращения попытки полной зачистки регистра Если ЭтотОбъект.Количество() = 0 Тогда Если ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Объект.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Тип.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Вид.Значение) Тогда СтрокаОтказа = ""; Отказ = Истина; КонецЕсли; КонецЕсли; |
|||
17
Reset
07.12.12
✎
09:59
|
(16) А я что говорил (с)
|
|||
18
Aprobator
07.12.12
✎
09:59
|
(13) без отбора не даст. Тем более, что поменять движения документа не дергаю сам документ - раз плюнуть.
|
|||
19
Maxus43
07.12.12
✎
09:59
|
чо к защите пристали? тут надо понять что записи удаляет, проблема скорей всего в быдлокоде типа (7)
|
|||
20
Reset
07.12.12
✎
10:00
|
(16) Убирайте проверку на количество
|
|||
21
Reset
07.12.12
✎
10:00
|
кроме того, возможно И на ИЛИ поменяйте
|
|||
22
Reset
07.12.12
✎
10:01
|
да вообще всю проверку в топку :)
|
|||
23
blopp
07.12.12
✎
10:01
|
(22)+100500
Что мешает заполнить значения отбора, но не установить использование? |
|||
24
Reset
07.12.12
✎
10:02
|
Верьте (7)
|
|||
25
Fish
07.12.12
✎
10:03
|
(16) Конфигурация Рарус, небось?
|
|||
26
НЕА123
07.12.12
✎
10:03
|
может ведущее измерение.
|
|||
27
Sunny-irk
07.12.12
✎
10:03
|
Самое смешное, стояло все работало несколько лет, тут без изменения нами кода все начало сыпаться.
|
|||
28
Reset
07.12.12
✎
10:04
|
(27) Кто-то чтото поправил, само не может
|
|||
29
Sunny-irk
07.12.12
✎
10:04
|
(25) она самая
|
|||
30
Maxus43
07.12.12
✎
10:04
|
(27) чудес не бывает. обновления были?
|
|||
31
Reset
07.12.12
✎
10:04
|
Не обязательно впрямую, но создались условия
|
|||
32
Sunny-irk
07.12.12
✎
10:06
|
обновления мы делаем раз в несколько лет и то накатом изменений вручную
|
|||
33
Reset
07.12.12
✎
10:06
|
Если КакоетоУсловиеКотороеНеВыполнялосьМногоЛетАСейчасНачалоВыполняться тогда
// кривой код Иначе // условно "рабочий" код КонецЕсли; |
|||
34
Fish
07.12.12
✎
10:12
|
(29) Когда имел дело с конфой от Раруса, мы практически сразу отказались от поддержки, т.к. пришлось практически полностью всю конфу перелопачивать. Там таких залепух на каждом шагу полно.
|
|||
35
Sunny-irk
07.12.12
✎
10:19
|
(33) даже если бы такой код отработал, он бы выдал в журнале регистраций что-то подобное
07.12.2012 15:17:00 Администратор Данные. Изменение Зафиксирована Регистр сведений. Контактная информация komp 07.12.2012 15:16:59 (93144331) 1С:Предприятие 171 |
|||
36
Sunny-irk
07.12.12
✎
10:36
|
(7) И даже если бы этот предательский код отработал, как бы он смог так быстро все зачистить? 80 000 записей меньше чем за 8-10 секунд, на нашем виснущем сервере
|
|||
37
Maxus43
07.12.12
✎
10:38
|
(36) а этому коду время много не надо, это быстрый убийца регистров
|
|||
38
LOD
07.12.12
✎
10:39
|
Используй подписку на события для логирования этого события
(7) В две строчки кода ... зачистить за 10 сек и больше записей ... PS: У меня было такое ... дело оказалось в умелый руках программистов |
|||
39
Sunny-irk
07.12.12
✎
10:39
|
если он только обойдет ПередЗаписью в модуле набора записей.
а это вообще возможно? |
|||
40
DikSer
07.12.12
✎
10:40
|
(38) А как тогда журнал регистрации?
|
|||
41
Maxus43
07.12.12
✎
10:41
|
(39) это весь код в (16)?
|
|||
42
LOD
07.12.12
✎
10:41
|
(36) Запусти у себя в базе эти две строчки :
Рег=РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); Рег.Записать(); И насладись скоростью удаления ;) |
|||
43
Sunny-irk
07.12.12
✎
10:43
|
Процедура ПередЗаписью(Отказ, Замещение)
// проверка для предотвращения попытки полной зачистки регистра Если ЭтотОбъект.Количество() = 0 Тогда Если ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Объект.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Тип.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Вид.Значение) Тогда СтрокаОтказа = ""; Отказ = Истина; КонецЕсли; КонецЕсли; // проверки оставлены в модуле на случай редактирования КИ в строке // Вообще проверка делается локально в каждой форме записи КИ Для каждого Запись Из ЭтотОбъект Цикл Если ОбЗначениеНеЗаполнено(Запись.Объект) Тогда Отказ = Истина; СтрокаОтказа = "Не заполнено поле ""Владелец"". Запись невозможна!"; Продолжить; КонецЕсли; Если Запись.Объект.ЭтоГруппа Тогда Отказ = Истина; СтрокаОтказа = "Нельзя использовать группу в качестве объекта контактной информации."; Прервать; КонецЕсли; Если ОбЗначениеНеЗаполнено(Запись.Вид) Тогда Отказ = Истина; СтрокаОтказа = "Не заполнено поле ""Вид"". Запись невозможна!"; Прервать; КонецЕсли; Если ОбЗначениеНеЗаполнено(Запись.Представление) Тогда Отказ = Истина; СтрокаОтказа = "Не заполнено представление контактной информации. Запись невозможна!"; Прервать; КонецЕсли; КонецЦикла; Если Отказ Тогда Сообщить(СтрокаОтказа); КонецЕсли; КонецПроцедуры (42) вот сюда попадает, перед тем как Рег запишется |
|||
44
LOD
07.12.12
✎
10:43
|
(40) Легко:
1) Возможно у него не настроен журнал на эти события 2) Возможно удаляются эти строки в коде |
|||
45
Heckfy
07.12.12
✎
10:44
|
(36) Ну по идее, этому коду на удаление 80000 записей на виснущем сервере потребуется ~4 секунды
|
|||
46
Александр_
Тверь 07.12.12
✎
10:44
|
а вы недавно не увольняли программиста?
Ну там без выходного пособия... |
|||
47
LOD
07.12.12
✎
10:44
|
(43) Очистил тебе регистр ?
|
|||
48
Александр_
Тверь 07.12.12
✎
10:45
|
Или админа ) Который на SQL сервере скрипт забацал
|
|||
49
Sunny-irk
07.12.12
✎
10:46
|
(46) (48) нет, все на месте и почти довольны
|
|||
50
LOD
07.12.12
✎
10:46
|
(48) + Сто процентов согласен !
|
|||
51
Heckfy
07.12.12
✎
10:47
|
(50) Что то долго для сиквела таблица очищается...
|
|||
52
DikSer
07.12.12
✎
10:47
|
(47) Твои две строчки кода не попортят регистр, чтобы очистить регистр надо отборать всех контрагентов ~20000 и потом циклом прошпарить их всех записывая их КИ. И это нифига не ~4 секунды...
|
|||
53
Sunny-irk
07.12.12
✎
10:48
|
ну если только скрипт, потому что уже всю конфигурацию перевернули по словам "КонтактнаяИнформация"
|
|||
54
Heckfy
07.12.12
✎
10:50
|
(52)о_О. Мсье знает толк в извращениях. Вашим методом регистр несколько минут будет очищаться.
|
|||
55
DikSer
07.12.12
✎
10:52
|
(54) Дак он так и может очистится только. Что бы очистить надо иметь ссылку контрагента которая подставится в Объект и прекрасно запишется(стерётся), Иначе никак. Другой вариант только в SQL...
|
|||
56
НЕА123
07.12.12
✎
10:52
|
(54)+1
|
|||
57
Heckfy
07.12.12
✎
10:53
|
(55) Фейспалм!!! А вы попробуйте сначала, прежде чем такие заявления делать .:)
|
|||
58
Balabass
07.12.12
✎
10:54
|
Про черного 1сника уже было?
|
|||
59
Heckfy
07.12.12
✎
10:55
|
Подожди, еще время не пришло :)
|
|||
60
LOD
07.12.12
✎
11:04
|
(52) Аж прям сердце кольнуло от твоего поста ...
|
|||
61
Reset
07.12.12
✎
11:15
|
(35) Зачем Вы с очевидным спорите? Очищается регистр? Очищается. Зачем себе противоречить и говорить что этого не может быть? :)
Ищите кривой код |
|||
62
Reset
07.12.12
✎
11:17
|
(36) см (37)(42) - все верно, очистить ни ума ни времени много не надо)
|
|||
63
Heckfy
07.12.12
✎
11:19
|
(62) см (52). Оказывается надо и то и то :):):)
|
|||
64
Reset
07.12.12
✎
11:21
|
(63) :)
(52) Вперед, с песней (и заготовленным вазелином), удаляй бэкап и запускай эти безвредные 2 строки на своей боевой |
|||
65
Reset
07.12.12
✎
11:22
|
только не перепутай, сначала - удалить бэкап, потом запустить. Не наоборот
|
|||
66
DikSer
07.12.12
✎
12:03
|
Да все варианты опробованы уже. Всё протестировано уже. =)
|
|||
67
Heckfy
07.12.12
✎
12:31
|
(66) Точно все? Точно всё протестировано? МенеджерЗаписи тоже протестировал?
|
|||
68
hhhh
07.12.12
✎
12:41
|
ну допустим эта проверка
Если ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Объект.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Тип.Значение) и ОбЗначениеНеЗаполнено(ЭтотОбъект.Отбор.Вид.Значение) Тогда СтрокаОтказа = ""; Отказ = Истина; КонецЕсли; если например заполнен Тип, она и не сработает. И всё вычистит. |
|||
69
DikSer
07.12.12
✎
12:51
|
(68) После этого идет проверка на Владельца (объект).
|
|||
70
DikSer
07.12.12
✎
12:52
|
(67) Менеджер не тестил.
|
|||
71
Reset
07.12.12
✎
12:54
|
(69) Дядка, ну. Ну напрягись. Сколько раз эта проверка выполниться при пустом ЭтотОбъект?
|
|||
72
DikSer
07.12.12
✎
12:57
|
(71) А как может быть пустой "этотОбъект" если это в модуле "ПередЗаписью" регистра сведений?
|
|||
73
НЕА123
07.12.12
✎
13:00
|
||||
74
DikSer
07.12.12
✎
13:02
|
Ребят, я понимаю юмор дело хорошое, но давайте проникнимся всей полнотой трагизма данной ситуации! =) О как завернул)) Проникаемся.. А потом я с радостью прочитаю про вашего черного(безголового) 1сника (всадника)..))
|
|||
75
Reset
07.12.12
✎
13:04
|
(74) Сделай сначала (64), потом вместе будем проникаться полнотой трагизма
|
|||
76
Reset
07.12.12
✎
13:05
|
+ в процессе заодно убедишься в(72)
|
|||
77
hhhh
07.12.12
✎
13:07
|
(72) запись в регистр сведений идет в два этапа: 1. стираются старые записи; 2. пишутся новые.
то есть ответ на ваш вопрос: при перезаписи пустой этот объект там будет всегда, в 100% случаев. |
|||
78
Defender aka LINN
07.12.12
✎
13:11
|
(55) Бугога. Хотя чему я удивляюсь: одинэснег, который 1С не знает - это нынче норма.
|
|||
79
Sunny-irk
10.12.12
✎
10:24
|
появились новые подробности: регистр очистился когда в базе было только 3 пользователя, которых на работе в это время не было.
И еще, не знаю, связано с этим или нет, но примерно в то же время, когда и стали происходить эти события, при записи контрагента(а может регистра контактной информации) стала вылетать ошибка: "Ошибка при выполнении обработчика {...(40)}: Ошибка при выполнении метода контекста (Записать): Конфликт блокировок при выполнении транзакции; Microsot OLE DB Provider for SQL Server: Transaction..." к сожалению полный текст не сохранился |
|||
80
Мыш
10.12.12
✎
11:04
|
(79) Регламентные задания возможно?
|
|||
81
Sunny-irk
10.12.12
✎
11:09
|
(80) нет, все отключено и ни у кого кроме администратора нет к ним доступа
|
|||
82
Defender aka LINN
10.12.12
✎
11:16
|
(79) Ну, ВОЗМОЖНО эта ошибка говорит о том, что кто-то пытается записать контактную информацию в тот момент, когда она как раз удаляется. А возможно и нет.
|
|||
83
Sunny-irk
10.12.12
✎
11:27
|
а может из-за этой ошибки стереться регистр?
|
|||
84
Heckfy
10.12.12
✎
11:34
|
(81) Ну, как вариант, в планировщике у кого то бомба заложена....
|
|||
85
Sunny-irk
10.12.12
✎
11:53
|
(84) все это закрыто от простых пользователей
|
|||
86
Defender aka LINN
10.12.12
✎
12:52
|
(83) Нет, в этот момент он уже стирается.
|
|||
87
Heckfy
10.12.12
✎
12:54
|
(85) Чудес не бывает.
|
|||
88
Sunny-irk
13.12.12
✎
04:53
|
Продолжение нашей эпопеи:
Отправили cf-ник в Рарус, они поглядели, развели руками, предложили поставить ловушки в модуле набора записей. Поставили: результата 0, одни испуганные пользователи. Как будто очистка в этот модуль вообще не заходит. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |