02.08.2002, 13:15 | #1 |
Участник
|
Перенос данных из Аксапты в 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 |
Участник
|
В 1С код справочника "склады" числовой, а у контрагентов - текстовый.
Excel работает с Variant. На худой конец, попробуй и в аксапте использовать variant (хотя это тяжелое и грубое решение). Наверное стоит разобраться с типами. ЗЫ На самом деле все коды в 1С - текстовые. Но в зависимости от галочки 1С их по разному интерпретирует. Особенно через КОМ |
|
05.08.2002, 06:48 | #3 |
Участник
|
Пробовал ставить тип int, long, decimal - та же ошибка:
Функция 'FindByCode возвратила код ошибки 80070057 (0xE_INVALIDARG), что означает: Один или более аргументов не верен. Пробовал также искать по названию склада - FIndByDescr() - ошибка не пропадает. Андрей Беседин |
|
05.08.2002, 11:53 | #4 |
Участник
|
Хм... тогда не знаю.
(А тряпочкой протирал? А по заднему колесу попинал?) У меня вроде получалось, когда надо было. Проблем не возникало. Тогда просто сделал, забыл и пошел дальше. В синтакс-помошнике 1С у метода НайтиПоКоду указаны два параметра. Но в том же синтакс-помошнике сказано, что второй является необязательным. Может быть они в оле-интерфейсе забыли описать, что он необязателен? Попробуй указать явно. Цитата:
НайтиПоКоду(<?>,);
Синтаксис: НайтиПоКоду(<Код>,<ФлагПоиска>) Назначение: Найти элемент справочника по коду. Возвращает: 1 - если действие выполнено; 0 - если действие не выполнено (элемент не найден). Параметры: <Код> - выражение со значением искомого кода, <ФлагПоиска> - флаг поиска (необязателен): 0 - поиск во всем справочнике вне зависимости от родителя; 1 - поиск внутри установленного подчинения (родителя); 2 - поиск по полному коду через разделитель. Значение по умолчанию: 0 - если код уникален во всем справочнике; 2 - если код уникален только в группе. Замечание: Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. |
|
05.08.2002, 16:26 | #5 |
Участник
|
мне кажется что лучше таки перенос данных в 1С делать через ODBC
и быстрее будет и можно стандартными запросами все организовать |
|
05.08.2002, 16:39 | #6 |
Участник
|
2 mick_777:
можно поподробнее? |
|
05.08.2002, 16:50 | #7 |
Участник
|
подробнее про 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 |
Участник
|
Хм. Во-первых ты говоришь про чтение ИЗ 1С.
А здесь вопрос как писать В 1С. В 1С тоже есть внутренние идентификаторы. Там они гораздо забавнее, чем в Аксапте и гораздо сильнее взаимосвязаны. Разбираться с идентификаторами гораздо сложнее. В 1С тоже не рекомендуется писать внешними средствами. Поэтому не стоит. |
|
06.08.2002, 18:29 | #9 |
Участник
|
Re: Перенос данных из Аксапты в 1С
Цитата:
Изначально опубликовано Andrew Besedin
Добрый день! При работе с COM-компонентой 1С столкнулись с неожиданной проблемой. Следущий код не работает - почему, неясно. Вот заведомо рабочий код PHP код:
|
|
30.10.2002, 19:48 | #10 |
NavAx
|
Господа, не кажется ли Вам странным, что каждому приходится самому писать сопряжение в 1С? Если у кого есть готовое решение, поделитесь или продайте, pls!
|
|
31.10.2002, 13:51 | #11 |
Участник
|
Не кажется. Это подход такой у 1С - проще написать частный код, чем универсальное решение. Проще ему следовать, чем бороться с ним.
Универсальное сопряжение получается уж слишком универсальным, поскольку в 1С часто пишут с нуля. А универсальные вещи тяжело администрируются. Проще подшаманить в коде сопрягалки, чем администрировать. Кроме того, в 1С есть проблема с перечислениями через ОЛЕ. Я не знаю универсального способа работы с ее перечислениями. Проще создать подобные в Аксапте. Опять же, ввиду того, что на 1Се часто пишут с нуля, то общим является только перечисление Булево. Да и то не всегда. |
|
19.03.2003, 18:11 | #12 |
Участник
|
Цитата:
Функция 'FindByCode возвратила код ошибки 80070057 (0xE_INVALIDARG), что означает: Один или более аргументов не
__________________
yes |
|
19.03.2003, 23:00 | #13 |
Участник
|
"Так кто же убил Жульена Налестро?" (С) конец первой серии фильма "Ищите женщину"
1. Поскольку ошибка воспроизводсится из Word, Excel и даже при поиске данных по коду из другой 1С, считаю, что ошибка в 1С. 2. Считаю, что обсуждение 1С (в т.ч. поведения различных релизов) здесь является оффтопиком. 3. обратитесь к специализированным форумам с этим вопросом. Например "Территория 1С" http://www.kuban.ru/cgi-bin/forum/forum9.cgi, поищите и другие специализированные форумы. |
|