Имя: Пароль:
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
Кстати, еще как вариант внутреннее соединение с таблицей занчения.
Например, реквизит тип справочник номенклатура, тогда соединение со справочником номенклатура по ссылке
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn