Имя: Пароль:
1C
1С v8
Объект не найден
0 Amfiaray
 
30.12.14
10:04
Добрый день! С наступающим Всех!
В самописной базе на 1С 8.3 есть документ с табличной частью, в таб части есть ссылка на элемент справочника, в остальных колонках значения реквизитов этого объекта и суммы проставляемые ручками. Документ создается обработкой, после создания было всё нормально, сегодня зашли в документ и нашли несколько строк где вместо ссылки на элемент было <Объект не найден>, хотя элементы справочника на месте, их никто не удалял. Может кто сталкивался с такой ситуацией, почему такое происходит?
1 DCKiller
 
30.12.14
10:05
(0) Права доступа изменили...
2 Amfiaray
 
30.12.14
10:06
(1) Право доступа у кого? у меня полные права и тоже выходит <Объект не найден>
3 ktvladimir
 
30.12.14
10:06
+ возможно сбой в базе. особенно если она файловая
4 Amfiaray
 
30.12.14
10:07
(3) База sql
5 ktvladimir
 
30.12.14
10:07
это не гарантирует что она без сбоев
6 kosts
 
30.12.14
10:08
Возможно разрешено непосредственное удаление. Открой резервную копию, посмотри, что там.
7 vicof
 
30.12.14
10:08
(2) Не совсем полные.
8 Amfiaray
 
30.12.14
10:08
+(4) этот глюк нашел ещё в паре баз, во всех базах одна и та же конфигурация
9 1976vas
 
30.12.14
10:08
(2)Полные права не обязательно все разрешают, если добавили роль и запретили доступ к этим объектам в коде.
10 Amfiaray
 
30.12.14
10:09
(6) элементы справочника не удалены, т.е. по реквизитам из других колонок я нахожу в справочнике этот элемент, с ним всё нормально
11 kosts
 
30.12.14
10:09
(8) Возможно обработка записывает кривую ссылку
12 Amfiaray
 
30.12.14
10:10
(9) доступ никто не запрещал, у полных прав права есть на всё
13 Остап Сулейманович
 
30.12.14
10:10
(8) Криворукий программист разрешил непосредственное интерактивное удаление. Или допустил подобное программно.
14 Amfiaray
 
30.12.14
10:11
(11) После обработки в документе всё нормально, после создания документа прошла неделя и сегодня вот это вылезло
15 Amfiaray
 
30.12.14
10:11
(13) удаление чего? если все элементы на месте, что можно было удалить?
16 Defender aka LINN
 
30.12.14
10:11
(10) В реквизите ссылка на элемент, которого не существует. Позовите программиста, чтобы он нашел, почему такое происходит.
17 Amfiaray
 
30.12.14
10:11
(16) элемент существует
18 Остап Сулейманович
 
30.12.14
10:12
(10) "по реквизитам из других колонок" находится ДРУГОЙ элемент с аналогичным составом реквизитов.
19 Бертыш
 
30.12.14
10:12
(0) А ты найди
20 Остап Сулейманович
 
30.12.14
10:13
(17) Проверь. Банальным поиском ссылок на объект.
21 Amfiaray
 
30.12.14
10:13
(18) исключено, есть реквизиты значения которых уникальны для каждого элемента справочника
22 DCKiller
 
30.12.14
10:13
(17) А ты на всякий случай проверь по торчащему там вместо ссылки на элемент УИДу, на тот ли элемент, который в справочнике есть, эта запись в документе ссылается. Может кто-то удалил старый элемент, а вместо него создал такой же новый.
23 Oleg_ka
 
30.12.14
10:13
Корень проблемы - guid.
GUID можно поменять (может измениться) в нескольких случаях.
Ко всем вышеперечисленным бедам можно добавить еще и РИБ.
24 Остап Сулейманович
 
30.12.14
10:14
(23) Список случаев (хотя бы примерный) - в студию.
25 Defender aka LINN
 
30.12.14
10:17
(17) Мне этого рассказывать не надо. 1С расскажи.
26 kosts
 
