| 
    
            
         
         | 
    
  | 
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). Но сейчас подобных проблем не обнаруживается. Другая, видно, причина.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |