Имя: Пароль:
1C
1С v8
Помогите с запросом!!! Значение не является значением объектного типа.
, , ,
0 листопад
 
16.05.15
20:00
Мне надо получить номер трудового договора сотрудника, который записан в док-те ПриемНаРаботу. Но выдает ошибку: Значение не является значением объектного типа (ТДНомер)

Вот код:

&НаСервере
Функция ВыборкаНаСервере()
//здесь запрос
Пока  РезультатЗапроса.Следующий() Цикл
    
    Результат = "";
    
    Если ЗначениеЗаполнено(РезультатЗапроса.СотрудникНомерДоговора) Тогда
        ТДНомер = РезультатЗапроса.СотрудникНомерДоговора;
    Иначе    
        ДанныеДоговора = ПолучитьНомерДоговора(РезультатЗапроса.ФЛ);
        ТДНомер = ДанныеДоговора.ТДНомер;   //вот здесь ошибка: Значение не является значением объектного типа (ТДНомер)
    КонецЕсли;
    
    Если ТДНомер <> Неопределено Тогда
        Результат = "по договору № "+ ТДНомер;
    КонецЕсли;
    
КонецФункции

&НаСервере
Функция ПолучитьНомерДоговора(ФЛ)
    
    Структура = Новый Структура;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    КадроваяИсторияСотрудников.ФизическоеЛицо.Наименование,
    |    КадроваяИсторияСотрудников.Регистратор.ТрудовойДоговорНомер КАК ТДНомер
    |ИЗ
    |    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    |ГДЕ
    |    КадроваяИсторияСотрудников.Регистратор ССЫЛКА Документ.ПриемНаРаботу
    |    И КадроваяИсторияСотрудников.ФизическоеЛицо = &ФЛ
    |
    |УПОРЯДОЧИТЬ ПО
    |    КадроваяИсторияСотрудников.Регистратор.Дата УБЫВ";
    
    Запрос.УстановитьПараметр("ФЛ", ФЛ);
    
    Выборка  = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда     
        
        Если НЕ ЗначениеЗаполнено(Выборка.ТДНомер) Тогда
            Структура.Вставить("ТДНомер", Неопределено);
        Иначе
            Структура.Вставить("ТДНомер", Выборка.ТДНомер);
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Структура;
    
КонецФункции // ПолучитьНомерДоговора()
1 User_Agronom
 
16.05.15
20:01
Там NULL найден?
2 фобка
 
16.05.15
20:01
Выборка пустая, ДанныеДоговора = неопределено
3 ДенисЧ
 
16.05.15
20:02
ТДНомер = ДанныеДоговора.ТДНомер;
Если тдНомер <> Неопределено...
4 ДенисЧ
 
16.05.15
20:02
Точнее - ДанныеДоговора <> Неопределено
5 RomanYS
 
16.05.15
20:03
(2) +1 возвращается пустая структура
6 фобка
 
16.05.15
20:03
Не, там структура всегда
7 фобка
 
16.05.15
20:05
Походу (1) прав
8 листопад
 
16.05.15
20:05
Вот что в отладчике показывает: http://s017.radikal.ru/i443/1505/cc/4f58861f7eba.jpg
9 фобка
 
16.05.15
20:06
(8) это нормально, ты же в цикл не вошел
10 фобка
 
16.05.15
20:07
В условие
11 RomanYS
 
16.05.15
20:07
(8) так ты шаг сделай, у тебя выборка еще не инициализирована
12 листопад
 
16.05.15
20:07
Т.е. после строчки Если Выборка.Следующий() Тогда  

Сразу переходит на КонецЕсли;
13 RomanYS
 
16.05.15
20:08
(12) тебе об этом и говорят: выборка пустая
14 фобка
 
16.05.15
20:09
(12) значит запрос.выполнить().пустой() = истина
15 листопад
 
16.05.15
20:09
Он даже в цикл не заходит!

(13) В консоли запросов эта Выборка не пустая!!! Показывает номер договора!
16 фобка
 
16.05.15
20:10
(15) нет
17 RomanYS
 
16.05.15
20:12
(15) значит с параметрами где-то накосячил.
Вопрос: зачем тебе запрос в цикле, почему сразу не получать номер в основном запросе?
18 листопад
 
16.05.15
20:13
Вот в консоли результат есть: http://s011.radikal.ru/i315/1505/20/04b6d59d1e8e.jpg
19 ДенисЧ
 
16.05.15
20:15
в консоли ФЛ один, в коде другой
20 листопад
 
16.05.15
20:16
(19) Почему Вы так решили? Я проверяла, в коде обработки, в параметре ФЛ, передается она же.
21 ДенисЧ
 
16.05.15
20:18
(20) Потому что результат разный
22 фобка
 
16.05.15
20:21
Это очень просто проверить
Сообщить(ПолучитьНомерДоговора(РезультатЗапроса.ФЛ));
Сообщить(ПолучитьНомерДоговора(ПараметрИзКонсоли));
23 листопад
 
16.05.15
20:25
Нет, вот параметр ФЛ, там она же: [url=http://my-files.ru/1irw4e]http://my-files.ru/1irw4e[/url]
24 листопад
 
16.05.15
20:26
25 RomanYS
 
16.05.15
20:27
(23) СТРОКА?
26 листопад
 
16.05.15
20:29
(22) Написала эту проверку через Сообщить: ничего не выдал.
27 RomanYS
 
16.05.15
20:30
(23) у тебя в параметре строка, а должна быть ссылка
28 листопад
 
16.05.15
20:33
(25)  Вы гений!!! Точно!!! Всем СПАСИБО!!! :*)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.