|
Выгрузить УникальныйИдентификатор 1С в UUID PostgreSQL. tatoshka0403, zuza, andmaxx, denk32, Fragster, АНДР, okmail, xenos, DrZombi, _Batoo, Ненавижу 1С, arsik, obs191, reg0303, dchumak, ГдеСобакаЗарыта, H A D G E H O G s, Crusher, JohnGilbert, Кирпич, DemonShinji2, Hawk_1c, ReaLg, Климов Сергей, ads55, Lama12, , shuhard, sikuda, paramedic, Chameleon1980, kir-g, Мультук, Гипервизор, рокот, formista2000, San787, Prog_man, vbus, integer, Волшебник, Лирик
| ☑ | ||
|---|---|---|---|---|
|
0
tatoshka0403
14.08.26
✎
08:49
|
Всем доброго дня, подскажите пожалуйста как правильно выгружать УникальногоИдентификатора 1С в UUID PosgreSQL.
В SQL тип данных - UUID В Поле внешнего источника данных - уникальный идентификатор, пробовал менять на строку но это тоже не работает. Если тип данных "уникальный идентификатор", то ошибка вот такая: Ошибка ODBC. SQLSTATE: 22P02 Номер ошибки: 1 Описание: ОШИБКА: неверный синтаксис для типа uuid: "\xB0F3627878424FC048B8BE10D058F90D"; Если тип данных "строка", то ошибка вот такая: Описание: ОШИБКА: неверный синтаксис для типа json DETAIL: Неожиданный конец входной строки.; Подскажите как правильно делать такую выгрузку. |
|||
|
1
tatoshka0403
14.08.26
✎
08:55
|
Забыл написать, запись происходит вот так:
НоваяЗаписьSQL = ВнешниеИсточникиДанных.PostgreSQL.Таблицы.Test.СоздатьОбъект(); НоваяЗаписьSQL.name = Товар.Наименование; НоваяЗаписьSQL.ID = Товар.УникальныйИдентификатор(); НоваяЗаписьSQL.Записать(); |
|||
|
2
DrZombi
гуру
14.08.26
✎
08:57
|
(0)
https://postgrespro.ru/docs/postgresql/current/datatype-uuid Тип bytea в таблицах 1С на PostgreSQL содержит 16-байтовую бинарную строку. Это двоичное представление уникального идентификатора объекта (GUID / UUID).Внутри этих 16 байт закодирована вся информация, которая позволяет платформе 1С однозначно найти конкретный элемент (например, конкретный товар, документ или контрагента). |
|||
|
3
DrZombi
гуру
14.08.26
✎
09:00
|
+(1) Странно вы пишите :)
ВнешнийИсточникДанныхТаблицаОбъект.<Имя внешнего источника>.<Имя таблицы внешнего источника данных> (ExternalDataSourceTableObject.<External source name>.<External data source table name>) УстановитьСсылкуНового (SetNewObjectRef) Синтаксис: УстановитьСсылкуНового(<Ссылка>) Параметры: <Ссылка> (обязательный) Тип: ВнешнийИсточникДанныхТаблицаСсылка.<Имя внешнего источника>.<Имя таблицы внешнего источника данных>. Ссылка, которая будет назначена при записи нового объекта. Описание: Устанавливает значение для нового (созданного и еще не записанного) объекта, которое будет назначено при записи в качестве ссылки. Значение не может равняться ссылке какого-либо из имеющихся в базе данных объекта данного типа. Уникальность ссылки проверяется при записи объекта. Доступность: Сервер, толстый клиент, внешнее соединение. Использование в версии: Доступен, начиная с версии 8.3.5. |
|||
|
4
tatoshka0403
14.08.26
✎
09:23
|
(3) Не понимаю. Мне нужно из 1С в SQL передать ИД уже созданного товара.
ГУИД = Товар.УникальныйИдентификатор(); ТекущаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД); НоваяЗаписьSQL = ВнешниеИсточникиДанных.PostgreSQL.Таблицы.Test.СоздатьОбъект(); НоваяЗаписьSQL.УстановитьСсылкуНового(ТекущаяСсылка); НоваяЗаписьSQL.name = Строка(Товар); НоваяЗаписьSQL.Записать(); |
|||
|
5
Кирпич
14.08.26
✎
10:18
|
может запихнуть гуид 1с в буфер двоичных данных и этот буфер уже в PostgreSQL
|
|||
|
6
tatoshka0403
14.08.26
✎
10:24
|
(5) Ошибка ODBC. SQLSTATE: 22P02
Номер ошибки: 1 Описание: ОШИБКА: неверный синтаксис для типа uuid: "\x66613662386230332D393461372D313166312D616439612D373435363363376232333265"; Похоже надо искать решение на стороне SQL. Пробовал сгенерировать uuid средствами sql и передать его при записи. ВнешниеИсточникиДанных.PostgreSQL.pg_catalog_gen_random_uuid(); ошибка аналогичная (0) |
|||
|
7
DrZombi
гуру
14.08.26
✎
11:33
|
(6) Оно у 1С разное, т.е. у 1С оно в одном формате. У SQL в другом :)
Если так приспичило прямыми запросами всё делать Набери у ИИ запрос: Как прямым запросом PostgreSQL записать ИД из 1С? Он тебе разжуёт :) Ссылка: https://www.google.com/search?q=&rlz=1C1GCEU_ruRU892RU893&sourceid=chrome&ie=UTF-8&amc=1&udm=50&aep=42&cud=0&source=chrome.crn.rb&atvm=2 |
|||
|
8
DrZombi
гуру
14.08.26
✎
11:41
|
(6) Гугл - ГПТ-чат вам в подмогу :)
Он предложил два варианта вашего сюриализма. Вариант 1. Если в PostgreSQL поле ID имеет тип UUIDВам нужно передать идентификатор строго в виде текстовой строки. Для этого оберните его в функцию Строка() и приведите к нижнему регистру: НоваяЗаписьSQL = ВнешниеИсточникиДанных.PostgreSQL.Таблицы.Test.СоздатьОбъект(); НоваяЗаписьSQL.name = Товар.Наименование; // Преобразуем UUID в строку нижнего регистра НоваяЗаписьSQL.ID = НРег(Строка(Товар.УникальныйИдентификатор())); НоваяЗаписьSQL.Записать(); Вариант 2. Если в PostgreSQL поле ID имеет тип INTEGER / BIGINTУникальный идентификатор 1С (GUID) нельзя записать в числовое поле, так как он содержит буквы.Если вам нужен числовой код товара, используйте Товар.Код.Если код текстовый, его придется преобразовать в число (если там только цифры). НоваяЗаписьSQL = ВнешниеИсточникиДанных.PostgreSQL.Таблицы.Test.СоздатьОбъект(); НоваяЗаписьSQL.name = Товар.Наименование; // Используем числовой код вместо GUID НоваяЗаписьSQL.ID = Число(Товар.Код); НоваяЗаписьSQL.Записать(); |
|||
|
9
Ненавижу 1С
гуру
14.08.26
✎
11:41
|
Какой тип указан у поля на строне 1С во внешнем источнике данных?
|
|||
|
10
DrZombi
гуру
14.08.26
✎
11:44
|
(4) Вот вы не понимаете.
А я не понимаю, зачем это всё вам? Если по сути ИД, код, переданный из другой базы, в какую-то базу. И явно не от 1С. Можно просто использовать поле, для идентификации связки с другой базой. И я не понимаю Гугла, когда он кодит код на 1С... Почему оно чаще не работает, чем работает :) (но в этом вы сами убедитесь) |
|||
|
11
tatoshka0403
14.08.26
✎
11:55
|
(9) Пробовал УникальныйИдентификатор, Строку, ДвоичныеДанные.
|
|||
|
12
DrZombi
гуру
14.08.26
✎
12:01
|
(11) Да добавьте в другую базу просто текстовое поле.
И пишите ваш ИД из базы источника. Вы же автор, вам будет виднее, как это "новое" поле "ИД" использовать. А то, что вы пытаетесь писать ИД такой же, как в другой базе, работает только пока другая база одна :) Когда появится вторая "Другая" база, либо другой дубль из базы, у вас начнутся дублироваться записи :) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |