Имя: Пароль:
1C
1С v8
SOS. Не сохраняются значения в справочнике
, ,
0 Palant
 
04.07.14
10:59
Пжл. помогите или хотя бы подскажите в какую сторону копать.
1С:8.2. Режим Управляемое приложение. Клиент-сервер.  Есть справочник «Корреспонденты», порядка 100 000 записей. Примерно в 100 из них при сохранение изменений не каких ошибок не выводит, но измененные реквизиты не обновляются.
Пример: открываю элемент справочника -> добавляю в наименование «1» -> сохраняю -> закрываю -> открываю заново, изменений нет.
Пробовал программно, та же история. Ошибок нет, но и нет результата.
Проходился отладчиком, до конца записи (процедура ПриЗаписи) все в порядке (значения новые), но результата нет.
Проводил тестирование и исправление (штатными средствами конфигуратора), база очень большая по времени проводилось около суток, но результата нет.
Пробовал добавлять реквизит в элемент метаданных, применять и удалять этот реквизит – не помогло (пару лет назад было похожие на другом справочнике, решилось именно так).
Выгрузку/загрузку базы провести не могу, база более 100 Гб, не поддерживается такая выгрузка/загрузка.
В сам SQL Server особо не лазил (открыл таблицу, где хранятся корреспонденты, посмотрел эти записи, вроде в порядке и закрыл), т.к. не разбираюсь в администрирование SQL Server. Но если есть идеи, то найду специалистов.
Прим.: Сам справочник «Корреспонденты» довольно корявый и большой (около 50 реквизитов и 15 табличных частей).
1 sirsp
 
04.07.14
11:20
+(0) Забыл написать: Смотрел в коде, проблем в обработчиках нет, в подписках на событие тоже etc
2 StanLee
 
04.07.14
11:22
жми кнопу "Записать", спасает постоянно, сам пользуюсь
3 Palant
 
04.07.14
11:52
Подписка на событие "ПриЗаписи" отрабатывает уже со старыми значениями.
4 Mitriy
 
04.07.14
12:11
я бы начал с очистки кеша...
5 censored
 
04.07.14
12:11
(3) ну коли в обработчике "Перед записью" объекта все нормально, а в подписке "При записи" - уже нет, то теперь нужно найти обработчик или подписку, в которой собственно и происходит изменение между этими событиями :)
6 Palant
 
04.07.14
13:00
(4) КЕШ чистили, сервер 1С и SQL перезапускали.

(5) Проверил еще раз, в подписке  "При записи" - все в порядке. Т.е. есть в базе есть уже ссылка с правильным наименованием, но потом она исчезает.
7 программистище
 
04.07.14
13:03
случайно не стоит галочка автоматического сохранения значений в полях формы
8 Sorm
 
04.07.14
13:07
Чудеса... Рекомендовал бы посмотреть профайлером.
9 Palant
 
04.07.14
13:07
Все думаю и все больше не понимаю. В подписке "При Записи" мало того, что "Источник" с правильным "новым" наименованием. Так еще специально проверил, что Справочники.Корреспонденты.НайтиПоКоду() выводит правильное наименование. Но потом это исчезает. Такое впечатление, что транзакция еще не завершена и она потом отменяется. Кто знает когда заканчивается транзакция при записи справочника?
10 Deon
 
04.07.14
13:14
(9) Ты уверен, что значения скидываются в начальные после записи, а, например, не при последующем открытии формы элемента?
11 Palant
 
04.07.14
13:24
(10) Да. Специально проверял без открытия формы элемента с помощью Справочники.Корреспонденты.НайтиПоКоду() + обратил внимание, что внизу появляется стандартное "состояние" с информацией "Изменено: ...", так вот там "старое" наименование.
12 Palant
 
04.07.14
13:32
В процедуре формы ПослеЗаписи, уже не правильное "старое" наименование. Где то "затирание" происходит раньше.
13 Chum
 
04.07.14
13:52
(12) синхронизации нет ни с чем?
На скуле в таблицах данных тоже меняются, а потом откатываются?
14 Enders
 
04.07.14
13:54
(12) Возможно подписки на события?
15 Кир Пластелинин
 
04.07.14
13:57
(12) подписок на события нет ли случаем?
16 Palant
 
04.07.14
14:10
Синхронизации в данный справочник нет (есть, что мы выгружаем данные в другую SQL базу, но этот тут не причем).

Подписки на события есть (ПриЗаписи), но там не чего в данный справочник не пишем. В любом случае процедура ПриЗаписи в модуле объекта отрабатывает ТОЛЬКО один раз (проверял отладчиком).

На скуле проверю, когда меняются данные (если они меняются) позже (доступ у сис. админа).
17 Enders
 
04.07.14
14:16
(16) А с чего ПриЗаписи должна два раза отрабатывать?)
Она и должна 1 раз отрабатывать. Ну если явно не написать Объект.Записать();
Объект то ещё не записан, так что меняйте данные как хотите ;)
18 samozvanec
 
04.07.14
14:17
(16) замер производительности включи. он покажет все что выполнялось
19 Palant
 
04.07.14
15:35
Ура! Нашел причину.

При записи справочника Корреспондента идет запись в CRM часть (привет ребятам из Рарус) в части регистра номеров телефонов, который в свою очередь вызывает свое событие при записи. В этом событие ПриЗаписи написано:

Попытка        
   НаборЗаписей.Записать();
Исключение;
КонецПопытки;

//авторская орфография сохранена

Так вот, это Исключение почему то действует не только на свое действие, но и отменяет ВСЕ предыдущие, в том числе системные транзакции и в результате элемент справочника Корреспондента не записывается с правильными данными. Знаю, что в принципе Попытка/Исключение должно работать иначе и распространяться только на данное вложение, но факт остается фактом.

Всем спасибо.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс