Страница 6 из 7

Re: Python и К3

СообщениеДобавлено: 18 май 2016 15:21
Алек(андр
Странно!
Но если так
Код: Выделить всё
# -*- coding: utf-8 -*-
import k3
import time
Params = k3.getpar()
arr = k3.VarArray(20)
k3.setvarinst(1, "SumCost", 100)
time.sleep(1)

то работает.

Re: Python и К3

СообщениеДобавлено: 18 май 2016 15:46
bonduran
с этими массивами нереально странно. Я как уже писал, нашёл выход - не создавать массивы а передавать их из макроса К3 параметром и дальше таскать везде. Но с функцией NPGetByWhere это не прокатывает. Я даже пытался написать функцию в макросе К3 и вызвать её из макроса на питоне
Код: Выделить всё
getpar condition, price;
price=0;
count=NPGetByWhere(1,condition,"result");
if (count>0)
{
    id=result[1];
    price=PriceInfo(id,"Price",0);
    putmsg(price)
}

Вот так работает без ошибок. Но если закомментировать putmsg - то SumCost(2,sc) выдаёт ту же ошибку. Здесь руки опустились и я написал свою кривую реализацию NPGetByWhere на питоне

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:03
Алек(андр
Ух ты! и putmsg помогает?
Если есть putmsg то ошибки нет?

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:04
Алек(андр
print не помогает

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:05
Алек(андр
нет, putmsg не помог

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:10
Алек(андр
Я много где VarArray использую и проблем не возникало.
Видимо тут какая то конкретная проблема в SumCost

Попробуем отловить.

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:23
bonduran
Иногда помогает второй параметр.
Код: Выделить всё
import k3
params = k3.getpar()
arr = k3.VarArray(20) 
k3.setvarinst(1, "SumCost", 100)

так ошибка
Код: Выделить всё
import k3
params = k3.getpar()
arr = k3.VarArray(20, "ggg") 
k3.setvarinst(1, "SumCost", 100)

так нет ошибки
Код: Выделить всё
import k3
params = k3.getpar()
arr = k3.VarArray(20, "ggggg") 
k3.setvarinst(1, "SumCost", 100)

так снова ошибка

Я всё перепробовал думал длина имени, но как-то получилось без ошибки и с длинным именем. Но NPGetByWhere всё равно с ошибкой, какое бы имя я не писал.

Re: Python и К3

СообщениеДобавлено: 18 май 2016 16:52
Алек(андр
Вот такой код

Код: Выделить всё
# -*- coding: utf-8 -*-
import k3
import random
import string

def getRandomNameK3(pref='a_'):

    nameArrK3 = pref + ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in range(8))
    while k3.isvardef(nameArrK3) > 0:
        nameArrK3 = 'a_' + ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in range(8))
    return nameArrK3

def gArr(nm):
    arr = k3.VarArray(20, nm)
    return arr

def main():
    Params = k3.getpar()
    nm = getRandomNameK3()
    arr = gArr(nm)
    e = k3.setvarinst(1, "SumCost", 100)
    k3.putmsg(nm)

if 'arr' in globals().keys():
    del(arr)
if __name__ == '__main__':
    main()


работает на расчет стоимости.
Но без putmsg не хочет :)

Re: Python и К3

СообщениеДобавлено: 18 май 2016 17:04
Алек(андр
Судя по всему для работы sumCost должно произойти обновление командной строки. putmsg c этим прекрасно справляется.

На счет npgetbywhere нашел такой кусок

Код: Выделить всё
     
arrcomp=k3.VarArray(10,"arrcomp")
colkomp=k3.npgetbywhere(1," [ParentID]="+str(self._lifttype),"arrcomp")


работает!

Но Вы пишете именно про SumCost.
Мне кажется надо попробовать переписать весь..\Proto\SumCostProj.mac на питон

Может поможет

Re: Python и К3

СообщениеДобавлено: 18 май 2016 17:53
bonduran
Спасибо за время и совет, попробую переписать SumCostProj.mac.
Да проблема только в функции SumCost. А так давно уже не было проблем с питоном. Кроме try catch finally, который в определённой вложенности не хочет обрабатывать и корректную работу макроса при отмене ввода или выбора объекта, да можно и без этого жить.

Модуль связи с локальным CodeMeter

СообщениеДобавлено: 07 окт 2016 13:51
Алек(андр
Возникла необходимость разобраться с ключами в отделе. WebAdmin использовать не хотят.

Написал модуль, который пишет серийник и лицензии на экран. Вдруг кому пригодится!

Можно при импорте использовать в других модулях .

import CM_URL as cm
print(cm.get_serial_code())
print(cm.get_licenses())


Вызов из командной строки К3: macro protopath+"CM_URL.py";
>>>Команда:
;macro protopath+"CM_URL.py";
Найден локальный CodeMeter серйный номер 2-28xxxx
Лицензионные продукты:
------K3-Mebel PKM 6.x app
------K3-Mebel Salon 6.x app
------K3-Mebel IKM 6.x app
------K3-Mebel AMBI 7.1 app
------K3-Mebel AMBI 7.3 app
------K3-Mebel PKM 7.1 app
------K3-Mebel PKM 7.3 app
------K3-Mebel Salon 7.1 app
------K3-Mebel Salon 7.3 app
------K3-Mebel Machine 7.1 app
------K3-Mebel Cutting 2.0 app


Изображение

:arrow: Сылка для скачивания

Re: Python и К3

СообщениеДобавлено: 07 ноя 2016 10:25
bonduran
Вопрос следующий: при каждом вызове макроса на Python растет список os.sys.path, это нормально? Это так у всех?
Вот код для проверки, вызываю из макропрограммы .mac
Код: Выделить всё
import os
print(os.sys.path)
print(len(os.sys.path))

Re: Python и К3

СообщениеДобавлено: 07 ноя 2016 14:15
Алек(андр
Глянул, действительно так !
Добавляется +1 '.....\\Data\\PKM\\Proto',
Код: Выделить всё
# -*- coding: utf-8 -*-
#import k3
import re
import os

for e in sorted(os.sys.path):
    print(e)
print('------------------')
print('Всего {0} в том числе путей к папке Proto {1}'.format(len(os.sys.path), len(list(filter(lambda x: re.findall ('Proto[\\\]?$', x,  re.I), os.sys.path)))))
print('------------------')


з.ы. Спасибо за замечание! поправим.

Re: Python и К3

СообщениеДобавлено: 21 ноя 2017 07:52
bonduran
Установил версию 7.4. Что-то стало по-другому с tkinter. Получаю ошибку - не найден tcl8.5. Раньше по-моему в версии К3 7.3 достаточно было установить Python на компьютер т.к. в К3 чего-то не хватает для tkinter. Сейчас пришлось скопировать папку tcl8.5 из папки C:\\Python33\tcl например в папку C:\Program Files\GeoS\lib и тогда макрос работает но мне кажется это так себе решение, может лучше есть... Вот тестовый макрос
Код: Выделить всё
from tkinter import *
root = Tk()

вот ошибка
Изображение
https://yadi.sk/i/QYULCNRQ3Psu6C

Re: Python и К3

СообщениеДобавлено: 21 ноя 2017 12:26
Алек(андр
Привет! Там еще и DLLs не хватает

Изображение