Как вытащить поле Status из таблицы Dover в отчете Реестр...

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

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

Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Сообщение Иван »

да честно скажу, что не умею и нет достаточной документации и примеров. Вот полный текст этой формы:

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

.linkform "ReestrDovShort1" prototype is DOVERREESTR
.nameinlist ’Реестр доверенностей (rtf) 3’
.group ’Реестр доверенностей’
.var
X:string
.endvar
.create view dov
   as select dover.status,dover.nrec,attrval.vstring
   from dover(readonly),attrval(readonly)
   where 
comp(attrval.crec) = comp(dover.nrec) and attrval.wtable = 1138 and comp(attrval.cattrnam) = comp(0138000000002306h)
;


.fields
  номер_доверености
  дата_выдачи
  срок_действия
  фамилия_дов_лица
  должность
  наименование_поставщика
  номер_счета
  дата_счета
  номер_накладной
  дата_накладной
  X
.endfields
					
Форма М-3
Утверждена
постановлением Госкомстата СССР
28.12.1989 № 241
	
__________________________
(предприятие, организация)
	
Код по ОКУД  	

                                              ЖУРНАЛ УЧЕТА ВЫДАННЫХ ДОВЕРЕННОСТЕЙ ЗА 20__ Г.

Номер доверенности	Дата выдачи	Срок действия доверенно-сти	Должность и фамилия лица, которому выдана доверенность	Поставщик	Номер и дата наряда (заменяющего наряд документа или извещения)
	Расписка лица, получившего доверенность	Номер, дата документа, подтверждающего выполнение поручения
