Имя: Пароль:
1C
1С v8
Очищается регистр сведений
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
(58)(59)
пришло! пришло время!
Balabass, давай про черного!
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, одни испуганные пользователи. Как будто очистка в этот модуль вообще не заходит.
2 + 2 = 3.9999999999999999999999999999999...