|
v7: Обращение по OLE из питона | ☑ | ||
---|---|---|---|---|
0
KoBapeH
06.12.17
✎
15:05
|
Вопрос к мэтрам некромантии: нужно из питона обратиться к справочнику бухгалтерии. Проблема возникает на стадии открытия выборки ВыбратьЭлементы(), либо SelectItems(). В питон возвращается следующая ошибка: "(-2147417851, 'Ошибка на сервере.', None, None)". Такую же ошибку возвращает метод ЗначениеИзСтрокиВнутр() - ValueFromStringInternal(). При этом сам объект справочника создаётся, да и по документам выборка отрабатывает нормально. Из самой 7.7 аналогичный код отрабатывает без проблем.
Насколько я понимаю, это проблема ActiveX, с которым так же работает и Excel. Никто с подобной проблемой не сталкивался, а если сталкивался, то есть ли возможность как-то это исправить? ОС - 7, 64 битная. Платформа 7.7 - 27 релиз. В реестре всё прописано, из-под админа 7.7 запускалась. |
|||
1
HawkEye
06.12.17
✎
15:19
|
(0) пробуй SelectItems(1)
|
|||
2
KoBapeH
06.12.17
✎
15:21
|
Пробовал уже режим ему указывать. И с 0 и с 1 - результат один.
|
|||
3
MadDAD
06.12.17
✎
15:27
|
(2) А если через EvalExpr()? Чему равен объект справочника?
|
|||
4
MadDAD
06.12.17
✎
15:30
|
Еще вариант - может с кодировками беда? в 1С нужно строки передавать в кодировке Win1251
|
|||
5
asady
06.12.17
✎
16:04
|
||||
6
KoBapeH
06.12.17
✎
17:03
|
(5) Да, проблема та же. Пробовал _FlagAsMethod, ноль реакции.
Если что, вот код import win32com.client # import comtypes.client ole77 = None try: # ole77 = comtypes.client.CreateObject("V77.Application") ole77 = win32com.client.Dispatch("V77.Application") comConnStr = "/d\"E:\\Base\\BUH NEW\\\" /n\"ad\"" ole77.Initialize(ole77.RMTrade, comConnStr, "NO_SPLASH_SHOW") except Exception as err: print("Не удалось подключиться к базе. Ошибка: " + err.__str__()) if ole77: ref_name = 'Справочник.Номенклатура' print("Выборка " + ref_name) try: refer = ole77.CreateObject(ref_name) # ole77._FlagAsMethod('SelectItems') refer.SelectItems(0) while refer.GetItem() == 1: string1 = ole77.ValueToStringInternal(refer) print("Получено -" + string1) new = ole77.ValueFromStringInternal(string1,) string2 = new.Наименование print("Вернул -" + string2) except Exception as err: print("Не удалось выбрать справочники. Ошибка: " + err.__str__()) print("Получение объекта из строки") try: str_ole = "{\"B\",\"0\",\"0\",\"156\",\"0\",\"0\",\"3355\"}" objectDoc = ole77.ValueFromStringInternal(str_ole) print('Успех') except Exception as err: print("Не удалось получить объект из строки. Ошибка: " + err.__str__()) ole77 = None |
|||
7
KoBapeH
06.12.17
✎
17:04
|
(3) Поподробнее можно. Что именно требуется?
|
|||
8
Ёпрст
06.12.17
✎
17:06
|
(6) соединение то хоть установлено ?
|
|||
9
KoBapeH
06.12.17
✎
17:06
|
(4) Так ведь режим для выборки не обязательный. Там ничего не передаётся. И если бы была проблема с кодировкой, то выборка по документам бы не работала.
|
|||
10
Ёпрст
06.12.17
✎
17:07
|
и хз за синтаксис питона, а чего не в двойных кавычках в
CreateObject пихаешь ? |
|||
11
KoBapeH
06.12.17
✎
17:08
|
(8) Да, конечно. (10) Да там без разницы.
|
|||
12
Ёпрст
06.12.17
✎
17:08
|
почему не так, например ?
ref_name = "Справочник.Номенклатура" |
|||
13
Ёпрст
06.12.17
✎
17:09
|
покажи код для документа, который работает у тебя
|
|||
14
Ёпрст
06.12.17
✎
17:10
|
ну и в базе, есть вообще, Справочник.Номенклатура хоть ?
Может та, Справочник.Товар ? |
|||
15
Сияющий в темноте
06.12.17
✎
20:56
|
строки по OLE идут в юникоде,поэтому,работать должно,но непонятно,что питон может делать с переменными,семерка очень капризная
можно попробовать из питона создать VbScript,а уже из него лезть в 1с |
|||
16
MadDAD
07.12.17
✎
08:56
|
(7) Что покажет
refer = ole77.EvalExpr('СоздатьОбъект("Справочник.Номенклатура")') |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |