Вход | Регистрация

1С:Предприятие ::

Метки: 

v7: Обращение по OLE из питона

Я
   KoBapeH
 
06.12.17 - 15:05
Вопрос к мэтрам некромантии: нужно из питона обратиться к справочнику бухгалтерии. Проблема возникает на стадии открытия выборки ВыбратьЭлементы(), либо SelectItems(). В питон возвращается следующая ошибка: "(-2147417851, 'Ошибка на сервере.', None, None)". Такую же ошибку возвращает метод ЗначениеИзСтрокиВнутр() - ValueFromStringInternal(). При этом сам объект справочника создаётся, да и по документам выборка отрабатывает нормально. Из самой 7.7 аналогичный код отрабатывает без проблем.
Насколько я понимаю, это проблема ActiveX, с которым так же работает и Excel. Никто с подобной проблемой не сталкивался, а если сталкивался, то есть ли возможность как-то это исправить? ОС - 7, 64 битная. Платформа 7.7 - 27 релиз. В реестре всё прописано, из-под админа 7.7 запускалась.
 
 
   HawkEye
 
1 - 06.12.17 - 15:19
(0) пробуй SelectItems(1)
   KoBapeH
 
2 - 06.12.17 - 15:21
Пробовал уже режим ему указывать. И с 0 и с 1 - результат один.
   MadDAD
 
3 - 06.12.17 - 15:27
(2) А если через EvalExpr()? Чему равен объект справочника?
   MadDAD
 
4 - 06.12.17 - 15:30
Еще вариант - может с кодировками беда? в 1С нужно строки  передавать в кодировке Win1251
   asady
 
5 - 06.12.17 - 16:04
   KoBapeH
 
6 - 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
   KoBapeH
 
7 - 06.12.17 - 17:04
(3) Поподробнее можно. Что именно требуется?
   Ёпрст
 
8 - 06.12.17 - 17:06
(6) соединение то хоть установлено ?
   KoBapeH
 
9 - 06.12.17 - 17:06
(4) Так ведь режим для выборки не обязательный. Там ничего не передаётся. И если бы была проблема с кодировкой, то выборка по документам бы не работала.
   Ёпрст
 
10 - 06.12.17 - 17:07
и хз за синтаксис питона, а чего не в двойных кавычках в
CreateObject пихаешь ?
 
 Рекламное место пустует
   KoBapeH
 
11 - 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с
   MadDAD
 
16 - 07.12.17 - 08:56
(7) Что покажет
refer = ole77.EvalExpr('СоздатьОбъект("Справочник.Номенклатура")')


Список тем форума
Рекламное место пустует Рекламное место пустует
Прочитай, хотя бы, Митичкина "Разработка в системе 1С:Предприятие 8". Волшебник
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует