Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0
Необходимо записывать данные во внешние таблицы MS SQL 2005. В таблице тип данных поля, в которое необходимо записывать данные - уникальный идентификатор. В 7-ке я формирую идентификатор функцией ПолучимГУИДSQL(), в результате работы которой получаю строковое значение вида: "16700000-0001-0000-0000-000000000000"
Соединение.BeginTrans(); пСтрока = ПолучимГУИДSQL(ТЗКонтрагенты.Account1CID); Пока ТЗКонтрагенты.ПолучитьСтроку() = 1 Цикл cmd.Parameters("@Account1CID").Value = ПолучимГУИДSQL(ТЗКонтрагенты.Account1CID); cmd.Execute(); КонецЦикла;
При выполнении кода возникает ошибка: cmd.Execute(); {D:\WORK\EXTFORMS\SQL.ERT(291)}: Microsoft OLE DB Provider for SQL Server: Conversion failed when converting from a character string to uniqueidentifier.
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0
sava1, как я понял таким образом будет создано и записано в таблицу новое уникальное значение. Используя свой уникальный код потом можно определить какому элементу принадлежит запись. Потом нужно будет по этому значению находить эту строку и вносить изменения в данные. Контрагент записан со всеми своими данными и при изменении их в 1с нужно вносить изменения и в БД.
Vofka, попробовал так:
ГУИДКонтрагента = ПолучимГУИДSQL(ТЗКонтрагенты.Account1CID); cmd.Commandtext ="INSERT INTO tbl_Account (Account1CID) VALUES (CAST('"+ГУИДКонтрагента+"' as UNIQUEIDENTIFIER))";
Получил:
cmd.Execute(); {D:\WORK\ИНТЕРСТАЛЬ\EXTFORMS\SQL.ERT(294)}: Microsoft OLE DB Provider for SQL Server: Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.
Как я понял - таблица уже есть и она внешняя и на нее уже что-то завязано - и не ясно вообще-то где получится велосипед. Склоняюсь к проблеме с драйвером Адо. ТС - проверьте запрос из #11
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0
Удалось записать. Всю цепочку действий не восстановлю. Думаю, что ключевым моментом было то, что в таблице есть поле обязательное для заполнения -уникальный идентификатор строки таблицы. Без его заполнения строка не записывалась. Буду разбираться дальше. Спасибо всем за участие!
А как быть, если элемент, УИД которого надо писать, не выбран?
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0
Наверное было бы правильно в таком случае писать Null, если это допускается. Но как это предусмотреть в конструкции:
cmd.Commandtext="INSERT INTO tbl_Account (ID, Account1CID, Owner1CID) |VALUES (NEWID(), |CAST('"+ПолучимГУИДSQL(ТЗКонтрагенты.Account1CID)+"' as UNIQUEIDENTIFIER), |CAST('"+ПолучимГУИДSQL(ТЗКонтрагенты.Owner1CID)+"' as UNIQUEIDENTIFIER) |)";
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!