30.12.14
10:21
Надо достать копию где всё нормально и сравнить - поменялся справочник (удаление/замена) или изменился документ.
Повторение проблемы в разных базах исключает технический сбой.
27 Oleg_ka
 
30.12.14
10:24
На вскидку:
Изменили права доступа (1)

Непосредственное удаление объекта(6)
(Обработкой или "руками" с последующим добавлением элемента)

Изменение GUID объекта (обработкой, обработкой переноса)
28 Oleg_ka
 
30.12.14
10:26
+(27) И еще, смотрю в (0) - "Документ создается обработкой".
Возникает вопрос: а не создаются ли элементы справочника, для этого документа, той же обработкой?
29 Serg_1960
 
30.12.14
10:29
Бомба, которая была и есть до сих пор: групповой обработкой можно изменять номенклатуру в табельных частях документов. Где криминал спросите вы? В единице измерения. Расшифровывать или и так ясно?
30 Defender aka LINN
 
30.12.14
10:29
(27) "Изменение GUID объекта" - а можно код в студию, который на такое способен?
Только, чур, без удаления и создания нового и без ковыряния в SQL.
31 Defender aka LINN
 
30.12.14
10:30
(29) Бомба, которая была и есть до сих пор: можно удалить файл базы данных.
32 Oleg_ka
 
30.12.14
10:43
(30) Надеюсь, что очень не прав, но не знаю на что способна система после
Объект.ОбменДанными.Загрузка = Истина;
33 Serg_1960
 
30.12.14
10:54
(0) Эээ... а конфигурацию не изменяли? Или может быть ТиИ запускали?
34 Serg_1960
 
30.12.14
10:57
(32) Она способно на многое :) Например, на отмену контроля ссылочной целостности.
35 Amfiaray
 
30.12.14
11:41
Сейчас развернул копию дня создания документа, там всё нормально, буду смотреть кто что делал с элементом справочника
36 hhhh
 
30.12.14
12:25
(35) программиста допросите при помощи паяльника, наверняка ведь чего-то нафигачил там.
37 Amfiaray
 
30.12.14
12:26
(36) я сам программист, и кроме меня тут ещё 3 программера) всех под паяльник? )))
38 DrZombi
 
гуру
30.12.14
12:41
(37) В порядке очереди :)
39 DrZombi
 
гуру
30.12.14
12:45
40 DrZombi
 
гуру
30.12.14
12:52
(0) >>> строк где вместо ссылки на элемент было <Объект не найден>, хотя элементы справочника на месте


Да, сталкивался. Такое происходит, когда Документ записан, но не проведен. Т.е. в момент проведения записывались реквизиты ссылками на объекты, которые Создавались в момент транзакции.

Новые объекты не записались, но на них остались ссылки :)

Хорошим тоном будет очистка таких реквизитов, при НЕ успешном проведении документа.
А то бывают всякие проверки на заполнение таких реквизитов :)

Или используй такую Функцию, поможет 100% проверить мертвые ссылки:

Функция ОбъектБДСуществует(ТестоваяСсылка) Экспорт

    МД = Метаданные.НайтиПоТипу(ТипЗнч(ТестоваяСсылка));
    ИмяОбъекта = МД.Имя;
    ПолноеИмяОбъекта = МД.ПолноеИмя();

    Запрос = новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ИСТИНА как НЕЧТО
    |ИЗ
    |   " + ПолноеИмяОбъекта + " КАК " + ИмяОбъекта + "
    |ГДЕ
    |   " + ИмяОбъекта + ".Ссылка = &Cсылка";
    Запрос.УстановитьПараметр("Cсылка", ТестоваяСсылка);
    РезультатЗапроса = Запрос.Выполнить();
    
    Возврат Не РезультатЗапроса.Пустой();

КонецФункции
41 ssh2QQ6
 
30.12.14
13:10
(0) что то создавалось не в транзакции
42 Лефмихалыч
 
30.12.14
13:48
(0) Вот это "хотя элементы справочника на месте, их никто не удалял" - гнусная наглая ложь с учетом (2)
Программист всегда исправляет последнюю ошибку.