Имя: Пароль:
1C
1С v8
Исчезающий реквизит в запросе
0 Ymryn
 
18.07.18
09:56
День добрый.
Есть строчка в запросе
Когда ТИПЗНАЧЕНИЯ(ВТ_ТабСообщений_Внешняя.Документ) = ТИП(Документ.ПеремещениеТоваров) Тогда                                                        ВТ_ТабСообщений_Внешняя.Документ.СкладОтправитель

На одном наборе данных оно прекрасно отрабатывается. На другом наборе данных я получаю ошибку Поле не найдено .СкладОтправитель.

Документ точно определяется по типу. Проблем с доступом к документу нет. Т.е. вариант Документ.Ссылка успешно обрабатывается на обоих наборах.
Проверки на NULL, Неопределено, ПустоеЗначение по Документу тоже не помогают.

Посмотреть оба набора глазами крайне затруднительно. Этот реквизит железно есть в этом дипе документа. Есть ли у вас какие-либо рекомендации, что может вызывать срабатывание по ошибке в подобной конструкции?
1 FIXXXL
 
18.07.18
09:58
(0) посмотри, может по ходу пьесы в ВТ_ТабСообщений_Внешняя еще какой документ влетает, без такого реквизита...
2 Ymryn
 
18.07.18
09:59
(1) документы без этого реквизита есть. Но они должны отлетать по отбору в условии.Т.е. раз мы обращаемся к СкладОтправитель, то это Перемещение, у которого этот реквизит должен быть.
3 FIXXXL
 
18.07.18
10:01
(2) я имел ввиду в процессе сбора ВТ
если хочешь избежать, напиши явно
ВЫРАЗИТЬ(ВТ_ТабСообщений_Внешняя.Документ КАК Документ.ПеремещениеТоваров).СкладОтправитель
и посмотри результат запроса глазами
4 Скиурус
 
18.07.18
10:02
Сделай запрос по-человечески: явно прилинкуй таблицу документа Перемещения и наложи на нее условие.
5 RomanYS
 
18.07.18
10:03
(2) Таблица должна быть (и есть) типизирована, и тип колонки должен содержать тип Документ.ПеремещениеТоваров даже если данных там таких нет
6 Ymryn
 
18.07.18
10:06
(3) на второй наборе ловлю - Несовместимые Типы Выразить.

Т.е. похоже есть что-то там левое. Не понимаю как оно проходит тогда условие.
7 RomanYS
 
18.07.18
10:07
(6) Тип(!) колонки должен содержать необходимые типы
8 Ymryn
 
18.07.18
10:09
(7) я не смогу изменить ВТ. Плюс он содержит тип Перемещения. Иначе это бы вообще не работало.
9 Малыш Джон
 
18.07.18
10:10
(6) а там точно не Null?

если поставить типо
ВЫБОР КОГДА ВТ_ТабСообщений_Внешняя.Документ есть NULL ТОГДА "блаблабла"

что даст?

да в конце концов вырази как строку и посмотри что там
10 Ymryn
 
18.07.18
10:16
(9) Там точно не NULL. И там несколько тысяч записей, в которых крайне сложно ориентироваться глазами, особенно если нет осознания, что именно искать.
11 RomanYS
 
18.07.18
10:17
(10) Не ищи записи, посмотри тип колонки отладчиком
12 hhhh
 
18.07.18
10:19
(10) ну так сделай

ВТ_ТабСообщений_Внешняя.ДокументСкладОтправитель

или даже лучше

ВТ_ТабСообщений_Внешняя.ДокументСклад
13 Ymryn
 
18.07.18
10:21
(12) я не могу менять ВТ.
(11) попробую
14 Малыш Джон
 
18.07.18
10:22
(10) хмммм

ну возьми просто выведи типы значений и сгруппируй,
посмотри, какие типы встречаются в ВТшке
15 VladZ
 
18.07.18
10:23
(0) Сделай запрос по-человечески.
16 RomanYS
 
18.07.18
10:24
(13) Сделай явное левое соединение с Документ.ПеремещениеТоваров - ошибка исчезнет. Но данных у тебя не прибавится - типа у тебя такого нет в ВТ )))
17 VladZ
 
18.07.18
10:24
ВТ_ТабСообщений_Внешняя.Документ.СкладОтправитель: там, где получаешь ВТ_ТабСообщений_Внешняя сразу получай СкладОтправитель.
18 Ymryn
 
18.07.18
10:26
(16) не могу. У меня есть и другие типы документов, которые надо выводить. Мне надо отфильтровать только заполнение этой колонки согласно типу документов.
(17) я не могу менять ВТ.
19 VladZ
 
18.07.18
10:27
(18) Почему не можешь?
20 Малыш Джон
 
18.07.18
10:28
(18)>>не могу.

есть такое слово - "надо")))

тебе ж не запрос сделать, а найти проблемные данные и посмотреть - что там вообще
21 Ymryn
 
18.07.18
10:30
(18) поправлюсь, не отфильтровать а определить заполнение. Что если такой-то тип брать этот реквизит, если другой - другой и т.д. Там и реализации и поступления еще. На одном наборе, где все 3 типа присутствуют всё хорошо. На другом наборе встречаются видимо какие-то данные, которые почему-то по проверке проходят как перемещение, но им не являются.

(19) ВТ формируется другой обработкой, которая должна легко обновляться сторонней фирмой, т.е. не содержать изменений. Этот запрос - пост обработка результатов той, чтобы настроить вывод данных под себя.

(20) я не совсем понимаю как изменение той обработки мне поможет найти проблемные данные. Т.е. да, оно выполнится. Но там так же будет куча строк и нет осознания, что смотреть.
22 Малыш Джон
 
18.07.18
10:32
(21) выведи куда-нибудь результат запроса

ВЫБРАТЬ
  ТИПЗНАЧЕНИЯ(ВТ_ТабСообщений_Внешняя.Документ) КАК ТипДока
ИЗ откудатотам
СГРУППИРОВАТЬ ПО
ТИПЗНАЧЕНИЯ(ВТ_ТабСообщений_Внешняя.Документ)


какие типы значений встречаются?
23 RomanYS
 
18.07.18
10:42
(21) "Что если такой-то тип брать этот реквизит, если другой - другой и т.д. Там и реализации и поступления еще"
так сделай три явных левых соединения. Система всё равно тоже самое сделает, только ещё и лишние с теми таблицами где есть такие реквизиты
24 hhhh
 
18.07.18
10:43
(21) может просто тупо быть битая ссылка вместо документа перемещения. попробуйте прогнать тии на базе
25 Ymryn
 
18.07.18
10:46
(23) понял. Спасибо, попробую.
26 Ymryn
 
18.07.18
10:53
(23) благодарю. Это решило проблему. И я теперь кажется понимаю, как мне с помощью этой вещи поймать, что же за данные тут попадают, которые мы не ждем.
27 RomanYS
 
18.07.18
10:56
(26) "ВТ_ТабСообщений_Внешняя.Документ.СкладОтправитель"
это удобно читать и писать. А по факту это левое соединение и возможно не одно.
Например Регистратор.Дата - это туча ЛС, способная озадачить любой сервер.
28 Ymryn
 
18.07.18
10:58
(27) угу. Самое обидное, что я это знаю, а вот мысль именно через явное левое решить проблему в голову не пришла. Еще раз большое спасибо.