Запросы из Delphi к 1С #645300


#0 by NickM73
Приспичило связать программку c 1C8 через dll написанную на Delphi, связь dll с 1С через Com, это все сделал, но всплыла такая проблема, что как получить результаты запроса и передача параметров в запрос. Пример ... а как добраться до результата запроса? и продолжение, теперь как полученную ссылку из запроса вставить в другой запрос? Здесь ругается На неверные параметры операции сравнения..., пытался сделать objsel1.УстановитьПараметр('ВыбСотрудник', IDispatch(Stuff)); тоже самое.
#1 by H A D G E H O G s
Ниче не понял
#2 by 1C-band
Потому, что &ВыбСотрудник понимается как внутренняя ссылка 1С. Используй примитивные типы: Код, Табельный номер и т. д..
#3 by H A D G E H O G s
if queryRes.Следующий=true Then begin
#4 by H A D G E H O G s
поправь
#5 by NickM73
А какая была красивая задумка получаешь ссылку и с ней работаешь как в 1С:( Поправил запрос чтоб возвращал наименование сотрудника objsel.Текст := 'ВЫБРАТЬ Сотрудники.Наименование ИЗ Справочник.Сотрудники КАК Сотрудники ГДЕ Сотрудники.Карты.НомерКарты = &НомерКарты'; ShowMessage(queryRes.Наименование); но выдается ошибка Method 'Наименование' not supported by automation object видимо чтото еще надо
#6 by H A D G E H O G s
"А какая была красивая задумка получаешь ссылку и с ней работаешь как в 1С: Задумка глупа, но работоспособна. Глупа она по причине медлительности COM
#7 by H A D G E H O G s
Какое наименование ты хочешь у него получить?
#8 by H A D G E H O G s
#9 by Reset
Даже мне, тупому одинеснику, ясно, что у таблицы значений нет свойства Наименование
#10 by samozvanec
написать все в 1ске и метод дергать не предлагать?
#11 by Serginio1
Вообще проще например создать внешний отчет или обработку, а уж её дергать с клиента например
#12 by NickM73
Спасибо помогло, краткость сестра таланта. Помоему будет перебор, программа дергает dll из нее внешнюю обработку, а она уже работает с 1С. Слишком много звеньев :( База не велика (1 справочник, 1 документ и 3 регистра) + комп только для нее, тормозить особо не должна, но посмотрим на быстродействие, как разверну тестовую систему. Если будет тормозить прийдется переходить на внешние обработки.
#13 by Serginio1
Ты хотя бы отладь для начала в 1С, а потом код переноси на Delphi. А так и получается пока все отладишь,то уже и незачем переносить, так как проще код обработки запустить.
#14 by NickM73
Задумка глупа, но работоспособна. Работает довольно шустро в 1С уже написал и работает, но в Com есть подводные камни, забавные до ужаса Осталось последнее создать документ, но там нужна ссылка пытаюсь сделать так Документ создается, но поле Сотрудник пусто :(, ссылка не пустая. Как обмануть систему?
#15 by hhhh
а табНОмер - это число должно быть разве? Тип поля какой у ТабНомер?
#16 by hhhh
надо как-то так if docDinner.Сотрудник.Пустая then  ShowMessage('Не найден сотрудник с табельным номером ' + 22035484);
#17 by NickM73
Тип число, сообщений никаких не выдает :(, 1с возвращает ссылку, но delphi как-то странно работает с ней. По совету использовал примитивные типы, но вот здесь нужна именно ссылка.
#18 by hhhh
сделайте табномер строку. Кому в голову у вас там пришла такая мысль про число? Зачем неприятности на свою задницу искать?
#19 by NickM73
Даже если это строка, не работает.
#20 by Serginio1
Проверь внешним отчетом. В свое время в семерке все параметры из Delphi передавались по ссылке. Выход был типа ''+str. Или используя процедуру с параметрами const.
#21 by NickM73
А можно по подробнее Выход был типа ''+str., плиз В обработке все нормально находится и пишется.
#22 by Serginio1
Все параметры Delphi передает по ссылке, для того, что бы передавало по значению нужно либо через процедуры с параметрами типа const, либо как выражение 1+1, или ''+строковая_переменная
#23 by NickM73
те чтобы передать в docDinner.Сотрудник := СсылкаСотрудник; мне надо сделать так docDinner.Сотрудник := ''+строковая_переменная я правильно понял? но я не могу вытащить из строковая_переменная := obj.Справочники.Сотрудники.НайтиПоРеквизиту('ТабНомер', '22035484'); тк это Dispatch и всю голову сломал как оттуда вытащить данные
#24 by NickM73
Все тема закрыта, оказывается писал не в ту базу, пора идти есть мандаринки и пить горькую. А помогло вот что  var     docDinner, nn: Variant; .... Всех с Новым Годом!
#25 by Serginio1
Кстати можешь использовать Диспинтерфейсы. И синтаксический контроль и правильные вызовы.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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