alter procedure PR_PRICING3 (
    PIN numeric(15,4),
    RIN numeric(15,4),
    PriceKind smallint,
    MED_ID integer,
    GR numeric(15,4),
    V numeric(15,4),
    S numeric(15,4),
    SNDS double precision,
    A numeric(15,4),
    VMN smallint,
    NDS numeric(15,4),
    NP numeric(15,4),
    DIVISOR integer,
    DOC_ID bigint,
    PART_ID bigint)
returns (
    P numeric(15,4),
    R numeric(9,2),
    ERR varchar(200),
    WARN varchar(200),
    MAXPRICE numeric(15,2),
    FACT_RATE numeric(9,2))
as
declare variable SA numeric(15,4);
declare variable propGV smallint;
declare variable BA numeric(15,4);
declare variable NDSA numeric(15,4);
declare variable Rgverr numeric(15,4);
declare variable Rpost numeric(15,4);
declare variable Ropt_regA numeric(15,4);
declare variable Ropt_regI numeric(15,4);
declare variable DepPG varchar(20);
declare variable Ropt_max numeric(15,4);
declare variable Rgv numeric(15,4);
declare variable Rdoc numeric(15,4);
declare variable propFR numeric(15, 4);
declare variable Rdocgv numeric(15,4);
declare variable RBella numeric(15,4);
declare variable RBolear numeric(15,4);
declare variable Rls numeric(15,4);
declare variable Rimn numeric(15,4);
declare variable Rdpit numeric(15,4);
declare variable Rpit numeric(15,4);
declare variable Rlechkosm numeric(15,4);
declare variable Rtrava numeric(15,4);
declare variable Rbad numeric(15,4);
declare variable Rmedtech numeric(15,4);
declare variable Ruhod numeric(15,4);
declare variable Rparafarm numeric(15,4);
declare variable Rvoda numeric(15,4);
declare variable Roptic numeric(15,4);
declare variable Rdettov numeric(15,4);
declare variable Rdetpitu numeric(15,4);
declare variable Rntsep numeric(15,4);
declare variable Rfr numeric(15,4);
declare variable MKind integer;
declare variable Supplier integer;
declare variable RoundTo numeric(15,4);
declare variable RoundDiv numeric(15,4);
declare variable propFIX numeric(15, 4);
declare variable Pfix numeric(15,4);
declare variable DocType integer;
declare variable propMXR numeric(15, 4);
begin
  /* Время компиляции: 18.03.2026 21:44:04 пользователь: ADM */
  /* Комментарий: А Аптека 2025 18.03.26 */

  propGV=iif(exists (select * from medprops where med_id=:med_id and prop_id=16), 1, 0);
  select dp.PRICE_GROUP from DEPARTMENT dp, docs d left join OPT op on op.DOC_ID=d.DOC_ID where d.DOC_ID=:doc_id and dp.DEP_ID=iif(d.DOCTYPE=13, d.PARTNER_ID, iif(d.DOCTYPE=16, coalesce((select first 1 dep_id from department where opt_client_id = coalesce(op.CONSIGNEE_ID,d.PARTNER_ID)), d.DEP_ID), d.DEP_ID)) into :DepPG;
  select o.RATE from DOCOPTIONS o where o.DOC_ID=:doc_id into :Rdoc;
  select VAL_NUM from medprops where med_id=:med_id and prop_id=3 into :propFR;
  select kind_id from medicine where med_id=:med_id into :MKind;
  select iif(:PRICEKIND = 4, cast(:PART_ID as integer), (select p.PARTNER_ID from PARTIES p where p.PART_ID=:part_id)) from dual into :Supplier;
  select VAL_NUM from medprops where med_id=:med_id and prop_id=7 into :propFIX;
  select doctype from docs where doc_id=:doc_id into :DocType;
  select VAL_NUM from medprops where med_id=:med_id and prop_id=28 into :propMXR;

