Имя: Пароль:
1C
1С v8
есть вопрос по поводу параметра в запросе по УникальномуИдентификатору
,
0 байт
 
28.10.11
13:01
Здравствуйте, коллеги, есть следующий вопрос по поводу установки в запрос поиска по УникальномуИдентификатору, кто-нибудь делал такое что-то не получается?
1 Fragster
 
гуру
28.10.11
13:01
рекомендую автору прочитать то, что он написал.
2 Лефмихалыч
 
28.10.11
13:02
ты хочешь ссылку найти по гуиду в запросе?
3 el-gamberro
 
28.10.11
13:03
Как получить ГУИД в запросе?
4 байт
 
28.10.11
13:04
(2) в базе у клиента болтается элемент <Объект не найден...> хочу исключить его в отчете, установив параметр в запросе.
5 Fragster
 
гуру
28.10.11
13:04
(4) это неправильный подход
6 Diabolicum 1C
 
28.10.11
13:05
(4) Какой-то не совсем корректный подход. Может нужно разобраться что это за объект и почему он не найден?
7 Fragster
 
гуру
28.10.11
13:05
а вообще - условие в запросе
Поле.Ссылка Есть не NULL
8 el-gamberro
 
28.10.11
13:05
(7) Не сработает
9 Sammo
 
28.10.11
13:06
(4) не правильный подход :)
А так - это объект, по которому ссылка есть, а самого объекта нет. Как это обработать в запросе - в поиск
10 Fragster
 
гуру
28.10.11
13:06
(8) та ладно!
11 Diabolicum 1C
 
28.10.11
13:06
Единственное что можно сделать - это получить по ГУИДу ссылку, а уже ее подставлять в запрос.
12 Diabolicum 1C
 
28.10.11
13:07
(10) не сработает. Ссылкf не будет NULL
13 el-gamberro
 
28.10.11
13:07
(10) А. ты там точку и ссылку указал. Ну тогда да. :)
14 байт
 
28.10.11
13:07
(6) база древняя пережило много поколений программистов и поэтому разбираться времени нет нужно просто не выводить его
15 el-gamberro
 
28.10.11
13:07
А может и нет :)
16 Serginio1
 
28.10.11
13:09
17 Diabolicum 1C
 
28.10.11
13:10
(15) Запись с ссылкой на удаленный объект есть в базе, соответственно, будет выбрана и NULL никогда не будет. Иначе не возник бы сам вопрос.
(0) получи по ГУИДу ссылку, а уже ее подставлять в запрос в качестве параметра. Тип объекта надеюсь тебе известен?
(16) А точно 8.2?
18 Milok
 
28.10.11
13:10
Поле.Ссылка <> Неопределено
19 Fragster
 
гуру
28.10.11
13:10
Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("УИД", Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор));
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ВЫРАЗИТЬ(&УИД КАК Справочник.Контрагенты) КАК Поле1";
   Сообщить(Запрос.Выполнить().Пустой());
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ВЫРАЗИТЬ(&УИД КАК Справочник.Контрагенты) КАК Поле1
   |ГДЕ
   |    ВЫРАЗИТЬ(&УИД КАК Справочник.Контрагенты).Ссылка ЕСТЬ НЕ NULL ";
   Сообщить(Запрос.Выполнить().Пустой());
20 Serginio1
 
28.10.11
13:13
(17) На тот момент был 8.2.12.96
Но на 14 тоже вроде тестили, та ошибка
21 Diabolicum 1C
 
28.10.11
13:15
(20) Там, скорее всего, действительно что-то связанное с самим типом УникальныйИдентификатор. По сути - что есть УИД у платформы? binary?
22 байт
 
28.10.11
13:16
(17) Платформа 8.1.14.15.    
я делал так:
СтрокаGUID = "11dfdcc9-a917-fe31-fde7-4902ad446cf0";
ГУИД = Новый УникальныйИдентификатор(СтрокаGUID);

Запрос
.....

Запрос.УстановитьПараметр("Ссылка", Справочники.Контрагенты.ПолучитьСсылку(УникальныйИдентификатор));

но вместо этого он подставляет другой гуид, может есть возможность его найти?
23 Serginio1
 
28.10.11
13:17
(4) Проверяй на поиск значения реквизита  в таблице хранения через левое соединение с Есть Null, или на вхождение в подзапрос
24 Diabolicum 1C
 
28.10.11
13:19
(22) Кстати (23), верно замечено.
25 Diabolicum 1C
 
28.10.11
13:20
(22) И что значит "вместо этого он подставляет другой гуид". Вместо какого? И какой это - другой?
26 Serginio1
 
28.10.11
13:21
27 Serginio1
 
28.10.11
13:22
Да и гуид в 1С по другому формируется Гений1С гдето писал
Функция ПолучитьGUIDПоУникальномуИдентификатору(UUID1)
   UUID=ВРЕГ(UUID1);
   ч1 = Сред(UUID,20,4);
   ч2 = Сред(UUID,25,12);
   ч3 = Сред(UUID,15,4);
   ч4 = Сред(UUID,10,4);
   ч5 = Сред(UUID,1,8);
   Возврат "0x" + ч1 + ч2 + ч3 + ч4 + ч5;
КонецФункции
28 Serginio1
 
28.10.11
13:24
29 Diabolicum 1C
 
28.10.11
13:25
(27) Неверно. В цитате описано преобразование GUID 1С в UID SQL Server. Вот как раз это и есть подводный камень для метода (21). Где-то в сети попадалось обширное обсуждение этого вопроса.
30 Diabolicum 1C
 
28.10.11
13:27
Дело в том, что 1С некорректно работает в том случае, если в поля binary(16) записывается значение полученное функцией NewID(). Там огромный пост этому посвещен был. В итоге сошлись на том, что байты UID SQL Server нужно переставлять в ту последовательность, которая принята 1С.
31 Diabolicum 1C
 
28.10.11
13:28
(27) Собственно, что-то опять нас куда-то не туда понесло:)
32 байт
 
28.10.11
13:32
(25) например вместо "ad446cf0-4902-fde7-11df-dcc9a917fe31" я получаю в результате "11dfdcc9-a917-fe31-fde7-4902ad446cf0".
33 Sammo
 
28.10.11
13:32
Кстати, еще как вариант внутреннее соединение с таблицей занчения.
Например, реквизит тип справочник номенклатура, тогда соединение со справочником номенклатура по ссылке