v7: Тип Неопределенный и прямой запрос #679037


#0 by vinogradъ
Помогите с решением проблемы. Есть справочник,в котором хранятся некие значения на документ. Основные реквизиты: Товар, Склад, ТипЗначения, Документ, Значение и др. Значение имеет тип Неопределенный. Может хранить в себе число или ссылку. В скуле имеет тип char. Как получаю значения: Тут все гуд: если получаю число, то возвращается число, если ссылку на элемент справочника - тоже что надо, благодаря типизации. Но если использую функцию GetValueByDoc в запросе (прямом), то тут беда: при получении числа возвращает 'N                 29640', ссылки - 'B1  DK     F           '. Как тут получить нужное значение? Если надо, сама функция: CREATE function GetValueByDoc(@tov char, @skl char, @type char, @doc char) returns char begin declare char set = 0 select top 1      = p.sp9214 from sc9210 as p (nolock) where order by p.sp9265 desc return end Чую, что может как-то подвязать поле TSP9214, где как я понимаю хранится тип значения SP9214? Помогите кто чем может.
#1 by Rie
А если просто первую букву глянуть? N - число, S - строка, B - справочник, O - документ (если мне память не изменяет). И в зависимости от этого - интерпретировать "хвост".
#2 by vinogradъ
делать еще одну функцию по разбору строки, которую вернула функция из и вызывать функции, которые буду возвращать в зависимоcти от результата разбора либо строку с ID справочника, либо число?
#3 by Rie
Не совсем понятно, как эта функция используется в запросе. Может, проще не значение извлекать, а то значение, что из запроса, к 23-символьному преобразовывать.
#4 by vinogradъ
например, тут должно быть как число: select ... $ds.Количество * dbo.GetValueByDoc(Ост.Субконто1, Ост.Субконто2, $Перечисление.ТипыЗначений.Цена, Ост.Субконто3) as Сумма Здесь как ИД select ... Просто раньше тип реквизита Значение был Число, но понадобилось, чтобы хранились и ссылки. Поэтому и сделал тип Неопределенный. В разовом получении значения помогает типизация, а как получить значение нужного типа в запросе - не знаю.
#5 by Rie
Тогда остаётся только анализировать первый символ 23-значного значения, IMHO. Из TSP-полей тип не извлечь. Пару слов на эту тему есть здесь: .
#6 by vinogradъ
Мысли вслух: Может, как вариант, завести новый реквизит ЗначениеСсылка с типом Справочник, а текущий переименовать в ЗначениеЧисло и вернуть тип Число? Тогда сделать функцию с возвращаемым значением numeric и еще одну с char?
#7 by vinogradъ
Блин, еще и дату надо хранить в Значение... Но дату можно писать в char и, получая, делать cast as datetime
#8 by Rie
Так а что мешает первый символ проанализировать?
#9 by vinogradъ
потом делать, к примеру, cast(ltrim(<значение>) as numeric(14,2)) для числа? для остальных типов как?
#10 by Rie
Для ссылок - просто вырезать 13 символов, начиная с 3-го (или 9 - пропустив вид). Для строк - взять хвост.
#11 by vinogradъ
да, туплю. спасибо, попробую
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С