AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.08.2002, 13:15   #1  
Andrew Besedin is offline
Andrew Besedin
Участник
 
119 / 15 (1) ++
Регистрация: 25.01.2002
Перенос данных из Аксапты в 1С
Добрый день!
При работе с COM-компонентой 1С столкнулись с неожиданной проблемой. Следущий код не работает - почему, неясно.

COM InventLocations;
s = "СоздатьОбъект(\"Справочник.Склады\")";
InventLocations = v77.EvalExpr(s); //v77 - объект 1С
InventLocations.FindByCode("La-la-la");//Строка с ошибкой

Ошибка при выполнении "Один или несколько аргументов имеют неправильный тип"
однако, если искать в другом справочнике - например, Конрагенты, то все проходит ОК.
Эквивалентный код на VBA(Excel) работает ОК.
Пробовали использовать COMDispFunction - та же ошибка .
На машине стоит 1С в.77 релиз 18 ред.912.
Аксапта 25 СП3

В чем предположительно может быть проблема и как ее решать?
Спасибо,
Андрей Беседин
Старый 02.08.2002, 13:32   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
В 1С код справочника "склады" числовой, а у контрагентов - текстовый.
Excel работает с Variant.
На худой конец, попробуй и в аксапте использовать variant (хотя это тяжелое и грубое решение). Наверное стоит разобраться с типами.

ЗЫ На самом деле все коды в 1С - текстовые. Но в зависимости от галочки 1С их по разному интерпретирует. Особенно через КОМ
Старый 05.08.2002, 06:48   #3  
Andrew Besedin is offline
Andrew Besedin
Участник
 
119 / 15 (1) ++
Регистрация: 25.01.2002
Пробовал ставить тип int, long, decimal - та же ошибка:
Функция 'FindByCode возвратила код ошибки 80070057 (0xE_INVALIDARG), что означает: Один или более аргументов не
верен.

Пробовал также искать по названию склада - FIndByDescr() - ошибка не пропадает.

Андрей Беседин
Старый 05.08.2002, 11:53   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Хм... тогда не знаю.
(А тряпочкой протирал? А по заднему колесу попинал?)

У меня вроде получалось, когда надо было. Проблем не возникало.
Тогда просто сделал, забыл и пошел дальше.

В синтакс-помошнике 1С у метода НайтиПоКоду указаны два параметра.
Но в том же синтакс-помошнике сказано, что второй является необязательным.
Может быть они в оле-интерфейсе забыли описать, что он необязателен?
Попробуй указать явно.
Цитата:
НайтиПоКоду(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
0 - поиск во всем справочнике вне зависимости от родителя;
1 - поиск внутри установленного подчинения (родителя);
2 - поиск по полному коду через разделитель.
Значение по умолчанию:
0 - если код уникален во всем справочнике;
2 - если код уникален только в группе.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
Старый 05.08.2002, 16:26   #5  
mick_777 is offline
mick_777
Участник
 
30 / 10 (1) +
Регистрация: 05.06.2002
Адрес: г. Киев, Украина
мне кажется что лучше таки перенос данных в 1С делать через ODBC
и быстрее будет и можно стандартными запросами все организовать
Старый 05.08.2002, 16:39   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
2 mick_777:
можно поподробнее?
Старый 05.08.2002, 16:50   #7  
mick_777 is offline
mick_777
Участник
 
30 / 10 (1) +
Регистрация: 05.06.2002
Адрес: г. Киев, Украина
подробнее про ODBC
захожу в винде в ODBC
создаю DSN, с драйвером Visual Foxpro
указываю каталог 1С (если dbf)
ну а если это MS база то тогда и драйвер MS

и с ЛЮБОГО места, в нашем случае Ахапта (я пользуюсь и в самой 1С - на саму себя)
подключаюсь через ODBCConnection
в качестве имени - то что указали
и вперед -
SELECT * from sc112 (вся информация о структуре в 1cv7.DD файле)
- я таким образом из 1с в Ахапту делал импорт

кстати, если мне надо такое в 1С сделать - то использую odbcsql.dll - тоже дает возможность работать с любой базой через ODBC, напр. импорт из Аксесса
Старый 05.08.2002, 16:59   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Хм. Во-первых ты говоришь про чтение ИЗ 1С.
А здесь вопрос как писать В 1С.

В 1С тоже есть внутренние идентификаторы.
Там они гораздо забавнее, чем в Аксапте и гораздо сильнее взаимосвязаны. Разбираться с идентификаторами гораздо сложнее.

В 1С тоже не рекомендуется писать внешними средствами.
Поэтому не стоит.
Старый 06.08.2002, 18:29   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Перенос данных из Аксапты в 1С
Цитата:
Изначально опубликовано Andrew Besedin
Добрый день!
При работе с COM-компонентой 1С столкнулись с неожиданной проблемой. Следущий код не работает - почему, неясно.
Похоже, что между созданием переменной справочника и поиском надо вставить паузу.

Вот заведомо рабочий код
PHP код:
static void Job45(Args _args)
{
    
COM v77;
    
COM ref;
    
int res;

    
v77 = new COM("v77.Application");
    
res v77.initialize(v77.RMtrade(),"/dd:\\1cv77\\1sbdb /m","");
    if( !
res ) throw error("Ошибка открытия 1С");

    
ref v77.CreateObject("Справочник.МестаХранения");
    
pause;
    
res ref.FindByCode("00001",0);
    print 
strfmt('-%1-',ref.description());
    
pause;

величину паузы надо подбирать экспериментально
Старый 30.10.2002, 19:48   #10  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Lightbulb
Господа, не кажется ли Вам странным, что каждому приходится самому писать сопряжение в 1С? Если у кого есть готовое решение, поделитесь или продайте, pls!
Старый 31.10.2002, 13:51   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Не кажется. Это подход такой у 1С - проще написать частный код, чем универсальное решение. Проще ему следовать, чем бороться с ним.

Универсальное сопряжение получается уж слишком универсальным, поскольку в 1С часто пишут с нуля. А универсальные вещи тяжело администрируются. Проще подшаманить в коде сопрягалки, чем администрировать.

Кроме того, в 1С есть проблема с перечислениями через ОЛЕ. Я не знаю универсального способа работы с ее перечислениями. Проще создать подобные в Аксапте. Опять же, ввиду того, что на 1Се часто пишут с нуля, то общим является только перечисление Булево. Да и то не всегда.
Старый 19.03.2003, 18:11   #12  
tav is offline
tav
Участник
 
49 / 10 (1) +
Регистрация: 15.11.2002
Цитата:
Функция 'FindByCode возвратила код ошибки 80070057 (0xE_INVALIDARG), что означает: Один или более аргументов не
Прошу прощения, так в чем же ошибка?
__________________
yes
Старый 19.03.2003, 23:00   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
"Так кто же убил Жульена Налестро?" (С) конец первой серии фильма "Ищите женщину"

1. Поскольку ошибка воспроизводсится из Word, Excel и даже при поиске данных по коду из другой 1С, считаю, что ошибка в 1С.
2. Считаю, что обсуждение 1С (в т.ч. поведения различных релизов) здесь является оффтопиком.
3. обратитесь к специализированным форумам с этим вопросом. Например "Территория 1С" http://www.kuban.ru/cgi-bin/forum/forum9.cgi, поищите и другие специализированные форумы.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
работа 1С из Аксапты через COM _scorp_ DAX: Программирование 7 22.08.2008 15:45
оставить НУ в 1С, интеграция аксапты и 1С natterru DAX: Функционал 14 02.06.2008 13:45
Передача данных из 1С в Axapta 3.0 через COM Connector isbist DAX: Программирование 10 03.12.2004 10:58
Передача данных из 1С в Аксапту. Hidden DAX: Функционал 2 25.03.2004 14:32
Связь аксапты с 1С Prix DAX: Функционал 0 10.04.2003 13:25
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:50.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.