Страница 1 из 2
					
				Изменить порядок вывода в отчете
				Добавлено: 29 ноя 2004, 12:57
				 mAd!Duke
				Доброго времени суток!
есть задача - изменить порядок вывода позиций в отчете.
Дано:
Галактика 7,11
Модуль - Складской учет
Отчет - Стандартная накладная на внутреннее перемещение.
Делаю так:
...
.create view MyView as select
       katmc.name
     , spsopr.kolfact
from
       katmc (ReadOnly)
     , spsopr (ReadOnly)
     , katsopr (ReadOnly)
where
((
spsopr.cmcusl /== katmc.nrec
and katsopr.nrec /== spsopr.csopr
))
and katsopr.nsopr = nom
and spsopr.vidsopr = 600
;
.{table 'MyView' by katmc.name;
.}
...
.fields
...
 MyView.name
 MyView.kolfact
...
.endfields
...
Шапка отчета
.{
@@@@@@@@ &&&&&&.&&&
.}
получаю: в каждой строке первую позицию столько раз, сколько позиций в накладной.
Где грабли?
Пробовал объявлять таблицу в выводе позиций - отсутствует сортировка...
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 29 ноя 2004, 14:44
				 Max_Fin
				.{table 'MyView' by katmc.name;
...
.fields
...
MyView.name
MyView.kolfact
...
.endfields
...
Шапка отчета
.{
@@@@@@@@ &&&&&&.&&&
.}
.}
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 29 ноя 2004, 16:27
				 Goblin
				Мax_Fin, скажите, коллега , а эта конструкция на самом деле работает ?  .`)
Рекомендую попробовать - результат вас удивит 
Вариант № 2 :
Шапка отчета
.{table 'MyView' by katmc.name;
...
.fields
...
MyView.name
MyView.kolfact
...
.endfields
...
.{//Родной цикл вывода формы 
.}
@@@@@@@@ &&&&&&.&&&
.}
 
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 09:37
				 Max_Fin
				Извините, коллега
я предположил, что
"
Шапка отчета
.{
@@@@@@@@ &&&&&&.&&&
.}
"
это не родной цикл вывода формы, а тот, который должен собственно уже собранные ранее данные выводить.
поспешил малость из-за недостатка времени.
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 09:51
				 mAd!Duke
				Нет, своего цикла вывода нету - использую родной.
Делаю по варианту №2 - выдает столько отчетов, сколько строк в накладной, позиции - не сортированные, т.е. сортировка как и была - в порядке занесения...
если исключаю родной цикл - ругается на несоответствие с формой-прототипом...
еще чуть-чуть - и я решу, что лучший выход - застрелиться.
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 11:09
				 edward_K
				правильней наверное так
.{
.}
.{table 'MyView' by katmc.name;
@@@@@@@@ &&&&&&.&&&
.}
- смысл выводить поля с myview в родном цикле?
но
1. наверняка в прототипе есть ссылка на nrec накладной
2. порядок лучше сразу задавать во вьюхе
3. вьюху нужно строить по индексам таблиц
 иначе действительно проще застрелиться.
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 11:38
				 Max_Fin
				Дайте точную постановку задачи.
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 12:01
				 sth
				наверное надо все-таки выводить информацию, привязанную к конкретной накладной.
Тогда, как справедливо было замечено, надо брать из потока nrec накладной (ну или nrec позиции спецификации, смотря что есть в потоке и что надо получить в отчете) и к нему привязывать все это свое хозяйство (логическую таблицу).
Или все-таки другая какая-то задача стоит?
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 12:03
				 Den
				Добрый день всем !
Конструкция :
.{table 'MyView' by katmc.name;
@@@@@@@@ &&&&&&.&&&
.}
всегда была какой то глючной. ДАвно, когда только начинал пеерписывать отчеты не раз с этим сталкивался. Поэтому,еслои у тебя нет лицензии на vip, то можно используя тока fcom сделать следующее :
.LinkForm 'PRINTINMOVNAK_019' Prototype is 'printinmovnak'
.Group 'Vnut'
.NameInList '_1. Стандартная накладная на внутреннее перемещение'
.DEFP PA4
.create view t1
 as select * from limtmp(LIMTMP03);
  
!.fields
!  CommonFormHeader
!  Номер_с_дескриптором
!  Dat
!  From
!  To
!  Npp
!  NomMC
!  NameMC
!  ed
!  DoubleToStr(Kol, Kol_Pr)
!  DoubleToStr(price, Cena_Pr)
!  DoubleToStr(SumPr, Cena_Pr)
!  DoubleToStr(Sum, Cena_Pr)
!  Count
!  if (МОЛ_Откуда_Должность <> '',Sdat+' ('+МОЛ_Откуда_Должность+')',Sdat)
!  if (МОЛ_Куда_Должность   <> '',Prin+' ('+МОЛ_Куда_Должность  +')',Prin)
!  СпецСимвол
!.endfields
.{
               НАКЛАДНАЯ НА ВНУТРЕННЕЕ ПЕРЕМЕЩЕНИЕ
.{
.begin
 t1.clearbuffer(tnlimtmp);
 t1.limtmp.namemc:=namemc;
 t1.limtmp.DKOTP :=kol;
 t1.limtmp.dCOTP :=price;
 t1.insert current limtmp;
!  Message(limtmp.namemc);
end.
!.}
.{table 't1'
.begin
 Message(t1.limtmp.namemc);
end.
.fields
  t1.limtmp.namemc
  t1.limtmp.dkotp
  t1.limtmp.dcotp
.endfields
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   &'&&&&&&&&&&.&&   &'&&&&&&&&&&.&&
.}	
.begin
Message(RecordsIntable(tnLimtmp));
end.
.}
.begin
 delete all from limtmp;
end.
.endform
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 12:06
				 Den
				Правда пробовал на 584, но должно работать и на 7-ке..
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 13:08
				 Goblin
				Извиняюсь господа , виноват, такому корифею Атлантиса ,как Max_Fin'у, указывать взялся, но при этом и сам в лужу сел 

  - действительно , помещать родной цикл внутри цикла по своей табле , либо наоборот - суть есть неправильно ...Лучше мухи отдельно - котлеты отдельно. 
Подобную вещь с изменением сортировки 
получилось таким образом по прототипу prihnkl
.Create View T1 as select *
From SpSopr,KatMC...
where((нрек_накладной==spsopr.csopr and spsopr.cmcusl==katmc.nrec)) order by katmc.name;
потом в полях
T1.Katmc.Name
T1.Spsopr.Kolfact
...
Прочая "полевая" ботва ...
и потом цикл по табле T1 с выводом полей, а родной цикл пустой ...
Работает ...
Единственное, что огорчает - предупреждение  о внешней выгрузке при исполнении .
 
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 13:19
				 mAd!Duke
				2Den:
Здорово! Спасибо! Заработало!
Будешь в Новокузнецке - с меня пиво.
Только тут лишний комментарий закрался:
    Message(limtmp.namemc);
    end.
тут !.}
    .{table 't1'
а что за "limtmp(LIMTMP03)"?
Это временная таблица, которая создается при открытии интерфейса? а как узнать какие поля в ней есть?
Поясните незнающему, плиз ...
VIP'a нет, пользуюсь только "Компилятором форм"
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 13:38
				 mAd!Duke
				2Max_Fin:
Мне вообще интересно было знать - не первый раз сталкиваюсь с подобной задачей.
Конкретно в этом случае:
Изменить порядок вывода строк в накладной на внутренее перемещение.
Также, если форма окажется востребованной, планируется добавить группировку по заказам.
Программист из меня, наверное, не очень (особенно в fcom), но приходится "админить" 14 баз на 16 Гб. С поддержкой справляюсь вроде, но вот "кодить" пока только самую малость, простенкие доработки... 
Руководство считает более важным оплатить обучение кучке бухгалтеров, проработавших в Галактике минимум 3 года, чем одному администратору...
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 13:42
				 Nick
				2 Туманов О.В. 
 Т.е. вытаскивание всей спецификации берет на себя View?
 > Единственное, что огорчает - предупреждение о внешней выгрузке при исполнении. 
 Это значит, что не хватает памяти для обработки запроса и будем выгружать данные на винт? Может тогда лучше оставить первоначальный вариант View от автора вопроса?
			 
			
					
				Re: Изменить порядок вывода в отчете
				Добавлено: 30 ноя 2004, 13:46
				 Den
				2Туманову О.В.&Max_Fin попробуйте добиться рабочего варианта при такой вьюхе и order by.
Будет интересно..
Create View T1 as select *
From SpSopr,KatMC...
where((нрек_накладной==spsopr.csopr and spsopr.cmcusl==katmc.nrec)) order by katmc.name;
потом в полях
2 mAd!Duke 
Да. Limtmp это временная табла, которая описана в словаре БД. Прсто ее испоользую для временной буферизации и сортировки потока.В скобках указывается индекс по которому будет осуществлена выгрузка...