Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 особенности распределенного запроса  [new]
garvy
Member

Откуда: Москва
Сообщений: 794
Мне надо через распределенный запрос посмотреть данные (идентичность названий товара в справочнике Номерклатура ИС и 1С) из информационной базы 1С Бухгалтерии (1С) в связи с данными из информационной базы компании (ИС). SQL SERVER 2008. В результате экспериментов появился такой запрос:

SELECT TOP (100) PERCENT dbo._Reference62._Description AS Наименование,
ИСТовары.[товар по документу],
dbo._InfoRg8946._Fld8948 AS КодДокИС,
dbo._Reference62._Code AS КодВ1С,
ИСТовары.NTPD
FROM dbo._InfoRg8946 LEFT OUTER JOIN
(SELECT [товар по документу],
CAST(Nтпд AS VARCHAR(100)) AS NTPD
FROM VS_CH.dbo.[Заказы Товар])
AS ИСТовары
ON dbo._InfoRg8946._Fld8948 = ИСТовары.NTPD
RIGHT OUTER JOIN dbo._Reference62
ON dbo._InfoRg8946._Fld8949_RRRef = dbo._Reference62._IDRRef
WHERE (dbo._InfoRg8946._Fld8947 IS NOT NULL)
ORDER BY Наименование

Таблицы _Reference62 и _InfoRg8946 - из базы данных 1С Бухгалтерии (у нас клиент-серверный вариант)
Заковыка в полях dbo._InfoRg8946._Fld8948 - формат хранения данных nvarchar(100) - это код товара в 1С Бухгалтерии,
Nтпд из из таблицы VS_CH.dbo.[Заказы Товар] - это этот же код в ИС, формат хранения INTEGER.
Мне нужно соединить таблицы по этим полям (ON dbo._InfoRg8946._Fld8948 = ИСТовары.NTPD). Вся беда в том, что в таблице 1С код выглядит как '123 456 789' а в ИС как '123456789'. Уже я менял запрос и так и сяк - конвертировал nvarchar(100) в integer, пытался удалить пробел при помощи Replace, пытался конвертировать INT в NVARCHAR(100) и вставить пробелы между группами цифр - не помогает. Единственный вариант работающий - приведенный выше. Но он работает только для кодов меньше 1000, т.е. там, где нет пробела между группами цифр. Причем ИСТовары.NTPD возвращает NULL кроме тех, где код меньше 1000. Отдельно вынутая вложенная таблица возвращает нормальные значения Nтпд. Такое ощущение что пробел в поле таблицы 1С - что-то не пробельное. Функция Replace(dbo._InfoRg8946._Fld8948,' ','') похоже его никак не удаляет. Не подскажете как тут можно извернуться?
15 июл 14, 12:09    [16305792]     Ответить | Цитировать Сообщить модератору
 Re: особенности распределенного запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
В уверены, что пробел существует в базе и это не дело рук интерфейса?
15 июл 14, 12:52    [16306134]     Ответить | Цитировать Сообщить модератору
 Re: особенности распределенного запроса  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
может там неразрывный пробел (символ с кодом 160)?
15 июл 14, 13:04    [16306240]     Ответить | Цитировать Сообщить модератору
 Re: особенности распределенного запроса  [new]
garvy
Member

Откуда: Москва
Сообщений: 794
таблицы открываю поотдельности в SS Business Studio - выглядит именно так - с пробелами. Можно было бы заподозрить подвохи со стороны платформы 1С, но в данном случае я ее обхожу - обращаюсь напрямую к таблицам базы данных. Вон насчет неразрывного пробела - попробую. Не помню что это за зверь такой...
15 июл 14, 13:28    [16306423]     Ответить | Цитировать Сообщить модератору
 Re: особенности распределенного запроса  [new]
Crimean
Member

Откуда:
Сообщений: 13148
выведите эту "строку" в бинари виде, делов-то
select cast( Field as varchar(200)) from ...
сразу увидите код символа и там, похоже, будет никак не 32 то есть 0x20
15 июл 14, 15:01    [16307113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить