Страница 2 из 3

Добавлено: 23 сен 2009, 16:50
Иван
да честно скажу, что не умею и нет достаточной документации и примеров. Вот полный текст этой формы:

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

.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 то отчет зависнет просто. Уже добавил период формирования явно зауженным - ничего не помогает. Думаю, в принципе тут только можно присоединить нужную таблицу не в присоединенной форме, а в самой форме только как это сделать :???:

Добавлено: 23 сен 2009, 20:18
Алексей
логическая таблица составлена в корне неверно. если добавить ещё ту строчку как указали вы - совсем повиснет.

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

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

.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 
));


Добавлено: 23 сен 2009, 20:18
Алексей
и... читайте доки, про логические таблицы. смотрите примеры, их на форуме много. успехов

Добавлено: 24 сен 2009, 11:50
Иван
Алексей, на ваш запрос компилятор ругается:

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

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

Добавлено: 25 сен 2009, 05:36
Алексей
а если так

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

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

Добавлено: 25 сен 2009, 09:47
edward_K
"select" -> "as select"

Добавлено: 25 сен 2009, 12:32
Иван
в любом месте, если заменить знак "=" на "==" компилятор выдает ошибку

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

Добавлено: 25 сен 2009, 13:03
LaaLaa
А еще надо менять скобочки на две скобочки.


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

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

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

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

Добавлено: 25 сен 2009, 13:08
LaaLaa
Эта же книга есть в свободном доступе на официальном FTP Галактики.

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

архив с примерами из книги
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.zip

Добавлено: 05 окт 2009, 15:26
Иван
закончились мои мучения :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:

Добавлено: 05 окт 2009, 15:47
m0p3e
С атрибутами уже давно работать можно проще. См. ExtAttr.vih

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

.var
 ExAttr : iExtAttr;
.endvar
............
.fields
 ExAttr.sGetAttr(1138,нрек_доверенности,<наименование атрибута>)
.endfields
............

Добавлено: 05 окт 2009, 15:56
Иван
да действительно так намного проще
просто я в догонку к этому отчету приделал чтобы в поле выводили номера ордеров накладных, которые привязаны к доверенностями

Добавлено: 05 окт 2009, 16:32
KATZ
Иван писал(а):

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

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

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

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

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