NALT

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

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

Ответить
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

NALT

Сообщение korvanakorvana »

Добрый день ) я как всегда к вам со своими больными вопросами))
Имею код

Код: Выделить всё


const
  xlColorBlack     = 0;
end;

interface _gt_nalich 'Наличие по складам'  (,,sci178InsPM) escclose;

Table struct tOstMcParty
(
name:string[80],
barkod:string[31],
kol:double,
price:double,
ed:string[10],
party:string[40],
proizw:string[100],
kodparty:string[21],
dbegin:date,
dend:date
)
with index
(idx1=barkod+kodparty, idx2=name);

Table struct tKatPodr
(
nrec:comp,
name:string[80]
)
with index
(idx1=nrec, idx2=name);


create view
var 
date1:date 
as
select * from 
  katmc _katmc
, tOstMcParty
, tkatpodr _katpodr
, katpodr
, katparty
, tKatPodr
, KatEd
where
((
katpodr.nrec==_katpodr.nrec
and katparty.cmc==katmc.nrec

and 'Страна происхождения'==exclassname.name
and word(1430)==exclassname.wtable

and katparty.nrec==exclassval.crec

and exclassname.classcode==exclassval.classcode//(noindex)
and exclassval.cclassseg==exclassseg.nrec

));


//Form nalich ('out\nalich.out');

 screen Scr_Sclad_Select show at (,,,3)
 fields date1:,noprotect;
  Buttons
	cmOK, default;
	cmCancel;
  <<
            на дату .@@@@@@@@@@
  <.     Ok     .>  <.  Закрыть  .>

  >>
  end; 

 Panel Pnl_Sclad_Select;
 show(,4,,)
 browse Brw_Sclad_Select;
 table katpodr;
 fields
 if (isValid(#_katpodr), 'v', ''):[1],skip, {FONT = { Italic = IF( isvalid(tn_katpodr),True, false)}}, {FONT = { COLOR = IF( isvalid(tn_katpodr), 3, 0)}};
 katpodr.name 'Наименование склада':[30],protect, {FONT = { COLOR = IF( isvalid(tn_katpodr), 3, 0)}};                                                       
 end;
 end;

   HandleEvent
  cmInit:
  {
  date1:=cur_date;
  getfirst KatPodr;
  }
  cmMarkUnMark:// message ('cmMarkUnMark');
  	{
	if not isValid(#_katpodr)
		{
                insert in tkatpodr set 
				nrec:=katpodr.nrec,
			    	name:=katpodr.name;

                if getnext katpodr = tsOk {}
        	}
        else
               {
                delete from tkatpodr where ((katpodr.nrec==tkatpodr.nrec));
                if getnext katpodr = tsOk {}
               }
	RescanPanel (#katpodr);
	}

  cmSelectAll: //message ('cmSelectAll');
	{
	PushPos(tnkatpodr);
	_loop katpodr if not isValid(#_katpodr) insert in tkatpodr set tkatpodr.nrec:=katpodr.nrec,
			    name:=katpodr.name;
	PopPos(tnkatpodr);
        RescanPanel (#katpodr);
	}

  cmUnSelectAll:// message ('cmUnSelectAll');
  	{
	  PushPos(tnkatpodr);
// 	  _loop katpodr if isValid(#_katpodr) delete from _katpodr where ((katpodr.nrec==nrec));
	  delete all from tkatpodr;
	  PopPos(tnkatpodr);
          RescanPanel (#katpodr);
	}
  cmInvertAll: //message ('cmInvertAll');
	{ // Обработка клавиши "Gray *"
	  PushPos(tnkatpodr);
  	  _loop katpodr
	  if not isValid(#_katpodr)
               {
                 insert in tkatpodr set nrec:=katpodr.nrec,
			    name:=katpodr.name;
               }
          else
               {
                 delete from tkatpodr where ((katpodr.nrec==tkatpodr.nrec));
               }

	  PopPos(tnkatpodr);
          RescanPanel (#katpodr);
	};

  cmOK:
{
var i,j,l,proc:longint;
var aFileName, tmp:String;
var XlRes: Boolean
var kol:double;
var mydescr:string;

mydescr  := sGetTune('USER.DESCR');

if getfirst tKatPodr<>tsOK then insert in tkatpodr set 
				nrec:=katpodr.nrec,
			    	name:=katpodr.name;


InitMCInfo(date1);

_loop tKatPodr { 
	_loop _katmc {
//		message(tKatPodr.name);
//		if (getfirst _katmc where (('390002'==_katmc.barkod))=tsOk) then message(_katmc.barkod + ' ' +_katmc.name );
		kol:=NalT(date1,_katmc.nrec,tKatPodr.nrec,0,comp(-1));
		//message(_katmc.barkod + ' ' +_katmc.name + ' ' + kol);
		if kol>0 then {
        		if getfirst tOstMcParty where ((_katmc.barkod==tOstMcParty.barkod and '(безпартии)'==tOstMcParty.party(noindex)))<>tsOk then {
				insert into tOstMcParty set tOstMcParty.name:= _katmc.name,
				tOstMcParty.barkod:= _katmc.barkod,
				tOstMcParty.kol:= kol,
				tOstMcParty.price:= AveragePrice(),
				tOstMcParty.ed:=kated.name,
				tOstMcParty.party:='(безпартии)',
				tOstMcParty.proizw:=_katmc.remmc;
			}	
			else {
				update current tOstMcParty set tOstMcParty.price:= (tOstMcParty.price*tOstMcParty.kol+AveragePrice()*CountMc())/(tOstMcParty.kol+CountMc()),
								       tOstMcParty.kol:=tOstMcParty.kol+kol;
			}
		}
	}

	_loop katparty {
		if KATPARTY.NAME='Т60575*' then message(katparty.kod + ' ' + katparty.name);
		_loop katmc {
			TypeOstatki(false); 
			kol:=NalT(date1,katmc.nrec,tKatPodr.nrec,0,katparty.nrec);
	                if KATPARTY.NAME='Т60575*' then message(kol);
			if kol>0 then 
			if getfirst tOstMcParty where ((katmc.barkod==tOstMcParty.barkod and katparty.kod==tOstMcParty.kodparty))<>tsOk then {
				insert into tOstMcParty set tOstMcParty.name:= katmc.name,      
					    tOstMcParty.barkod:= katmc.barkod,
	                                    tOstMcParty.kol:= kol,
	                                    tOstMcParty.price:= AveragePrice(),
	                                    tOstMcParty.ed:=kated.name,
	                                    tOs4tMcParty.party:=katparty.name,
	                                    tOstMcParty.proizw:= exclassseg.name,
	                                    tOstMcParty.kodparty:=katparty.kod,
	                                    tOstMcParty.dbegin:=katparty.danaliz,
	                                    tOstMcParty.dend:=katparty.dgodn;
					if katmc.barkod='310006' and (katparty.kod='Т60575*') then message('insert' + katmc.name + ' = ' + kol);
				//	if katparty.name='111007' then message('insert' + katmc.name + ' = ' + kol);
	                        }		
			else  	{
				update current tOstMcParty set tOstMcParty.price:= (tOstMcParty.price*tOstMcParty.kol+AveragePrice()*CountMc())/(tOstMcParty.kol+CountMc()),
					       tOstMcParty.kol:=tOstMcParty.kol+kol;
				//	if katmc.barkod='11104' and (katparty.kod='Z53026А' or katparty.name='Z53026А') then message('update' + katmc.name + ' = ' + kol);
				//	if katparty.name='111007' then message('update' + katmc.name + ' = ' + kol);
			}
		}
	}
}

//kol:=NalT(date(01,01,2005),4611781866662850119,2,0,4639861882871432142);
//message(string(kol));

DoneMcInfo();

//nalich.write(date1);

//_loop tOstMcParty
//{
//	nalich.puteventbyid(feDoLoop, fcinv01) ;
//	nalich.write(tOstMcParty.name);
//	nalich.write(tOstMcParty.kol);
//}
//nalich.puteventbyid(feBreak, fcinv01) ;                            
//nalich.write(Cur_Date) ;                                           
//nalich.Showfile;

aFileName := GetStringParameter('Files','OutputFilesDirectory',0) +'nalich.xls';

DeleteFile(aFileName);
XlRes := xlCreateExcel((aFileName), True);
if (XlRes) XlRes := xlIsExcelValid;
If (not XlRes)  
{
message('Ошибка создания EXEL файла');
Exit;
}

xlCreateMatrix ( recordsintable(#tOstMcParty)+10, 11 );

	tmp:='';	
	_loop tkatpodr tmp:=tmp+tkatpodr.name+' ';

        xlSTWriteToMatrix(1,1,'Наличие материальных ценностей на складах: '+tmp+' на '+DateToStr(date1,'DD.MM.YYг.'));
	xlMergeCells(1,1,1,11);
	xlSetFontStyle ( xlBold, 1 , 1 , 1 , 11);

 i:=3;

	xlSTWriteToMatrix(i,1,'№');
  	xlSTWriteToMatrix(i,2,'Наменование');
  	xlSTWriteToMatrix(i,3,'Ном.номер');
  	xlSTWriteToMatrix(i,4,'Партия');
	xlSTWriteToMatrix(i,5,'Кол-во');
	xlSTWriteToMatrix(i,6,'Цена');
	xlSTWriteToMatrix(i,7,'Сумма');
	xlSTWriteToMatrix(i,8,'Дата выпуска');
	xlSTWriteToMatrix(i,9,'Годен до');
	xlSTWriteToMatrix(i,10,'%');
	xlSTWriteToMatrix(i,11,'Производитель');
        xlAlignCells(xlCenter,i,1,i,11);

	xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );


getfirst tOstMcParty(idx2);
_loop tOstMcParty
{	//message(tOstMcParty.kol);
	i:=i+1;
	xlSTWriteToMatrix(i,1,string(i-3));
  	xlSTWriteToMatrix(i,2,tOstMcParty.name);
  	xlSTWriteToMatrix(i,3,tOstMcParty.barkod);
  	xlSTWriteToMatrix(i,4,tOstMcParty.party);
	xlDOWriteToMatrix(i,5,tOstMcParty.kol);

	if upcase(mydescr)='GUT' or upcase(mydescr)='GTB' or upcase(mydescr)='ST' then {
	
		xlDOWriteToMatrix(i,6,tOstMcParty.price);
		xlDOWriteToMatrix(i,7,tOstMcParty.price*tOstMcParty.kol);
	}

	if tOstMcParty.dbegin>date(1,1,1900) xlSTWriteToMatrix(i,8,DateToStr(tOstMcParty.dbegin,'DD.MM.YYг.'));
	if tOstMcParty.dend>date(1,1,1900) xlSTWriteToMatrix(i,9,DateToStr(tOstMcParty.dend,'DD.MM.YYг.'));
	proc:=integer((to_days(tOstMcParty.dend)-to_days(date1)) / (to_days(tOstMcParty.dend)-to_days(tOstMcParty.dbegin))*100);
	if proc>0 then xlDOWriteToMatrix(i,10,proc);

	xlSTWriteToMatrix(i,11,tOstMcParty.proizw);

	xlFrameCells ( xlBorderL, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderR, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderT, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlBorderB, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlInsideV, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
	xlFrameCells ( xlInsideH, xlThin, xlLineStyleNone, xlColorBlack, i, 1, i, 11 );
}

	i:=i+1;

 xlWriteMatrixToExcel ( 1, 1 );
 xlFreeMatrix;

 xlSetNumberFormat	( '# ##0,00',		1,  5, MaxExcelRow, 7 ); 
 xlSetFontSize  ( 8 , 1 , 1 , MaxExcelRow , MaxExcelCol ); // по всему файлу - шрифт "8"
 xlAutoFit(1,1,MaxExcelRow , MaxExcelCol);
 xlAlignCells(xlCenter,1,4,MaxExcelRow,4);
 xlAlignCells(xlCenter,1,8,MaxExcelRow,11);
 xlImportModule('c:\gal584\macros.bas');
 xlRunMacro('landscope');

// XLSETCOLUMNWIDTH(word, longint, longint, longint, longint) : boolean; external ;

 if upcase(mydescr)<>'GUT' and upcase(mydescr)<>'GTB' and upcase(mydescr)<>'ST' then XLSETCOLUMNWIDTH(0, 1, 6, MaxExcelRow, 7);

 xlKillExcel;

 delete all from tOstMcParty;


//closeinterface(cmDone);

}

cmCancel:
{
delete all from tOstMcParty;
closeinterface(cmDone);
}
end;

end.


проблема в том что на определенной позиции которая есть в базе на остатках в стандартных отчетах показывает 50
а у меня при пользовании функцией nalt показывает 0 ...????????
вот именно в этом месте

Код: Выделить всё

 

if KATPARTY.NAME='Т60575*' then message(katparty.kod + ' ' + katparty.name);
		_loop katmc {
			TypeOstatki(false); 
			kol:=NalT(date1,katmc.nrec,tKatPodr.nrec,0,katparty.nrec);
	                if KATPARTY.NAME='Т60575*' then message(kol);
В чем я не права?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: NALT

Сообщение edward_K »

а молов что нет? Если есть то вместо 0 надо -1.
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: NALT

Сообщение korvanakorvana »

edward_K писал(а):а молов что нет? Если есть то вместо 0 надо -1.
нет их нет поэтому 0(.... но на выходе 00 показывает.Может остатки пересчитать в Галктике, может где косяк?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: NALT

Сообщение edward_K »

посмотрите http://www.tyumbit.ru/gal_forum/viewtop ... alT#p34863
и поиском пройдитесь - там вроде не -1 задаюь, а 0. Я использовал только по полному разрезу.
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: NALT

Сообщение korvanakorvana »

edward_K писал(а):посмотрите http://www.tyumbit.ru/gal_forum/viewtop ... alT#p34863
и поиском пройдитесь - там вроде не -1 задаюь, а 0. Я использовал только по полному разрезу.
К сожалению информации не нашла. :?
Вот именно по определенной Мц такая проблема((
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: NALT

Сообщение edward_K »

если по определенной, то пересчет текущих остатков вам должен помочь. И обратите внимание на даты - когда остаток появился? Остатки можно выдавать на начало дня или на конец.
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: NALT

Сообщение korvanakorvana »

edward_K писал(а):если по определенной, то пересчет текущих остатков вам должен помочь. И обратите внимание на даты - когда остаток появился? Остатки можно выдавать на начало дня или на конец.
Пересчет остатков ничего не дал
korvanakorvana
Местный житель
Сообщения: 429
Зарегистрирован: 24 сен 2008, 11:53

Re: NALT

Сообщение korvanakorvana »

Правильный ли я выбрала шаблон для использования этой функции
InitMCInfo(date1);
TypeOstatki(false);
kol:=NalT(date1,katmc.nrec,tKatPodr.nrec,0,katparty.nrec);
DoneMcInfo();
Ответить