Python и К3

Модераторы: Лабутин Сергей Евгеньевич, Алек(андр

Re: Python и К3

Сообщение bonduran » 15 окт 2014 14:33

bonduran писал(а):Что такое скрейч знаете?

Да знаю. Ещё я знаю что такое "интерфейс" - это когда мне не нужно знать что такое скрейч и в какой атрибут нужно сохранять посчитанную стоимость. Я имел ввиду стандартную реализацию расчета стоимости К3 т.е. кнопку "Рассчитать стоимость", и макрос SumCostProj.mac и Пользоватльские умолчания с их параметром "Макропрограмма для расчета стоимости", пример которой я уже писал.
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение bonduran » 15 окт 2014 15:37

Алек(андр писал(а):# -*- coding: utf-8 -*-
import k3
pars=k3.getpar()
ft=k3.getattr(pars[0],"FurnType","000000")
k3.putmsg(u"hello world")
k3.setvarinst(1,"SumCost",100)
#-- Алгоритм расчета изделий
NULLOUT=k3.sumcost(1,ft,3) #--Будет вычислена стоимость по алгоритму (3 что значит расчет по макро) для FurnType==ft

Если это пример макроса расчета цены, имя которого нужно прописать в умолчания и нажать на кнопку "Рассчитать стоимость", то у меня он не работает...
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение Алек(андр » 15 окт 2014 15:46

bonduran писал(а):Если это пример макроса расчета цены, имя которого нужно прописать в умолчания и нажать на кнопку "Рассчитать стоимость", то у меня он не работает...

Возможно!
Я не проверял.
Я обратил ваше внимание на то, что вы не все указали в своем опыте.
Тут то у вас что? :

Изображение
Аватара пользователя
Алек(андр
 
Сообщения: 1201
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение bonduran » 15 окт 2014 16:08

https://yadi.sk/i/aa6m6_7Fc3WYD
Расчет изделий "Стоимость состовляющих"
Расчет панелей "По макро"
Макропрограмма расчета стоимости "sumCost.py"
sumCost.py содержит код вашего примера и лежит в Proto
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение Алек(андр » 15 окт 2014 19:12

bonduran писал(а):https://yadi.sk/i/aa6m6_7Fc3WYD
Расчет изделий "Стоимость состовляющих"
Расчет панелей "По макро"
Макропрограмма расчета стоимости "sumCost.py"
sumCost.py содержит код вашего примера и лежит в Proto

Ха! Ну вы даете! Я написал пример вызова функций для расчета стоимости в питоне. Но этот код работать не будет.
Вы вызываете расчет по макро в котором заложен вызов функции с применением алгоритма расчета по тому же макро. Это рекруссия получается. не должно работать.
Посмотрите вкачестве примера ...\Proto\SumCostProj.mac

вообщето похоже файл с расширением py не вызывается в sumcost()

я попробовал запустить через макрос testsumcost.mac в котором разместил строку
global protopath;
macro protopath+"sumcost.py" ByRef obj;

вот тогда обращение произошло.

Код: Выделить всё
//-- Расчет стоимости изделия по макро
global protopath;
defarr pan[10];
NULLOUT=initarray(pan,0);
defarr xm[6];

getpar obj; //-- Получаем объект
macro protopath+"sumcost.py" ByRef obj;
exit;


сам sumcost.py

Код: Выделить всё
# -*- coding: utf-8 -*-
import k3
k3.putmsg("hello world")
pars=k3.getpar()
scr=k3.setvarinst(1,"SumCost",100);


Изображение
вот результат присвоено 100
так что работает оказывается setvarinst
а вот скрипт на питоне прямым вызовом не вызывается
Изображение
Аватара пользователя
Алек(андр
 
Сообщения: 1201
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение bonduran » 16 окт 2014 08:45

Алек(андр писал(а):а вот скрипт на питоне прямым вызовом не вызывается
Это я и хотел сказать...
Алек(андр писал(а):macro protopath+"sumcost.py" ByRef obj;

вот тогда обращение произошло.

А если так, то не удается посчитать панели, для считывания параметров которых нужно объявить массив arr=k3.VarArray(10) который выдаёт ошибку.
Код: Выделить всё
# -*- coding: utf-8 -*-
import k3
k3.putmsg("hello world")
arr=k3.VarArray(10)              #здесь ошибка
pars=k3.getpar()
scr=k3.setvarinst(1,"SumCost",100);
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение bonduran » 16 окт 2014 08:59

Эта проблема оказывается решается если в макрос python передавать массивы...
Код: Выделить всё
defarr arr[20],xm[6];
macro ProtoPath+"sumCost.py" byref obj byref arr byref xm;
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение alter » 19 фев 2015 20:12

Продолжу эту тему...
Помогите инициализировать панель в Python, по всякому уже пробовал....
K3Error: Не поддерживается конвертация объектов типа: K3.Var
Код: Выделить всё
import k3
import mPanel as mP
params=k3.getpar()
obj=params[0]

ft=k3.getattr(obj,'FurnType',-1)
per=k3.left(ft,2)
aPan = k3.VarArray(3000)
NULLOUT=k3.initarray(aPan,0)

if (per=="01") :
  k3.putmsg(per)
  aPan[1]=obj
  NULLOUT=k3.getpan6par(1,aPan) 
 
scr=k3.setvarinst(1,"SumCost",100)
alter
 
Сообщения: 36
Зарегистрирован: 10 окт 2012 10:47

Re: Python и К3

Сообщение Алек(андр » 20 фев 2015 09:20

alter писал(а):Продолжу эту тему...
Помогите инициализировать панель в Python, по всякому уже пробовал....
K3Error: Не поддерживается конвертация объектов типа: K3.Var
Код: Выделить всё
import k3
import mPanel as mP
params=k3.getpar()
obj=params[0]

ft=k3.getattr(obj,'FurnType',-1)
per=k3.left(ft,2)
aPan = k3.VarArray(3000)
NULLOUT=k3.initarray(aPan,0)

if (per=="01") :
  k3.putmsg(per)
  aPan[1]=obj
  NULLOUT=k3.getpan6par(1,aPan) 
 
scr=k3.setvarinst(1,"SumCost",100)

Вот уже даже здесь
ft=k3.getattr(obj ....

Нужен k3.K3Obj
Код: Выделить всё
if not isinstance(obj , k3.K3Obj):
    obj=obj.value

Вы передаете переменную k3.Var()
А надо объект <hObj>

Или так

Изображение
Аватара пользователя
Алек(андр
 
Сообщения: 1201
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение alter » 20 фев 2015 11:05

Нужен k3.K3Obj

Я и так тоже пробовал, но видно где то была еще ошибка. Вообщем утро вечера мудренее:
Код: Выделить всё
# -*- coding: cp1251 -*-
import k3
import mPanel as mP
params=k3.getpar()
obj=params[0]

aPan = k3.VarArray(3000)
NULLOUT=k3.initarray(aPan,0)

if isinstance(obj, k3.K3Obj):
    panel=obj
else:
    panel = obj.value
ft=k3.getattr(panel,"FurnType","")

if (k3.left(ft,2)=="01") :
    aPan[0].value=panel
    NULLOUT=k3.getpan6par(1,aPan)
    aPan[0].value=0
    NULLOUT=k3.getpan6par(2,aPan)
    matID=aPan[0].value   
    k3.putmsg(matID)


scr=k3.setvarinst(1,"SumCost",100)

Не понял про
Или так

Я поначалу хотел инициализировать через функцию mP.PanelRectangle.panelInit(obj), но не понял как правильно к ней обратиться, вылезала ошибка.
alter
 
Сообщения: 36
Зарегистрирован: 10 окт 2012 10:47

Re: Python и К3

Сообщение Алек(андр » 20 фев 2015 11:22

alter писал(а):
Нужен k3.K3Obj

Я и так тоже пробовал, но видно где то была еще ошибка. Вообщем утро вечера мудренее:
Код: Выделить всё
# -*- coding: cp1251 -*-
import k3
import mPanel as mP
params=k3.getpar()
obj=params[0]

aPan = k3.VarArray(3000)
NULLOUT=k3.initarray(aPan,0)

if isinstance(obj, k3.K3Obj):
    panel=obj
else:
    panel = obj.value
ft=k3.getattr(panel,"FurnType","")

if (k3.left(ft,2)=="01") :
    aPan[0].value=panel
    NULLOUT=k3.getpan6par(1,aPan)
    aPan[0].value=0
    NULLOUT=k3.getpan6par(2,aPan)
    matID=aPan[0].value   
    k3.putmsg(matID)


scr=k3.setvarinst(1,"SumCost",100)

Не понял про
Или так

Я поначалу хотел инициализировать через функцию mP.PanelRectangle.panelInit(obj), но не понял как правильно к ней обратиться, вылезала ошибка.



Плохо вы ставите условия проблемы. Недостаточно информации. Не говорите как вы вызываете свою программу в к3.

Вот такой вариант работает

Код: Выделить всё
# -*- coding: cp1251 -*-
import k3
import mPanel as mP
obj = k3.Var()
k3.objident(k3.k_interact, obj)

aPan = k3.VarArray(3000)
NULLOUT=k3.initarray(aPan,0)

if isinstance(obj, k3.K3Obj):
    panel=obj
else:
    panel = obj.value
ft=k3.getattr(panel,"FurnType","")

if (k3.left(ft,2)=="01") :
    aPan[0].value=panel
    NULLOUT=k3.getpan6par(1,aPan)
    aPan[0].value=0
    NULLOUT=k3.getpan6par(2,aPan)
    matID=aPan[0].value   
    k3.putmsg(matID)


scr=k3.setvarinst(1,"SumCost",100)


А раз этот работает значит у вас ошибка в вызове.

ByRef стоит перед передачей параметра.

macro protopath+"blalbla.py" byref Obj ;

Пишите как вызываете, как указываете!
Ничего же непонятно!

Может вы вообще не панель передаете!

Где скриншот ошибки?!
Аватара пользователя
Алек(андр
 
Сообщения: 1201
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение alter » 20 фев 2015 11:40

Плохо вы ставите условия проблемы. Недостаточно информации. Не говорите как вы вызываете свою программу в к3.

Извиняюсь, забыл указать, что последний мной выложенный здесь http://forum.k3info.ru/viewtopic.php?f=7&t=98&start=30#p6091 код - РАБОЧИЙ.
Проблемы уже нет. :) Спасибо за подсказку.
alter
 
Сообщения: 36
Зарегистрирован: 10 окт 2012 10:47

Re: Python и К3

Сообщение alter » 01 мар 2015 10:33

Приветствую. Помогите, не получается прочесть Scratch атрибут у объекта. Функция возвращает единицу при выполнении, а переменная пустая.
Код: Выделить всё
import k3
k3.getsnap()
xm = k3.VarArray(100)
NULLOUT=k3.initarray(xm,0)
panel = k3.Var()
k3.objident(k3.k_interact, panel)
Namescr="SumCost"
FT=0
if k3.isassign(Namescr,panel):
  Scratch=k3.readscratch(Namescr, panel)
  k3.putmsg(Scratch)
  err=k3.getscratch(Scratch, "CalcSum", "SumCost", FT, "")
  print(err)
  k3.putmsg(FT)

Какого вида должна быть строка StrAttr условия <Filter> в функции k3.selbyattr(StrAttr,k3.k_prompt,str('object'),k3.k_interact)
Взятые из макросов К3 примеры фильтра: выбора по атрибутам, не работают: "Ошибка при выполнении команды selbyattr"
Как правильно передать строку, например, такого вида:
StrAttr='left(FurnType,1)!=//"0//"&&left(FurnType,1)!=//"1//"&&left(FurnType,1)!=//"8//"&&Furntype!=//"310000//'
alter
 
Сообщения: 36
Зарегистрирован: 10 окт 2012 10:47

Re: Python и К3

Сообщение alter » 02 мар 2015 14:27

Неужели заклинатели Питона не знают ответа на мои вопросы. Работа стоит... Помогите.
alter
 
Сообщения: 36
Зарегистрирован: 10 окт 2012 10:47

Re: Python и К3

Сообщение Ручей » 02 мар 2015 14:52

alter писал(а):Неужели заклинатели Питона не знают ответа на мои вопросы. Работа стоит... Помогите.

Заклинателей питона тут почти нет. Попробуйте штатные макросы на питоне посмотреть.
Ручей
 
Сообщения: 887
Зарегистрирован: 15 июл 2011 19:55

Пред.След.

Вернуться в К3-Мебель. Программа для производства и продажи мебели.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2