Константы

const.chk("tmp_test",u"Наименование",u"значение")
zzMess(const.tmp_test)
const.tmp_test=33
zzMess(const.tmp_test)
const.d('2020-01-01').tmp_test=1
zzMess(const.d('2020-01-01').tmp_test)
const.d('2020-02-01').tmp_test=2
zzMess(const.d('2020-02-01').tmp_test)
zzMess(const.d('2020-01-10').tmp_test)

MySql create function

zzCheckMySqlFunction("""
	CREATE FUNCTION getclnsaldo(_cln integer) 
	RETURNS decimal(15,2)
	COMMENT '1'
	DETERMINISTIC
	BEGIN
	
		declare saldo decimal(15,2) default 0.00;
		
		select 
		(select sum(summa)
		from move0
		where cln=_cln and  _db_cnt in (select cnt from l_abp,spr_abp where l_abp.abp=spr_abp.abp and afield='cln') )
		-
		(select sum(summa)
		from move0
		where cln=_cln and  _cr_cnt in (select cnt from l_abp,spr_abp where l_abp.abp=spr_abp.abp and afield='cln') ) 
		into saldo;

	
		RETURN (saldo);
	END
	""",forceRedefine=1)

if zzIsMySqlFunction("getclnsaldo"):
	zzCursor("select getclnsaldo(43) as saldo").browse()

Закрытие счета 10/13

ed1=zzFirstDateOfMonth(acnt.s.date)
ed2=zzLastDateOfMonth(acnt.s.date)
keyPrim=u"#закрытие_месяца#расчет10/13"

mbp_in_use=const.mbp_in_use
mbp_cnt_cr=const.mbp_cnt_cr
date=ed2
cdate=dtoc(date)
rnd=const.rnd

zzCursor("""delete 
			FROM move 
			where date>='%(ed1)s' and date<='%(ed2)s' and cr_cnt='%(mbp_cnt_cr)s' and prim like '%(keyPrim)s'
			""" % locals())

m_mbp_in_use=num(zzCursor("""select 
						sum(
								case 
									when _db_cnt='%(mbp_in_use)s'=_cr_cnt='%(mbp_in_use)s' then 0 
									when _db_cnt='%(mbp_in_use)s' then summa 
									else -summa 
								end
							) as summa
				from move0 
				where date<='%(date)s' and '%(mbp_in_use)s' in (_db_cnt,_cr_cnt)
				""" % locals()).r.summa)

m_mbp_cnt_cr=num(zzCursor("""select 
						sum(
								-case 
									when _db_cnt='%(mbp_cnt_cr)s'=_cr_cnt='%(mbp_cnt_cr)s' then 0 
									when _db_cnt='%(mbp_cnt_cr)s' then summa 
									else -summa 
								end
							) as summa
				from move0 
				where date<='%(date)s' and '%(mbp_cnt_cr)s' in (_db_cnt,_cr_cnt) 
				""" % locals()).r.summa)


t_mbp_in_use=num(zzCursor("""select sum(round(qt*price,%(rnd)s)) as summa
									from infs
									where date<='%(date)s' and cnt='%(mbp_in_use)s'
									""" % locals()).r.summa)

if m_mbp_in_use!=t_mbp_in_use:
	zzMess(u"""Сальдо на конец периода (<b>%(cdate)s</b>)<br>
					по балансу (<b>%(m_mbp_in_use)s</b>)<br>
					и <br>
					по учету ТМЦ (<b>%(t_mbp_in_use)s</b>)<br>
					<font color=red size=+2>Не совпадают!!!</font> <br>
					Для расчета будут использованы данные баланса!
				""" % locals())
must_be=round(m_mbp_in_use/2,rnd)
delta=must_be-m_mbp_cnt_cr

if not insert("move",{"SUMMA":delta,"DATE":ed2,"DB_CNT":"26/","CR_CNT":mbp_cnt_cr,"PRIM":keyPrim}):
	wasError=u"Ошибка при записи результата расчета: %s" % lastError()

Загрузка списка, обход и выполнение команды из меню

spc=MyApp.runSc("docs",filter= """doc=116 and date='2017-11-30' """)
spc.windows.gridWindow.setVisible(False)
for x in range(spc.t.rowCount()):
	spc.runGridAction(u"Расчет проводок")
	spc.gridNext()
spc.windows.gridWindow.close()
spc=None

Обработка clipboard

    t=unicode(qApp.clipboard().mimeData().text())
    done=0
    zzWaitShow(u"Загрузка", t.count("\n"))
    curOrderUid=None
    for x in t.split("\n")[1:]:
        zzWaitStep()
        row=x.split("\t")
        if len(row)==52:
            if row[1-1]:#новый заказ
                orderDic={}
                orderDic['DATE']=date
                orderDic['buyer_id'.upper()]=gi("buyers","email",row[50-1],"buyer_id")
                orderDic['NOTES']=u"Заказ № %s:%s %s" % (row[1-1],row[30-1],row[14-1])
                if num(orderDic['buyer_id'.upper()])==0:
                    orderDic['NOTES']+=u"\n%s, %s  (%s)" % (row[20-1],row[23-1],row[50-1])
                if not insert("orders",orderDic):
                    zzMess(lastError())
                done+=1
            ordetDic={}
            ordetDic['ORDER_ID']=orderDic['ORDER_ID']
            ordetDic["QT"]=row[9-1]
#            ordetDic["PRIM"]=row[14-1]
            ordetDic["SELLING_PRICE"]=row[8-1].replace(u"руб.","").strip()
            ordetDic["PRODUCT_ID"]=gi("products","site_id",row[3-1],"product_id")
            if num(ordetDic["PRODUCT_ID"])==0:
                ordetDic["PRODUCT_ID"]=gi("products","name",row[4-1],"product_id")
            ordetDic["PURCHASE_PRICE"]=gi("products","product_id",ordetDic["PRODUCT_ID"],"PURCHASE_PRICE")
            if num(ordetDic["PRODUCT_ID"])==0:
                ordetDic["PRIM"]=u"%s (%s)" % (row[4-1],row[3-1])
            if not insert("order_details",ordetDic):
                zzMess(lastError())
    zzWaitClose()
    mem.refresh()
    zzMess(u"Загружено заказов <b>%s</b><br>" % (done))