|   |   | 
| 
 | Простой запрос и ошибка в чтении значения | ☑ | ||
|---|---|---|---|---|
| 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. Если результат запроса будет пустым, то ошибок не будет и вы отладчиком увидите, если проблемы будут. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |