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)
Автор: admin
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()
Табличный отчет -вставка дополнительных секций
В заголовке отчета — вызов функции getHeader:
Загрузка списка, обход и выполнение команды из меню
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
Использование (наследование) подготовленного запроса из отчета
Вставка кнопки в экран и наследование запроса из отчета
Проверка перед сохранением записи (_e_valid)
if mem.scname=="spr_cln": if len(mem.s.name)>50: mem.w.name.setFocus() zzMess(u"Слишком длинная строка наименования") RETURN=False
Обработка 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))
Преобразование даты
Python MySQL
Простой бесконечный прогрессбар
zzWaitShow() zzWaitStep() zzWaitClose()