|
Простой запрос и ошибка в чтении значения | ☑ | ||
---|---|---|---|---|
0
Iater
09.06.15
✎
01:07
|
Всем привет! Помогите, пожалуйста, справится с запросом - в консоли запросов всё работает идеально, а на практике выдает ошибку в чтении значения я хз почему:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.ДатаРождения КАК ДатаРождения |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.Наименование = &ФИО"; Запрос.УстановитьПараметр("ФИО", ФИО); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи.Следующий(); ДатаРождения = ВыборкаДетальныеЗаписи.ДатаРождения; Как я понял, проблема в позиционировании выборки на значении? Как же спозиционировать-то иначе? |
|||
1
Iater
09.06.15
✎
01:10
|
забыл скачать - в 8.3 работаю
|
|||
2
Сергиус
09.06.15
✎
01:11
|
(0)Что у тебя в параметре ФИО?
|
|||
3
Iater
09.06.15
✎
01:13
|
в ФИО - Иванов
я точку останова поставил - в ФИО точно нормально всё читает |
|||
4
France
09.06.15
✎
01:14
|
пока ВыборкаДетальныеЗаписи.Следующий() цикл
здесь песню поешь конецЦикла. и не будет ошибки.. |
|||
5
Сергиус
09.06.15
✎
01:15
|
(3)Запрос.УстановитьПараметр("ФИО", СокрЛП(ФИО));
|
|||
6
Iater
09.06.15
✎
01:16
|
у меня одно значение, не нужен цикл. Впрочем, поставил - ноль на массу. Не работает всё равно
|
|||
7
Iater
09.06.15
✎
01:17
|
в ФИО сейчас забил не Иванов, а цифру "1" - не работает хоть как ты СокрЛП или не сокр
|
|||
8
Сергиус
09.06.15
✎
01:19
|
(7)Так может нет такого сотрудника с наименованием "1" в базе?
|
|||
9
Iater
09.06.15
✎
01:19
|
Сергиус, есть... в консоли же всё верно выводит
|
|||
10
Сергиус
09.06.15
✎
01:22
|
ВыборкаДетальныеЗаписи.Количество() что говорит?
|
|||
11
Iater
09.06.15
✎
01:24
|
неопределено
|
|||
12
Сергиус
09.06.15
✎
01:29
|
Сохрани все в обработку, и выложи куда ть.
|
|||
13
Сергиус
09.06.15
✎
01:29
|
или можно по ТимВьюверу)
|
|||
14
France
09.06.15
✎
01:34
|
(6) сообщение об ошибке есть?.. если да, то текст сюда.
|
|||
15
Iater
09.06.15
✎
01:36
|
ошибки нет, просто не дает разницу дат вычислить т.к. дату рождения не может выцепить
|
|||
16
France
09.06.15
✎
01:39
|
а ФИО как устанавливается?? можно сюда текст??
|
|||
17
France
09.06.15
✎
01:42
|
в консоли небось параметры автоматически определяешь.. и выбор значения делаешь по кнопке выбора..
|
|||
18
Iater
09.06.15
✎
01:43
|
в форме документа делаю:
&НаСервере Функция ДатаРождения (ФИО) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.ДатаРождения КАК ДатаРождения |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.Наименование = &ФИО"; Запрос.УстановитьПараметр("ФИО", ФИО); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи.Следующий(); ДатаРождения = ВыборкаДетальныеЗаписи.ДатаРождения; Возврат ДатаРождения; КонецФункции &НаКлиенте Процедура ФИОФИОПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.ФИО.ТекущиеДанные; ДатаРождения = ДатаРождения(СтрокаТабличнойЧасти.ФИО); ДатаДокумента = Объект.Дата; Возраст = ДатаДокумента - ДатаРождения; СтрокаТабличнойЧасти.Возраст = Возраст; КонецПроцедуры |
|||
19
France
09.06.15
✎
01:46
|
смотри что тут " ДатаРождения = ДатаРождения(СтрокаТабличнойЧасти.ФИО);"
|
|||
20
Iater
09.06.15
✎
01:50
|
не понял что там?
|
|||
21
Вася Чез
09.06.15
✎
01:50
|
(18) ДатаДокумента и ДатаРождения это дата в секундах или что?
|
|||
22
Iater
09.06.15
✎
01:52
|
да плевать пока, в секундах наверняка )) у меня запрос не получается - вот что хреново
|
|||
23
France
09.06.15
✎
01:53
|
(20) тип значения.
|
|||
24
Iater
09.06.15
✎
01:55
|
France, объясни, пожалуйста, как для тупого )) ФИО передается в запрос - я это вижу, когда ставлю точку останова
|
|||
25
France
09.06.15
✎
01:59
|
(24) да, ты видишь фио, но не обязательно что это строка. а в запросе ты со строкой сравниваешь. в отладчике тип значения виден..
|
|||
26
Iater
09.06.15
✎
02:09
|
France, ФИО из формы передается как ссылка (тип СправочникСсылка.Сотрудники)
чета я не соображаю в чем проблема |
|||
27
Вася Чез
09.06.15
✎
02:11
|
(26) Проблема в том, что в консоли у тебя ФИО строка, а сейчас у ФИО какой тип? посмотри в отладчике, правой тапкой по ФИО во время отладки "Вычислить выражение".
|
|||
28
France
09.06.15
✎
02:14
|
СправочникСсылка.Сотрудники (27) (26) ДатаРождения = ДатаРождения(СтрокаТабличнойЧасти.ФИО.наименование);"
|
|||
29
France
09.06.15
✎
02:14
|
в консоли он как раз устанавливал правильное значение, а не строку, так как в консоли 1С-на сама тип определяет..
|
|||
30
Iater
09.06.15
✎
02:16
|
всё заработала, спасибо огромное!!
Дейсвительно из-за типа ФИО. Поставил: |
|||
31
Iater
09.06.15
✎
02:17
|
ДатаРождения = ДатаРождения(Строка(СтрокаТабличнойЧасти.ФИО));
и всё заработало |
|||
32
France
09.06.15
✎
02:24
|
(31) в другом месте такое преобразование боком вылезти может))
|
|||
33
Iater
09.06.15
✎
02:37
|
почему7
|
|||
34
Iater
09.06.15
✎
02:37
|
как по-другому сделать, чтобы всё было правильно и работало?
|
|||
35
France
09.06.15
✎
02:39
|
(33) у спр сотрудники представление "наименование". если бы был код - твой вариант не сработал бы (хотя, представление код вроде и не часто используется). нужно было явно указать ФИО.Наименование, либо в запросе делать фильтр на ссылку, а не на наименование..
|
|||
36
Simod
09.06.15
✎
06:51
|
Раньше было "модно" искать через НайтиПоНаименованию(), сейчас это делают через Запросы. Может пора разобраться что такое Ссылка и Объект, и как с ними работать?
|
|||
37
hhhh
09.06.15
✎
07:11
|
(34) ну, по-нормальному. Выбирать сотрудника из справочника, а не писать вручную фамилию.
|
|||
38
Вася Чез
09.06.15
✎
07:31
|
(37) может это особенность нетленки ТС — заполнять ТЧ вручную, хз правда зачем
|
|||
39
azt-yur
09.06.15
✎
07:47
|
У тебя уже ссылка на справочник имеется. Зачем писать целую функцию для получения даты рождения, да еще и с запросом к этому же справочнику?
Не проще ли ДатаРождения = СтрокаТабличнойЧасти.ФИО.ДатаРождения; |
|||
40
katc
09.06.15
✎
08:47
|
Выборка и пустой может быть.
Если ВыборкаДетальныеЗаписи.Следующий()= Истина Тогда ДатаРождения = ВыборкаДетальныеЗаписи.ДатаРождения; КонецЕсли; |
|||
41
ДенисЧ
09.06.15
✎
08:50
|
"Если ВыборкаДетальныеЗаписи.Следующий()= Истина Тогда "
три года. Без конфискации. |
|||
42
katc
09.06.15
✎
09:18
|
что Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Что если ВыборкаДетальныеЗаписи.Следующий() Цикл если запрос надо позиционировать на первой записи, как в этом случае, так что я амнистирован. |
|||
43
katc
09.06.15
✎
09:21
|
его запрос изначально предназначен вернуть одну запись, городить из него цикл нет ни какого смысла.
Ну а теперь расскажи за что в этом случае меня надо на 3 года? Чем конструкция Пока Выборка.Следующий() Цикл отличается от Если Выборка.Следующий() Тогда |
|||
44
Krolik Bezobraznik
09.06.15
✎
09:29
|
Чудес не бывает.
Перемудрил с типами значений передаваемых параметров. Ваш запрос ничего не возвращает. Далее у вас стоит процедура получения значения строки. Строк у вас нет, а вы упорно даете указание чтобы вернуть значение. Тут и проблема. ИМХО. Используйте конструкцию с циклом. Она более корректная. Если переживаете, что ваш запрос вернет более одной строки, то возвращайте в запросе ПЕРВЫЕ 1. Если результат запроса будет пустым, то ошибок не будет и вы отладчиком увидите, если проблемы будут. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |