#block /* { "result": true, "message": "", "task": { "id": "weeek/2026-01-01", "title": "Переоценка м001", "dep": "001", "comment": "коммент", "items": [ { "id": "Артикул/Цвет/Документ", "product_id": "Артикул/Цвет/Документ", "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": null, "done": false, "done_updated": "2026-01-01 12:21:11" } ] } } */ #endblock #proc create_tables #src ct #r create table if not EXISTS [const_pereocenka_report] ( `ССЫЛКА` INT UNSIGNED NOT NULL AUTO_INCREMENT, `ДОКУМЕНТ` INT UNSIGNED NOT NULL, `АРТИКУЛ` VARCHAR(50) NOT NULL, `ЦВЕТ` VARCHAR(50) NOT NULL, `ЦЕНА` INT NOT NULL, `ДатаИзменения` datetime default NULL, PRIMARY KEY (`ССЫЛКА`), KEY (`ДОКУМЕНТ`), KEY (`АРТИКУЛ`), KEY (`ЦВЕТ`), KEY (`ЦЕНА`), KEY (`ДатаИзменения`), UNIQUE KEY (`ДОКУМЕНТ`,`АРТИКУЛ`,`ЦВЕТ`,`ЦЕНА`) ) ENGINE=InnoDB CHARACTER SET cp1251; #query #endsrc #if !@{select 1 from information_schema.columns where table_schema=schema() and table_name='const_pereocenka_report' and column_name='ДатаИзменения'}@ @{alter table [const_pereocenka_report] add ДатаИзменения datetime default NULL;}@ #endif #endproc #proc init_params #include_module price_module #se const_pereocenka_report=const_pereocenka_report #globalobjs_get Dep.Код #se Подразделение.код=[dep.код] #se DateTo=@{SELECT Date_format(NOW(), '%Y.%m.%d 23:59:59')}@ #if [task_id]=week #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 7 DAY), '%Y.%m.%d 00:00:00')}@ #else #if [task_id]=daily #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@ #else #se DateFrom=@{SELECT Date_format('[task_id]', '%Y.%m.%d 00:00:00')}@ #endif #endif ;#se DF=@{select Date_format(DATE_ADD('[DateFrom]', INTERVAL -1 DAY), '%Y.%m.%d 16:00:00')}@ ;#se DT=@{select Date_format('[DateTo]', '%Y.%m.%d 23:59:59')}@ ;#se user_ref=[user_ref] #se user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@ #se store_id=@{select MAX(ссылка) from spravochniki_tara where наименование like '%торговый%зал%'}@ #se tara_t=[store_id] #se PlanPriceType=@{select Ссылка from spravochniki_tipicen as tp where Наименование='РозницаПлан'}@ #endproc #proc mshop_reprice.sql_query #call init_params #call create_tables #se report_ref=@{SELECT UUID_SHORT();}@ #se SELECT_QUERY=@!,concat('https://media.saticogroup.com/dm/goodpics/marmalato?good_id=',if(c_name.Наименование is null,substring_index((select min(Код) from @<Справочники.ХарактеристикиНоменклатуры>@ as xar where xar.Владелец=nom.Ссылка),',',1),substring_index(xar.Код,',',1))) as Фото_link ,s_name.Наименование AS 'Размер'!@ #include_module reprice_sql [#reprice_sql.build_query] #endproc #proc mshop_reprice.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_reprice.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 #proc mshop_reprice.get.task #se task_id=[j:query.task_id] #src items_sql #r [#mshop_reprice.sql_query] #query #endsrc #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="[task_id]" #v j:task.title="Переоценка м[Подразделение.код]" #v j:task.dep="[Подразделение.код]" #v j:task.comment="За период с [DF] по [DT]" #v j:items=[[ ]] #foreach items_sql #v j:item={{}} #v j:item.id="{items_sql.pos_id}" #v j:item.product_id="{items_sql.Коды}" #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.Фото_link}" #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.done},true,false)] #v j:item.done_updated="{items_sql.done_updated}" #v j:items[[]]=$j:item #endfor #v j:task.items=$j:items #se j:result.task=$j:task #endproc #proc mshop_reprice.post.update_item #se const_pereocenka_report=const_pereocenka_report #v tov_id=[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 !$tov_id #v j:result.result=false #v j:result.message="Не указан код товара" #se j:result=$j:result #exit #endif #v (artikul,color,doc,price)=@{SELECT CONCAT_WS(',', SUBSTRING_INDEX('[tov_id]', '/', 1), SUBSTRING_INDEX(SUBSTRING_INDEX('[tov_id]', '/', 2), '/', -1), SUBSTRING_INDEX(SUBSTRING_INDEX('[tov_id]', '/', 3), '/', -1), SUBSTRING_INDEX('[tov_id]', '/', -1))}@ ;#v tov_exist=@{SELECT 1 FROM INNER JOIN WHERE = AND }@ ;TODO проверка существования товара по артикул + цвет #v lst_upd=[$f::now()] #if [done]=true @{INSERT INTO [const_pereocenka_report] (ДОКУМЕНТ, АРТИКУЛ, ЦВЕТ, ЦЕНА, ДатаИзменения) VALUES('[doc]','[artikul]','[color]','[price]', NOW()) ON DUPLICATE KEY UPDATE ДатаИзменения = VALUES(ДатаИзменения)}@ #else #se nl=@{DELETE FROM [const_pereocenka_report] WHERE ДОКУМЕНТ='[doc]' AND АРТИКУЛ='[artikul]' AND ЦВЕТ='[color]' AND ЦЕНА='[price]'}@ #endif #v j:update_item={{}} #v j:update_item.id="[tov_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 #endproc #proc mshop_reprice.post.close_task /*TODO переписать для reprice*/ #exit #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@ #src items_sql #r [#mshop_reprice.sql_query] #query #endsrc #foreach items_sql #if [$f::if({items_sql.done},true,false)]=false #call mshop_refill.set_done('{items_sql.Характеристика}',true,$user_ref) ;TODO заполнять j:result.update как в mshop_refill.post.update_item #endif #endfor #se j:result={{"result":true,"message":"Все позиции подтоварены"}} #endproc #proc mshop_reprice.get.find_item #se code=[j:query.code] #globalobjs_get Dep.Код #src price_col #r Select tc.ссылка as 'Тип_цены_ссылка', IFNULL(tc.БАЗОВЫЙТИПЦЕН, 0) as 'Тип_цены_базовый_ссылка' From @<Справочники.Подразделения>@ as podr inner join @<Справочники.ТипыЦен>@ as tc on tc.ссылка = podr.ТИПЦЕН Where podr.КОД='[Dep.Код]' #query #endsrc #src find_sql #r SELECT CONCAT(nom.АРТИКУЛ, '/', IFNULL(c_name.Наименование, '*'), '/', pr.ДОКУМЕНТ, '/', ROUND(pr.ЦЕНА)) AS 'pos_id' FROM @<Таблицы.Прайсы>@ as pr INNER JOIN @<Документы.УстановкаЦенНоменклатуры>@ as uc ON uc.ССЫЛКА = pr.ДОКУМЕНТ INNER JOIN @<Справочники.Номенклатура>@ as nom ON nom.ссылка = pr.НОМЕНКЛАТУРА LEFT JOIN @<Справочники.ХарактеристикиНоменклатуры>@ as xar ON xar.ссылка = pr.ХАРАКТЕРИСТИКА LEFT JOIN @<таблицы.значениясвойств>@ as ssv_c ON ssv_c.объект = pr.ХАРАКТЕРИСТИКА AND ssv_c.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет') LEFT JOIN @<Справочники.ЗначенияСвойств>@ as c_name ON c_name.Ссылка = ssv_c.Значение LEFT JOIN @<Таблицы.ОстаткиТовараВТаре>@ as dv ON dv.ХАРАКТЕРИСТИКА = pr.ХАРАКТЕРИСТИКА AND dv.КАЧЕСТВО = 'НОВЫЙ' AND dv.ТАРА = [tara_t] LEFT JOIN @<Справочники.ШтрихКодаТоваров>@ as sht ON sht.Характеристика = xar.ссылка LEFT JOIN @<Справочники.ШтрихКода>@ as sh ON sh.Ссылка = sht.Ссылка LEFT JOIN const_marking_values as mark on mark.Характеристика=xar.Ссылка WHERE pr.ТИПЦЕНЫ IN ({price_col.Тип_цены_ссылка}, {price_col.Тип_цены_базовый_ссылка}) AND pr.КАЧЕСТВО = 'НОВЫЙ' AND ( nom.АРТИКУЛ ='[code]' OR xar.КОД ='[code]' OR nom.НАИМЕНОВАНИЕ LIKE '%[code]%' OR xar.ссылка ='[code]' OR sh.ШтрихКод ='[code]' OR mark.Серийныйномер='[code]' OR mark.Кодмаркировки='[code]' ) GROUP BY pr.НОМЕНКЛАТУРА, IFNULL(c_name.Наименование, '*'), ROUND(pr.ЦЕНА) HAVING IFNULL(SUM(dv.КОЛИЧЕСТВО), 0) > 0 LIMIT 1 #query #endsrc #if {find_sql.pos_id} #se j:result={{"result":true,"message":"Найден","item_id":"{find_sql.pos_id}"}} #else ;#if {find_sql.} ; #se j:result={{"result":false,"message":"Код не опознан","item_id":""}} ;#else #se j:result={{"result":false,"message":"Товар не входит в текущее задание","item_id":""}} #endif #endproc