View Issue Details

IDProjectCategoryView StatusLast Update
0001205ПроизводствоGeneralpublic2019-01-28 17:54
Reporterruslan Assigned Tobarry  
PriorityurgentSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Summary0001205: +Производство-Кнопка Результаты раскроя- Добавить возможность вводить объемные кроимые материалы для списания/оприходования
Description1.В грид материалов добавить колонки Z- размер,
Vед- объем единицы = (X/1000)*(Y/1000)*(Z/1000), Vвсего-объем всего = (X/1000)*(Y/1000)*(Z/1000)*Кол-во листов(шт.)
2. В карточку для ввода данных добавить поле Z - по умолчанию заполнять из поля Z карточки Товара
3. В процедуру для формирования возвратного акта внести изменения:
- расчет кол-ва в единицах измерения для списания исходного мат-ла/оприходования обрезка производить на основе данных карточки товара - параметров тип материала(плоский - расчет (X/1000)*(Y/1000)*Кол-во листов(шт.); объемный - (X/1000)*(Y/1000)*(Z/1000)*Кол-во листов(шт.))
- при оприходовании обрезков объемных материалов заполнять поле Z в приходной части вн.передачи-возвратного акта.
Additional InformationВот блок который я написал...
execute block (ZID integer=:ZID, Dat_ timestamp=:aDate)
returns (result varchar(80))
as
declare variable dgvdtkey integer;
declare variable dgvktkey integer;
declare variable gid integer;
declare variable gddktkey integer;
declare variable kid integer;
declare variable X double precision;
declare variable Y double precision;
declare variable Z double precision;
declare variable qnt integer;
declare variable quant double precision;
declare variable sum_quant double precision;
declare variable source double precision;
declare variable sum_source double precision;
declare variable gdddtkey integer;
declare variable price double precision;
declare variable nds double precision;
declare variable proc_nds double precision;
declare variable storid integer;
declare variable stor integer;
declare variable wcid integer;
declare variable NBR varchar(20);
declare variable summa double precision;
declare variable snds double precision;
declare variable DGVEMPTY integer;
declare variable materialtyp integer;

begin
dgvdtkey=GEN_ID(dgvdt_id,1);
dgvktkey=GEN_ID(dgvkt_id,1);
--обновляем c.sizez из справочника Товары для упрощения расчета объема
update WORKZCUTTING c set c.sizez =(select g.sizez from goods g where g.id=c.godsid) where c.sizez=0.0 and c.zid=:zid
and (select materialtyp from goods where c.godsid=id)=3;
Select Z.Stor, Z.InpStor2, Z.Nbr, S.NdsProc from WorkZakaz Z, StorList S
where Z.ID=:ZID and S.ID=Z.Stor
into :stor, :storid, :nbr, :proc_nds;

insert into DGVDT(id, nbr, dat_, saledate, out_date, stor, storid, comment, typ, subtyp, zid, ProcNds, RealTyp, NdsTyp)
values(:dgvdtkey, :nbr, :dat_, :dat_, :dat_, :stor, :storid,'Возврат делового отхода '||:nbr ,1 ,2, :zid, :proc_nds, 0, 1) ;

insert into DGVkt(id, nbr, dat_, dgvkey, stor, storid, typ, zid)
values(:dgvktkey, :nbr, :dat_,:dgvdtkey, :storid, :stor,1,:zid) ;
-- в цикле расчитываем общее кол-во в ед.измерения в зависимости от типа мат-ла по наименованиям
for select wc.godsid, sum(wc.qnt_one*(wc.sizex/1000)*(wc.sizey/1000)*((
case
when g.MATERIALTYP=3 then wc.sizez
else 1000 end)/1000))
from workzcutting wc
join goods g on g.id=wc.godsid
where wc.cutstortyp=2 and wc.zid=:zid and wc.Qnt_One > 0.0
  and wc.SizeX <> 0 and wc.SizeY <> 0 and wc.GddKey is Null
  and wc.Deleted = 0
  group by 1
into :gid, :sum_quant
do
  begin
  quant=0.0;
  summa=0.0;
  snds=0.0;
  source=:sum_quant;
  --проверяем кол-во доступного материала в заказе
  select coalesce(sum(gk.quant),0.0)
      from gddkt gk
      join gdddt gd on gk.gddkey=gd.id
      join dgvdt d on d.id=gd.dgvkey
      where d.typ=1 and d.subtyp=1 and d.zid=:zid
      and gk.gdskey = :gid
      into :sum_source;
  if (:sum_source-:sum_quant>0.0) then
  begin
  -- списываем общий по наименованию объем/площадь общим кол-вом отбирая кол-во по каждой приходной партии в заказе
  for select gk.id, gk.price, gk.nds, gk.quant
      from gddkt gk
      join gdddt gd on gk.gddkey=gd.id
      join dgvdt d on d.id=gd.dgvkey
      where d.typ=1 and d.subtyp=1 and d.zid=:zid
      and gk.gdskey = :gid
      order by gk.quant desc
      into :kid, :price, :nds, :quant
      do
      begin
      -- кол-во в партии больше кол-ва общего списания
      if ((:quant-:sum_quant) >=0.0) then
         begin
         quant=:sum_quant;
         gdddtkey=GEN_ID(gdddt_id, 1);
         insert into gdddt(id, dgvkey, gddkey, quant, zid, price, pricen, nds)
         values( :gdddtkey, :dgvdtkey, :kid, :quant, :zid, :price, :price-:nds, :nds);
         break;
         end
      -- кол-во в партии меньше общего кол-ва к списанию
      if ((:quant-:sum_quant) <0.0) then
         begin
         gdddtkey=GEN_ID(gdddt_id, 1);
         insert into gdddt(id, dgvkey, gddkey, quant, zid, price, pricen, nds)
         values( :gdddtkey, :dgvdtkey, :kid, :quant,:zid, :price, :price-:nds, :nds);
         sum_quant=:sum_quant-:quant;
         summa = summa+:quant*:price;
         snds = snds+:quant*:nds;
         end
      end
      -- если списание происходило из нескольких партий - расчитываем среднюю цену обрезка
      if (:summa<>0.0) then
          begin
          price = :summa/:source;
          nds = :snds/:source;
          end
      for select c.id, c.sizex, c.sizey, c.sizez, c.qnt_one, coalesce(g.materialtyp,0)
          from workzcutting c
          join goods g on g.id=c.godsid
          where c.cutstortyp=2 and c.godsid=:gid and c.Qnt_One > 0.0
          and c.SizeX <> 0 and c.SizeY <> 0 and C.GddKey is Null
          and C.Deleted = 0 and c.zid= :zid
          into :wcid, :x, :y, :z, :qnt, :materialtyp
          do
            begin
            gddktkey=GEN_ID(gddkt_id, 1);
            quant=:qnt*(:x/1000)*(:y/1000);
            if (:materialtyp=3) then quant=quant*(:z/1000);
            insert into gddkt(id, dgvkey, gdskey, source, quant, sizex, sizey, sizez, price, nds, pricens, src_one, qnt_one)
            values(:gddktkey, :dgvktkey, :gid, :quant, :quant, :x, :y, :z, :price, :nds, :price-:nds,:qnt, :qnt);
            update workzcutting wc set wc.gddkey=:gddktkey where wc.id=:wcid;
            end
  end
  end
    DgvEmpty = 0;
  /* списано ли что-нибудь - не пустая ли накладная */
  Select 1 from DgvDt DD where DD.ID=:DgvDtkey and
  not Exists(Select ID from GddDt where DgvKey=:DgvDtKey)
  into :DgvEmpty;
  if (:DgvEmpty = 1) then begin
    delete from DgvKt where ID=:DgvKtKey;
    Delete from DgvDt where ID=:DGvDtKey;
    DgvDtKey = Null;
    DgvKtKey = Null;
  end
  else begin
    Update DgvDt Set DgvKey=:DgvKtKey where ID=:DgvDtKey;
    Update DgvKt Set DgvKey=:DgvDtKey where ID=:DgvKtKey;
  end
  result='Расчет окончен!';
 suspend;
end

TagsNo tags attached.

Relationships

related to 0001173 closedbarry +Производство-Заказы-Форма списания комплектующих/возвратного акта- Авторасчет кол-ва по размерам 

Activities

barry

2018-01-10 00:00

administrator   ~0003114

Z должно брать из результатов раскроя от приблуды

barry

2018-01-10 01:20

administrator   ~0003115

work32.zip
mebl_ib5.zip

barry

2018-01-16 13:55

administrator   ~0003151

Last edited: 2018-01-16 18:07

View 2 revisions

При сохранении объемного обрезка - Ошибка... см 57 Заказ от 16/01/2018
[Window Title]
Производство

[Content]
Dynamic SQL Error
SQL error code = -804
Count of read-write columns does not equal count of values

[OK]

barry

2018-01-17 11:14

administrator   ~0003153

В смысле раньше работало?

barry

2018-01-17 11:24

administrator   ~0003154

work32.zip

ruslan

2018-01-17 17:36

manager   ~0003155

Last edited: 2018-01-17 18:09

View 3 revisions

1. В расчет возврата обрезков добавь тоже параметры объема и координату z(см. рис. Расчет возвратного Акта)
2. В Возвратном акте есть не соответствия(см. картинку):
- округление кол-ва в приходной части на обрезки приводит к разнице в кол-ве между расходом и приходом в ед. измерения;
- разница в сумме приходной и расходной части - вероятнее всего тоже из -за округления кол-ва
- я не смотрел процедуру, НО принцип расчета - площадь или объем в кол-ве по обрезкам обязательно привязывай к типу материала в справочнике Товары, потому что я заметил у заказчика есть плоские материалы с координатой z , как справочной велечиной.

ruslan

2018-01-17 17:37

manager  

ruslan

2018-01-17 18:09

manager  

ruslan

2018-01-17 18:09

manager  

barry

2018-01-22 12:41

administrator   ~0003157

work32.zip
mebl_ib5.zip

barry

2018-01-24 11:19

administrator   ~0003168

Добавить в нижнем гриде вместо поля Площадь расчетную величину необходимого для всех обрезков по материалу кол-во(кв.м или куб.м в зависимости от типа материала)- Необходимо.
Если материала недостаточно - выделять строку красным шрифтом

Issue History

Date Modified Username Field Change
2018-01-08 00:25 ruslan New Issue
2018-01-08 00:26 ruslan Relationship added related to 0001173
2018-01-08 00:27 ruslan Description Updated View Revisions
2018-01-10 00:00 barry Note Added: 0003114
2018-01-10 00:01 barry Assigned To => barry
2018-01-10 00:01 barry Status new => acknowledged
2018-01-10 01:20 barry Note Added: 0003115
2018-01-10 01:20 barry Status acknowledged => resolved
2018-01-10 01:20 barry Resolution open => fixed
2018-01-16 13:55 barry Note Added: 0003151
2018-01-16 13:55 barry Status resolved => feedback
2018-01-16 13:55 barry Resolution fixed => reopened
2018-01-16 18:07 ruslan Note Edited: 0003151 View Revisions
2018-01-17 11:14 barry Note Added: 0003153
2018-01-17 11:24 barry Note Added: 0003154
2018-01-17 11:24 barry Status feedback => resolved
2018-01-17 11:24 barry Resolution reopened => fixed
2018-01-17 17:36 ruslan Note Added: 0003155
2018-01-17 17:36 ruslan Status resolved => feedback
2018-01-17 17:36 ruslan Resolution fixed => reopened
2018-01-17 17:37 ruslan File Added: Расчет возврата обрезков.jpg
2018-01-17 18:08 ruslan Note Edited: 0003155 View Revisions
2018-01-17 18:09 ruslan Note Edited: 0003155 View Revisions
2018-01-17 18:09 ruslan File Added: Возвратный акт Приход.jpg
2018-01-17 18:09 ruslan File Added: Возвратный акт Расход.jpg
2018-01-22 12:41 barry Note Added: 0003157
2018-01-24 11:19 barry Note Added: 0003168
2018-03-23 21:44 ruslan Status feedback => resolved
2018-03-23 21:44 ruslan Resolution reopened => fixed
2019-01-28 17:54 ruslan Status resolved => closed