|
v7: Странная ошибка "Значение не представляет агрегатный объект" | ☑ | ||
---|---|---|---|---|
0
vcv
03.10.13
✎
08:09
|
Переработанная торговля 7.7 SQL. 1С++, FormEx, Yoksel
Изредка возникает ошибка Документ.ЗаявкаПокупателя.Форма.Модуль(2134)}: Значение не представляет агрегатный объект (ВалютаВзаиморасчетов) в строке ВалютаДоговораСтарая = Договор.ВалютаВзаиморасчетов; Договор - реквизит шапки документа типа Справочник.Договоры. В справочнике реквизит ВалютаВзаиморасчетов, конечно, есть. По идее, такой ошибки быть не может, реквизит документа Договор может иметь значение или конкретного договора, или пустого значения типа "Справочник.Договоры". В любом случае "Договор.ВалютаВзаиморасчетов" не должно вызывать ошибку. Переменных с именем "Договор" не объявлено. Кто нибудь с таким сталкивался? |
|||
1
Fragster
модератор
03.10.13
✎
08:09
|
в 7.7 тоже есть отладчик
|
|||
2
BuHu
03.10.13
✎
08:13
|
(0) давно в семерке не работал , а ВалютаВзаиморасчетов не переодический реквизит?
|
|||
3
BuHu
03.10.13
✎
08:14
|
(2) не заметил , что изредка
|
|||
4
ДенисЧ
03.10.13
✎
08:19
|
договор не выбран, вот и.
|
|||
5
catena
03.10.13
✎
08:21
|
Разве 7.7 нормально отрабатывает обращение к реквизитам пустой ссылки?
|
|||
6
vcv
03.10.13
✎
08:25
|
(1) Ошибка возникает на полторы сотни пользователей разок в неделю. Отладчиком хрен выловишь.
|
|||
7
vcv
03.10.13
✎
08:31
|
(4)(5)
ПолучитьПустоеЗначение("Справочник.Договоры").ВалютаВзаиморасчетов отрабатывает нормально. И при невыбранном договоре все должно быть окей. Мне кажется, это какой-то странный глюк, связанный или с потерей, или с порчей контекста. |
|||
8
dachnik
03.10.13
✎
08:44
|
(7) ТиИ?
|
|||
9
Вуглускр1991
03.10.13
✎
08:48
|
(7) Битая ссылка. Возможно.
Оформи в попытку и на исключение вешай запись в лог ключа для поиска записи и описание всех контекстов. |
|||
10
vcv
03.10.13
✎
09:03
|
(8) А ТиИ сложно. Основная база уже на 100 гигов перевалила. Пытаюсь тестировать различными SQL-запросами, но, наверняка, много аспектов упускаю.
(9) На это похоже. Искать надо. |
|||
11
ЧеловекДуши
03.10.13
✎
09:22
|
ВалютаДоговораСтарая - Это что такое, Реквизит или переменная?
Если переменная, то научись объявлять переменные через "Перем ВалютаДоговораСтарая;" :) |
|||
12
ЧеловекДуши
03.10.13
✎
09:24
|
+(0) Смотри, какого типа "Договор", если просто справочник и он пустой, т.е. не указан, то ошибка имеет иметь место :)
|
|||
13
Песец
03.10.13
✎
09:36
|
(0) А при перепроведении проблемного документа ошибка воспроизводится?
Такое может быть если реквизит только для элемента, а выбрана группа. |
|||
14
ЧеловекДуши
03.10.13
✎
09:45
|
(13) Разве? Это же документ. Кто мешает писать в реквизит Хоть элемент, хоть группу?
|
|||
15
vcv
03.10.13
✎
09:56
|
(11) 1С не требует объявления переменных и даже не способна это контролировать. Так что объявлять переменные хорошо, но толку обычно минимум.
(12) в (0) сказано "Договор - реквизит шапки документа типа Справочник.Договоры" (13) Если бы отловить что-где-когда. :( Более полутора сотен пользователей в дюжине городов и проблема вылазит редко-редко. Сейчас вставил попытку-исключение с автоотправкой себе скриншота и прочей информацией. Может удастся выловить конкретную ситуацию. Связанный вопрос: предположительно проблема из-за нарушения внутренних связей между 1sjourn, dt*, dh*. Нет ли у кого опыта и примера SQL-запроса для тестирования этих связей? |
|||
16
Песец
03.10.13
✎
09:59
|
(14) Я как раз про это: в "Договор" выбрали группу, а у нее реквизита ВалютаВзаиморасчетов нет.
|
|||
17
vcv
03.10.13
✎
10:23
|
(13)(16) Это не вызывает ошибки. Похоже, 1С проверяет признак Для элемента/Для группы/Для обоих исключительно на этапе дизайна формы.
|
|||
18
trad
03.10.13
✎
10:42
|
(15) "Связанный вопрос: предположительно проблема из-за нарушения внутренних связей между 1sjourn, dt*, dh*. Нет ли у кого опыта и примера SQL-запроса для тестирования этих связей?"
select * from _1sjourn j (nolock) full join dhXXX dh(nolock) on dh.iddoc = j.iddoc where dh.iddoc is null or j.iddoc is null |
|||
19
trad
03.10.13
✎
10:47
|
Поиск битой ссылки
select j.docno, j.date_time_iddoc from $Документ.ЗаявкаПокупателя Док (nolock) left join _1sjourn j (nolock) on j.iddoc = Док.iddoc left join $Справочник.Договоры Договоры (nolock) on Договоры.id = $Док.Договор where $Док.Договор != $ПустойИД and Договоры.id is null |
|||
20
vcv
03.10.13
✎
11:08
|
(18) Недостаточная проверка. С одним и тем же iddoc могут быть документы разных видов. Как я понимаю, нужно еще учитывать IDDOCDEF. Ну и ХХХ как-нибудь бы автоматически развернуть.
|
|||
21
vcv
03.10.13
✎
11:09
|
Попробовал вот так, но ничего не выдало. Или таки нет плохой ссылки, или я ошибся в запросе:
DECLARE @TableName char(32) DECLARE @IDDOCDEF char(32) DECLARE @query nchar(1000) DECLARE TablesList CURSOR FOR SELECT name FROM sysobjects WHERE type='U' and name like 'DH%' OPEN TablesList FETCH NEXT FROM TablesList INTO @TableName WHILE @@FETCH_STATUS=0 BEGIN set @IDDOCDEF = SUBSTRING(@TableName,3,30) print 'Check documents ID '+@IDDOCDEF set @query = 'select * from _1sjourn j (nolock) full join dh'+@IDDOCDEF+' dh(nolock) on dh.iddoc = j.iddoc where (dh.iddoc is null or j.iddoc is null) and IDDOCDEF='+@IDDOCDEF exec sp_executesql @query OUTPUT FETCH NEXT FROM TablesList INTO @TableName END CLOSE TablesList DEALLOCATE TablesList |
|||
22
trad
03.10.13
✎
13:27
|
(20) " С одним и тем же iddoc могут быть документы разных видов"
Нет, не могут. iddoc уникален во все ИБ |
|||
23
trad
03.10.13
✎
13:41
|
(21) запрос вполне годный. значить нет нарушений
|
|||
24
vcv
03.10.13
✎
13:54
|
Наверное в (18) нужно так:
select * from _1sjourn j (nolock) full join dhХХХ dh(nolock) on dh.iddoc = j.iddoc where (dh.iddoc is null or j.iddoc is null) and j.iddocdef = ХХХ иначе выкатывает, как я понимаю, кучу документов из других dh (23) Если запрос годный и нет нарушений, тогда возвращается вопрос, с которого началось - причина проблемы. |
|||
25
Mikeware
03.10.13
✎
13:58
|
Причина может быть в банальном сбое в индексах. Перестрой индексы для таблицы договоров (хотя бы первичный)
|
|||
26
vcv
03.10.13
✎
14:02
|
(23) Может подскажешь, как в моём запросе в (21) выводить только результаты с отклонениями. А то вываливает в management studio кучу "пустых" результатов запросов.
(25) Индексы перестраиваются регулярно. |
|||
27
trad
03.10.13
✎
14:10
|
(26) в запросе в (21) у тебя итак выводятся только записи, iddoc которых нет либо в dh либо в journ. Все Ок. Если куча пустых результатов, значит и нет проблемных записей.
|
|||
28
trad
03.10.13
✎
14:12
|
(24) "иначе выкатывает, как я понимаю, кучу документов из других dh "
да, совершенно верно, нужно условие j.iddocdef = ХХХ |
|||
29
vcv
03.10.13
✎
14:12
|
(27) Вот хочется, что бы пустые результаты не выводились. А только те, в которых строки есть.
Может кому понадобится запрос, проверяющий правильность ссылок между журналом и шапкой/таблицей документов: DECLARE @TableName char(32) DECLARE @IDDOCDEF char(32) DECLARE @query nchar(1000) DECLARE TablesList CURSOR FOR SELECT name FROM sysobjects WHERE type='U' and (name like 'DH%' or name like 'DT%') OPEN TablesList FETCH NEXT FROM TablesList INTO @TableName WHILE @@FETCH_STATUS=0 BEGIN set @IDDOCDEF = SUBSTRING(@TableName,3,30) if LEFT(@TableName,2) = 'DH' set @query = 'select ''DH'+@IDDOCDEF+''' as DocTable, j.iddoc, j.docno, CAST(LEFT(j.DATE_TIME_IDDOC, 8) as DateTime) as docdate from _1sjourn j (nolock) full join dh'+@IDDOCDEF+' dh(nolock) on dh.iddoc = j.iddoc where (dh.iddoc is null or j.iddoc is null) and j.iddocdef='+@IDDOCDEF else set @query = 'select ''DT'+@IDDOCDEF+''' as DocTable, j.iddoc, j.docno, CAST(LEFT(j.DATE_TIME_IDDOC, 8) as DateTime) as docdate from _1sjourn j (nolock) full join dt'+@IDDOCDEF+' dt(nolock) on dt.iddoc = j.iddoc where (j.iddoc is null) and j.iddocdef='+@IDDOCDEF exec sp_executesql @query OUTPUT FETCH NEXT FROM TablesList INTO @TableName END CLOSE TablesList DEALLOCATE TablesList |
|||
30
Mikeware
03.10.13
✎
14:13
|
(26) Ну тогда лови попыткой-исклением, почему и когда у тебя Договор пустой...
|
|||
31
vcv
03.10.13
✎
14:20
|
Может пустой, может не пустой... Пустое значение правильного типа такую проблему вызывать не может.
Однажды у меня был похожий глюк, оказалось, причина в том, что идентификатор документа, приписанный в 1sjourn к одному виду документов, на самом деле в DH/DT принадлежал к другому виду. В отчетах представление документа было "счет-фактура", а из журнала открывалась заявка с проблемами, похожими на (0). Но сейчас подобных проблем не обнаруживается. Другая, видно, причина. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |