/* скрипт ускоряет пересчет статистики по мероприятиям и тем самым ускоряет перевод смены */ SET TERM ^ ; create or alter procedure SP_RECALC_AP_MAXQUANTVISIT ( ABONEMENT integer, PARAMSTR varchar(1024)) returns ( ABONEMENT_PACKAGE integer, OLDMAXQUANTVISIT integer, NEWMAXQUANTVISIT integer) as declare variable QUANTITY_UNUSED_VISITS integer; declare variable PACKAGE integer; begin /* Author mvs */ /* Products Abonement ONLY */ /* Last Update 2014.11.12 */ /* Last Update 2021.12.28 */ for select ap.id, /*ap.maxquantvisit,*/ adsp.quantity_unused_visits, ap.package from abonement_packages ap inner join abonements a on a.id=ap.abonement inner join packages p on p.id=ap.package and p.kind_transfer_unused_visits <> 0 left join SP_ABON_DIARY_STAT_BY_PACKAGE(a.folio,'&for_transfer_unused_visits=1&package='||p.id) adsp on 1=1 where ap.abonement=:abonement and ap.enabled=1 into :abonement_package, /*:oldmaxquantvisit ,*/ :QUANTITY_UNUSED_VISITS, :package do begin oldmaxquantvisit = 0; select ap.maxquantvisit from abonement_packages ap where ap.id=:abonement_package into :oldmaxquantvisit; oldmaxquantvisit = snn(oldmaxquantvisit); QUANTITY_UNUSED_VISITS = snn(QUANTITY_UNUSED_VISITS); newmaxquantvisit = oldmaxquantvisit + QUANTITY_UNUSED_VISITS; if (QUANTITY_UNUSED_VISITS>0) then update abonement_packages ap set ap.maxquantvisit = :newmaxquantvisit where ap.id=:abonement_package; suspend; end end ^ commit ^ SET TERM ; ^