1	2	3	4	5	6	7	8
.{
!.{?internal; 
.begin

if ( (dov.getfirst where dov.nrec=нрек_доверености) = tsok )
	X:=dov.vstring;

end.
^	^	^	^, ^	^	^ ^		^ ^ ^
.}
.endform
 
Если условие

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

dov.nrec=нрек_доверености
добавить в create view то отчет зависнет просто. Уже добавил период формирования явно зауженным - ничего не помогает. Думаю, в принципе тут только можно присоединить нужную таблицу не в присоединенной форме, а в самой форме только как это сделать :???:
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

логическая таблица составлена в корне неверно. если добавить ещё ту строчку как указали вы - совсем повиснет.

попробуйте так:

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

.create view dov 
   as select dover.status,dover.nrec,attrval.vstring 
   from dover(readonly),attrval(readonly) 
   where 
((
   нрек_доверености       == dover.nrec
and 1138                        == attrval.wtable
and dover.nrec               == attrval.crec
and 0138000000002306h == attrval.cattrnam 
));

Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

и... читайте доки, про логические таблицы. смотрите примеры, их на форуме много. успехов
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Сообщение Иван »

Алексей, на ваш запрос компилятор ругается:

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

DOVER\REESTRDOVSHORT4_DOVERREESTR.RTF(7)
 Ошибка: Ожидалось : "From","Where","Order","Bounds","Condition","FilterFields","To","Var","," или ";" (стр.7, поз.65 в DOVER\REESTRDOVSHORT4_DOVERREESTR.RTF)
.create view dov select dover.status,dover.nrec,attrval.vstring dover(readonly),attrval(readook.
Может какая-то версия другая?
Кстати, многие примеры тут на форуме, которые полностью выложены тупо не компилируются из-за синтаксических ошибок, версия атлантиса у нас 5.4.14, Галактика 8.10
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

а если так

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

.create view dov
   from dover,attrval
   where 
(( 
   comp(нрек_доверености)  == dover.nrec 
and 1138                        == attrval.wtable 
and dover.nrec               == attrval.crec 
and 0138000000002306h == attrval.cattrnam 
));
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

"select" -> "as select"
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Сообщение Иван »

в любом месте, если заменить знак "=" на "==" компилятор выдает ошибку
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

Иван
Алексей ведь правильно все написал, оба примера должны работать. А тот код, на который компилятор ругается, вы уже сами испортили. Где "as", где "from"?
И почитайте наконец документацию. Двойные круглые скобки и двойной знак равенства - это не одинарные скобки и одинарный знак. Документация, может, и похуже, чем от Кернигана и Ричи, но другой нет, все по этой учились. Разберите пару готовых примеров, с "Галактикой" идут исходники FRM-ов, там море отчетов с логическими таблицами.
LaaLaa

Сообщение LaaLaa »

А еще надо менять скобочки на две скобочки.


Конечно печально, что язык VIP и FCOM такие непонятные на первый взгляд. Самостоятельно их изучить действительно большая проблема.

Скачайте от сюда http://code.google.com/p/laalaa/downloads/list редактор VIPER.

В архиве есть книга RPP_0408.chm по основам программирования.
обратие внимание на раздел "Архитектура Атлантис-приложения - Работа с базой данных"

Может быть вам это поможет.
LaaLaa

Сообщение LaaLaa »

Эта же книга есть в свободном доступе на официальном FTP Галактики.

сама книга
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.chm

архив с примерами из книги
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.zip
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Сообщение Иван »

закончились мои мучения :grin:
вот всего-то что надо было

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

.linkform "ReestrDovShort1" prototype is DOVERREESTR
.nameinlist ’Реестр доверенностей (внеш. атр.)’
.group ’Реестр доверенностей’
.var
X:string
.endvar
.create view dov
as select
	attrval.vstring
from
    attrval(readonly)
where
((
	нрек_доверености == attrval.crec (noIndex)
And
	root == attrval.cattrnam
And
	(attrval.cattrnam = 013800000000230Bh
And
	attrval.wtable = 1138)
));
.fields
  номер_доверености
  дата_выдачи
  срок_действия
  фамилия_дов_лица
  должность
  наименование_поставщика
  номер_счета
  дата_счета
  номер_накладной
  дата_накладной
  X
.endfields
					
Форма М-3
Утверждена
постановлением Госкомстата СССР
28.12.1989 № 241
	
__________________________
(предприятие, организация)
	
Код по ОКУД  	

                                              ЖУРНАЛ УЧЕТА ВЫДАННЫХ ДОВЕРЕННОСТЕЙ ЗА 20__ Г.

Номер доверенности	Дата выдачи	Срок действия доверенно-сти	Должность и фамилия лица, которому выдана доверенность	Поставщик	Номер и дата наряда (заменяющего наряд документа или извещения)
	Расписка лица, получившего доверенность	Номер, дата документа, подтверждающего выполнение поручения
1	2	3	4	5	6	7	8
.{
!.{?internal; 
.begin

if ( (dov.getfirst ) = tsok )
	X:=dov.vstring;
end.
^	^	^	^, ^	^	^ ^		^ ^ ^
.}
.endform
 
:grin: :grin: :grin:
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

С атрибутами уже давно работать можно проще. См. ExtAttr.vih

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

.var
 ExAttr : iExtAttr;
.endvar
............
.fields
 ExAttr.sGetAttr(1138,нрек_доверенности,<наименование атрибута>)
.endfields
............
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Сообщение Иван »

да действительно так намного проще
просто я в догонку к этому отчету приделал чтобы в поле выводили номера ордеров накладных, которые привязаны к доверенностями
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

Иван писал(а):

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

where
((
	нрек_доверености == attrval.crec (noIndex)
And
	root == attrval.cattrnam
And
	(attrval.cattrnam = 013800000000230Bh
And
	attrval.wtable = 1138)
));
Возможно, этот код и дает нужные вам результаты, но в нем для каждой доверенности будет выполняться обход всех записей таблицы ATTRVAL. Пока в этой таблице несколько сотен или тысяч записей, замедления можете не почувствовать, а если счет пойдет на сотни тысяч или миллионы?
Призываю вас все-таки разобраться, как пишутся внутренности двойных круглых скобок. Вариант с VIH-ом в данном случае сработает, но далеко не всегда найдется подходящий VIH, избавляющий от построения своего view.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

А KATZ ой как прав... Запросик конечно тот еще...
Для начала необходимо проанализировать индексы таблицы AttrVal и выбрать наиболее подходящий. В данном случае это AttrVal3. Модифицируем вьюшку:

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

 Where (( 1138                        == attrval.wTable
         and нрек_доверенности == attrval.cRec
         and 013800000000230Bh == attrval.cattrnam
           ))
Работать будет максимально быстро в данном случае.
Ответить