/* Begin of source */
  /* Процедура должна возвращать на выходе цену P и % наценки R */ 
  /* Если цена Pin не пуста, то наценка R должна вычисляться от Pin  */ 
  /* Если наценка Rin не пуста, то цена P должна вычисляеться от Rin */
  /* Ошибки и предупреждения процедура может возвращать в переменных Err и Warn */
  
   /* базовая цена на которую накручивается % наценки*/
   
   /*#B=case
       when Supplier=1002001 then iif(propGV=1, minvalue(coalesce(V, GR, propGRR),coalesce(GR, V, propGRR),coalesce(propGRR, GR, V)), S)  /*выбираем мин.цену: цена произв. БНДС, рег.цена позиции поставки, рег.цена свойств товара */ 
       /*else iif(propGV=1, minvalue(coalesce(V, GR),coalesce(GR, V)), S)  /*выбираем мин.цену: цена произв. БНДС, рег.цена позиции поставки */
     /*end;*/
  /*#B=iif(propGV=1, iif(PriceKind=4,coalesce(propGRR,S),minvalue(coalesce(V, GR),coalesce(GR, V))), S);  /*выбираем мин.цену: цена произв. БНДС, рег.цена позиции поставки */
  SA = iif(VMN = 0, S, S + SNDS);
  BA = iif(propGV = 1, coalesce(minvalue(V, GR), S), SA);
  NDSA = iif(VMN = 1, 0, NDS);  
  
  Rgverr=iif(BA>500, 20, iif(BA>100, 28, 34)); /* наценка для ЖВ-для вывода ошибки */ 
  
  Rpost=S*100/V-100;   /*расчет наценки поставщика*/
  
   Ropt_regA=case        /*макс. разрешенные оптовые наценки поставщика для группы расценки 1*/
              when V>500 then 12
              when V>100 and V<=500 then 17
              when V<=100 then 25
            end;
  Ropt_regI=case        /*макс. разрешенные оптовые наценки поставщика для группы расценки 2*/
              when V>500 then 13
              when V>100 and V<=500 then 16
              when V<=100 then 22
            end;
  
  Ropt_max =iif(DepPG='модель6б'or DepPG='модель1б' , Ropt_regA,Ropt_regI);   /* наценка оптовая поставщика максимальная*/
  
  Rgv=case  /* наценка для ЖНВЛС*/
        when DepPG='модель1' then case /*отделы модель1*/
  when BA>2000 then 14
  when BA>1500 then 15
  when BA>1000 then 19
  when BA>500 then 20
  when BA>100 then 28
  else 34
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA>2000 then 17
  when BA>1500 then 18
  when BA>1000 then 19
  when BA>500 then 20
  when BA>100 then 28
  else 34
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA>2000 then 6
  when BA>1500 then 7
  when BA>1000 then 9
  when BA>750 then 10
  when BA>500 then 10
  when BA>400 then 14
  when BA>300 then 16
  when BA>200 then 19
  when BA>100 then 20
  else 30
  end   
  when DepPG='модель2' then case /*отделы модель2*/
  when BA>2000 then 13
  when BA>1500 then 15
  when BA>1000 then 18
  when BA>500 then 20
  when BA>100 then 28
  else 34
  end
  when DepPG='модель2а' then case /*отделы модель2а*/
  when BA>2000 then 13
  when BA>1500 then 15
  when BA>1000 then 18
  when BA>500 then 20
  when BA>100 then 28
  else 34
  end
  when DepPG='модель3' then case /*отделы модель3*/
  when BA>2000 then 12
  when BA>1500 then 13
  when BA>1000 then 16
  when BA>500 then 19
  when BA>300 then 25
  when BA>100 then 28
  else 34
  end
  
  when DepPG='модель4' then case /*отделы модель4*/
  when BA>2000 then 12
  when BA>1500 then 13
  when BA>1000 then 16
  when BA>500 then 18
  when BA>300 then 24
  when BA>100 then 26
  else 34
  end
  when DepPG='модель5' then case /*отделы модель5*/
  when BA>2000 then 7
  when BA>1500 then 9
  when BA>1000 then 12
  when BA>500 then 14
  when BA>300 then 20
  when BA>100 then 24
  else 32
  end
  when DepPG='модель6' then case /*отделы модель6*/
  when BA>2000 then 6
  when BA>1500 then 8
  when BA>1000 then 10
  when BA>500 then 12
  when BA>300 then 18
  when BA>100 then 22
  else 32
  end
  when DepPG='модель6б' then case /*отделы модель6б*/
  when BA>2000 then 5
  when BA>1500 then 6
  when BA>1000 then 8
  when BA>750 then 9
  when BA>500 then 10
  when BA>400 then 13
  when BA>300 then 16
  when BA>200 then 18
  when BA>100 then 20
  else 30
  end  
                          
        else 0                                         
      end;
  Rdocgv=coalesce(Rdoc, propFR); /*если задана наценка на документ, используем ее*/
  Rgv=iif(Rdocgv is null, Rgv, iif (Rdocgv>Rgv, Rgv, Rdocgv)); /*если наценка на документ выше, чем макс.разрешенная, то используем макс. разрешенную*/
  Rgv=iif(PriceKind=4,maxvalue(Rgv-0, 13),Rgv); 
      
  RBella=case  /* наценка Белла Сибирь*/
       when BA*(1+NDS/100)>1500 then 20
  when BA*(1+NDS/100)>1000 then 25
  when BA*(1+NDS/100)>750 then 30
  when BA*(1+NDS/100)>500 then 35
  when BA*(1+NDS/100)>200 then 40
  when BA*(1+NDS/100)>100 then 45
  when BA*(1+NDS/100)>50 then 70
        else 100
      end;
  RBella=coalesce(Rdoc, propFR, RBella); /*выбираем первое непустое значение*/
  
  RBolear=case  /* наценка Болеар*/
        when BA*(1+NDS/100)>200 then 30
        when BA*(1+NDS/100)>80 then 35
        when BA*(1+NDS/100)>50 then 40
        else 50
      end;
  RBolear=coalesce(Rdoc, propFR, RBolear); /*выбираем первое непустое значение*/
  
  Rls=case  /* наценка ЛС не ЖНВЛС*/
        
  
  
  
  when DepPG='модель1' then case /*отделы модель1*/
  when BA*(1+NDS/100)>2000 then 15
  when BA*(1+NDS/100)>1500 then 17
  when BA*(1+NDS/100)>1000 then 25
  when BA*(1+NDS/100)>750 then 30
  when BA*(1+NDS/100)>500 then 33
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>150 then 42
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 67
  when BA*(1+NDS/100)>25 then 90
  when BA*(1+NDS/100)>20 then 97
  when BA*(1+NDS/100)>10 then 122
  else 200
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA*(1+NDS/100)>2000 then 7
  when BA*(1+NDS/100)>1500 then 10
  when BA*(1+NDS/100)>1000 then 12
  when BA*(1+NDS/100)>750 then 13
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>300 then 21
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>100 then 27
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>20 then 82
  else 150
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>2000 then 21
  when BA*(1+NDS/100)>1500 then 23
  when BA*(1+NDS/100)>1000 then 27
  when BA*(1+NDS/100)>750 then 34
  when BA*(1+NDS/100)>500 then 36
  when BA*(1+NDS/100)>300 then 42
  when BA*(1+NDS/100)>150 then 47
  when BA*(1+NDS/100)>100 then 57
  when BA*(1+NDS/100)>50 then 67
  when BA*(1+NDS/100)>25 then 90
  when BA*(1+NDS/100)>20 then 97
  when BA*(1+NDS/100)>10 then 122
  else 200
  end
  when DepPG='модель2' then case /*отделы модель2*/
  when BA*(1+NDS/100)>2000 then 14
  when BA*(1+NDS/100)>1500 then 16
  when BA*(1+NDS/100)>1000 then 22
  when BA*(1+NDS/100)>750 then 26
  when BA*(1+NDS/100)>500 then 27
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>150 then 35
  when BA*(1+NDS/100)>100 then 46
  when BA*(1+NDS/100)>50 then 67
  when BA*(1+NDS/100)>25 then 90
  when BA*(1+NDS/100)>20 then 97
  when BA*(1+NDS/100)>10 then 122
  else 200
  end
  when DepPG='модель2а' then case /*отделы модель2а*/
  when BA*(1+NDS/100)>2000 then 14
  when BA*(1+NDS/100)>1500 then 16
  when BA*(1+NDS/100)>1000 then 22
  when BA*(1+NDS/100)>750 then 25
  when BA*(1+NDS/100)>500 then 27
  when BA*(1+NDS/100)>300 then 29
  when BA*(1+NDS/100)>150 then 34
  when BA*(1+NDS/100)>100 then 45
  when BA*(1+NDS/100)>50 then 67
  when BA*(1+NDS/100)>25 then 90
  when BA*(1+NDS/100)>20 then 97
  when BA*(1+NDS/100)>10 then 122
  else 200
  end
  
  when DepPG='модель3' then case /*отделы модель3*/
  when BA*(1+NDS/100)>2000 then 12
  when BA*(1+NDS/100)>1500 then 14
  when BA*(1+NDS/100)>1000 then 21
  when BA*(1+NDS/100)>750 then 22
  when BA*(1+NDS/100)>500 then 24
  when BA*(1+NDS/100)>300 then 26
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>100 then 40
  when BA*(1+NDS/100)>50 then 55
  when BA*(1+NDS/100)>25 then 77
  when BA*(1+NDS/100)>20 then 87
  when BA*(1+NDS/100)>10 then 92
  else 150
  end
  when DepPG='модель4' then case /*отделы модель4*/
  when BA*(1+NDS/100)>2000 then 10
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 18
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 24
  when BA*(1+NDS/100)>150 then 28
  when BA*(1+NDS/100)>100 then 38
  when BA*(1+NDS/100)>50 then 55
  when BA*(1+NDS/100)>25 then 77
  when BA*(1+NDS/100)>20 then 87
  when BA*(1+NDS/100)>10 then 92
  else 120
  end
  when DepPG='модель5' then case /*отделы модель5*/
  when BA*(1+NDS/100)>2000 then 7
  when BA*(1+NDS/100)>1500 then 9
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>750 then 17
  when BA*(1+NDS/100)>500 then 18
  when BA*(1+NDS/100)>300 then 21
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>25 then 65
  when BA*(1+NDS/100)>20 then 75
  when BA*(1+NDS/100)>10 then 85
  else 100
  end
  when DepPG='модель6' then case /*отделы модель6*/
  when BA*(1+NDS/100)>2000 then 5
  when BA*(1+NDS/100)>1500 then 7
  when BA*(1+NDS/100)>1000 then 11
  when BA*(1+NDS/100)>750 then 12
  when BA*(1+NDS/100)>500 then 13
  when BA*(1+NDS/100)>300 then 15
  when BA*(1+NDS/100)>150 then 16
  when BA*(1+NDS/100)>100 then 22
  when BA*(1+NDS/100)>50 then 45
  when BA*(1+NDS/100)>25 then 65
  when BA*(1+NDS/100)>20 then 75
  when BA*(1+NDS/100)>10 then 85
  else 100
  end
  when DepPG='модель6б' then case /*отделы модель6б*/
  when BA*(1+NDS/100)>2000 then 6
  when BA*(1+NDS/100)>1500 then 9
  when BA*(1+NDS/100)>1000 then 11
  when BA*(1+NDS/100)>750 then 12
  when BA*(1+NDS/100)>500 then 13
  when BA*(1+NDS/100)>300 then 18
  when BA*(1+NDS/100)>150 then 21
  when BA*(1+NDS/100)>100 then 26
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>20 then 85
  else 150
  end     
                                             
                           
        else 0                                         
      end;
  Rls=coalesce(Rdoc, propFR, Rls); /*выбираем первое непустое значение*/
  Rls=iif(PriceKind=4,maxvalue(Rls-0, 13),Rls); 
  
  Rimn=case  /* наценка Изд.мед.назначения*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель2а' then case /*Наценка для модели 1,2,2а*/
  when BA*(1+NDS/100)>2000 then 15
  when BA*(1+NDS/100)>1500 then 20
  when BA*(1+NDS/100)>1000 then 25
  when BA*(1+NDS/100)>750 then 28
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>300 then 40
  when BA*(1+NDS/100)>150 then 50
  when BA*(1+NDS/100)>100 then 60
  when BA*(1+NDS/100)>50 then 82
  when BA*(1+NDS/100)>25 then 140
  when BA*(1+NDS/100)>5 then 160
  else 200
  end
  when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>2000 then 12
  when BA*(1+NDS/100)>1500 then 14
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>750 then 17
  when BA*(1+NDS/100)>500 then 19
  when BA*(1+NDS/100)>300 then 24
  when BA*(1+NDS/100)>150 then 28
  when BA*(1+NDS/100)>100 then 32
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>25 then 85
  when BA*(1+NDS/100)>10 then 110
  else 150
  end
  
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>2000 then 23
  when BA*(1+NDS/100)>1500 then 25
  when BA*(1+NDS/100)>1000 then 30
  when BA*(1+NDS/100)>750 then 34
  when BA*(1+NDS/100)>500 then 37
  when BA*(1+NDS/100)>300 then 42
  when BA*(1+NDS/100)>150 then 52
  when BA*(1+NDS/100)>100 then 65
  when BA*(1+NDS/100)>50 then 85
  when BA*(1+NDS/100)>25 then 140
  when BA*(1+NDS/100)>5 then 160
  else 200
  end
  when DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 3,4*/
  when BA*(1+NDS/100)>2000 then 12
  when BA*(1+NDS/100)>1500 then 16
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>750 then 22
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>150 then 40
  when BA*(1+NDS/100)>100 then 45
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>25 then 85
  when BA*(1+NDS/100)>5 then 110
  else 150
  end
  when DepPG='модель5' then case /*Наценка для модели 5*/
  when BA*(1+NDS/100)>2000 then 10
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 16
  when BA*(1+NDS/100)>750 then 18
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>150 then 35
  when BA*(1+NDS/100)>100 then 40
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>25 then 72
  when BA*(1+NDS/100)>5 then 102
  else 100
  end
  when DepPG='модель6' then case /*Наценка для модели 6*/
  when BA*(1+NDS/100)>2000 then 6
  when BA*(1+NDS/100)>1500 then 8
  when BA*(1+NDS/100)>1000 then 10
  when BA*(1+NDS/100)>750 then 12
  when BA*(1+NDS/100)>500 then 14
  when BA*(1+NDS/100)>300 then 16
  when BA*(1+NDS/100)>150 then 19
  when BA*(1+NDS/100)>100 then 25
  when BA*(1+NDS/100)>50 then 42
  when BA*(1+NDS/100)>25 then 60
  when BA*(1+NDS/100)>5 then 102
  else 100
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>2000 then 10
  when BA*(1+NDS/100)>1500 then 11
  when BA*(1+NDS/100)>1000 then 12
  when BA*(1+NDS/100)>750 then 15
  when BA*(1+NDS/100)>500 then 16
  when BA*(1+NDS/100)>300 then 22
  when BA*(1+NDS/100)>150 then 26
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>25 then 82
  when BA*(1+NDS/100)>10 then 102
  else 150
  end
  
  else 0
  end;
  Rimn=coalesce(Rdoc, propFR, Rimn); /*выбираем первое непустое значение*/
  Rimn=iif(PriceKind=4,maxvalue(Rimn-0, 13),Rimn); 
  
  Rdpit=case  /* наценка Детское питание*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 1,2,3,4*/
  when BA*(1+NDS/100)>500 then 18
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>50 then 35
  when BA*(1+NDS/100)>25 then 45
  else 60
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA*(1+NDS/100)>500 then 12
  when BA*(1+NDS/100)>150 then 20
  when BA*(1+NDS/100)>50 then 30
  when BA*(1+NDS/100)>25 then 50
  else 60
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>150 then 26
  when BA*(1+NDS/100)>50 then 40
  when BA*(1+NDS/100)>25 then 60
  else 80
  end
  when DepPG='модель2a' or DepPG='модель5' or DepPG='модель6' or DepPG='модель6б' then case /*Наценка для модели 2а,5,6*/
  when BA*(1+NDS/100)>500 then 6
  when BA*(1+NDS/100)>150 then 12
  when BA*(1+NDS/100)>50 then 20
  when BA*(1+NDS/100)>25 then 30
  else 60
  end    
  else 45
  end;
  Rdpit=coalesce(Rdoc, propFR, Rdpit); /*выбираем первое непустое значение*/
  Rdpit=iif(PriceKind=4,Rdpit-0,Rdpit);
  
  Rpit=case  /* наценка Продукты питания*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 1,2,3,4*/
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>50 then 80
  when BA*(1+NDS/100)>25 then 100
  else 150
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>50 then 40
  when BA*(1+NDS/100)>25 then 60
  else 100
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>150 then 40
  when BA*(1+NDS/100)>50 then 100
  when BA*(1+NDS/100)>25 then 120
  else 150
  end
  when DepPG='модель2a' or DepPG='модель5' or DepPG='модель6' or DepPG='модель6б' then case /*Наценка для модели 2а,5,6,6б*/
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>150 then 22
  when BA*(1+NDS/100)>50 then 30
  when BA*(1+NDS/100)>25 then 60
  else 80
  end
      end;
  Rpit=coalesce(Rdoc, propFR, Rpit); /*выбираем первое непустое значение*/
  Rpit=iif(PriceKind=4,Rpit-10,Rpit); 
  
  Rlechkosm=case  /* наценка Лечебная косметика*/
        when BA*(1+NDS/100)>500 then 25
        when BA*(1+NDS/100)>250 then 35
        when BA*(1+NDS/100)>150 then 50
        when BA*(1+NDS/100)>50 then 60
        when BA*(1+NDS/100)>30 then 70
        else 100
      end;
  Rlechkosm=coalesce(Rdoc, propFR, Rlechkosm); /*выбираем первое непустое значение*/
  Rlechkosm=iif(PriceKind=4,Rlechkosm-0,Rlechkosm); 
  
  Rtrava=case  /* наценка Травы*/
  when DepPG='модель1' or DepPG='модель2'or DepPG='модель2а' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 1,2,2а,3,4*/
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>100 then 40
  when BA*(1+NDS/100)>75 then 50
  when BA*(1+NDS/100)>50 then 60
  else 80
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA*(1+NDS/100)>150 then 24
  when BA*(1+NDS/100)>100 then 28
  when BA*(1+NDS/100)>50 then 45
  else 60
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>150 then 42
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>75 then 82
  when BA*(1+NDS/100)>50 then 90
  else 100
  end
  when DepPG='модель5' then case /*Наценка для модели 5*/
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>100 then 35
  when BA*(1+NDS/100)>75 then 50
  when BA*(1+NDS/100)>50 then 60
  else 80
  end
  when DepPG='модель6' then case /*Наценка для модели 6*/
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>75 then 40
  when BA*(1+NDS/100)>50 then 50
  else 60
  end
  when DepPG='модель6б' then case /*отделы модель6б*/
  when BA*(1+NDS/100)>150 then 24
  when BA*(1+NDS/100)>100 then 24
  when BA*(1+NDS/100)>50 then 45
  else 60
  end
  
      else 75
      end;
      
  Rtrava=coalesce(Rdoc, propFR, Rtrava); /*выбираем первое непустое значение*/
  Rtrava=iif(PriceKind=4,maxvalue(Rtrava-0, 13),Rtrava);
  
  Rbad=case /* наценка БАД*/
        
  when DepPG='модель1' then case /*отделы модель1*/
  when BA*(1+NDS/100)>2000 then 18
  when BA*(1+NDS/100)>1500 then 23
  when BA*(1+NDS/100)>1000 then 28
  when BA*(1+NDS/100)>750 then 31
  when BA*(1+NDS/100)>500 then 34
  when BA*(1+NDS/100)>300 then 37
  when BA*(1+NDS/100)>150 then 47
  when BA*(1+NDS/100)>100 then 57
  when BA*(1+NDS/100)>50 then 77
  when BA*(1+NDS/100)>25 then 142
  else 200
  end
  when DepPG='модель1б' then case /*отделы модель1б*/
  when BA*(1+NDS/100)>2000 then 10
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 14
  when BA*(1+NDS/100)>750 then 15
  when BA*(1+NDS/100)>500 then 17
  when BA*(1+NDS/100)>300 then 20
  when BA*(1+NDS/100)>150 then 26
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>25 then 82
  else 200
  end 
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>2000 then 25
  when BA*(1+NDS/100)>1500 then 29
  when BA*(1+NDS/100)>1000 then 33
  when BA*(1+NDS/100)>750 then 37
  when BA*(1+NDS/100)>500 then 40
  when BA*(1+NDS/100)>300 then 44
  when BA*(1+NDS/100)>150 then 50
  when BA*(1+NDS/100)>100 then 65
  when BA*(1+NDS/100)>50 then 77
  when BA*(1+NDS/100)>25 then 142
  else 200
  end
  
  
  when DepPG='модель2' then case /*отделы модель2*/
  when BA*(1+NDS/100)>2000 then 16
  when BA*(1+NDS/100)>1500 then 22
  when BA*(1+NDS/100)>1000 then 26
  when BA*(1+NDS/100)>750 then 30
  when BA*(1+NDS/100)>500 then 32
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>150 then 44
  when BA*(1+NDS/100)>100 then 57
  when BA*(1+NDS/100)>50 then 72
  when BA*(1+NDS/100)>25 then 137
  else 200
  end
  when DepPG='модель2а' then case /*отделы модель2а*/
  when BA*(1+NDS/100)>2000 then 16
  when BA*(1+NDS/100)>1500 then 22
  when BA*(1+NDS/100)>1000 then 26
  when BA*(1+NDS/100)>750 then 30
  when BA*(1+NDS/100)>500 then 32
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>150 then 44
  when BA*(1+NDS/100)>100 then 57
  when BA*(1+NDS/100)>50 then 72
  when BA*(1+NDS/100)>25 then 137
  else 200
  end
  when DepPG='модель3' then case /*отделы модель3*/
  when BA*(1+NDS/100)>2000 then 14
  when BA*(1+NDS/100)>1500 then 19
  when BA*(1+NDS/100)>1000 then 24
  when BA*(1+NDS/100)>750 then 26
  when BA*(1+NDS/100)>500 then 28
  when BA*(1+NDS/100)>300 then 31
  when BA*(1+NDS/100)>150 then 41
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>25 then 132
  else 150
  end
  when DepPG='модель4' then case /*отделы модель4*/
  when BA*(1+NDS/100)>2000 then 12
  when BA*(1+NDS/100)>1500 then 16
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>750 then 22
  when BA*(1+NDS/100)>500 then 24
  when BA*(1+NDS/100)>300 then 27
  when BA*(1+NDS/100)>150 then 42
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 57
  when BA*(1+NDS/100)>25 then 130
  else 150
  end
  when DepPG='модель5' then case /*отделы модель5*/
  when BA*(1+NDS/100)>2000 then 10
  when BA*(1+NDS/100)>1500 then 13
  when BA*(1+NDS/100)>1000 then 16
  when BA*(1+NDS/100)>750 then 19
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 24
  when BA*(1+NDS/100)>150 then 37
  when BA*(1+NDS/100)>100 then 42
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>25 then 102
  else 120
  end
  when DepPG='модель6' then case /*отделы модель6*/
  when BA*(1+NDS/100)>2000 then 6
  when BA*(1+NDS/100)>1500 then 8
  when BA*(1+NDS/100)>1000 then 10
  when BA*(1+NDS/100)>750 then 12
  when BA*(1+NDS/100)>500 then 14
  when BA*(1+NDS/100)>300 then 17
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>100 then 37
  when BA*(1+NDS/100)>50 then 42
  when BA*(1+NDS/100)>25 then 72
  else 85
  end 
  when DepPG='модель6б' then case /*отделы модель6б*/
  when BA*(1+NDS/100)>2000 then 8
  when BA*(1+NDS/100)>1500 then 10
  when BA*(1+NDS/100)>1000 then 12
  when BA*(1+NDS/100)>750 then 13
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>300 then 19
  when BA*(1+NDS/100)>150 then 26
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>25 then 82
  else 200
  end
        else 0                                         
      end;
  Rbad=coalesce(Rdoc, propFR, Rbad);
   /*выбираем первое непустое значение*/
  Rbad=iif(PriceKind=4,maxvalue(Rbad-0, 13),Rbad);
  
  Rmedtech=case /* наценка Медтехника*/
  
  when DepPG='модель1' then case /*отделы модель1*/
  when BA*(1+NDS/100)>2500 then 22
  when BA*(1+NDS/100)>1500 then 25
  when BA*(1+NDS/100)>1000 then 30
  when BA*(1+NDS/100)>500 then 35
  when BA*(1+NDS/100)>300 then 50
  when BA*(1+NDS/100)>50 then 80
  else 100
  end
  when DepPG='модель1а' then case /*отделы модель1а*/
  when BA*(1+NDS/100)>2500 then 28
  when BA*(1+NDS/100)>1500 then 30
  when BA*(1+NDS/100)>1000 then 32
  when BA*(1+NDS/100)>500 then 40
  when BA*(1+NDS/100)>300 then 65
  when BA*(1+NDS/100)>50 then 90
  else 120
  end
  
  when DepPG='модель2' then case /*отделы модель2*/
  when BA*(1+NDS/100)>2500 then 22
  when BA*(1+NDS/100)>1500 then 25
  when BA*(1+NDS/100)>1000 then 30
  when BA*(1+NDS/100)>500 then 35
  when BA*(1+NDS/100)>300 then 50
  when BA*(1+NDS/100)>50 then 80
  else 100
  end
  when DepPG='модель2а' then case /*отделы модель2а*/
  when BA*(1+NDS/100)>2500 then 22
  when BA*(1+NDS/100)>1500 then 25
  when BA*(1+NDS/100)>1000 then 30
  when BA*(1+NDS/100)>500 then 35
  when BA*(1+NDS/100)>300 then 50
  when BA*(1+NDS/100)>50 then 80
  else 100
  end
  when DepPG='модель3' then case /*отделы модель3*/
  when BA*(1+NDS/100)>2500 then 20
  when BA*(1+NDS/100)>1500 then 23
  when BA*(1+NDS/100)>1000 then 28
  when BA*(1+NDS/100)>500 then 32
  when BA*(1+NDS/100)>300 then 40
  when BA*(1+NDS/100)>50 then 70
  else 100
  end
  when DepPG='модель4' then case /*отделы модель4*/
  when BA*(1+NDS/100)>2500 then 20
  when BA*(1+NDS/100)>1500 then 23
  when BA*(1+NDS/100)>1000 then 28
  when BA*(1+NDS/100)>500 then 32
  when BA*(1+NDS/100)>300 then 40
  when BA*(1+NDS/100)>50 then 70
  else 100
  end
  when DepPG='модель5' then case /*отделы модель5*/
  when BA*(1+NDS/100)>2500 then 20
  when BA*(1+NDS/100)>1500 then 23
  when BA*(1+NDS/100)>1000 then 28
  when BA*(1+NDS/100)>500 then 32
  when BA*(1+NDS/100)>300 then 40
  when BA*(1+NDS/100)>50 then 70
  else 100
  end
  when DepPG='модель6' then case /*отделы модель6*/
  when BA*(1+NDS/100)>2500 then 10
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>50 then 40
  else 70
  end
  when DepPG='модель6б' then case /*отделы модель6б*/
  when BA*(1+NDS/100)>2500 then 10
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 14
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 24
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>50 then 80
  else 100
  end
  else 70
  end;
  Rmedtech=coalesce(Rdoc, propFR, Rmedtech); /*выбираем первое непустое значение*/
  Rmedtech=iif(PriceKind=4,maxvalue(Rmedtech-0, 13),Rmedtech);
  
  Ruhod=case  /* наценка Средства ухода*/
  when DepPG='модель1' or DepPG='модель2' then case /*Наценка для модели 1,2*/
  when BA*(1+NDS/100)>1500 then 20
  when BA*(1+NDS/100)>1000 then 22
  when BA*(1+NDS/100)>750 then 25
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 67
  when BA*(1+NDS/100)>10 then 85
  when BA*(1+NDS/100)>5 then 155
  else 200
  end
  when DepPG='модель1а'then case /*отделы модель1а*/
  when BA*(1+NDS/100)>1500 then 28
  when BA*(1+NDS/100)>1000 then 32
  when BA*(1+NDS/100)>750 then 35
  when BA*(1+NDS/100)>500 then 40
  when BA*(1+NDS/100)>300 then 50
  when BA*(1+NDS/100)>100 then 62
  when BA*(1+NDS/100)>50 then 82
  when BA*(1+NDS/100)>10 then 102
  when BA*(1+NDS/100)>5 then 155
  else 200
  end
  when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>1500 then 13
  when BA*(1+NDS/100)>1000 then 17
  when BA*(1+NDS/100)>750 then 22
  when BA*(1+NDS/100)>500 then 24
  when BA*(1+NDS/100)>300 then 26
  when BA*(1+NDS/100)>100 then 32
  when BA*(1+NDS/100)>50 then 42
  when BA*(1+NDS/100)>10 then 52
  when BA*(1+NDS/100)>5 then 102
  else 150
  end
  when DepPG='модель2a' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 2a,3,4*/
  when BA*(1+NDS/100)>1500 then 18
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>750 then 22
  when BA*(1+NDS/100)>500 then 27
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>100 then 47
  when BA*(1+NDS/100)>50 then 57
  when BA*(1+NDS/100)>10 then 72
  when BA*(1+NDS/100)>5 then 152
  else 200
  end
  when DepPG='модель5' then case /*Наценка для модели 5*/
  when BA*(1+NDS/100)>1500 then 15
  when BA*(1+NDS/100)>1000 then 18
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>100 then 32
  when BA*(1+NDS/100)>50 then 42
  when BA*(1+NDS/100)>10 then 65
  when BA*(1+NDS/100)>5 then 125
  else 150
  end
  when DepPG='модель6' then case /*Наценка для модели 6*/
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 14
  when BA*(1+NDS/100)>750 then 16
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>300 then 22
  when BA*(1+NDS/100)>100 then 27
  when BA*(1+NDS/100)>50 then 37
  when BA*(1+NDS/100)>10 then 55
  when BA*(1+NDS/100)>5 then 105
  else 100
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 16
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 24
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 37
  when BA*(1+NDS/100)>10 then 55
  when BA*(1+NDS/100)>5 then 100
  else 150
  end     
  else 195
  end;
      
  Ruhod=coalesce(Rdoc, propFR, Ruhod); /*выбираем первое непустое значение*/
  Ruhod=iif(PriceKind=4,maxvalue(Ruhod-0, 13),Ruhod);
  
  Rparafarm=case  /* наценка Парафармацевтика*/
  when DepPG='модель1' or DepPG='модель2' then case /*Наценка для модели 1,2*/
  when BA*(1+NDS/100)>1000 then 25
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>250 then 40
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 72
  when BA*(1+NDS/100)>30 then 152
  else 150
  end
  when DepPG='модель1а'then case /*отделы модель1а*/
  when BA*(1+NDS/100)>1000 then 35
  when BA*(1+NDS/100)>500 then 40
  when BA*(1+NDS/100)>250 then 50
  when BA*(1+NDS/100)>100 then 62
  when BA*(1+NDS/100)>50 then 72
  when BA*(1+NDS/100)>30 then 122
  else 150
  end
  when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 26
  when BA*(1+NDS/100)>250 then 36
  when BA*(1+NDS/100)>100 then 42
  when BA*(1+NDS/100)>50 then 72
  when BA*(1+NDS/100)>30 then 92
  else 120
  end
  when DepPG='модель2a' then case /*Наценка для модели 2a*/
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>250 then 25
  when BA*(1+NDS/100)>100 then 42
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>30 then 72
  else 100
  end
  when DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 3,4*/
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>250 then 40
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>30 then 102
  else 120
  end
  when DepPG='модель5' then case /*Наценка для модели 5*/
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>250 then 30
  when BA*(1+NDS/100)>100 then 52
  when BA*(1+NDS/100)>50 then 62
  when BA*(1+NDS/100)>30 then 85
  else 100
  end
  when DepPG='модель6' then case /*Наценка для модели 6*/
  when BA*(1+NDS/100)>1000 then 8
  when BA*(1+NDS/100)>750 then 10
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>250 then 20
  when BA*(1+NDS/100)>100 then 32
  when BA*(1+NDS/100)>50 then 52
  when BA*(1+NDS/100)>30 then 75
  else 100
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>750 then 20
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>250 then 35
  when BA*(1+NDS/100)>100 then 40
  when BA*(1+NDS/100)>50 then 70
  when BA*(1+NDS/100)>30 then 90
  else 120
  end   
  else 95
      end;    
  Rparafarm=coalesce(Rdoc, propFR, Rparafarm); /*выбираем первое непустое значение*/
  Rparafarm=iif(PriceKind=4,maxvalue(Rparafarm-0, 13),Rparafarm);
  
  Rvoda=case  /* наценка Минеральная вода*/
  when DepPG='модель1а' or DepPG='модель1'or DepPG='модель2a' or DepPG='модель5' or DepPG='модель6' or DepPG='модель2' or DepPG='модель3' or DepPG='модель4' then case      
      when BA*(1+NDS/100)>200 then 30
      when BA*(1+NDS/100)>100 then 35
        when BA*(1+NDS/100)>50 then 55
        else 70
        end
            when DepPG='модель1б' then case /*Наценка для модель1б*/
        when BA*(1+NDS/100)>300 then 22
        when BA*(1+NDS/100)>50 then 42
        else 60
      end
      when DepPG='модель6б' then case /*Наценка для модель6б*/
        when BA*(1+NDS/100)>300 then 20
        when BA*(1+NDS/100)>50 then 40
        else 60
      end
      else 70 
      end;    
  
    
  Rvoda=coalesce(Rdoc, propFR, Rvoda); /*выбираем первое непустое значение*/
  Rvoda=iif(PriceKind=4,maxvalue(Rgv-0, 13),Rvoda);
  
  Roptic=case  /* наценка На оптику*/
        when BA*(1+NDS/100)>350 then 50
        when BA*(1+NDS/100)>290 then 70
        
        else 100
      end;
  Roptic=coalesce(Rdoc, propFR, Roptic); /*выбираем первое непустое значение*/
  Roptic=iif(PriceKind=4,maxvalue(Rgv-0, 13),Roptic);
  
  Rdettov=case  /* наценка Детские товары*/
  when DepPG='модель1' or DepPG='модель2' then case /*Наценка для модели 1,2*/
  when BA*(1+NDS/100)>1500 then 22
  when BA*(1+NDS/100)>1000 then 25
  when BA*(1+NDS/100)>500 then 30
  when BA*(1+NDS/100)>300 then 40
  when BA*(1+NDS/100)>100 then 50
  when BA*(1+NDS/100)>50 then 70
  when BA*(1+NDS/100)>10 then 90
  else 150
  end
  when DepPG='модель1а'then case /*отделы модель1а*/
  when BA*(1+NDS/100)>1500 then 26
  when BA*(1+NDS/100)>1000 then 30
  when BA*(1+NDS/100)>500 then 36
  when BA*(1+NDS/100)>300 then 42
  when BA*(1+NDS/100)>100 then 50
  when BA*(1+NDS/100)>50 then 70
  when BA*(1+NDS/100)>10 then 90
  else 150
  end
  when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 14
  when BA*(1+NDS/100)>750 then 16
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>100 then 32
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>10 then 80
  else 100
  end
  when DepPG='модель2a' then case /*Наценка для модели 2a*/
  when BA*(1+NDS/100)>1000 then 20
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>100 then 35
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>10 then 70
  else 100
  end
  when DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 3,4*/
  when BA*(1+NDS/100)>1500 then 20
  when BA*(1+NDS/100)>1000 then 22
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>300 then 35
  when BA*(1+NDS/100)>100 then 45
  when BA*(1+NDS/100)>50 then 60
  when BA*(1+NDS/100)>10 then 70
  else 100
  end
  when DepPG='модель5' then case /*Наценка для модели 5*/
  when BA*(1+NDS/100)>1500 then 15
  when BA*(1+NDS/100)>1000 then 18
  when BA*(1+NDS/100)>500 then 22
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>100 then 40
  when BA*(1+NDS/100)>50 then 60
  when BA*(1+NDS/100)>10 then 70
  else 100
  end
  when DepPG='модель6' then case /*Наценка для модели 6*/
  when BA*(1+NDS/100)>1500 then 12
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>500 then 18
  when BA*(1+NDS/100)>300 then 20
  when BA*(1+NDS/100)>100 then 25
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>10 then 70
  else 100
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>1500 then 10
  when BA*(1+NDS/100)>1000 then 12
  when BA*(1+NDS/100)>750 then 14
  when BA*(1+NDS/100)>500 then 18
  when BA*(1+NDS/100)>300 then 24
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>10 then 80
  else 100
  end
  end;
      
  Rdettov=coalesce(Rdoc, propFR, Rdettov); /*выбираем первое непустое значение*/
  Rdettov=iif(PriceKind=4,maxvalue(Rdettov-10, 13),Rdettov);
  
    Rdetpitu=case /* наценка Детская вода упакованная*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель2a' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 1,2,2a,3,4*/
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>150 then 35
  when BA*(1+NDS/100)>50 then 45
  when BA*(1+NDS/100)>25 then 60
  else 60
  end
  when DepPG='модель1а'then case /*отделы модель1а*/
  when BA*(1+NDS/100)>300 then 30
  when BA*(1+NDS/100)>150 then 35
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>25 then 50
  else 60
  end
  when DepPG='модель5' or DepPG='модель6' then case /*Наценка для модели 5,6*/
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>150 then 30
  when BA*(1+NDS/100)>50 then 37
  when BA*(1+NDS/100)>25 then 47
  else 60
  end
  end;
  Rdetpitu=coalesce(Rdoc, propFR,Rdetpitu); /*выбираем первое непустое значение*/
  Rdetpitu=iif(PriceKind=4,maxvalue(Rdetpitu-0, 13),Rdetpitu);
  
  
  
  Rntsep=case /* наценка Антисептики*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель2a' or DepPG='модель3' or DepPG='модель4' then case /*Наценка для модели 1,2,2a,3,4*/
  when BA*(1+NDS/100)>500 then 25
  when BA*(1+NDS/100)>250 then 35
  when BA*(1+NDS/100)>150 then 50
  when BA*(1+NDS/100)>50 then 60
  when BA*(1+NDS/100)>30 then 100
  else 150
  end
  when DepPG='модель1а'then case /*отделы модель1а*/
  when BA*(1+NDS/100)>500 then 40
  when BA*(1+NDS/100)>250 then 50
  when BA*(1+NDS/100)>150 then 60
  when BA*(1+NDS/100)>50 then 70
  when BA*(1+NDS/100)>30 then 100
  else 150
  end
  when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>250 then 22
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>50 then 45
  when BA*(1+NDS/100)>30 then 60
  else 100
  end
  when DepPG='модель5' or DepPG='модель6' then case /*Наценка для модели 5,6*/
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>250 then 30
  when BA*(1+NDS/100)>150 then 40
  when BA*(1+NDS/100)>50 then 50
  when BA*(1+NDS/100)>30 then 60
  else 150
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>500 then 15
  when BA*(1+NDS/100)>250 then 22
  when BA*(1+NDS/100)>150 then 25
  when BA*(1+NDS/100)>50 then 45
  when BA*(1+NDS/100)>30 then 60
  else 100
  end
  end;
  Rntsep=coalesce(Rdoc, propFR,Rntsep); /*выбираем первое непустое значение*/
  Rntsep=iif(PriceKind=4,maxvalue(Rdetpitu-0, 13),Rntsep);
  
  
   
  
  
  Rfr=case  /* наценка все остальные*/
  when DepPG='модель1' or DepPG='модель2' or DepPG='модель3' or DepPG='модель5' then case  /*Наценка для модели 1,2,3*/
        when BA*(1+NDS/100)>500 then 30
        when BA*(1+NDS/100)>300 then 35
        when BA*(1+NDS/100)>50 then 50
        else 70
      end
      when DepPG='модель1а'then case /*отделы модель1а*/
        when BA*(1+NDS/100)>500 then 35
        when BA*(1+NDS/100)>300 then 40
        when BA*(1+NDS/100)>50 then 50
        else 70
      end
      when DepPG='модель1б' then case /*Наценка для модель1б*/
  when BA*(1+NDS/100)>1000 then 16
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>300 then 26
  when BA*(1+NDS/100)>100 then 35
  when BA*(1+NDS/100)>50 then 50
  else 50
      end
  when DepPG='модель2a'  then case  /*Наценка для модели 2a*/
        when BA*(1+NDS/100)>500 then 30
        when BA*(1+NDS/100)>300 then 35
        when BA*(1+NDS/100)>50 then 50
        else 70
      end  
  when DepPG='модель4'  then case  /*Наценка для модели 4*/
        when BA*(1+NDS/100)>500 then 30
        when BA*(1+NDS/100)>300 then 35
        when BA*(1+NDS/100)>50 then 50
        else 70
      end
  when DepPG='модель5' or DepPG='модель6' then case /*Наценка для модели 5,6*/
  when BA*(1+NDS/100)>500 then 20
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>50 then 35
  else 50
  end
  when DepPG='модель6б' then case /*Наценка для модель6б*/
  when BA*(1+NDS/100)>1000 then 15
  when BA*(1+NDS/100)>500 then 18
  when BA*(1+NDS/100)>300 then 25
  when BA*(1+NDS/100)>100 then 30
  when BA*(1+NDS/100)>50 then 50
  else 50
  end
  else 65
      end;    
      
  Rfr=coalesce(Rdoc, propFR, Rfr); /*выбираем первое непустое значение*/
  Rfr=iif(PriceKind=4,maxvalue(Rfr-0, 13),Rfr);
  
  R=case                 /* если задана наценка Rin, то используем ее */
        when Rin is not null then Rin
        when MKind=1 and propGV=1 then Rgv
        when MKind=1 and propGV=0 and Supplier=1010001 then RBolear
        when propGV=0 and Supplier=1014001 then RBella
        when Mkind=1 then Rls
        when Mkind=7 or Mkind=11 then Rimn
        when Mkind=21 then Rpit
        when Mkind=20 then Rdpit
        when Mkind=26 then Rdettov
        when Mkind=19 then Rvoda
        when Mkind=5 then Rparafarm
        when Mkind=6 then Ruhod
        when Mkind=8 then Rmedtech
        when Mkind=23 then Rlechkosm
        when Mkind=24 then Rtrava
        when Mkind=4 then Rbad
        when Mkind=9 then Roptic
        when Mkind=32 then Rntsep
        when Mkind=33 then Rdetpitu
        
        else Rfr
      end;
  
  /* расчет цены */
  /*#P=case                                            /* расчет цены */
     /*  when propGV=1 and B is null then 0           /*если не указана базовая цена, то ставим розн.цену 0 */
       /*when propGV=1 and VMN=0 then (S+BA*R/100)*(1+NDS/100)+A /* расчет цены для ОСН ЖНВЛС*/
       /*when propGV=1 and VMN=1 then BA*R/100+S*(1+NDS/100)+A   /* расчет цены УСН ЖНВЛС */
       /*else (S+BA*R/100)*(1+NDS/100)+A               /* расчет цены не ЖНВЛС */
    /*end;*/
    P = (SA + BA*R/100)*(1+NDSA/100) + A;   
  P=coalesce(Pin, P); /* если задана цена Pin, то используем ее*/
  
  
  RoundTo=case    /* округляем цену только в том случае, если она не задана на входе*/ 
        when Pin is null then
                     case
                       when P>1000 then 500
                       when P>50 then 100
                     else 50
                  end      
        else 1
      end;
  
  /* округляем до делителя если не ангровые и не материалы */ 
  RoundDiv=iif(MKind in (2, 16), 1, Divisor);      
  P=roundprice2(P, RoundTo, RoundDiv, iif(propGV=1, -1, 1));   /* ЖВ округляем вниз, остальные вверх */
  
  /*округление цены делителя до 10 коп*/
  /*Pdivisor=P/Divisor;                                /*ищем цену на делитель*/
  /*Pdivisor=roundprice2(Pdivisor, 10, 1, iif(propGV=1 or MKind=1, -1, 1));   /*округляем цену на делитель*/
  /*P=iif(Divisor>1,Pdivisor*Divisor,P);               /*пересчитываем цену на товар, если есть делитель*/
  
  
  Pfix=iif(propFIX is not null, propFIX, P); /*если задана фиксированная цена, используем ее*/
  P=iif(propGV=1 and Pfix>P and (DocType=1 or DocType=4), P, iif (DocType=1 or DocType=4, Pfix, P));
  P=iif(P>propMXR, propMXR, P); /*если цена больше макс. розничной цены, то используем макс. розничную цену*/
  
  /* обратный расчет % наценки*/
  /*#R=case                                                  /* обратный расчет % наценки, ЖНВЛС от цены произ. БНДС*/
     /* when propGV=1 and B is null then 0             /*если не указана базовая цена, то ставим % наценки 0 */
      /*when propGV=1 and VMN=0 then ((P-A)/(1+NDS/100)-S)*100/B    /* обратный расчет % наценки ОСН ЖНВЛС*/
      /*when propGV=1 and VMN=1 then (P-S*(1+NDS/100)-A)/BA*100       /* обратный расчет % наценки УСН ЖНВЛС*/
      /*else ((P-A)/(1+NDS/100)-S)*100/B                   /* обратный расчет % наценки не ЖНВЛС*/
  /*end;*/
   R = ((P - A)/(1+NDSA/100)-SA)*100/BA;
  /* ошибки */ 
  Err=case
        when DepPG is null then 'У отдела не задана группа по расценке!'
        when propGV=1 and R=0 and P=0 then 'Товар ЖНВЛС! Не указана цена производителя или цена гос. реестра!'
        when propGV=1 and R>Rgverr then 'Максимальная наценка на ЖВ '|| num2str(Rgverr) ||' %'
        when propGV=1 and GR is null and V is null then 'Не указана цена производителя; Не указана цена гос. реестра'
        when propGV=1 and GR is null and V>=0.01 then 'Не указана цена гос. реестра'
        when propGV=1 and GR>=0.01 and V is null then 'Не указана цена производителя'
        /*when MKind=20 and R>25 then 'Максимальная наценка на дет. питание 25% ' */
        when propGV=1 and V<=100 and Rpost>Ropt_max then ' Превышена наценка поставщика='||num2str(Rpost) ||'%. Должна быть не более '||num2str(Ropt_max)||'%.' 
        when propGV=1 and V>100 and V<=500 and Rpost>Ropt_max then ' Превышена наценка поставщика='||num2str(Rpost) ||'%. Должна быть не более'||num2str(Ropt_max) ||'%.' 
        when propGV=1 and V>500 and Rpost>Ropt_max then ' Превышена наценка поставщика='||num2str(Rpost) ||'%. Должна быть не более '||num2str(Ropt_max)||'%.'
        /*when propGV=1 and GR<>propGRR then 'Цены ГР позиции поставки и в свойствах не равны!' */
        when propGV=1 and V>BA then 'Цена производителя выше цены ГР.'
        when R<0 and DocType=1 then 'Наценка менее 0% запрещена!'
        when R<0 and DocType=4 then 'Наценка менее 0% запрещена!'
        when R<0 and DocType=12 then 'Наценка менее 0% запрещена!'
        else null
      end;
      
  /* предупреждения*/
  /*Warn=IIF(propGV=1 and GR<>propGRR,' Цены ГР позиции поставки и в свойствах не равны! Неверная привязка?|',null); */  
  /*Warn=IIF(propGV=1 and P=0, ' Розничная цена равна нулю, уверены? |'||coalesce(Warn, ''), Warn); */
  Warn=IIF(propGV=1 and P=0, ' Розничная цена равна нулю, уверены? |',null);
  /*Warn=IIF(propGV=1 and V>B,' Цена производителя выше цены ГР. Для расценки используется цена ГР. |'||coalesce(Warn, ''''), Warn);                     */
  /*Warn=IIF(propGV=1 and V<=100 and BA>100,' Цена производителя и цена ГР находятся в разных ценовых диапазонах. |'||coalesce(Warn, ''''), Warn);         */
  /*Warn=IIF(propGV=1 and V>100 and V<=500 and B<=100 or V>100 and V<=500 and BA>500,' Цена производителя и цена ГР находятся в разных ценовых диапазонах. |'||coalesce(Warn, ''''), Warn);       */
  /*Warn=IIF(propGV=1 and V>500 and B<=500,' Цена производителя и цена ГР находятся в разных ценовых диапазонах. |'||coalesce(Warn, ''''), Warn);  */  
/* End of source */

  suspend;
END
