Страница 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 это временная табла, которая описана в словаре БД. Прсто ее испоользую для временной буферизации и сортировки потока.В скобках указывается индекс по которому будет осуществлена выгрузка...