Имя: Пароль:
1C
 
Ошибка чтения значения
,
0 ivangrant
 
23.10.19
16:16
Тысячу тем нашёл и ни одной нет решения :(
При выполнении запроса выпадает "ошибка чтения значения" по всем отбираемым полям в запросе. Ошибку ловил в отладчике.
Пробовал и ссылки запихивать и строки, и в отбор и в запрос. Бестолку.
Консолькой всё показывает.
В запросе не хочет. Запрос находится во внешнем обработчике.
Вот сам он:
[code]Функция ПолучитьРуководителя(Организация, Дата)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ОтветственныеЛица.Руководитель КАК Руководитель,
    |    ОтветственныеЛицаПолномочия.Должность КАК Должность,
    |    ОтветственныеЛицаПолномочия.ОснованиеПодписи
    |ИЗ
    |    РегистрСведений.СведенияОбОтветственныхЛицах.СрезПоследних КАК ОтветственныеЛица
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрСведений.ОснованияПолномочийОтветственныхЛиц КАК ОтветственныеЛицаПолномочия
    |    ПО
    |    ОтветственныеЛица.Организация = ОтветственныеЛицаПолномочия.Организация
    |    И ОтветственныеЛица.Руководитель = ОтветственныеЛицаПолномочия.ФизическоеЛицо
    |ГДЕ
    |    ОтветственныеЛица.Период <= &Период
    |    И ОтветственныеЛица.Организация = &Организация";
    
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Период", Дата);
    Выбор = Запрос.Выполнить().Выбрать();
    Если Выбор.Следующий() Тогда
        Возврат Новый Структура ("Руководитель, Должность, ОснованиеПодписи", Выбор.Руководитель, Выбор.Должность, Выбор.ОснованиеПодписи);
    КонецЕсли;
    Возврат Неопределено;
КонецФункции
[/code]

Где ещё посмотреть варианты решения?
1 ДенисЧ
 
23.10.19
16:17
На какой строке отладчик останавливал?
2 Deon
 
23.10.19
16:20
(0) В какой момент ошибка выпадает?
3 Deon
 
23.10.19
16:21
Кстати, предполагаю, что параметр &Период должен быть не в секции ГДЕ, а в параметрах виртуальной таблицы СрезПоследних
4 hhhh
 
23.10.19
16:25
(0) да, вот так пробуй

    |ИЗ
    |    РегистрСведений.СведенияОбОтветственныхЛицах.СрезПоследних(&Период, Организация = &Организация) КАК ОтветственныеЛица

а ГДЕ выкинь. Это оно у тебя от временного помутнения в мозгу влезло.
5 GROOVY
 
23.10.19
16:30
Да и "Возврат Неопределено" выкинуть можно.
6 Chameleon1980
 
23.10.19
16:32
Автор не дошёл до выбор.следующий
7 ivangrant
 
23.10.19
16:32
(1) Вот здесь: Если Выбор.Следующий() Тогда
И потом выборку делал. В условие не заходит. В КонецЕсли та же беда.
8 ДенисЧ
 
23.10.19
16:33
(7) А надо смотреть на Возврат;
На крайний случай - смотреть на Выбор.Количество()
9 ДенисЧ
 
23.10.19
16:33
А если выборка пустая, то явно параметры не те. Или база не та.
10 Chameleon1980
 
23.10.19
16:37
Результат запроса значит пустой
Учти ситуацию и верни пустую структупу
А почему результат пустой это не вопрос про ошибку чтения.
тут ты под условия не попал.
я тебе в (6)написал ответ на 0
11 hhhh
 
23.10.19
16:39
(7) на Если Выбор.Следующий() Тогда

на надо останавливаться. Там выдаст ошибку "ошибка чтения значения"

после смотрите.
12 ivangrant
 
23.10.19
16:41
ДА! Заработала! Перенес условия в параметры вирт. таблицы.
Я прошу прощения, недавно только запросы освоил))) почему не срабатывало условие в предложении ГДЕ ?
13 ivangrant
 
23.10.19
16:41
Благодарю за помощь.
14 ДенисЧ
 
23.10.19
16:41
(12) Потому что у тебя виртуальная таблица, а не обычная
15 Deon
 
23.10.19
16:41
(0) А покажи полный текст ошибки
16 hhhh
 
23.10.19
16:43
(12) потому что период больше твоей даты. А ты написал

|ГДЕ
    |    ОтветственныеЛица.Период <= &Период
17 Deon
 
23.10.19
16:43
Мне думается, что ошибка вообще в другой функции живет, которая не ожидает получить Неопределено и пытается через точку из этого Неопределено читать реквизиты
18 ivangrant
 
23.10.19
17:51
Ну и в догонку. Почти такой же по структуре запрос. Но с той же ошибкой.
Опять что-то недосмотрел?

[code]
Функция ПолучитьФИО(Физлицо, Период)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ФИОФизическихЛицСрезПоследних.Фамилия КАК Фамилия,
    |    ФИОФизическихЛицСрезПоследних.Имя КАК Имя,
    |    ФИОФизическихЛицСрезПоследних.Отчество КАК Отчество
    |ИЗ
    |    РегистрСведений.ФИОФизическихЛиц.СрезПоследних(&Период, ФизическоеЛицо = &ФизЛицо) КАК ФИОФизическихЛицСрезПоследних";
    
    Запрос.УстановитьПараметр("Период", Период);
    Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
    Выбор = Запрос.Выполнить().Выбрать();
    Если Выбор.Следующий() Тогда
        Возврат Новый Структура("Фамилия, Имя, Отчество", Выбор.Фамилия, Выбор.Имя, Выбор.Отчество);
    КонецЕсли;    
    Возврат Неопределено;
КонецФункции
[/code]
19 hhhh
 
23.10.19
17:55
(18) текст ошибки давай. и номер строки там должен быть
20 ivangrant
 
23.10.19
18:07
(19) Не правильно сформулировал.
Ошибки нет.Но параметры не передаются, и структура не формируется.
Ловил отладчиком ошибку: "ошибка чтения значения". Смотрел в КонецЕсли.
В консоли тот же запрос формируется без проблем.
Период передаю - Текущую дату.
В Физическое лицо - Сотрудника из справочника Сотрудники.
21 ivangrant
 
23.10.19
18:09
Запрос: РегистрСведений.ФИОФизическихЛиц.СрезПоследних (Записей в результате: 1)            

Фамилия    Имя    Отчество    ФизическоеЛицо
Андреев    Андрей    Андреевич    Андреев Андрей Андреевич

Это итог запроса в отладчике.
Программист всегда исправляет последнюю ошибку.