#block /* { "result": true, "message": "", "task": { "id": "task_id", "title": "Подтоварка м001", "dep": "001", "comment": "коммент", "items": [ { "id": "xar.Ссылка", (нужно тк фреймворк берет это поле и отдает для update_item) "product_id": "xar.Ссылка", "article": "123-091", "color": "цвет", "size": "размер", "sector": "сектор", "group": "группа", "image": "https://.../112209-0.jpg", "title": "ТАПОЧКИ", "base_price": 1000, "price": 800, "disc": "20%", "label_color": "Белый | Красный", "rest": 4, "qty": 3, "done": false "done_updated":"2026-01-01 yyyy-mm-dd" } ] } } */ #endblock #proc mshop_refill.sql_query #se form_date=[$f::now()] #se DateTo=@{SELECT Date_format('[form_date]', '%Y.%m.%d 23:59:59')}@ #se min_date=@{select DATE_SUB('[DateTo]', interval 7 day )}@ #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@ #if !$report_ref #se report_ref=@{SELECT UUID_SHORT();}@ #endif #globalobjs_get Dep.Код #se Подразделение.код=[dep.код] #se PriceType=@{select tp.ссылка from spravochniki_tipicen as tp inner join spravochniki_podrazdeleniya as dep on dep.ТипЦен=tp.ссылка where dep.Код='[Подразделение.Код]'}@ #se BasePriceType=@{select IFNULL(БазовыйТипЦен,0) from spravochniki_tipicen as tp inner join spravochniki_podrazdeleniya as dep on dep.ТипЦен=tp.ссылка where dep.Код='[Подразделение.Код]'}@ #se PlanPriceType=@{select Ссылка from spravochniki_tipicen as tp where Наименование='РозницаПлан'}@ #se OPT_SELECT_FIELDS=@!!@ #se EXTRA_WHERE=AND ((rozdv.ДАТА >= pod.ДатаПодтоварки OR pod.ДатаПодтоварки IS NULL) OR (pod.ДатаПодтоварки >= DATE_SUB(NOW(), INTERVAL 24 HOUR))) #se HAVING_FILTER= #if $filter_sql #if [filter_sql]=by_sales #se HAVING_FILTER=HAVING ДатаПродажи IS NOT NULL #endif #if [filter_sql]=by_incoming #se HAVING_FILTER=HAVING ДатаПоступления IS NOT NULL #endif #endif #include_module refill_sql [#refill_sql.build_query] #endproc #proc mshop_refill.get.list /*не актуально*/ #src stats #r select count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)>0 AND `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items_done, count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)=0 OR `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items from ([#mshop_refill.sql_query]) as qq #query #endsrc #se j:result={{"result":true,"message":""}} #v j:task={{}} #v j:task.id="torg_zal" #v j:task.title="ПОДТОВАРКА ТЗ" #v j:task.created="[$f::now]" #v j:task.comment="Подтоварка торгового зала" #if {stats} #v j:task.items_count={stats.items} #v j:task.items_done={stats.items_done} #else #v j:task.items_count=0 #v j:task.items_done=0 #endif #se j:result.tasks=[[ [j:task] ]] #endproc #block /* { result: true, message: '', task: { id: 'task_id', title: 'ПРЕОЦЕНКА м001', created: '01.01.2020', number: '012-022', dep: '001', price_type: 'тип цены', label_color: '#', comment: 'коммент', items: [ { id: 1, article: '123-091', color: 'цвет', size: 'размер', group: 'группа1', image: 'https://.../112209-0.jpg', title: 'ТАПОЧКИ', price: 1290, qty: 3, done: false }, ] } } */ #endblock #proc mshop_refill.get.task(task_id) #se filter_sql=[?j:query.filter_mod] #src items_sql #r [#mshop_refill.sql_query] #query #endsrc #globalobjs_get Dep.Код #se j:result={{"result":true,"message":""}} #v DF=@{select Date_format('[DateFrom]', '%d.%m.%Y')}@ #v DT=@{select Date_format('[DateTo]', '%d.%m.%Y')}@ #v j:task={{}} #v j:task.id="torg_zal" #v j:task.title="ПОДТОВАРКА [dep.код]" #v j:task.dep="[dep.код]" #v j:task.comment="За период с [DF] по [DT]" #v j:items=[[ ]] #foreach items_sql #v j:item={{}} #v j:item.id="{items_sql.tov_id}" #v j:item.product_id="{items_sql.product_id}" #v j:item.article="{items_sql.Артикул}" #v j:item.color="{items_sql.Цвет}" #v j:item.size="{items_sql.Размер}" #v j:item.sector="{items_sql.Сектор}" #v j:item.group="{items_sql.Группа}" #v j:item.image="{items_sql.Фото}" #v j:item.title="{items_sql.Наименование}" #v j:item.base_price="{items_sql.Цена план}" #v j:item.price="{items_sql.Цена (текущая)}" #v j:item.disc="{items_sql.Скидка}" #v j:item.label_color="{items_sql.Ценник}" #v j:item.rest={items_sql.Остаток} #v j:item.qty={items_sql.Нужно подтоварить} #v j:item.done=[$f::if({items_sql.Выполнено},true,false)] #v j:item.done_updated="{items_sql.Дата подтоварки}" #v j:items[[]]=$j:item #endfor #v j:task.items=$j:items #se j:result.task=$j:task #endproc #proc mshop_refill.get.update_item(task_id) ;#v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@ #endproc #proc mshop_refill.set_done(Характеристика,done,user_ref) #v DateTo=@{SELECT Date_format(NOW(), '%Y.%m.%d 23:59:59')}@ #v DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@ #src nom_data #r SELECT nom.Ссылка AS Номенклатура, sznsv.Наименование AS цвет FROM @<Справочники.ХарактеристикиНоменклатуры>@ AS xar INNER JOIN @<Справочники.Номенклатура>@ AS nom ON nom.Ссылка=xar.Владелец left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=xar.Ссылка and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет') left join @<Справочники.ЗначенияСвойств>@ sznsv on sznsv.Ссылка=znsv.Значение WHERE xar.Ссылка=[Характеристика] #query #endsrc #se set_result=не изменен #if @{select count(*) from const_podtovarka where Номенклатура={nom_data.Номенклатура} and Датаврем >= DATE_SUB(NOW(), INTERVAL 24 HOUR) and Цвет='{nom_data.цвет}'}@ #if [done]=true @{ update const_podtovarka set Дата=date(Now()), Датаврем=Now(),Ответственный='[user_ref]' where Номенклатура={nom_data.Номенклатура} and Дата BETWEEN '[DateFrom]' AND '[DateTo]' AND Цвет='{nom_data.цвет}' }@ #se set_result=обновили #else /*отменить подтоварку*/ @{ delete from const_podtovarka where Номенклатура={nom_data.Номенклатура} and Дата BETWEEN '[DateFrom]' AND '[DateTo]' AND Цвет='{nom_data.цвет}' }@ #se set_result=удалили #endif #else #if [done]=true @{ insert into const_podtovarka (`Дата`, `Датаврем`,`Номенклатура`,`Характеристика`,Ответственный,Цвет) values (date(NOW()), NOW(), {nom_data.Номенклатура}, [Характеристика], '[user_ref]', '{nom_data.цвет}') }@ #se set_result=создали #endif #endif #endproc #proc mshop_refill.post.update_item #v Характеристика=@'[j:query.item_id]'@ #v done=[j:body.done] #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@ #v j:result={{}} #if !$Характеристика #v j:result.result=false #v j:result.message="Не указан item_id" #se j:result=$j:result #exit #endif #call mshop_refill.set_done($Характеристика,$done,$user_ref) #if [set_result]=не изменен #v j:result.result=false #v j:result.message="товар недоступен для редактирования" #se j:result=$j:result #else #v lst_upd=@{select max(podtv.ДатаВрем) from const_podtovarka as podtv where podtv.Характеристика=[Характеристика]}@ #if !$lst_upd #v lst_upd=[$f::now()] #endif #v j:update_item={{}} #v j:update_item.id=[Характеристика] #v j:update_item.done=[done] #v j:update_item.done_updated="[lst_upd]" #v j:items_update=[[ ]] #v j:items_update[[]]=$j:update_item #v j:update={{}} #v j:update.items=$j:items_update #v j:result.result=true #v j:result.message="" #v j:result.update=$j:update #se j:result=$j:result #endif #endproc #proc mshop_refill.post.close_task #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@ #src items #r [#mshop_refill.sql_query] #query #endsrc #foreach items #if [$f::if({items.done},true,false)]=false #call mshop_refill.set_done('{items.Характеристика}',true,$user_ref) ;TODO заполнять j:result.update как в mshop_refill.post.update_item #endif #endfor #se j:result={{"result":true,"message":"Все позиции подтоварены"}} #endproc #proc mshop_refill.get.find_item #se code=[j:query.code] #src find_and_validate #r SELECT xar.Ссылка as item_id FROM spravochniki_xarakteristikinomenklaturi xar INNER JOIN spravochniki_nomenklatura nom ON nom.ссылка = xar.Владелец LEFT JOIN spravochniki_shtrixkodatovarov sht ON sht.Характеристика = xar.Ссылка LEFT JOIN spravochniki_shtrixkoda shk ON shk.Ссылка = sht.Ссылка INNER JOIN @<Таблицы.ОстаткиТовараВТаре>@ ost ON ost.Характеристика = xar.Ссылка LEFT JOIN @<Справочники.Номенклатура>@ nnom ON nnom.Ссылка = nom.Родитель LEFT JOIN @<Справочники.Номенклатура>@ nnnom ON nnnom.Ссылка = nnom.Родитель LEFT JOIN @<Справочники.Номенклатура>@ nnnnom ON nnnnom.Ссылка = nnnom.Родитель LEFT JOIN const_marking_values as mark on mark.Характеристика=xar.Ссылка WHERE ( IFNULL(ШтрихКод,'null123')='[code]' OR nom.Артикул ='[code]' OR xar.Код='[code]' or nom.Артикул='[code]' OR nom.наименование like '%[code]%' or xar.Ссылка='[code]' OR mark.Серийныйномер='[code]' OR mark.Кодмаркировки='[code]' ) AND ost.Количество >= 1 AND ost.Тара = @{select ссылка from @<Справочники.Тара>@ where Наименование like 'Торговый%' limit 1}@ AND EXISTS ( SELECT 1 FROM @<Таблицы.ДвижениеТовара>@ dv INNER JOIN @<Справочники.Тара>@ tt ON tt.Ссылка = dv.Тара WHERE dv.Характеристика = xar.Ссылка AND dv.Количество < 0 AND dv.Дата BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() AND tt.Наименование = 'ТорговыйЗал' LIMIT 1 ) AND nom.МинимальныйОстаток > 0 AND nnnnom.Наименование NOT IN ('СЕРТИФИКАТЫ','БИЖУТЕРИЯ','УПАКОВОЧНЫЕ ПАКЕТЫ') LIMIT 1 #query #endsrc #if !{find_and_validate} #se j:result={{"result":false,"message":"код не опознан","item_id":""}} #exitproc #endif #foreach find_and_validate #v item_id={find_and_validate.item_id} #endfor #se j:result={{"result":true,"message":"","item_id":"[item_id]"}} #endproc