Меморандум для Казахстана — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Справочник Меморандумных препаратов)
(НОВОЕ обновление от 18.08.2023)
 
(не показано 38 промежуточных версии 3 участников)
Строка 4: Строка 4:
 
  Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.
 
  Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.
  
 +
=Как обновлять=
 +
* если одиночная точка, просто выполнить скрипт из вложения
 +
* если сеть:
 +
** на сервере определить с какого профиля у них распространяется справочник <b>select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'</b>
 +
** на базе этого профиля выполнить скрипт из вложения
 +
 +
=НОВОЕ обновление от 18.08.2023=
 +
6890 записей в справочнике
 +
+ [[Файл:Мем 27-05-24 НН.xlsx]]
 +
заполнены ШК 77% [[Файл:Мем 05.24 НН.xlsx]]
 +
!!! Прикрепленный файл [[Файл:OUT$MEMORAND KZ 20230818 -2.txt]]
 +
Исходный файл с ШК от Птушкина [[Файл:Мем 08.23.xlsx]]
 +
Приказ DOC [[Файл:Приказ меморандум авг 2023.docx]]
 +
 +
=старое обновление от 10.01.2023=
 +
6715 записей в справочнике
 +
!!! Прикрепленный файл от 10.01.2022 [[Файл:OUT$MEMORAND KZ 20230110.txt]]
 +
Исходный файл с ШК от Птушкина [[Файл:Меморандум 2023 !!!.xlsx]]
 +
Приказ PDF [[Файл:2022-159-prikaz-compressed.pdf]]
 +
 +
=старое обновление от 17.01.2022=
 +
7256 записей в справочнике
 +
!!! Прикрепленный файл от 17.01.2022 [[Файл:OUT$MEMORAND KZ 20220117 new2.txt]]
 +
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 17-01-2022 от Птушкина.xlsx]]
 +
Приказ PDF [[Файл:2021-138-prikaz-compressed.pdf]]
 +
 +
=старое обновление от 16.09.2021=
 +
7020 записей в справочнике
 +
!!! Прикрепленный файл от 16.09.2021 [[Файл:OUT$MEMORAND KZ 20210916.txt]]
 +
Исходный файл [[Файл:2021-94-prikaz-compressed.pdf]]
 +
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 16-09-2021 от Птушкина.xls]]
 +
 +
=старое Обновления от 20.07.2020=
 +
!!! Прикрепленный файл от 20.07.2020 [[Файл:Script OUT$MEMORAND KZ 20-07-2020.txt]]
 +
 +
Исходный файл [[Файл:Предельные цены по закону на 15,07,2020.pdf]]
 +
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-07-2020 от Птушкина.xls]]
 +
 +
=старое Обновления от 20.01.2020=
 +
!!! Прикрепленный файл от 20.01.2020 [[Файл:Script OUT$MEMORAND KZ 20-01-2020.txt]]
 +
 +
Исходный файл [[Файл:Предельные цены по закону на 09,01,20.xls]]
 +
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-01-2020.xls]]
 +
 +
=старое Обновления от 21.01.2021=
 +
6531 запись в справочнике
 +
!!! Прикрепленный файл [[Файл:OUT$MEMORAND KZ 20210121.txt]]
 
  Прикрепленный файл  [[Файл:Приложение розница.docx]]  
 
  Прикрепленный файл  [[Файл:Приложение розница.docx]]  
 
  Прикрепленный файл  [[Файл:Приложение опт.docx]]
 
  Прикрепленный файл  [[Файл:Приложение опт.docx]]
Строка 14: Строка 61:
 
  Прикрепленный файл [[Файл:Создание_OUT$MEMORAND_KZ.txt]]
 
  Прикрепленный файл [[Файл:Создание_OUT$MEMORAND_KZ.txt]]
  
  В базе требуется выполнить данный скрипт.
+
  Для заполнения справочника требуется выполнить данный скрипт.
  Прикрепленный файл  [[Файл:Script.txt]]
+
  Прикрепленный файл от 09/08/2019 [[Файл:Script_OUT$MEMORAND_KZ_09-08-2019.txt]]
 +
  Старый файл до 08/08/2019 [[Файл:Script.txt]]
  
 
=Технические требования (для внедрения)=
 
=Технические требования (для внедрения)=
Строка 34: Строка 82:
 
=Проверка препаратов в приходном документе=
 
=Проверка препаратов в приходном документе=
 
В менеджере групп партий, в основной группе, должен быть код.  
 
В менеджере групп партий, в основной группе, должен быть код.  
'''Добавить переменную price_o : double;'''
 
 
<pre>
 
<pre>
 
   //Проверка меморандумных препаратов (группа) 20151117
 
   //Проверка меморандумных препаратов (группа) 20151117
Строка 41: Строка 88:
 
     trn:=CREATEIBTRANSACTION;   
 
     trn:=CREATEIBTRANSACTION;   
 
     STARTIBTRANSACTION(trn,1);
 
     STARTIBTRANSACTION(trn,1);
     query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE barcode = '''+fieldvalue_s('bcode_izg')+'''',1);
+
     query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1);
 
     //AVO 09/08/19
 
     //AVO 09/08/19
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode',1);
+
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1);
 
     if (not IBQUERY_EOF(query)) then
 
     if (not IBQUERY_EOF(query)) then
 
       If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then
 
       If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then
Строка 61: Строка 108:
 
   if (infor = '') Then
 
   if (infor = '') Then
 
   Begin
 
   Begin
    price_o:=fieldvalue_f('price_o');
 
 
     trn:=CREATEIBTRANSACTION;   
 
     trn:=CREATEIBTRANSACTION;   
 
     STARTIBTRANSACTION(trn,1);
 
     STARTIBTRANSACTION(trn,1);
 
     //AVO 08/08/19
 
     //AVO 08/08/19
     //Добавлено дополнительно исключение по цене
+
     //Добавлено дополнительно исключение по цене  
     query:=ExecIBQuery(trn,'select min(price) as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(price_o)+' and barcode = '''+fieldvalue_s('bcode_izg')+'''',1);
+
     query:=ExecIBQuery(trn,'select min(price) as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1);
 
     //AVO 09/08/19
 
     //AVO 09/08/19
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode',1);
+
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1);
 
     if ((not IBQUERY_EOF(query)) and (IBQUERY_FIELDBYNAME_f(query,'price')>0)) then
 
     if ((not IBQUERY_EOF(query)) and (IBQUERY_FIELDBYNAME_f(query,'price')>0)) then
 
     begin  
 
     begin  
Строка 103: Строка 149:
  
 
=Автоматическое ограничение цены=
 
=Автоматическое ограничение цены=
  возможно программу настроить так, что при нажатии "Назначить наценку по приходу", в случае превышения, цена будет обрезана до максимально допустимой.
+
  возможно программу настроить так, что при нажатии "Назначить наценку по приходу", в случае превышения, цена будет обрезана до максимально допустимой.  
'''Добавить переменную price_o : double;'''
+
 
<pre>
 
<pre>
 
       if ((Pos('Меморандум',Trim(mmbsh))) >0) then //Меморандум
 
       if ((Pos('Меморандум',Trim(mmbsh))) >0) then //Меморандум
Строка 110: Строка 155:
 
         //AVO 08/08/19
 
         //AVO 08/08/19
 
         //Добавлено дополнительное ограничение по цене
 
         //Добавлено дополнительное ограничение по цене
        price_o:=IBQuery_FieldByName_f(query, 'price_o');
+
         query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and barcode = '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' and char_length(barcode)>10',1);
         query1:=ExecIBQuery(trn1,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(price_o)+' and barcode = '''+IBQuery_FieldByName_s(query, 'bcode_izg')+'''',1);
+
 
         //AVO 09/08/19
 
         //AVO 09/08/19
 
         //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
 
         //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
         //query1:=ExecIBQuery(trn1,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(price_o)+' and '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' CONTAINING barcode',1);
+
         //query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' CONTAINING barcode',1);
 
         m_manager.logit(FloatToSTr(IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100)));
 
         m_manager.logit(FloatToSTr(IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100)));
 
         if ((not IBQUERY_EOF(query1)) and (IBQuery_FieldByName_f(query, 'price_o') <> 0)) Then         
 
         if ((not IBQUERY_EOF(query1)) and (IBQuery_FieldByName_f(query, 'price_o') <> 0)) Then         
Строка 126: Строка 170:
  
 
[[Файл:Меморандум 6.png|center|Код]]
 
[[Файл:Меморандум 6.png|center|Код]]
 +
 +
=Фильтр на превышение цены по меморандуму=
 +
Название "Меморандум: превышение розничной цены"
 +
 +
для Сводника
 +
<pre>
 +
global_id in
 +
(select global_id from warebase_g w where
 +
(coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price)
 +
and
 +
quant > 0)
 +
</pre>
 +
 +
для Менеджера
 +
<pre>
 +
part_id in
 +
(select part_id from warebase w where
 +
(coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price)
 +
and
 +
quant > 0)
 +
</pre>
 +
 +
=Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)=
 +
<pre>
 +
SET TERM ^ ;
 +
 +
create or alter procedure PR_GET_MEM_ALL
 +
returns (
 +
    SNAME DM_TEXT,
 +
    BCODE_IZG DM_TEXT,
 +
    PRICE DM_DOUBLE,
 +
    PRICE_MEM DM_DOUBLE,
 +
    SAPTEKA DM_TEXT)
 +
as
 +
declare variable BARCODE DM_TEXT;
 +
begin
 +
  for select price, barcode from out$memorand_kz o where o.barcode <> '-' --and o.barcode='3387080000937'
 +
  into price_mem, barcode do
 +
  for select sname, BCODE_IZG, price, g.caption from warebase_g w
 +
    left join g$profiles g on g.id = w.g$profile_id
 +
    where quant > 0 and w.bcode_izg containing :barcode and w.price > :price_mem
 +
    into sname, BCODE_IZG, price, SAPTEKA do
 +
  suspend;
 +
end^
 +
 +
SET TERM ; ^
 +
 +
/* Следующие операторы GRANT сгенерированы автоматически */
 +
 +
GRANT SELECT ON OUT$MEMORAND_KZ TO PROCEDURE PR_GET_MEM_ALL;
 +
GRANT SELECT ON WAREBASE_G TO PROCEDURE PR_GET_MEM_ALL;
 +
GRANT SELECT ON G$PROFILES TO PROCEDURE PR_GET_MEM_ALL;
 +
 +
/* Существующие привилегии на эту процедуру */
 +
 +
GRANT EXECUTE ON PROCEDURE PR_GET_MEM_ALL TO SYSDBA;
 +
</pre>
 +
 +
 +
=Общий Заказ=
 +
Проверка меморандумных цен реализована в Общем Заказе согласно ТЗ
 +
[[Файл:ТЗ меморандум в ОЗ 966703.doc]]
 +
 +
 +
=Обновление Справочника через OST=
 +
 +
* В настройках ost нужно указать регион "222222"
 +
 +
* Чтобы отправить клиентам обновление справочника мемерандума
 +
<pre>
 +
Скопировать zip-архив с обновлением в папку \\SUPA\zclientxp\updates
 +
В этой же папке в файле updates222222.ini обновить Caption и Path на актуальные
 +
</pre>
 +
 +
=запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике=
 +
<pre>
 +
delete from group_detail gd
 +
where
 +
gd.group_id = 10022 and
 +
gd.grouptable= 'PARTS.NAME_ID' and
 +
not exists(select id from out$memorand_kz m where m.barcode in (select w.barcode from wares w where char_length(w.barcode)>7 and w.name_id = cast(gd.grouptable_id as DM_UUID)))
 +
</pre>
 +
 +
 +
=запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК=
 +
<pre>
 +
INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE)
 +
select distinct 10022 as GROUP_ID, 0 as PARENT_ID, name_id as GROUPTABLE_ID, 'PARTTS.NAME_ID' as GROUPTABLE  from wares w where
 +
  char_length(w.barcode) >7 and
 +
  exists(select id from out$memorand_kz o where o.barcode = w.barcode) and
 +
  not exists(select id from group_detail gd where gd.group_id=10022 and gd.grouptable='PARTTS.NAME_ID' and gd.grouptable_id = w.name_id)
 +
</pre>

Текущая версия на 11:16, 27 мая 2024

Общие сведения

В 2019 году правительство Казахстана ввело ограничение на цены некоторых препаратов (около 4 тыс. позиций) в республике.
Официально список нигде не выложен, но аптечным сетям пришло письмо с вложением (см. ниже) и требованием исполнять данное указание.
Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.

Как обновлять

  • если одиночная точка, просто выполнить скрипт из вложения
  • если сеть:
    • на сервере определить с какого профиля у них распространяется справочник select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'
    • на базе этого профиля выполнить скрипт из вложения

НОВОЕ обновление от 18.08.2023

6890 записей в справочнике
+ Файл:Мем 27-05-24 НН.xlsx
заполнены ШК 77% Файл:Мем 05.24 НН.xlsx
!!! Прикрепленный файл Файл:OUT$MEMORAND KZ 20230818 -2.txt
Исходный файл с ШК от Птушкина Файл:Мем 08.23.xlsx
Приказ DOC Файл:Приказ меморандум авг 2023.docx

старое обновление от 10.01.2023

6715 записей в справочнике
!!! Прикрепленный файл от 10.01.2022 Файл:OUT$MEMORAND KZ 20230110.txt
Исходный файл с ШК от Птушкина Файл:Меморандум 2023 !!!.xlsx
Приказ PDF Файл:2022-159-prikaz-compressed.pdf

старое обновление от 17.01.2022

7256 записей в справочнике
!!! Прикрепленный файл от 17.01.2022 Файл:OUT$MEMORAND KZ 20220117 new2.txt
Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 17-01-2022 от Птушкина.xlsx
Приказ PDF Файл:2021-138-prikaz-compressed.pdf

старое обновление от 16.09.2021

7020 записей в справочнике
!!! Прикрепленный файл от 16.09.2021 Файл:OUT$MEMORAND KZ 20210916.txt 
Исходный файл Файл:2021-94-prikaz-compressed.pdf
Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 16-09-2021 от Птушкина.xls

старое Обновления от 20.07.2020

!!! Прикрепленный файл от 20.07.2020 Файл:Script OUT$MEMORAND KZ 20-07-2020.txt 
Исходный файл Файл:Предельные цены по закону на 15,07,2020.pdf
Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 20-07-2020 от Птушкина.xls

старое Обновления от 20.01.2020

!!! Прикрепленный файл от 20.01.2020 Файл:Script OUT$MEMORAND KZ 20-01-2020.txt 
Исходный файл Файл:Предельные цены по закону на 09,01,20.xls
Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 20-01-2020.xls

старое Обновления от 21.01.2021

6531 запись в справочнике
!!! Прикрепленный файл Файл:OUT$MEMORAND KZ 20210121.txt 
Прикрепленный файл  Файл:Приложение розница.docx 
Прикрепленный файл  Файл:Приложение опт.docx

Справочник Меморандумных препаратов

сопоставление товара из файла правительства и аптеки сделано на основании заводского ШК.
Мы прогнали файл по названиям и примерно 50% ШК смогли найти, остальное требуется заполнять вручную.
Для создания таблицы можно использовать скрипт
Прикрепленный файл Файл:Создание OUT$MEMORAND KZ.txt
Для заполнения справочника требуется выполнить данный скрипт.
Прикрепленный файл от 09/08/2019 Файл:Script OUT$MEMORAND KZ 09-08-2019.txt 
Старый файл до 08/08/2019 Файл:Script.txt

Технические требования (для внедрения)

1. Должна быть настроена двусторонняя синхронизация таблицы OUT$MEMORAND_KZ, с ограничением ведения справочника только в главной точке (аналогично AGENTS);
 2. В базе должны быть группа 'Меморандум' (10022)

INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID)
VALUES (10022, -8, 'Меморандум', 'PARTS.NAME_ID', 0, '20-AUG-2015 14:19:55', 0, NULL, -1, NULL, 8421631, 0, 0, '10022');

Работа со справочником

Открытие справочника
Редактирование справочника

Проверка препаратов в приходном документе

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

  //Проверка меморандумных препаратов (группа) 20151117
  if (infor = '') Then
  Begin
    trn:=CREATEIBTRANSACTION;  
    STARTIBTRANSACTION(trn,1);
    query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1);
    //AVO 09/08/19
    //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
    //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1);
     if (not IBQUERY_EOF(query)) then
      If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then
      Begin
        //заявка 887094 А.К. 20170913 
        query:=ExecIBQuery(trn,'INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE, d$uuid, d$srvupddt) VALUES (10022, 0, '''+fieldvalue_s('NAME_ID')+''', ''PARTS.NAME_ID'', UUID_TO_CHAR(GEN_UUID()), ''2000-01-01'');',1);      
//      setstatus(3);
//        perem :=perem+'bcode_izg=255; 1'#13#10+'SNAME=255; 0'#13#10; 
//        infor := infor+'Товар с ШК '+fieldvalue_s('bcode_izg')+' относится к группе "Меморандум", но группа не проставлена! ШК и наименование отмечено красным{clrf}';
      end
    FREEIBQUERY(query);        
    FREEIBTRANSACTION(trn);
  End
  
  //Проверка меморандумных препаратов (цена)
  if (infor = '') Then
  Begin
    trn:=CREATEIBTRANSACTION;  
    STARTIBTRANSACTION(trn,1);
    //AVO 08/08/19
    //Добавлено дополнительно исключение по цене 
    query:=ExecIBQuery(trn,'select min(price) as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1);
    //AVO 09/08/19
    //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
    //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1);
    if ((not IBQUERY_EOF(query)) and (IBQUERY_FIELDBYNAME_f(query,'price')>0)) then
     begin 
     If ((fieldvalue_f('price')- IBQUERY_FIELDBYNAME_f(query,'price'))>0.01) then
     Begin
       setstatus(3);
       perem :=perem+'bcode_izg=10724305; 1'#13#10+'SNAME=10724305; 0'#13#10; 
       infor := infor+'Цена на данный меморандумный препарат должна быть НЕ БОЛЕЕ '+IBQUERY_FIELDBYNAME_s(query,'price')+' тенге! ШК и наименование отмечено красным{clrf}';
     end
     end
    else
     If (Pos('Меморандум', fieldvalue_s('mmbsh')) > 0) Then
     Begin
       setstatus(3);
       perem :=perem+'bcode_izg=10724305; 1'#13#10+'SNAME=10724305; 0'#13#10; 
       infor := infor+'Группа "Меморандум" на ШК '+fieldvalue_s('bcode_izg')+' установлена, но не указана цена в справочнике! ШК и наименование отмечено красным{clrf}';
     end     
    FREEIBQUERY(query);        
    FREEIBTRANSACTION(trn);
  End


Код
Код

Приход товара

в приходном документе, если товар относится к группе "Меморандум" (10022), анализируется розничная цена, если она выше, чем в справочнике будет выведено соответствующее сообщение.
Код

Автоматическое ограничение цены

возможно программу настроить так, что при нажатии "Назначить наценку по приходу", в случае превышения, цена будет обрезана до максимально допустимой. 
      if ((Pos('Меморандум',Trim(mmbsh))) >0) then //Меморандум
      begin
         //AVO 08/08/19
         //Добавлено дополнительное ограничение по цене
         query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and barcode = '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' and char_length(barcode)>10',1);
         //AVO 09/08/19
         //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
         //query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' CONTAINING barcode',1);
         m_manager.logit(FloatToSTr(IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100)));
         if ((not IBQUERY_EOF(query1)) and (IBQuery_FieldByName_f(query, 'price_o') <> 0)) Then         
         if IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100) > IBQuery_FieldByName_f(query1, 'price') Then
         begin
              nac:=FloatToStr( (IBQuery_FieldByName_f(query1, 'price')-IBQuery_FieldByName_f(query, 'price_o'))*100/IBQuery_FieldByName_f(query, 'price_o') );
              infor := infor +'Группа товара - '+mmbsh;
         end;               
      end;
Код

Фильтр на превышение цены по меморандуму

Название "Меморандум: превышение розничной цены"

для Сводника

global_id in
(select global_id from warebase_g w where
(coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) 
and
quant > 0)

для Менеджера

part_id in
(select part_id from warebase w where
(coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) 
and
quant > 0)

Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)

SET TERM ^ ;

create or alter procedure PR_GET_MEM_ALL
returns (
    SNAME DM_TEXT,
    BCODE_IZG DM_TEXT,
    PRICE DM_DOUBLE,
    PRICE_MEM DM_DOUBLE,
    SAPTEKA DM_TEXT)
as
declare variable BARCODE DM_TEXT;
begin
  for select price, barcode from out$memorand_kz o where o.barcode <> '-' --and o.barcode='3387080000937'
  into price_mem, barcode do
   for select sname, BCODE_IZG, price, g.caption from warebase_g w
     left join g$profiles g on g.id = w.g$profile_id
     where quant > 0 and w.bcode_izg containing :barcode and w.price > :price_mem
    into sname, BCODE_IZG, price, SAPTEKA do
  suspend;
end^

SET TERM ; ^

/* Следующие операторы GRANT сгенерированы автоматически */

GRANT SELECT ON OUT$MEMORAND_KZ TO PROCEDURE PR_GET_MEM_ALL;
GRANT SELECT ON WAREBASE_G TO PROCEDURE PR_GET_MEM_ALL;
GRANT SELECT ON G$PROFILES TO PROCEDURE PR_GET_MEM_ALL;

/* Существующие привилегии на эту процедуру */

GRANT EXECUTE ON PROCEDURE PR_GET_MEM_ALL TO SYSDBA;


Общий Заказ

Проверка меморандумных цен реализована в Общем Заказе согласно ТЗ
Файл:ТЗ меморандум в ОЗ 966703.doc


Обновление Справочника через OST

  • В настройках ost нужно указать регион "222222"
  • Чтобы отправить клиентам обновление справочника мемерандума
Скопировать zip-архив с обновлением в папку \\SUPA\zclientxp\updates
В этой же папке в файле updates222222.ini обновить Caption и Path на актуальные

запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике

delete from group_detail gd
where
gd.group_id = 10022 and
gd.grouptable= 'PARTS.NAME_ID' and
not exists(select id from out$memorand_kz m where m.barcode in (select w.barcode from wares w where char_length(w.barcode)>7 and w.name_id = cast(gd.grouptable_id as DM_UUID)))


запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК

INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE)
select distinct 10022 as GROUP_ID, 0 as PARENT_ID, name_id as GROUPTABLE_ID, 'PARTTS.NAME_ID' as GROUPTABLE  from wares w where
   char_length(w.barcode) >7 and
   exists(select id from out$memorand_kz o where o.barcode = w.barcode) and
   not exists(select id from group_detail gd where gd.group_id=10022 and gd.grouptable='PARTTS.NAME_ID' and gd.grouptable_id = w.name_id)