Имя: Пароль:
1C
1С v8
Запрос по регистру свойств
0 spectre1978
 
17.05.13
08:19
1С8.2 УПП. У контрагента есть свойство НомерВнутриСети, Число [5]. Делаем запрос:

"ВЫБРАТЬ
|    К.Ссылка КАК Контрагент    
|ИЗ
|    Справочник.Контрагенты КАК К,
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
|ГДЕ
|    НЕ К.ПометкаУдаления И
|    К.ИНН = &ИНН И
|    К.КПП = &КПП И
|    ЗСО.Объект = К.Ссылка И
|    ЗСО.Свойство.Наименование = ""НомерВнутриСети"" И
|    ЗСО.Значение = &НомерВнутриСети";

Запрос работает, но в случае если передать НомерВнутриСети числом, то возвращает примерно половину записей, а если строкой, то остальную половину. Пока вышел из положения извращенно:

"ВЫБРАТЬ
|    К.Ссылка КАК Контрагент    
|ИЗ
|    Справочник.Контрагенты КАК К,
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
|ГДЕ
|    НЕ К.ПометкаУдаления И
|    К.ИНН = &ИНН И
|    К.КПП = &КПП И
|    ЗСО.Объект = К.Ссылка И
|    ЗСО.Свойство.Наименование = ""НомерВнутриСети"" И
|    (ЗСО.Значение = &НомерВнутриСетиЧ ИЛИ ЗСО.Значение = &НомерВнутриСетиС)";

и передаю два параметра - один в виде строки, другой в виде числа.
Пробовал использовать ВЫРАЗИТЬ (ЗСО.Значение КАК ... Число, Строка, запрос с этой конструкцией стал работать существенно дольше, а результат тот же.

Как сделать правильно?
1 1Сергей
 
17.05.13
08:20
соединение юзай
2 shuhard
 
17.05.13
08:21
(0)[Как сделать правильно?]
правильно сделать у контрагента реквизит, загрузить в него текущие значения и не лохматить бабушку
3 Jonny_Khomich
 
17.05.13
08:21
(2) если она типовая, то не лучший вариант
4 spectre1978
 
17.05.13
08:23
Реквизит не хочу. Свойства отличная тема, я очень рад что их в восьмерке запилили. Хочу чтобы вся пристыкованная инфа работала на них.
5 spectre1978
 
17.05.13
08:46
(1), переписал
"
ВЫБРАТЬ
   К.Ссылка КАК Контрагент    
ИЗ
   Справочник.Контрагенты КАК К
   СОЕДИНЕНИЕ (
       ВЫБРАТЬ
           ЗСО.Объект, ЗСО.Значение КАК НомерВнутриСети
       ИЗ    
           РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
       ГДЕ
           ЗСО.Свойство.Наименование = "НомерВнутриСети" И
           ВЫРАЗИТЬ (ЗСО.Объект КАК Справочник.Контрагенты) ССЫЛКА Справочник.Контрагенты И
           ЗСО.Значение = &НомерВнутриСети    
   ) Свойства
   
   ПО К.Ссылка = Свойства.Объект

ГДЕ
   К.ИНН = &ИНН И К.КПП = &КПП    
"

Эффект один в один тот же что и был. Вы что имели в виду, можно поточнее?
6 Rounder
 
17.05.13
09:22
(0) А ты уверен, что у тебя верным типом заполнено свойство?
7 Rounder
 
17.05.13
09:24
с подобным сталкивался - вот тема v8: Динамический список. Не работает поиск по числовым полям.
Полагаю, что все же свойство заполнено не данными двух типов.
8 spectre1978
 
17.05.13
09:35
Ну вообще-то там после того как создал свойство и внес в него чего-нибудь - тип никто изменить уже не может. Так что по идее кривым типом заполняться не должно. Но похоже, верной мыслью будет выбрать и принудительно перезаписать значения в регистре.
9 1Сергей
 
17.05.13
09:54
(5)
      ГДЕ
           ЗСО.Свойство.Наименование = "НомерВнутриСети" И
           ВЫРАЗИТЬ (ЗСО.Объект КАК Справочник.Контрагенты) ССЫЛКА Справочник.Контрагенты И
           ЗСО.Значение = &НомерВнутриСетиЧисло ИЛИ ЗСО.Значение = &НомерВнутриСетиСтрока
10 unregistered
 
17.05.13
09:54
Уже вторая ветка за утро где в операторе сравнения ССЫЛКА используется функция ВЫРАЗИТЬ.

В чем прикол? Я может чего не знаю?...
11 spectre1978
 
17.05.13
10:09
Все, вопрос снят. Проблема действительно в том, что в регистре оказались значения разных типов. Виновата, предположительно, процедура экспорта из старой системы, которая записала часть значений в виде строки. Всем спасибо!
12 1Сергей
 
17.05.13
10:15
(11) просто не нужно менять тип свойства, когда уже внесены данные. Или же надо преобразовать после таких изменений
13 spectre1978
 
17.05.13
10:43
Его руками и нельзя менять, если хотя бы одно значение записано. Но вот обработочкой пихнуть какого-нибудь говнеца в регистр - как делать нечего. Что и произошло :(