Имя: Пароль:
1C
1C 7.7
v7: Ошибка в прямом запросе
0 Базис
 
naïve
22.12.16
18:45
Структура данных:
Справочник "ДСП_Аппараты"
   Периодический реквизит "СерийныйНомер"

Нужно найти на текущую дату элемент с этим серийником.

SELECT  
    СпрАпп.ID Как Ссылка,
    $ПоследнееЗначение.СпрАпп.СерийныйНомер(СпрАпп.ТекЭлемент,ТекДата, 86399000) Как СерийныйНомер
FROM
    $Справочник.ДСП_Аппараты Как СпрАпп
WHERE
    СерийныйНомер = СерийникДляПоиска

Получаю ошибку : Meta name parser error: виртуальное поле не найдено "$ПоследнееЗначение.СпрАпп.СерийныйНомер"
.

Что ей надо?
1 Базис
 
naïve
22.12.16
18:49
Отключусь на час.
2 palpetrovich
 
22.12.16
18:56
наверное точек много ...большей одной - уже много :)
3 Djelf
 
22.12.16
18:58
Синтаксис: $ПоследнееЗначение.<ВидОбъекта>.<Идентификатор>(Элемент,Дата)

Пример: $ПоследнееЗначение.Контрагенты.ОсновнойДоговор(:ТекЭлемент,:РабочаяДата) КАК [ОсновнойДоговор $Справочник.Договоры]
$ПоследнееЗначение.Контрагенты.ОсновнойДоговор($Жур.Контрагент,$Жур.ДатаДокумента) КАК [ОсновнойДоговор $Справочник.Договоры]

ИМХО: Парсер не понимает <ВидОбъекта>  в виде пседонима.
4 PZh
 
22.12.16
21:48

SELECT  
    СпрАпп.ID Как Ссылка,
    $ПоследнееЗначение.ДСП_Аппараты .СерийныйНомер(СпрАпп.ТекЭлемент,ТекДата, 86399000) Как СерийныйНомер
FROM
    $Справочник.ДСП_Аппараты Как СпрАпп
WHERE
    СерийныйНомер = СерийникДляПоиска


Что вы используете для прямых запросов? Я бы написал так:


SELECT  
    СпрАпп.ID Как Ссылка,
    $ПоследнееЗначение.ДСП_Аппараты .СерийныйНомер(СпрАпп.id,:ТекДата) Как СерийныйНомер
FROM
    $Справочник.ДСП_Аппараты Как СпрАпп
WHERE
    СерийныйНомер = :СерийникДляПоиска



Запрос.УстановитьТекстовыйПараметр("СерийникДляПоиска", 86399000);
Запрос.УстановитьТекстовыйПараметр("ТекДата", ТекущаяДата());
5 FN
 
23.12.16
20:00
рс=СоздатьОбъект("ODBCRecordSet");
    Мета=СоздатьОбъект("MetaDataWork");
    рс.УстановитьТекстовыйПараметр("ТекДата",ТекущаяДата());
    рс.УстановитьТекстовыйПараметр("ИДРеквизита",Мета.ИДРеквизитаСправочника("ДСП_Аппараты","СерийныйНомер"));
    рс.УстановитьТекстовыйПараметр("НужныйСерийник",СокрЛП(СерийникДляПоиска));
    рс.ВыполнитьИнструкцию("
    |SELECT top 10 Константы.OBJID [Объект $Справочник.ДСП_Аппараты]
    |    , Константы.VALUE Значение
    |FROM _1SCONST AS Константы With (NOLOCK)
    |WHERE 1=1
    |    AND Константы.DATE <= :ТекДата
    |    AND Константы.ID = :ИДРеквизита
    |    AND Константы.Value = :НужныйСерийник
    |order by Константы.DATE desc
    |").ВыбратьСтроку();

Как-то так
6 Базис
 
naïve
26.12.16
11:23
(5) Отлично, быстрый получился запрос. Но в колонке "Значение" отдаёт идентификатор, 3TF4 и подобные.
7 Это_mike
 
26.12.16
11:24
(6) дык типизируй
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший