ИнфоАптека ®

Автоматизация аптек и аптечных сетей

Инструменты пользователя

Инструменты сайта


user:vmsirenko:спайки_протека

Спайки Протека

Мы получаем прайс-лист Протека через программу Эприка. В начале марта Протек стал присылать прайс-лист с так называемыми спайками, где указывал цену товара со скидкой, но при заказе с определенной кратностью. Если же кратность в заказе не соблюдается, то отпускная цена будет без скидки.

Таким образом цена из прайса Протека в автозаказе может перебивать цены по другим прайсам, но заказывать по кратности необходимо не всегда.

Цена Кратность заказа Внешний код Внеш. название
112,32 20 200068 СНУП СПРЕЙ 0,05% ФЛ 15МЛ (СКИДКА В ЦЕНЕ 1.5% ПРИ ЗАКАЗЕ КРАТНО 20 УП)
114,03 1 70200068 СНУП СПРЕЙ 0,05% ФЛ 15МЛ
95,39 40 200069 СНУП СПРЕЙ 0,1% ФЛ 15МЛ (СКИДКА В ЦЕНЕ 2% ПРИ ЗАКАЗЕ КРАТНО 40 УП)
97,34 1 70200069 СНУП СПРЕЙ 0,1% ФЛ 15МЛ

Менеджер Протека видит в своем прайсе тоже две позиции, но с одним кодом. Значит подмена кода товара происходит на уровне Эприки.

Если вы закажете по коду товара без скидки, то в накладной придет товар с кодом, в котором скидка есть.

Решение задачи №1

Написал скрипт, который заменяет цену товара со скидкой на цену без скидки. В результате прайс выглядит следующим образом

Цена Кратность заказа Внешний код Внеш. название
114,03 20 200068 СНУП СПРЕЙ 0,05% ФЛ 15МЛ (СКИДКА В ЦЕНЕ 1.5% ПРИ ЗАКАЗЕ КРАТНО 20 УП)
114,03 1 70200068 СНУП СПРЕЙ 0,05% ФЛ 15МЛ
97,34 40 200069 СНУП СПРЕЙ 0,1% ФЛ 15МЛ (СКИДКА В ЦЕНЕ 2% ПРИ ЗАКАЗЕ КРАТНО 40 УП)
97,34 1 70200069 СНУП СПРЕЙ 0,1% ФЛ 15МЛ

В скрипте нужно заменить :PLID на код обрабатываемого прайс-листа.

spy.sql
SET SQL DIALECT 3;
 
SET NAMES WIN1251;
 
CONNECT 'APTSRV/3052:C:\IADb\IAPTEKA.FDB' USER 'SYSDBA' PASSWORD 'masterkey';
 
SET AUTODDL ON;
 
SET list ON;
 
SET term ^;
 
EXECUTE block AS
DECLARE variable pli_ext70 INTEGER;
DECLARE variable exm_name70 VARCHAR(100);
DECLARE variable pli_num70 INTEGER;
DECLARE variable pli_num INTEGER;
DECLARE variable plp_price NUMERIC(15,2);
 
 
BEGIN
  FOR SELECT
    exm.ext_code,
    SUBSTRING(exm.emed_name FROM 1 FOR (POSITION('(СКИДКА В ЦЕНЕ' IN exm.emed_name))-2),
    pli.num
  FROM plitem pli, ext_medicine exm
  WHERE pli.plid=:PLID
    AND exm.codetype=3
    AND pli.ext_code=exm.ext_code
    AND exm.emed_name LIKE '%(СКИДКА В ЦЕНЕ%'
  INTO :pli_ext70, :exm_name70, :pli_num70 do
    FOR SELECT
      pli.num
    FROM plitem pli, ext_medicine exm
    WHERE pli.plid=:PLID
      AND exm.codetype=3
      AND pli.ext_code=exm.ext_code
      AND exm.emed_name=:exm_name70
    INTO :pli_num do
      FOR SELECT
        plp.price
      FROM plprices plp
      WHERE plp.plid=:PLID
        AND plp.num=:pli_num
      INTO :plp_price do
        UPDATE plprices plp SET plp.price=:plp_price
        WHERE plp.plid=:PLID AND plp.num=:pli_num70;
/*  suspend;*/
END^
 
SET term ;^
 
commit;
 
QUIT;

Решение задачи №2

Решить задачу можно и правкой файла прайса перед его загрузкой.

Только авторизованные участники могут оставлять комментарии.
user/vmsirenko/спайки_протека.txt · Последние изменения: 2017/04/27 17:33 — Владимир Сиренко