Имя: Пароль:
1C
1С v8
Запрос работает в консоли запросов, но в ФормеЭлемента не определяет тип, в чем причина?
🠗 (Фрэнки 26.06.2020 13:20)
,
0 Mythe
 
26.06.20
10:00
Данный запрос, в консоли запросов работает как часы, но вот при его реализации на практике он не определяет тип строки, почему?

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Таксофоны.Номер КАК Номер
        |ИЗ
        |    Справочник.Таксофоны КАК Таксофоны
        |ГДЕ
        |    Таксофоны.Абоненты.ФИО = &ФИО";
    Запрос.УстановитьПараметр("ФИО", Объект.Наименование);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект.Блокировка = ВыборкаДетальныеЗаписи.Номер;    
    КонецЦикла;

При Debug`e Функции "ВыборкаДетальныеЗаписи.Следующий()" пишет Поле Объекта не обнаружено(следующий).
Если же проверять переменную "ВыборкаДетальныеЗаписи" то в поле Номер в значении пишет Ошибка чтения значения.
1 Галахад
 
гуру
26.06.20
10:03
А это чему равно? "Объект.Наименование"
2 Mythe
 
26.06.20
10:04
(1) ФИО
3 Mythe
 
26.06.20
10:05
Тип Строка
4 Mythe
 
26.06.20
10:06
я через дебаг смотрел, там все нормально отображает, то что нужно
5 Timon1405
 
26.06.20
10:06
1. Не добавляйте ВыборкаДетальныеЗаписи.Следующий() в табло отладки и не смотрите на него в отладчике
2. остановитесь на строке Объект.Блокировка = ВыборкаДетальныеЗаписи.Номер; и уже там смотрите переменную "ВыборкаДетальныеЗаписи"
6 Mythe
 
26.06.20
10:08
(5) В этом то и проблема, если я ставлю остановку на этой строке, она не срабатывает
7 Mythe
 
26.06.20
10:09
Программа дальше работает игнорируя остановку
8 Mythe
 
26.06.20
10:10
Если делать выгрузку, то в значении "Номера" пишет Строка.Null
9 Василий Алибабаевич
 
26.06.20
10:11
(8) Не находится абонент с ФИО = Объект.Наименование
10 Mythe
 
26.06.20
10:12
А почему в консоли запросов тогда все работает? (9)
11 Масянька
 
26.06.20
10:12
(2) Сообщить("" + ВыборкаДетальныеЗаписи.Количество());
После     ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
что выведет?
12 ДенисЧ
 
26.06.20
10:12
тз = РезультатЗапроса.Выгрузить();
тз.ВыбратьСтроку()

что покажет?
13 Масянька
 
26.06.20
10:13
(9) Ну, нельзя же так... В лоб... Надо издалека... :)))))
14 Масянька
 
26.06.20
10:13
(10) Нужно проверять, что запрос нашел требуемое.
15 Mythe
 
26.06.20
10:14
(11) 0
16 Масянька
 
26.06.20
10:14
(15) Вот и ответ - по заданному условию запрос ничего не нашел.
17 Mythe
 
26.06.20
10:16
(16) Запрос наипростейший, как его ещё изменить чтобы он работал то, ночь не сплю пытаюсь, разные связи пытался сделать  и тд
18 Mythe
 
26.06.20
10:19
И тогда в чем разница консоли запросов?
19 Mythe
 
26.06.20
10:20
(12)  не соответствует типу(номер)
20 vova1122
 
26.06.20
10:36
1. Ты же убедился в (15) что в результате запроса у тебя нет данных
2. Значит ФИО не соответстует искомому наименованию. скорее всего в конце ФИО есть пробелы
21 Fedor-1971
 
26.06.20
10:45
(0) Как минимум:
Запрос.УстановитьПараметр("ФИО", СокрЛП(Объект.Наименование));

Ну и проверь в Объект.Наименование всякие Символы.НПП и т.д., часто при копировании прихватывают разные служебные символы.

Чай в консоли вводил руками и красиво
22 Mythe
 
26.06.20
10:48
(21) Там нету никаких проблем в этом наименовании, у меня большинство запросов такие же и все нормально работает
23 Фрэнки
 
26.06.20
10:50
(22) Ну напиши тогда для отладки просто явным образом

Запрос.УстановитьПараметр("ФИО", "ОченьКрасиваяНужнаяФИО");

И ты увидишь, запрос правильный но ничего не смог найти. И решай проблему дальше.
24 Mythe
 
26.06.20
10:50
Только там я параметр ставлю Спр-ки.Спр-к.НайтиПоНаименованию(); потому что значений мало, а тут я не собираюсь каждого абонента перечислять
25 Mythe
 
26.06.20
10:52
(23) знать бы куда двигаться, ночь уже сижу, по разному же этот запрос пытался перефразировать
26 Mythe
 
26.06.20
10:53
Если я вот так указываю Наименование, то все работает Запрос.УстановитьПараметр("ФИО",Справочники.Абоненты.НайтиПоНаименованию("Гоголь Брик Федорович"));
27 Mythe
 
26.06.20
10:54
Но При Сообщить(Объект.Наименование) одно и тоже выдает, в чем проблема то тогда заключается?
28 Фрэнки
 
модератор
26.06.20
10:55
(24) так тут тебя никто и не заставляет что-то перечислять

Но оскорблять присутствующих тупостью своих постов у тебя не выйдет.

(25) Там нет проблемы в запросе - не хер его переписывать. У тебя в значении Объект.Наименование
нет строки "Гоголь Брик Федорович" вот оно и не находит его тебе.

Что тут не понятного?
29 Mythe
 
26.06.20
10:56
(28) В каком месте я оскроблял?
30 Fedor-1971
 
26.06.20
10:56
(26) Справочники.Абоненты.НайтиПоНаименованию("Гоголь Брик Федорович") - возвращает ССЫЛКУ, а не строку

ФИО - типа ссылка на пользователя или кого-то там?
31 Mythe
 
26.06.20
10:58
(30) А как ещё можно получить ссылку, не указывая конкретное значение?
32 Фрэнки
 
модератор
26.06.20
10:58
(27) Сообщить производит преобразования типа значение в Строку при выводе.

вот эта строка Справочники.Абоненты.НайтиПоНаименованию("Гоголь Брик Федорович") - возвращает Ссылку. Тип значения СправочникСсылка

и в запросе  |    Таксофоны.Абоненты.ФИО = &ФИО"
скорей всего, что Абоненты.ФИО - по ошибке ФИО - это тоже ссылка на справочник, а не строка.
Какой там текст запроса в консоле - его тут я в ветке не вижу.
33 Mythe
 
26.06.20
10:59
Потому что в некоторых запросах я ставил Объект. и все работало
34 Фрэнки
 
модератор
26.06.20
11:00
какой тип значения показывает окно Отладчика для вот этого

Объект.Наименование

что это? Он же пишет не только значение, но и тип - какой?
35 Mythe
 
26.06.20
11:00
(34) Щас посмотрю
36 Mythe
 
26.06.20
11:01
Строку возвращает
37 Fedor-1971
 
26.06.20
11:03
(31) как вариант, передать её параметром в функцию
Если хочешь вывести список телефонов, вызови ПолучитьСписокТелефонов(Объект.ССылка)

(36) теперь в конфигураторе посмотри что есть  Таксофоны.Абоненты.ФИО, какого типа
38 Mythe
 
26.06.20
11:04
(37) Там ссылка
39 Фрэнки
 
26.06.20
11:04
(36) Угу. А еще посмотри, что когда в Консоли запросов свой текст мучаешь, то там в Параметры запроса небось ручками заносишь конкретное нужное значение там тоже у тебя Строка?

теперь в конфигураторе посмотри что есть  Таксофоны.Абоненты.ФИО, какого типа
40 Mythe
 
26.06.20
11:04
По этому и не находит
41 Фрэнки
 
26.06.20
11:05
эврика
42 Mythe
 
26.06.20
11:06
(39) Я уже глянул где я писал Объект.что-то в других запросах и там ссылка, я уже понял что я так не смогу этот запрос сделать. Потому что в справочнике Абоненты Я создаю абонента как строку и уже везде на эту строку ссылаюсь
43 Fedor-1971
 
26.06.20
11:10
(42) ты список телефонов пытаешься вытащить из формы абонента?
44 vova1122
 
26.06.20
11:10
(42) Тогда так и пиши, НайтиПоНаимеванию
45 Фрэнки
 
26.06.20
11:10
Эту всю кухню кроме тебя никто не видит, а так как у тебя нет опыта, то также как и ты, и по такой как у тебя логике, никто делать не станет.
Ищи готовые примеры и учись на них писать не допуская путаницы в типах.
46 Фрэнки
 
26.06.20
11:12
Если это переделка из какой=то типовой, то скажи всем, какая это типовая, чтоб советовали из нужной кухни.

А если это самописка, то ее вообще никто никогда не видел и не угадает взамен тебя, что там и откуда и как правильно.
47 craxx
 
26.06.20
11:14
(0) конфликт имен. Проверяй реквизиты формы.
48 Mythe
 
26.06.20
11:16
Уже все исправил, переделал ссылку на строку
49 Mythe
 
26.06.20
11:16
Спасибо всем))
50 Mythe
 
26.06.20
11:16
Все работает
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший