![]() |
![]() |
![]() |
|
Delphi ссылка на общий модуль или на модуль внешнего соединения | ☑ | ||
---|---|---|---|---|
0
Kirillofficial
03.07.16
✎
17:19
|
Через Delphi сконнектился с 1с
Код: Connect1C := CreateOleObject('V82.Application'); MainObject:=Connect1C.Connect('File="H:\конфигурация";'); В 1с написал в модуле внешнего соединения написал функцию Код: Функция НовДок(склад,Наименование,кол,цен) Экспорт НовыйДокумент=Документы.Приходная_накладная.СоздатьДокумент(); //Заполняем обязательные реквизиты НовыйДокумент.Дата=ТекущаяДата(); Новыйдокумент.Склад=Справочники.Склады.НайтиПоНаименованию(склад); //Заполняем табличною часть ТабличнаяЧастьМатериалы=НовыйДокумент.Материалы; НоваяСтрока=ТабличнаяЧастьМатериалы.Добавить(); НоваяСтрока.Материал=Справочники.Номенклатура.НайтиПоНаименованию(Наименование); НоваяСтрока.Количество=кол; НоваяСтрока.Цена=цен; НоваяСтрока.Сумма=НоваяСтрока.Количество*НоваяСтрока.Цена; //Записываем новый элемент в документе "Приходная наклодная" НовыйДокумент.Записать(); КонецФункции Тоже самое написал в общем модуле "ob1" (только функцию назвал новдок) галочку внешнее соединение поставил однако на строки: MainObject.новдок(sk,na,kol,cen); или MainObject.новдок1(sk,na,kol,cen); или MainObject.общиймодуль.новдок1(sk,na,kol,cen); или MainObject.общиемодули.новдок1(sk,na,kol,cen); Вопрос как выглядит ссылка на общий модуль или на на модуль внешнего соединения? |
|||
1
Рэйв
03.07.16
✎
17:20
|
(0)Они все COMОбъект на принимающей стороне
|
|||
2
Рэйв
03.07.16
✎
17:21
|
но понимают методы и большинство обращений через точку к атрибутам
|
|||
3
Рэйв
03.07.16
✎
17:22
|
+которые если не простые типы тоже будут COMОбъект :-)
|
|||
4
Garykom
гуру
03.07.16
✎
17:30
|
Совет ТС не мучать ком/оле объекты, а использовать веб-сервисы, т.к. 1С 8
|
|||
5
Beretta
03.07.16
✎
17:31
|
(2) Это как опишешь. Позднее связывание иногда чудеса творит.
(0) Ссылка выглядит однако на строки красиво! |
|||
6
Kirillofficial
03.07.16
✎
17:32
|
(4) Спасибо за совет, но мне нужно через ком)
|
|||
7
Kirillofficial
03.07.16
✎
17:35
|
Так как выглядит ссылка на модуль?
|
|||
8
Kirillofficial
03.07.16
✎
17:35
|
Как ее реализовать?
|
|||
9
Рэйв
03.07.16
✎
17:37
|
(7)Ссылка на модуль выглядит очень смешно:-) Потомучто ее нет в природе.
Ты можешь поставить функции Экспорт и использовать, но модуль ссылки не имеет по определению:-) |
|||
10
H A D G E H O G s
03.07.16
✎
17:45
|
(0) Внешнее соединение - это ComConnector
Для Application - делай глобальный модуль и вызывай через MainObject.новдок(sk,na,kol,cen); |
|||
11
Kirillofficial
03.07.16
✎
17:51
|
(10) Выдает ошибку
Project Project1.exe raised exception class EVariantInvalidOpError with message 'Invalid variant operation'. Process stopped. Use Step or Run to continue. |
|||
12
Kirillofficial
03.07.16
✎
18:07
|
(10) Попробовал поменять Connect1C:=CreateOleObject('V82.Application') на Connect1C := CreateOleObject('V82.ComConnector'). Выдает ошибку
------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EOleError with message 'Method 'новдок' not supported by automation object'. Process stopped. Use Step or Run to continue. |
|||
13
Рэйв
03.07.16
✎
18:11
|
(12)Ну уже прогресс.CОМ поднялся. просто ему не нравится функция новдок()
|
|||
14
Kirillofficial
03.07.16
✎
18:21
|
(13) Я понял спасибо большое за помощь но что я делаю не так?
Попробовал поэкспериментировать и понял что ошибка появляется всегда когда пытаешься выполнить код MainObject.любаяфункция() при этом код типа MainObject.Документы.любойдокумент.любаяфункция(); проходит без ошибок |
|||
15
Рэйв
03.07.16
✎
18:23
|
(14)Ну это же элементарно.
MainObject не имеет доступа к любаяфункция() а. MainObject.Документы.любойдокумент имеет |
|||
16
Рэйв
03.07.16
✎
18:23
|
любаяфункция() скорее всего static
|
|||
17
Рэйв
03.07.16
✎
18:24
|
и находится в моде менеджера документа
|
|||
18
Kirillofficial
03.07.16
✎
18:31
|
(15) под MainObject.любаяфункция() я подразумевал функции прописанные во внешнем соединении и стандартные функции 1с к примеру ТекущаяДата(); (и в том и в другом случае выдется ошибка)
Под MainObject.Документы.любойдокумент.любаяфункция(); я подразумевал стандартные функции для документа к примеру СоздатьДокумент(); они проходят без ошибок |
|||
19
Рэйв
03.07.16
✎
18:32
|
(18)У внешнего соединения есть свои ограничения в 1С. Я их все не помню, но они есть.
|
|||
20
Рэйв
03.07.16
✎
18:33
|
(18)Если правильно соединиться через COM, то
Соединение.Документы.Имя.СоздатьДокумент() работает безукоризненно. |
|||
21
Kirillofficial
03.07.16
✎
18:38
|
(20) Оно и работает но как связаться с функциям которые не в документах и прочих объектах пока никак не пойму
|
|||
22
Рэйв
03.07.16
✎
18:48
|
(21)Просто прописывай правильные пути к объектам.
|
|||
23
Beretta
03.07.16
✎
18:54
|
(18) (19) Во внешнем соединении можно использовать только методы и свойства глобального контекста и то, что из них получается. Встроенные функции языка типа текущаядата к глобальному контексту не относятся. Поэтому нельзя использовать разные выполнить, вычислить и прочее непосредственно. Ну и галочки внешнеесоединение влияют, конечно.
И да, результат .Connect возвращает тебе корень глобального контекста, вернее его интерфейс. Обьявляй его нужным типом чтобы использовать позднее связывание по имени метода и т.п, не помню я уже этот пасквилянтский ужас =) |
|||
24
Beretta
03.07.16
✎
18:56
|
(23)+ о том, что относится а что не относится к глобальному контексту пишут открытым текстом русским по белому в синтаксис помощнике 1С
|
|||
25
Kirillofficial
03.07.16
✎
19:13
|
(23) (24) Огромное спасибо реализовал следующим образом:
Переписал код функции в 1с в Delphi заменив функцию ТекущаяДата() на date все работает) |
|||
26
DrZombi
гуру
03.07.16
✎
20:07
|
(25) Однако кириллицу не любят :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |