Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Получить номер договора из Реализация ТМЗ и услуг / 7 сообщений из 7, страница 1 из 1
21.05.2013, 06:46
    #38265474
Квази
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
Проблема с возвратом значения в OLE-клиента.

Запрос первоначальный:
Код: sql
1.
ВЫБРАТЬ 	Дата, 	ДоговорКонтрагента, Контрагент, СуммаДокумента ИЗ	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг



Вываливается ошибка, о том, что поля ДоговорКонтрагента и Контрагент не удается преобразовать в соответствующие типы ( Could not convert variant of type(Dispatch) into type (String) ). Причина видимо в том, что эти значения берутся из соответствующих справочников. В справочнике контрагентов соответствующий реквизит называется НаименованиеПолное. Правим запрос:
Код: sql
1.
ВЫБРАТЬ 	Дата, 	ДоговорКонтрагента, Контрагент.НаименованиеПолное, СуммаДокумента ИЗ	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг


Теперь название контрагента извлекается правильно, остается ДоговорКонтрагента. Хранится он в справочнике ДоговорыКонтрагентов, где соответствующий атрибут называется НомерДоговора.
Переписываем запрос:
Код: sql
1.
ВЫБРАТЬ 	Дата, 	ДоговорыКонтрагентов.НомерДоговора, Контрагент.НаименованиеПолное, СуммаДокумента ИЗ	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг


Запрос отрабатывается нормально, но поля НомерДоговора пустые (хотя в справочнике значения есть). В чем может быть проблема?
...
Рейтинг: 0 / 0
21.05.2013, 08:06
    #38265505
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
Квази, Видимо реквизит справочника называется не "НомерДоговора". Попробуйте выполнить запрос в самой 1С что он вернет?
...
Рейтинг: 0 / 0
21.05.2013, 13:08
    #38266169
Квази
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
DmitriyZКвази, Видимо реквизит справочника называется не "НомерДоговора". Попробуйте выполнить запрос в самой 1С что он вернет?

Выполнял. В 1с нормально выполняется этот запрос:
Код: sql
1.
2.
ВЫБРАТЬ РеализацияТоваровУслуг.Дата, 	РеализацияТоваровУслуг.ДоговорКонтрагента, 	РеализацияТоваровУслуг.Контрагент, 	РеализацияТоваровУслуг.СуммаДокумента
 ИЗ 	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг


Но он выдает ошибку при преобразовании данных в Delphi - видимо потому, что РеализацияТоваровУслуг.ДоговорКонтрагента, РеализацияТоваровУслуг.Контрагент это не простые типы данных, а ссылки на значения справочников.

Если в Delphi запрос переписать с использованием ссылок на справочники

Код: sql
1.
2.
ВЫБРАТЬ РеализацияТоваровУслуг.Дата, 	ДоговорКонтрагента.НомерДоговора, 	Контрагент.ПолноеНаименование, 	РеализацияТоваровУслуг.СуммаДокумента
 ИЗ 	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг


то столбец Контрагент выводится в Delphi нормально, а столбец НомерДоговора выходит пустой.
...
Рейтинг: 0 / 0
21.05.2013, 13:17
    #38266197
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
Квази,
у вас два разных текста запроса приведены. А что даст выполнение второго варианта (того, который через com-подключение пустое поле выдает) непосредственно в Консоли Запросов 1С? А то циклиться на "в 1с ЭТО выполняется, а через дельфи - нет,поэтому дельфям подсовываем другой текст" можно бесконечно. Сравнивайте уж максимально идентичные тексты.
...
Рейтинг: 0 / 0
21.05.2013, 22:52
    #38267346
Квази
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
pailКвази,
у вас два разных текста запроса приведены. А что даст выполнение второго варианта (того, который через com-подключение пустое поле выдает) непосредственно в Консоли Запросов 1С? А то циклиться на "в 1с ЭТО выполняется, а через дельфи - нет,поэтому дельфям подсовываем другой текст" можно бесконечно. Сравнивайте уж максимально идентичные тексты.
Совершенно верно, тексты запросов разные. Ибо запрос:
Код: sql
1.
ВЫБРАТЬ 	Дата, 	ДоговорыКонтрагентов.НомерДоговора, Контрагент.НаименованиеПолное, СуммаДокумента ИЗ	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг


который в Delphi отрабатывает без ошибок, но возвращает пустое поле НомерДоговора, при выполнении в консоли выдает ошибку о том, что не найдено поле ДоговорыКонтрагентов.НомерДоговора.
В общем причина проблемы видимо в том, что Delphi не распознает сложные типы 1С и потому в запросе надо явно указывать ссылку на источник, который этот тип возвращает.
...
Рейтинг: 0 / 0
22.05.2013, 08:16
    #38267586
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
Квази, а вас не смущает, что в "родной" среде запрос выдает ошибку? Добейтесь, что бы запрос в "родной" среде возвращал валидные данные тех типов, которые можно передать через OLE. Тогда и вашей системе он будет нормально работать.
...
Рейтинг: 0 / 0
22.05.2013, 09:09
    #38267643
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить номер договора из Реализация ТМЗ и услуг
Всё у вас правильно и корректно отрабатывает.
1С в представлении ссылок подставляет "Основное представление" элемента, по этому вы запрашивая РеализацияТоваровУслуг.ДоговорКонтрагента видите значение "стандартный реквизит" Код.
Вы же из дельфи запрашиваете реквизит НомерДоговора, который у вас не заполнен.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Получить номер договора из Реализация ТМЗ и услуг / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]