v7: Странная ошибка "Значение не представляет агрегатный объект" #683033


#0 by vcv
Переработанная торговля 7.7 SQL. 1С++, FormEx, Yoksel Изредка возникает ошибка Документ.ЗаявкаПокупателя.Форма.Модуль(2134)}: Значение не представляет агрегатный объект (ВалютаВзаиморасчетов) в строке Договор - реквизит шапки документа типа Справочник.Договоры. В справочнике реквизит ВалютаВзаиморасчетов, конечно, есть. По идее, такой ошибки быть не может, реквизит документа Договор может иметь значение или конкретного договора, или пустого значения типа "Справочник.Договоры". В любом случае "Договор.ВалютаВзаиморасчетов" не должно вызывать ошибку. Переменных с именем "Договор" не объявлено. Кто нибудь с таким сталкивался?
#1 by Fragster
в 7.7 тоже есть отладчик
#2 by BuHu
давно в семерке не работал , а ВалютаВзаиморасчетов не переодический реквизит?
#3 by BuHu
не заметил , что изредка
#4 by ДенисЧ
договор не выбран, вот и.
#5 by catena
Разве 7.7 нормально отрабатывает обращение к реквизитам пустой ссылки?
#6 by vcv
Ошибка возникает на полторы сотни пользователей разок в неделю. Отладчиком хрен выловишь.
#7 by vcv
ПолучитьПустоеЗначение("Справочник.Договоры").ВалютаВзаиморасчетов отрабатывает нормально. И при невыбранном договоре все должно быть окей. Мне кажется, это какой-то странный глюк, связанный или с потерей, или с порчей контекста.
#8 by dachnik
ТиИ?
#9 by Вуглускр1991
Битая ссылка. Возможно. Оформи в попытку и на исключение вешай запись в лог ключа для поиска записи и описание всех контекстов.
#10 by vcv
А ТиИ сложно. Основная база уже на 100 гигов перевалила. Пытаюсь тестировать различными SQL-запросами, но, наверняка, много аспектов упускаю. На это похоже. Искать надо.
#11 by ЧеловекДуши
ВалютаДоговораСтарая - Это что такое, Реквизит или переменная? Если переменная, то научись объявлять переменные через "Перем ВалютаДоговораСтарая;" :)
#12 by ЧеловекДуши
+ Смотри, какого типа "Договор", если просто справочник и он пустой, т.е. не указан, то ошибка имеет иметь место :)
#13 by Песец
А при перепроведении проблемного документа ошибка воспроизводится? Такое может быть если реквизит только для элемента, а выбрана группа.
#14 by ЧеловекДуши
Разве? Это же документ. Кто мешает писать в реквизит Хоть элемент, хоть группу?
#15 by vcv
1С не требует объявления переменных и даже не способна это контролировать. Так что объявлять переменные хорошо, но толку обычно минимум. в сказано "Договор - реквизит шапки документа типа Справочник.Договоры" Если бы отловить что-где-когда. :( Более полутора сотен пользователей в дюжине городов и проблема вылазит редко-редко. Сейчас вставил попытку-исключение с автоотправкой себе скриншота и прочей информацией. Может удастся выловить конкретную ситуацию. Связанный вопрос: предположительно проблема из-за нарушения внутренних связей между 1sjourn, dt*, dh*. Нет ли у кого опыта и примера SQL-запроса для тестирования этих связей?
#16 by Песец
Я как раз про это: в "Договор" выбрали группу, а у нее реквизита ВалютаВзаиморасчетов нет.
#17 by vcv
Это не вызывает ошибки. Похоже, 1С проверяет признак Для элемента/Для группы/Для обоих исключительно на этапе дизайна формы.
#18 by trad
"Связанный вопрос: предположительно проблема из-за нарушения внутренних связей между 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 by trad
Поиск битой ссылки select from $Документ.ЗаявкаПокупателя Док (nolock) left join _1sjourn j (nolock) on j.iddoc = Док.iddoc left join $Справочник.Договоры Договоры (nolock) on Договоры.id = $Док.Договор where $Док.Договор != $ПустойИД and Договоры.id is null
#20 by vcv
Недостаточная проверка. С одним и тем же iddoc могут быть документы разных видов. Как я понимаю, нужно еще учитывать IDDOCDEF. Ну и ХХХ как-нибудь бы автоматически развернуть.
#21 by vcv
Попробовал вот так, но ничего не выдало. Или таки нет плохой ссылки, или я ошибся в запросе: 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 by trad
" С одним и тем же iddoc могут быть документы разных видов" Нет, не могут. iddoc уникален во все ИБ
#23 by trad
запрос вполне годный. значить нет нарушений
#24 by vcv
Наверное в нужно так: 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 Если запрос годный и нет нарушений, тогда возвращается вопрос, с которого началось - причина проблемы.
#25 by Mikeware
Причина может быть в банальном сбое в индексах. Перестрой индексы для таблицы договоров (хотя бы первичный)
#26 by vcv
Может подскажешь, как в моём запросе в выводить только результаты с отклонениями. А то вываливает в management studio кучу "пустых" результатов запросов. Индексы перестраиваются регулярно.
#27 by trad
в запросе в у тебя итак выводятся только записи, iddoc которых нет либо в dh либо в journ. Все Ок. Если куча пустых результатов, значит и нет проблемных записей.
#28 by trad
"иначе выкатывает, как я понимаю, кучу документов из других dh " да, совершенно верно, нужно условие j.iddocdef = ХХХ
#29 by vcv
Вот хочется, что бы пустые результаты не выводились. А только те, в которых строки есть. Может кому понадобится запрос, проверяющий правильность ссылок между журналом и шапкой/таблицей документов: 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   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 by Mikeware
Ну тогда лови попыткой-исклением, почему и когда у тебя Договор пустой...
#31 by vcv
Может пустой, может не пустой... Пустое значение правильного типа такую проблему вызывать не может. Однажды у меня был похожий глюк, оказалось, причина в том, что идентификатор документа, приписанный в 1sjourn к одному виду документов, на самом деле в DH/DT принадлежал к другому виду. В отчетах представление документа было "счет-фактура", а из журнала открывалась заявка с проблемами, похожими на . Но сейчас подобных проблем не обнаруживается. Другая, видно, причина.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С