09.09.2003, 10:39 | #1 |
Участник
|
Связь 1с + Аксапта.Начинающая
Есть задача: в Акаспте есть временная таблица. в которой хранятся данные , необходимо по кнопке занести их в справочник номенклатуры в 1с, через КОм. примерные действия понятны, хочется узнать побольше информации. может есть статьи ссылки, примеры, куски кода, Как можно добраться до значений реквизитов элемента в справочнике в 1с, как воспользоваться методами, пробую
static void Job3(Args _args) { COM v77; COM ref,ref1; int res,res1; ; v77 = new COM("v77s.Application"); res = v77.initialize(v77.RMtrade(),"/D/\Cc\\Aks\ /m",""); If (res) { info("Соединился!"); } ref = v77.CreateObject("Справочник.Номенклатура"); ref.New(); ref.SetAttrib("Description","аксапта"); ref.Write(); info("Выпорлнено"); } Выдает ошибки, что неверно переданы параметры, это самый простой пример, не получается, жду совета, плиз
__________________
Бороться и искать, найти и не сдаваться! |
|
09.09.2003, 13:31 | #2 |
Участник
|
Код справочника не указан.
|
|
10.09.2003, 03:45 | #3 |
Участник
|
в 1с по команде New автоматически присваивается новый код.
Вопрос в том, как присвоить нужные значения реквизитам справочника?
__________________
Бороться и искать, найти и не сдаваться! |
|
10.09.2003, 04:07 | #4 |
Участник
|
Как присвоить код новому элементу справочника и дать ему наименование?
__________________
Бороться и искать, найти и не сдаваться! |
|
10.09.2003, 07:45 | #5 |
Участник
|
to mazzy
какой код справочника? вот еще один примерчик, тоже выдает ошибку , что неправильно переданы параметры?? static void Job3(Args _args) { COM v77; COM ref,ref1; int res,res1; str a; v77 = new COM("v77s.Application"); res = v77.initialize(v77.RMtrade(),"/D/\Cc\\Aks\ /m /nАд ",""); a = "СоздатьОбъект(\"Справочник.ОбъектыСтроительства\")"; ref = v77.EvalExpr(a); ref.selectitems(); while (ref.getitem()==1) { // code = ref.code(); a = ref.getattrib("code"); print(a); pause; } } в getattrib неправильно переданы параметры, в чем дело, в каком виде тогда их аксапта выдает..
__________________
Бороться и искать, найти и не сдаваться! |
|
10.09.2003, 13:00 | #6 |
Участник
|
Аксапта? А причем здесь Аксапта?
Это ж 1С работает. Про код... Да, я уже забыл. Код 1С ставит сама... И еще. Вы открываете Торговлю, а спрашиваете справочник "ОбъектыСтроительства". В торговле такой справочник разве есть? МасЯня, постараюсь проверить вечером. Однако ж, по-моему, вам лучше спросить на 1Совском форуме про работу через ОЛЕ. |
|
11.09.2003, 04:46 | #7 |
Участник
|
to Mazzy
во-первых, открывается не Торговля, а ПУБ, RMTrade - просто добавочное ключевое слово, 1с данный код отрабатывает на ура, здесь дело как раз в Аксапте, она передает параметры неверно, вопрос в том, как именно она их передает, пробовала уже и через ComDispfunction,COmVariant и т.п. i = new COMDispFunction(ref,"usedate",COMDispContext::Method); r.date(10\09\2003); i.call(r); здесь ругается на неизвестную ошибку,
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 06:40 | #8 |
Участник
|
Цитата:
Изначально опубликовано МасЯня
RMTrade - просто добавочное ключевое слово Даже интересно стало. |
|
11.09.2003, 07:19 | #9 |
Участник
|
Просто получается какая-то странная ситуация, когда вызываешь метода 1с, которые не требуют параметров, то все нормально, как только передаешь в 1с параметры, тут же ошибка, тот же самый код на 1с отрабатывает чисто, думаю дело в том, что Аксапта каким-то образом параметры обрабатывает , и тут есть какая-то заковыка....
Есь ли пример запуска метода 1с с параметром?
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 11:14 | #10 |
Участник
|
ага. понятно.
Попробовал и вспомнил, что я уже на это напарывался. Во-первых. Вы использовали ключик /m - это означает монопольный доступ. Отлично это помню, однако сначала накололся на том, что просто не было соединения из-за того, что 1Ска уже была открыта. (Кстати, забавное у вас имя пользователя ) Во-вторых. У COM объекта в Аксапте есть метод new. Он и вызывается вместо new справочника. Надо вызывать этот метод через COMDispFunction. В качестве проверки попробуйте не New, а NewGroup для справочника номенклатур. Должно получиться следующее: PHP код:
Ностальгия какая то просто... А уж постоянная перезагрузка 1с... это что-то... Кстати, http://itland.ru/forum/index.php?showtopic=331 И еще важное добавление: в пути для Аксапты надо указывать двойные обратные слэши. Попробую вставить в форум. |
|
|
За это сообщение автора поблагодарили: Corel (1). |
11.09.2003, 12:06 | #11 |
Участник
|
Так все работает, но пока не передаю параметры, не работает, если пытаешься установить по коду или использовать дату и т.п. например
v77 = new COM("v77s.Application"); res = v77.initialize(v77.RMtrade(),"/D/\Cc\\Aks\ /m /nАд ",""); a = "СоздатьОбъект(\"Справочник.ОбъектыСтроительства\")"; ref = v77.EvalExpr(a); e = new COMDispFunction(ref,"selectitems",COMDispContext::Method); e.call(); i = new COMDispFunction(ref,"usedate",COMDispContext::Method); r.date(11\09\2003); i.call(r); на usedate выдает ошибку, что метод вернул ошибку неизвестность. а selectitems, прокатывает -нормально, так как без параметров, кстати setattrib из джоба тоже не работает, говорит неправильно переданы параметры? Попробуй найти по коду что-нибудь у себя
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 12:11 | #12 |
Участник
|
Дык, аргументы надо передавать в ComVariant.
|
|
11.09.2003, 12:23 | #13 |
Участник
|
ComVariant r = new COMVariant(COMVariantInOut::In,COMVariantType::VT_DATE);,
так r и есть ком вариант, это строчка в джобе вверху, при чем смотришь отладчик в Аксапте R = "11.09.2003 14:05 VT_Date", этот текст прогоняешь через обработку в 1с - все работает, а когда передается из Аксапты - ошибка?
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 12:30 | #14 |
Участник
|
виноват. щас попробую.
|
|
11.09.2003, 12:37 | #15 |
Участник
|
Дело в том, что еще и setattrib в джобе тоже возвращает ошибку, но насчет неправильных параметров
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 13:09 | #16 |
Участник
|
да, действительно забавно.
Не помню такой ошибки. Проблема не в том, что Аксапта. Проблема в том, что для Аксапты Variant не является родным несущим типом. 1С все что можно преобразует в него. Причем делает это неявно. У меня вполне работает следующий код PHP код:
Попробую поразбираться вечером, когда время останется. Кстати, для того, чтобы в форум вставить код, при создании сообщения можно нажать на кнопочку "X++ code". будут созданы теги. Код надо поместить между ними. |
|
11.09.2003, 13:12 | #17 |
Участник
|
Цитата:
Изначально опубликовано МасЯня
Дело в том, что еще и setattrib в джобе тоже возвращает ошибку, но насчет неправильных параметров |
|
11.09.2003, 13:15 | #18 |
Участник
|
Кстати. Кто-то когда то жаловался, что параметры английских методов не совпадают с параметрами русских методов.
Стоит попробовать через COMDispFunction, но вызывать методы с русским названием. Но это уже вечером. |
|
11.09.2003, 13:19 | #19 |
Участник
|
Самое интересное, что у меня твой Джоб не работает!!! Ругается, говорит, что usedate неверны параметры, у тебя что за релиз 1с и конфигурация, СКЛ?
__________________
Бороться и искать, найти и не сдаваться! |
|
11.09.2003, 13:21 | #20 |
Участник
|
релиз 20. версия для SQL. база DBF.
SQL 2000 SP3. |
|
Теги |
интеграция, 1c |
|
Похожие темы | ||||
Тема | Ответов | |||
работа 1С из Аксапты через COM | 7 | |||
связь с 1С через COM | 9 | |||
Перенос остатков из 1С в Аксапта. | 1 | |||
Связь аксапты с 1С | 0 | |||
еще раз про lookup | 11 |
|