Как подружить 1С и PostgreSQL по типу данных uuid #766693


#0 by dimqa
Здравствуйте. Мне потребовалось в 1с добавить внешний источник из PostgreSQL но в таблицах используется тип uuid, который в 1с я не могу ни прочитать ни записать. Если в 1с я указывают тип "Строка", то в форме списка он мне показывает значения как 53 67 A7 8 и зайти элементы не дает с ошибкой типа: Ошибка преобразования данных XDTO: НачалоСвойства: val    Форма: Элемент    Тип: { по причине: Ошибка преобразования данных XDTO: Значение: 53 67 A7 8    Тип: { по причине: Ошибка отображения типов: Отображение лексического значения '53 67 A7 8' в значение типа 'УникальныйИдентификатор' Если в 1с я указываю тип УникальныйИдентификатор, то в списке пусто, но новый элемент даст создать (выдаёт ошибку но в базе появляется) Я подозреваю что он пытается преобразовать значение в ::bytea , хотя на самом деле надо ::uuid Как быть? поиск ничего толком не дал
#1 by Necessitudo
Используй ADO и в запросе используй какой-нить местный convert или cast.
#2 by dimqa
Смысл как раз во внешнем источнике, так как по таблицам нужны сложные отчеты и т.д., а не так, чтобы на каждую таблицу свою обработку рисовать.. хотя может до этого и дойдёт если не найдётся решение
#3 by Necessitudo
Пускай тогда тебе вьювку нарисуют)
#4 by dimqa
Может и выход из положения но пока во вьюхе cast(... as varchar) не даёт сделать... Хотя в обычном селекте нормально выбирает и показывает тип
#5 by dimqa
С помощью views у меня получилось, но план показывает что не используются индексы, что не есть хорошо((
#6 by НЕА123
если я правильно понял вопрос, может 1С тип ДвоичныеДанные?
#7 by НЕА123
+ или Число 38. как-то так мне помогло.
#8 by dimqa
В общем проблема решена следующими костылями: CREATE OR REPLACE VIEW public.wusers AS SELECT manager_wusers.id::character varying AS id,     manager_wusers.login,     manager_wusers.password, И если таблицу придётся изменять, то нужно еще добавить правило (и вручную следить чтобы id был uuid, т.к. теперь можно ввести любую строку и база будет ругаться матом) CREATE RULE _INSERT AS     ON INSERT TO wusers DO INSTEAD  INSERT INTO main_wusers (id, login, password, full_name)   VALUES (new.id::uuid, new.login, new.password, new.full_name)   RETURNING main_wusers.id::character varying AS id,     manager_wusers.login, Это самая простая таблица которую нужно было внедрить, а их еще штук 30 с немалым количеством полей, так что теперь работы у меня выше крыши))) PS: На этой таблице почему-то не работают индексы. Может на нормальных таблицах больших объёмах всё будет норм, ну или добавлять индексы к вьюхам как-то вручную PSS: Главное не забывать страдать.
#9 by dimqa
Жесть конечно как добавилось, извините если что)
#10 by rsv
Есть еще вроде индексированные вьюхи.
#11 by rsv
+ Т.е. копнуть поглубже постгри   и сделать на физику витрины в виде вьюх , табличных функций или чего там еще .
#12 by dimqa
Ну я в принципе этот вариант и описал, осталось решить проблему с индексами, не используя материализованных вьюх, а как всё работает. Думаю первое время потерпят тормоза если что
#13 by bolero
для обратной задачи (прочитать uuid, сохраненные 1с как bytea) у меня есть вот такой костыль может, тебе сделать в обратную сторону, но на стороне 1с? кмк, раз недоработка на стороне 1с - то и костыль туда вставлять, а не в нормально работающую систему. мало ли, когда-нибудь эту особенность починят, и тогда останется один костыль убрать, а не кучу вьюх CREATE OR REPLACE FUNCTION bytea2guid (bytea) RETURNS UUID AS $$ DECLARE   bin ALIAS FOR $1;
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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