Имя: Пароль:
1C
1С v8
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) Однако кириллицу не любят :)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.