Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Условие по списку с неопределёнными значениями (число прочтений - 5656 )
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Условие по списку с неопределёнными значениями
18. Декабря 2012 :: 10:19
Печать  
ДОброго дня. Условия задачи :

1.Есть справочник с тремя полями неопределённого вида
2. Надо в прямом запросе установить фильтр по любому из этих полей списком. В список могут входить любые типы значений.

Как делал :

методом тыка и отладки обнаружил что при использовании модификатора "~~" значение ссылочного типа представлено строкой типа "B1  3R    7C   ". А дальше ступор. метод

МД.ЗначениеВДлиннуюСтрокуБД()

даёт значение для типов "справочник", "документ" и т.п. Т.е. строка фильтра получается неполной. Выкрутился "криво" но как получилось. Покурив содержимое таблицы этого справочника обнаружил что для каждого типа данных есть своя "добавка" к строке возвращаемой МД.ЗначениеВДлиннуюСтрокуБД(). А именно :

Если ТипЗначенияСтр(ОтборКП.Значение)="Документ" Тогда
                                   Добавка="O1";
                             ИначеЕсли ТипЗначенияСтр(ОтборКП.Значение)="Справочник" Тогда
                                   Добавка="B1";
                             ИначеЕсли ТипЗначенияСтр(ОтборКП.Значение)="Число" Тогда
                                   Добавка="N";        
                             ИначеЕсли ТипЗначенияСтр(ОтборКП.Значение)="Строка" Тогда
                                   Добавка="S";
                             ИначеЕсли ТипЗначенияСтр(ОтборКП.Значение)="Дата" Тогда
                                   Добавка="D";
                             ИначеЕсли ТипЗначенияСтр(ОтборКП.Значение)="Перечисление" Тогда
                                   Добавка="E1";      
                             КонецЕсли;

Но некрасиво это. универсальности нет да и стрёмно - вдруг не всё "выкурил". Может кто чего подскажет?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по списку с неопределёнными значениями
Ответ #1 - 18. Декабря 2012 :: 10:26
Печать  
Как то ты путаешь неопределенного вида и типа.

Если вид всего лишь не определен, то слева добавить вид справочника и привет (4+9=13)
  
Наверх
 
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Условие по списку с неопределёнными значениями
Ответ #2 - 18. Декабря 2012 :: 10:31
Печать  
МД.ЗначениеВСамуюДлиннуюСтрокуБД()

  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #3 - 18. Декабря 2012 :: 10:33
Печать  
Eprst писал(а) 18. Декабря 2012 :: 10:26:
Как то ты путаешь неопределенного вида и типа.

Если вид всего лишь не определен, то слева добавить вид справочника и привет (4+9=13)



"Ничего я не путаю" (с)
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #4 - 18. Декабря 2012 :: 10:34
Печать  
Bill писал(а) 18. Декабря 2012 :: 10:31:
МД.ЗначениеВСамуюДлиннуюСтрокуБД()




Ха, помню - вроде где то видел такое но в документашке по 1с++ не нашёл. попробую. сенькс
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по списку с неопределёнными значениями
Ответ #5 - 18. Декабря 2012 :: 10:42
Печать  
Еще как путаешь.

Определен вид и тип - 9
Определен только тип  13
Неопределен тип и вид - 23

тебе последнего, судя по ЗначениеВСамуюДлиннуюСтрокуБД
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #6 - 18. Декабря 2012 :: 10:45
Печать  
Eprst писал(а) 18. Декабря 2012 :: 10:42:
Еще как путаешь.

Определен вид и тип - 9
Определен только тип  13
Неопределен тип и вид - 23

тебе последнего, судя по ЗначениеВСамуюДлиннуюСтрокуБД



Так а я про что? внимательно читаем.....

методом тыка и отладки обнаружил что при использовании модификатора "~~" значение ссылочного типа представлено строкой типа "B1  3R    7C   ". А дальше ступор. метод

МД.ЗначениеВДлиннуюСтрокуБД()

даёт значение для типов "справочник", "документ" и т.п. Т.е. строка фильтра получается неполной. Выкрутился "криво" но как получилось. Покурив содержимое таблицы этого справочника обнаружил что для каждого типа данных есть своя "добавка" к строке возвращаемой МД.ЗначениеВДлиннуюСтрокуБД(). А именно :

мне пришлось руками формировать строку длиной 23 через добавку в зависимости от типа данных (тип мне известен из метаданных. в этих трёх реквизитах справочника - значения реквизитов документов конфигурации). Я спросил - как такую строку сформировать "не руками". ответ получил. пояснил что метода про саму длинную строку в алсе и описухе с этого форума нет. всё
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по списку с неопределёнными значениями
Ответ #7 - 18. Декабря 2012 :: 10:47
Печать  
Конечно читаем:

1.Есть справочник с тремя полями неопределённого вида

ЗЫ: на счет описалова, это из СП:


Цитата:
ЗначениеВСамуюДлиннуюСтрокуБД(<?>)
Синтаксис:
ЗначениеВСамуюДлиннуюСтрокуБД(<Object>)
Назначение:
преобразует ссылочный тип данных 1С (Справочник, документ, перечисление), а также простые типы (Число, Строка, Дата) во внутренние представление системы, строку для хранения в реквизите типа Неопределенный.
Возвращаемое значение:
Строка 23 символа.
Параметры:
<Object> - любой хранимый тип.


это в доке:

http://www.1cpp.ru/docum/icpp/html/ODBC.html#valuetosuperlongdbstring
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #8 - 18. Декабря 2012 :: 10:54
Печать  
мля.. тебе скрин прислать? или доку которая у меня есть? ты же меня не первый день в курсе. Неужели думаешь что я бы спрашивал не перелопатив доку и примеры?

версия алса - 1С++ 1.8.0.2
дока в текстовом виде из ссылки http://www.1cpp.ru/forum/YaBB.pl?num=1148874473

то что ты преводишь - у меня нет. щас качну и сохраню
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по списку с неопределёнными значениями
Ответ #9 - 18. Декабря 2012 :: 11:20
Печать  
Улыбка)

да не злись ты

просто твой вопрос в (0) может ввести в заблуждение
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #10 - 18. Декабря 2012 :: 11:29
Печать  
Eprst писал(а) 18. Декабря 2012 :: 11:20:
Улыбка)

да не злись ты

просто твой вопрос в (0) может ввести в заблуждение



да я не злюсь. просто до 3-х ночи голову ломал как сделать ;(
  
Наверх
 
IP записан
 
Bill
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 64
Зарегистрирован: 04. Ноября 2008
Re: Условие по списку с неопределёнными значениями
Ответ #11 - 18. Декабря 2012 :: 12:04
Печать  
Стрелок писал(а) 18. Декабря 2012 :: 11:29:
Eprst писал(а) 18. Декабря 2012 :: 11:20:
Улыбка)

да не злись ты

просто твой вопрос в (0) может ввести в заблуждение



да я не злюсь. просто до 3-х ночи голову ломал как сделать ;(


На крайняк можно было так сделать:
Код
Выбрать все
МД.УстановитьТекстовайПараметр("Парам", ЗначениеПарам);
ЗначениеПарам23 = МД.ОбрМетаСКЛ(":Парам~~"); 


Улыбка
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Условие по списку с неопределёнными значениями
Ответ #12 - 20. Декабря 2012 :: 08:06
Печать  
Если по этим полям индексов нет, то можно чуть-чуть схитрить:
Для ссылочных типов ид13 является уникальным, хоть 7.7 это официально и не признает.

Соответственно, если отбросить базовые типы - то можно фильтровать по "Substring(Реквизит, 3, 13) in (...)".

Но если по этим полям есть индексы - то надо внимательно курить, на сколько реально использование этих индексов.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Условие по списку с неопределёнными значениями
Ответ #13 - 21. Декабря 2012 :: 05:29
Печать  
Satans Claws писал(а) 20. Декабря 2012 :: 08:06:
Если по этим полям индексов нет, то можно чуть-чуть схитрить:
Для ссылочных типов ид13 является уникальным, хоть 7.7 это официально и не признает.

Соответственно, если отбросить базовые типы - то можно фильтровать по "Substring(Реквизит, 3, 13) in (...)".

Но если по этим полям есть индексы - то надо внимательно курить, на сколько реально использование этих индексов.

ID является уникальным в пределах своей таблицы (_1sjourn, справочника или шапки документа)
  
Наверх
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Условие по списку с неопределёнными значениями
Ответ #14 - 21. Декабря 2012 :: 07:25
Печать  
leshik писал(а) 21. Декабря 2012 :: 05:29:
Satans Claws писал(а) 20. Декабря 2012 :: 08:06:
Если по этим полям индексов нет, то можно чуть-чуть схитрить:
Для ссылочных типов ид13 является уникальным, хоть 7.7 это официально и не признает.

Соответственно, если отбросить базовые типы - то можно фильтровать по "Substring(Реквизит, 3, 13) in (...)".

Но если по этим полям есть индексы - то надо внимательно курить, на сколько реально использование этих индексов.

ID является уникальным в пределах своей таблицы (_1sjourn, справочника или шапки документа)


Я про ид13.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать