Имя: Пароль:
1C
1С v8
Есть ли разница в апи V81.ComConnector и V82.ComConnector?
,
0 Linkovich
 
14.10.11
14:12
Проблема заключается в следующем. Подключаюсь к базе 8.1 и к базе 8.2 из питона, использую идентичный код. С 8.1 работает, а с 8.2 - нет. Может кто сталкивался с особенностями работы V82.ComConnector.
Фрагмент для 8.1:

path = 'Srvr="LocalTest"; Ref="Payment"; Usr="Exchange"; Pwd="1";'
pythoncom.CoInitialize()
app = win32com.client.Dispatch("V81.COMConnector")
conn = app.Connect(path)
c1DP = conn.DataProcessors.PythonAccess.Create()
c1DP.UpdateTab("000000001")

фрагмент для 8.2(ругается на строку c1DP.UpdateTab("000000001") и выдает ошибку 'NoneType' object is not callable):

path = 'File="D:\Bases\RCDevLocal"; Usr="Exchange"; Pwd="1";'
pythoncom.CoInitialize()
app = win32com.client.Dispatch("V82.COMConnector")
conn = app.Connect(path)
c1DP = conn.DataProcessors.PythonAccess.Create()
c1DP.UpdateTab("000000001")

Буду признателен за любые советы и идеи...
1 izekia
 
14.10.11
14:14
а что такое датапроцессоры?
2 Amiralnar
 
14.10.11
14:15
c1DP в предпоследней строке чему равняется?
3 Amiralnar
 
14.10.11
14:15
(1) Обработки
4 izekia
 
14.10.11
14:16
(0) может там что-то во внешнем соединении не живет?
5 Linkovich
 
14.10.11
14:17
(2) <COMObject <unknown>> как и в варианте V81
6 Amiralnar
 
14.10.11
14:19
Возможно, ошибка при выполнении кода в 1С.
7 Amiralnar
 
14.10.11
14:20
Если есть 1С, запусти, нажми "Сервис - Табло", напиши: DataProcessors.PythonAccess.Create() - должна получиться переменная с типом ОбработкаОбъект.
8 Amiralnar
 
14.10.11
14:21
Потом надо писать обработку для запуска в 1С. Возможно, после конвертации в 8.2 код стал некорректным.
9 Amiralnar
 
14.10.11
14:22
А, по сути, в 8.2 апи не изменился.
Цитирую:

ОбработкаМенеджер.<Имя обработки>.Создать (DataProcessorManager.<Имя обработки>.Create)
ОбработкаМенеджер.<Имя обработки> (DataProcessorManager.<Имя обработки>)
Создать (Create)
Синтаксис:

Создать()
Возвращаемое значение:

Тип: ОбработкаОбъект.

Описание:

Создает новый экземпляр обработки.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

ОбработкаДокументов = Обработки.ОбработкаДокументов.Создать();
10 Linkovich
 
14.10.11
14:24
(7) так и есть - ОбработкаОбъект.PythonAccess
11 Amiralnar
 
14.10.11
14:25
Попробуй написать
DataProcessors.PythonAccess.Create().UpdateTab("000000001")
12 Linkovich
 
14.10.11
14:31
(11) та же фигня...
Попробовал обратиться к метаданным обработки - работает:

print c1DP.Metadata().Synonym

вывел синоним обработки
13 Amiralnar
 
14.10.11
14:32
Не, что выводит DataProcessors.PythonAccess.Create().UpdateTab("000000001")?
Должно быть значение, или ошибка исполнения.
От синонимов проку мало. Ясно, что объект получен. Теперь не ясно - почему не апдейтит.
14 el-gamberro
 
14.10.11
14:33
c1DP.UpdateTab('000000001')
15 el-gamberro
 
14.10.11
14:33
А вообще ты из какой среды работаешь?
16 acsent
 
14.10.11
14:33
Обработка криво работает в режиме внешнего соединения для 8.2. Копай код 1С
17 Linkovich
 
14.10.11
14:35
(16) код 1С(модуль обработки PythonAccess):

Процедура UpdateTab(лНомерДок) Экспорт

КонецПроцедуры
18 Amiralnar
 
14.10.11
14:37
Занавес.
19 Linkovich
 
14.10.11
18:04
Разобрался сам! Чтобы вопрос не повис в воздухе - опишу в чем была причина проблемы и как она решилась. На самом деле API v82.ComConnector отличается от v81.ComConnector. API v82.ComConnector более полный что ли, т.е. дает больше информации для обработчика COM-соединения. В моем случае, библиотека Python рассчитана на работу с менее умным COM-сервером чем в 8.2, поэтому в случаи 8.1 все прокатывало. v82.ComConnector дает больше информации об 1С-овских объектах(объекты конфигурации, их методы и функции и т.д.), что мешало питону правильно сгенерировать функцию обращения. Наверное это все-таки больше проблема питона. Вот теперь занавес.
20 izekia
 
18.10.11
17:16
проблема библиотеки скорее, а не питона ...
но из формулировки вообще ничего непонятно, ты хочешь сказать, что для 8.1 какой-то из интерфейсов не до конца реализован?
можно подробнее инфу?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс