Наличие по складу - алгоритм

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Наличие по складу - алгоритм

Сообщение Serges »

Уважаемые коллеги, у кого-нибудь есть алгоритм формирования стандартного галактического отчета "Наличие по складам" для 5.84?

На топике http://www.tyumbit.ru/galaktika/read.ph ... 865&t=2845 Den предлагает свой вариант, однако результат его реализации для конкретного склада у меня отличается от стандартного.
Галактика 8.10, Oracle 10g / 10.2.0.4
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение Den »

Table struct formcs
(
nrec :comp ,
barkod :string[20],
shortkod:string[3] ,
ed :comp ,
name :string[50],
mexkod :string[3] ,
cpodr :comp ,
cgroup :comp ,
KGROUPMC:string[20]
)
with index
(
formcs01=cpodr+barkod,
formcs02=cpodr+shortkod,
formcs03=cpodr+mexkod,
formcs04=nrec
);
Table struct forpodrs
(
nrec :comp ,
kod :string[10],
name :string[70]
)
with index
(
forpodrs01=nrec
);

interface ostatki 'Остатки по разным разрезам',cyan;
create view
var
datbeg :date
counpickpod :word
nakopost,sumost :double
kolka,allkol : double
allsum,mex13,mex16 : double
podrnrec :comp
oldkal,namekal,prevkal,prevmc :string
dobavka,first :integer
descf : longint
(spod)
as select
if(counpickpod=0,'',
if (counpickpod=1,
katpodr.name,
'выбрано '+DoubleToStr(counPickPod,'66666') )),
*
from
pick ,
katpodr(Readonly) ,
katmc (Readonly) ,
kated (Readonly)
where ((
word(11)==pick.wlist
and pick.crec==katpodr.nrec
and pick.crec==saldofnd.cpodr
and 0==saldofnd.sp
and saldofnd.cmc/==katmc.nrec
! and katmc.CED==kated.nrec
and katmc.nrec==katotped.cmcusl
and 1==katotped.prmc
)) ;

form ostatoks ('ostatoks.out');

procedure CheckPick(number:word);
{
var Stat : word;
CASE number OF
11 : counPickPod := 0 ;
END ;
FOR (Stat := GetFirst Pick where ((number == Pick.wList));
Stat = tsOk;
Stat := GetNext Pick where ((number == Pick.wList)) )
{
CASE number OF
11 : counPickPod := counPickPod + 1 ;
END ;
}
}

Screen VVVs
fields
datbeg : noprotect;
spod : protect,pickbutton;
Buttons
CmYes,default;
Cmcancel;
<<
Задание параматеров формирования отчета

получить инфу на дату .@@@@@@@@@@

по складу(ам) .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<. Да .> <. Отмена .>
>>
end; //screen

!#include pocr.vpp

Handleevent
Cmpick :{
case (curfield) of
#spod:{
delete novisual Pick;
if (runinterface('GetSomePodr')=cmCancel)
counPickPod := 0;
else
{
if (GetFirst Pick = tsOk)
if (GetFirst KatPodr = tsOk) {}
CheckPick(11);
}
}
end;
Rereadrecord;
}
cmDelOnProtect :
{
CASE (CurField) OF
#sPod : { counPickPod := 0; delete novisual Pick; }
END;
Rereadrecord;
}
CmYes:{
StartNewVisual(vtRotatevisual, vfTimer + vfBreak + vfConfirm,''#13'Идет забрасывание кое-чего кое-куда',0);
_Loop pick
{
forpodrs.nrec:=katpodr.nrec;
forpodrs.kod :=katpodr.kod;
forpodrs.name:=katpodr.name;
insert current forpodrs;
_Loop saldofnd
{
_Loop katmc
{
formcs.nrec :=katmc.nrec ;
formcs.barkod :=katmc.barkod ;
formcs.shortkod:=substr(katmc.barkod,1,3);
formcs.mexkod :=substr(katmc.barkod,4,3);
formcs.name :=katmc.name ;
formcs.cpodr :=saldofnd.cpodr;
formcs.cgroup :=katmc.CGROUPMC;
formcs.KGROUPMC:=katmc.KGROUPMC;
}
_Loop katotped
{
formcs.ed :=katotped.nrec ;
insert current formcs;
}
}
}
Stopvisual('',0);
StartNewVisual(vtRotatevisual, vfTimer + vfBreak + vfConfirm,''#13'Идет поиск остатков по складу',0);
_Loop forpodrs
{
SetvisualHeader(forpodrs.name);
nakopost:=0;
sumost :=0;
_Loop formcs where ((forpodrs.nrec==formcs.cpodr)) ordered by index formcs01
{
if (getlast saldomc where ((0==saldomc.sp
and formcs.nrec/==saldomc.cmc
and datbeg>>=saldomc.dsaldo
and (saldomc.cpodr=forpodrs.nrec) ))=tsok
and saldomc.kolp-saldomc.kolr>0)
{
kolka:=kolka+1;
ostatoks.write(kolka);
ostatoks.write(formcs.barkod);
ostatoks.write(formcs.name);
ostatoks.write(saldomc.kolp-saldomc.kolr);
ostatoks.write(saldomc.srprice);
ostatoks.write(round(round(saldomc.srprice,3)*(saldomc.kolp-saldomc.kolr),2));
! clearbuffer(#prices);

/*
insert prices set
nrec :=0,
CKLPRICE :=comp(281474976710792),
CTHING :=formcs.nrec,
TIP :=0,
NAME :=formcs.name,
BARKOD :=formcs.barkod,
diskret :=1,
PRICE :=round(saldomc.srprice,3),
DFORM :=cur_date,
PRAVT :=1,
COTPED :=formcs.ed,
CGROUPMC :=formcs.cgroup,
kod :=formcs.kgroupmc,
ONZAVPRICE :=false;
*/
}
}
}
Stopvisual('',0);

delete all from pick;
delete all from forpodrs;
delete all from formcs;

ostatoks.showfile;
CloseInterface(cmClose);
}
end;
end.


А это форма :
.form ostatoks
.fields
kolka
bar
names
kol
cena
sumka
.endfields
.{
@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &'&&&&&&&&.&& &'&&&&&&&&.&& &'&&&&&&&&.&&
.}
.endform

Правда мол у меня там не выбирается, но с Галактическим "Наличием..." сходится.
Если SQL-версия Галки можешь попрабать так из QA:
use Galaxy
Declare @MyDate Int, @MyPodr Binary(8)
Set @MyDate = dbo.DateToInt('2003-11-27')
Set @MyPodr = 0x80000000000000C3

select k.f$barkod, (t7.f$kolp-t7.f$kolr) as ostatok, t7.f$nrec from
t$katmc k inner join t$saldomc t7 on
k.f$nrec = t7.f$cmc inner join

(select t2.f$nrec as saldonrec from t$saldomc t2 Inner Join

(select s.f$cmc as mc, max(s.f$dsaldo) as maxdate
from t$saldomc s
where s.f$dsaldo<=@MyDate and s.f$cpodr = @MyPodr

group by s.f$cmc
) t1

on t2.f$cmc=t1.mc and t2.f$dsaldo=t1.maxdate and t2.f$cpodr = @MyPodr ) t5

on t7.f$nrec = t5.saldonrec
and (t7.f$kolp-t7.f$kolr)>0
order by 1
COMPUTE SUM(t7.f$kolp-t7.f$kolr)
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Наличие по складу - алгоритм

Сообщение Serges »

Den, скопировал, только добавил в форму итог - не идет с Галактическим "Наличием" .`)
Засада...
Галактика 8.10, Oracle 10g / 10.2.0.4
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение Den »

Странно, мож в базе какая засада. Я у себя проверял не раз - точно все шло...попробуй выловить по каким позициям не идет и посмотреть - кто неправлиьно формирует : стандартный галактический отчет или моя...
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение GTHack »

что значит SQL-версия Галактики ?
как, где это можно посмотреть - проверить ?
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение Den »

license.lic - раздел список доступных платформ.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Наличие по складу - алгоритм

Сообщение Serges »

Den, твоя формирует неправильно - некоторые позиции выводятся несколько раз, отсюда и итог неверный :-/
Галактика 8.10, Oracle 10g / 10.2.0.4
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение GTHack »

license.lic - раздел список доступных платформ

это понятно, меня именно формулировка заинтересовала - "SQL версия Галки"
я не совсем понял о чем речь то
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Наличие по складу - алгоритм

Сообщение Den »

2 Сергей
Странно, у меня все ОК, специально с Галактическим наличием сейчас сверил.Может у тебя как то здорово учет по складу отличается от моего..хотя чего там такого м.б.
Ответить