Не получается быстро.

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

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

Ответить
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Не получается быстро.

Сообщение sildae »

Я уже обращалась за помощью, но никак не получается.
В форме создаю представление.

.Create view prixod1
from katsopr, spsopr
where ((
sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr
and MC_nrec==spsopr.CMCUSL
))
and begDat <= katsopr.dsopr
and endDat >=katsopr.dsopr
and (word(502)=katsopr.vidsopr or word(600)=katsopr.vidsopr or word(103)=katsopr.vidsopr or word(102)=katsopr.vidsopr or word(630)=katsopr.vidsopr)
;
Пытаюсь в индексы загнать даты и Vidsopr, но постоянно выходит ошибка и не компилируется.
работает только так, но очень медленно.
дальше код :
.{table 'Prixod1.katsopr'
.{table 'Prixod1.spsopr'
!ПРИХОД
!накладная на приход готовой продукции
.begin
if Prixod1.katsopr.vidsopr=word(502) then begin
n2:=n2+Prixod1.spsopr.kolfact;
end;
!перемещение со склада на склад
if Prixod1.katsopr.vidsopr=word(600) then begin
np1:=np1+Prixod1.spsopr.kolfact;
end;
!возврат с консигнации (отпуск на консигн)
if Prixod1.katsopr.vidsopr=word(102) then begin
np2:=np2+Prixod1.spsopr.kolfact;
end;
!прием на консигнацию
if Prixod1.katsopr.vidsopr=word(103) then begin
np3:=np3+Prixod1.spsopr.kolfact;
end;
!акт на пересортицу
if Prixod1.katsopr.vidsopr=word(630) then begin
if prixod1.spsopr.prmc=1 then begin
np4:=np4+Prixod1.spsopr.kolfact;
end;
end;
end.
.}
.}
... дальше запись во временную таблицу.
insert lim3
set
lim3.barkod:=svet1,
lim3.namemc:=NomMC+' '+bk,
lim3.dcotp:=n2,
lim3.dcot2:=np1,
lim3.dcot3:=np2,
lim3.dcot4:=np3,
lim3.dcot5:=np4,
lim3.dc1=npsum,
lim3.dcot6:=nr2,
lim3.dcot7:=npr1,
lim3.dcot8:=npr2,
lim3.dcot9:=npr3,
lim3.dcot10:=npr4,
lim3.dcot:=n3,
lim3.dcon:=n4,
lim3.svet:=svet1,
lim3.DSUMLIMIT:=NN;
...
Невыносимо медленно. Что-то я не догоняю, почему у вас в индексы заносится, а у меня нет :) .Помогите, пожалуйста.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Как-то так...

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

.Create view prixod1 
var vSopr : word
from katsopr, spsopr 
where (( 
      vSopr       == KatSopr.VidSopr 
and BegDat  <<= KatSopr.dSopr
and EndDate >>= KatSopr.dSopr
and sklad_nrec == katsopr.CPODRTO(noindex) 
and katsopr.nrec == spsopr.csopr 
and MC_nrec       == spsopr.CMCUSL 
)) 
;

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

!ПРИХОД 
!накладная на приход готовой продукции 
.begin Prixod1.vSopr := 502; end.
.{table 'Prixod1.katsopr' 
.{table 'Prixod1.spsopr' 
.begin 
  n2:=n2+Prixod1.spsopr.kolfact; 
end; 
.}
.}
!перемещение со склада на склад 
.begin Prixod1.vSopr := 600; end.
.{table 'Prixod1.katsopr' 
.{table 'Prixod1.spsopr' 
.begin
 np1:=np1+Prixod1.spsopr.kolfact; 
end.
.}
.}
!возврат с консигнации (отпуск на консигн) 
.begin Prixod1.vSopr := 102; end.
.{table 'Prixod1.katsopr' 
.{table 'Prixod1.spsopr' 
.begin
 np2:=np2+Prixod1.spsopr.kolfact; 
end.
.}
.}
!прием на консигнацию 
.begin Prixod1.vSopr := 103; end.
.{table 'Prixod1.katsopr' 
.{table 'Prixod1.spsopr' 
.begin
 np3:=np3+Prixod1.spsopr.kolfact; 
end.
.}
.}
!акт на пересортицу 
.begin Prixod1.vSopr := 630; end.
.{table 'Prixod1.katsopr' 
.{table 'Prixod1.spsopr' 
.begin
 if prixod1.spsopr.prmc=1 then begin 
   np4:=np4+Prixod1.spsopr.kolfact; 
end.
.}
.}
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

почему у вас в индексы заносится, а у меня нет
Когда пишете условия внутри двойных круглых скобок, старайтесь в словаре подобрать самый подходящий индекс. NoIndex и условия за скобками - вариант, когда исчерпаны все возможности использования индексов. Иногда ради оптимальных индексов может даже потребоваться проекцию перестроить. Возможно, в вашем случае (раз нужны приходы конкретной МЦ на конкретный склад) было бы удобнее идти от таблицы SPORDER, к которой полно всяких индексов, а уже потом определять вид накладной, идя в нее из ордера.
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

и все равно ошибка, то не может осуществить преобразование типов, то неверная настройка логических таблиц. Не хочет компилятор такую таблицу пропускать prixod1
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

и все равно ошибка, то не может осуществить преобразование типов, то неверная настройка логических таблиц
Ну с таким описанием ошибки, понять в чем ошибка крайне непросто. Необходимо иметь хотябы минимальные экстрасенсорные способности... :)
Не хочет компилятор такую таблицу пропускать prixod1
Если это единственная View в отчете, то зачем ее именуете?
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

view не единственная. В мою полностью рабочую форму просто вставляю view
.Create view prixod1
var vSopr : word
from katsopr, spsopr
where ((
vSopr == KatSopr.VidSopr
and BegDat <<= KatSopr.dSopr
and EndDat >>= KatSopr.dSopr
and sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr
and MC_nrec == spsopr.CMCUSL
))
;
больше не делаю никаких с этим представлением действий. Форма перестает компилироваться. Ошибка : не могу осуществить преобразование типов в этой строке. and begDat <<= katsopr.dsopr
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Скорее всего очепятка где-то.
Типы правильно указаны? vSopr : word;
BegDat, EndDat : date; Где они вообще описаны? В каком месте? Случайно не в другой именованной View?
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Сообщение sildae »

Откомпиллировалось. Но в процессе выполнения ошибка.
BegDat, EndDat,sklad_nrec, MC_nrec - из потока, из прототипа

.Create view prixod1
from katsopr, spsopr
where ((
sklad_nrec == katsopr.CPODRTO(noindex)
and katsopr.nrec == spsopr.csopr
and MC_nrec==spsopr.CMCUSL
and begDat <= katsopr.dsopr
and endDat >=katsopr.dsopr
and tip==katsopr.vidsopr
))
;


.begin
tip:=word(502)
end.
.{table 'Prixod1.katsopr'
.{table 'Prixod1.spsopr'
.begin
n2:=n2+Prixod1.spsopr.kolfact;
Summa2:=Summa2+Prixod1.spsopr.kolfact;
end.
.}
.}
Пишет ,что ошибка, таблица зависит от самой себя...
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

из прототипа все в строках, делай приведение date(begDat)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

надо
and begDat <<= katsopr.dsopr
and endDat >>=katsopr.dsopr
другого не вижу.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

BegDat, EndDat,sklad_nrec, MC_nrec - из потока, из прототипа
Вот поэтому и ошибка преобразования. Ну не любят господа разработчики типизировать переменные в прототипах.
Поэтому все нужно приводить к нужному типу.

А насчет синтаксиса Эдвард уже написал.
Ответить