Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Весь в непонятках. Хранимая процедура(+)   Найти похожие ветки 

 
AlexSerp   (2004-05-19 12:09) [0]

имеет 71 возвращаемое поле.
Работает на отчет (по авансовым отчетам).
Попросили добавить пару полей.
Добавил. Один сотрудник из отчета пропал.
Убрал те два поля, все появилось.
Никакой логики никак не могу увидеть.
Это глюк или ограичение ИБ6?
Что-то я нигде таких ограничений не видел.
Или плохо смотрел?


 
Соловьев ©   (2004-05-19 12:12) [1]

ошибка в 301 строке ХП - известный глюк ИБ


 
Курдль ©   (2004-05-19 12:17) [2]


> Один сотрудник из отчета пропал.

Ну хоть в мире живых остался?  :(


 
Vlad ©   (2004-05-19 12:21) [3]

В IB количество полей ограничивается размером записи - 64К, сюда не входят блобы


 
Курдль ©   (2004-05-19 12:56) [4]


> Vlad ©   (19.05.04 12:21) [3]
> В IB количество полей ограничивается размером записи - 64К,
> сюда не входят блобы

Представьте себе 64К - это ж скока текста!


 
Digitman ©   (2004-05-19 12:58) [5]


> имеет 71 возвращаемое поле


это же ужас какой-то ! куда ж ты их столько настрогал ?)

что-то, думаю, изначально неверно в логике таких "монстрообразных" запросов ...


 
Val ©   (2004-05-19 13:13) [6]

сотрудники могут пропадать из-за неверных внешних объединений :)


 
AlexSerp   (2004-05-19 13:24) [7]

Digitman >это же ужас какой-то ! куда ж ты их столько настрогал ?)

Я всего лишь админ. Проги/отчеты и все такое написано не мной.
Я на развитии и устранении багов.
Вообще-то и побольше процедуры встречаются.
Так что вопрос не в этом.
Ладно бы вообще результата не было.
А то ведь строка из отчета.
Причем, если каждый запрос в процедуре запускать по этому сотруднику, то вся инфа на месте. А возврат из процедуры без него.


 
AlexSerp   (2004-05-19 13:28) [8]

Соловьев, а есть решение против известного глюка?
Извини, я пока не нашел в инете.


 
Соловьев ©   (2004-05-19 13:31) [9]


> [8] AlexSerp   (19.05.04 13:28)

:)
это я шутил
ты вопрос такой задал - что только телепаты догажаются...
приведи код ХП, и вообще-то уже пора давно перейти на FireBird 1.5


 
Andriano   (2004-05-19 13:32) [10]

Ну а что по поводу "неверных внешних объединений" - проверил?

Давно бы запрос показал.

И вообще, ну не может быть в отчете по авансовым платежам 71 поле.


 
AlexSerp   (2004-05-19 13:37) [11]

Andriano, я уже все объединения проверил.
Текст процедуры выложить не могу - ограничение на длинну сообщения в форуме.
По поводу объединений - без двух доп.полей работает.
Значит дело все-таки не в объединениях.


 
Соловьев ©   (2004-05-19 13:44) [12]


> [11] AlexSerp   (19.05.04 13:37)

можно же и частями опубликовать...


 
AlexSerp   (2004-05-19 13:47) [13]

ОК

CREATE PROCEDURE GURNAL_SCHET_71S (
   DATA_N DATE,
   DATA_K DATE,
   SH VARCHAR (15),
   MES INTEGER,
   GOD INTEGER)
RETURNS (
   NSTR INTEGER,
   FIO VARCHAR (30),
   SM_DBN DOUBLE PRECISION,
   SM_KRN DOUBLE PRECISION,
   SM DOUBLE PRECISION,
   SM_7102 DOUBLE PRECISION,
   SM_7102D DOUBLE PRECISION,
   SM_5002D DOUBLE PRECISION,
   SM_910421D DOUBLE PRECISION,

   SM_51 DOUBLE PRECISION,
   SM_5101 DOUBLE PRECISION,
   SM_5102 DOUBLE PRECISION,
   SM_5103 DOUBLE PRECISION,
   SM_5104 DOUBLE PRECISION,
   SM_5105 DOUBLE PRECISION,
   SM_5106 DOUBLE PRECISION,
   SM_5107 DOUBLE PRECISION,
   SM_5108 DOUBLE PRECISION,
   SM_5001K DOUBLE PRECISION,
   SM_5004 DOUBLE PRECISION,
   SM_7902 DOUBLE PRECISION,
   SM_7902K DOUBLE PRECISION,
   DATA DATE,
   SM_50K DOUBLE PRECISION,
   SM_50D DOUBLE PRECISION,
   SM_5001D DOUBLE PRECISION,
   SM_4402 DOUBLE PRECISION,
   SM_260022124 DOUBLE PRECISION,
   SM_230000012 DOUBLE PRECISION,
   SM_260011310 DOUBLE PRECISION,
   SM_260033365 DOUBLE PRECISION,
   SM_6021 DOUBLE PRECISION,
   SM_6021KOM DOUBLE PRECISION,
   SM_19042 DOUBLE PRECISION,
   SM_8402 DOUBLE PRECISION,
   SM_9104 DOUBLE PRECISION,
   SM_7302 DOUBLE PRECISION,
   SM_7307 DOUBLE PRECISION,
   SM_0804 DOUBLE PRECISION,
   SM_1001111 DOUBLE PRECISION,
   SM_1003000 DOUBLE PRECISION,
   SM_1003100 DOUBLE PRECISION,
   SM_1003200 DOUBLE PRECISION,
   SM_1005000 DOUBLE PRECISION,
   SM_1006 DOUBLE PRECISION,
   SM_1009000 DOUBLE PRECISION,
   SM_230078027 DOUBLE PRECISION,
   SM_260022128 DOUBLE PRECISION,
   SM_260022130 DOUBLE PRECISION,
   SM_4401 DOUBLE PRECISION,
   SM_4403 DOUBLE PRECISION,
   SM_910494 DOUBLE PRECISION,
   SM_9703 DOUBLE PRECISION,
   SM_8401 DOUBLE PRECISION,
   SM_1002200 DOUBLE PRECISION,
   SM_1008 DOUBLE PRECISION,
   SM_910451 DOUBLE PRECISION,
   SM_230071027 DOUBLE PRECISION,
   SM_ITOGO DOUBLE PRECISION,
   NOM_AVOT VARCHAR (150),
   SM_DB_KR DOUBLE PRECISION,
   SM_DBK DOUBLE PRECISION,
   SM_KRK DOUBLE PRECISION,
   DAN DATE,
   DAK DATE,
   N_SOTR INTEGER,
   SM_SH DOUBLE PRECISION,
   SH1 VARCHAR (15),
   SH2 VARCHAR (15),
   SM_DB1 DOUBLE PRECISION,
   SM_KR1 DOUBLE PRECISION,
   N_BUX INTEGER,
   NS INTEGER)
AS


 
AlexSerp   (2004-05-19 13:48) [14]

declare variable SALDO_AV DOUBLE PRECISION;
declare variable SALDO_W1 DOUBLE PRECISION;
declare variable SALDO_KO DOUBLE PRECISION;
declare variable SALDO_W DOUBLE PRECISION;
declare variable SALDO_N DOUBLE PRECISION;
declare variable SALDO_76 DOUBLE PRECISION;
/*declare variable SM_DB1 DOUBLE PRECISION;*/
/*declare variable SM_KR1 DOUBLE PRECISION;*/
/*declare variable SM_SH DOUBLE PRECISION;*/
declare variable NN INTEGER;
declare variable DN INTEGER;
declare variable STR VARCHAR(10);
declare variable DATA_W DATE;
/*declare variable SH1 VARCHAR (15);*/
BEGIN
 DAN=DATA_N; DAK=DATA_K;
 NOM_AVOT=""; NN=0; NSTR=0;SM_KR1=0;SM_DB1=0;
 SM_DB_KR=0;
 for
 Select A.A1,min(B.NAME) from BUX_SALDO A
 left join SOTRUD B on (A.A1=B.N)
 where A.DB like "710%"
 and A.GOD=:GOD
 and A.mes=:mes

 group by A.A1
 union
 Select A.KLIENT_N,min(B.NAME) from BUX_OBOROT A
 left join SOTRUD B on (A.KLIENT_N=B.N)
 where A.modul in (5,51)
 /*and A.GOD=:GOD*/
 and a.data between :data_n and :data_k
 group by A.KLIENT_N
 into :N_SOTR,:FIO
 do begin
   SM_DBN=Null; SM_KRN=Null; SM=Null;
   if (N_SOTR is Null) then N_SOTR=0;
   if (FIO is Null) then FIO="нет";
   NOM_AVOT="";
   for
   Select N_N from DOK_OSN_AV where ROD1=:N_SOTR
   and DATA>=:DATA_N and DATA<=:DATA_K
   into :NN do begin
     if (NN is Null) then NN=0;
     NOM_AVOT=NOM_AVOT||","||CAST(NN as varchar(10));
   end
   /*SALDO_N*/
   Select sum(SM) from BUX_SALDO
   where A1=:N_SOTR and DB like "7101%"
   and MES=:MES and GOD=:GOD
   into :SM;
   if (SM is Null) then SM=0;
   if (SM=0) then begin
     SM_DBN=Null; SM_KRN=Null; SM=Null;
   end
   if (SM<0) then begin
     SM_KRN=-SM; SM_DBN=Null;
   end
   if (SM>0) then begin
     SM_DBN=SM; SM_KRN=Null;
   end
   /*SM DEBET*/
   SM_SH=0;
   SM_7102=0;
   SM_7102D=0;
   SM_5002D=0;
   SM_910421D=0;
   SM_51=0; SM_50K=0;
   SM_5101=0;
   SM_5102=0;
   SM_5103=0;
   SM_5104=0;
   SM_5105=0;
   SM_5106=0;
   SM_5107=0;
   SM_5108=0;
   SM_5001K=0;
   SM_5004=0;
   SM_7902=0;
   /*SM KREDIT*/
   SM_SH=0;SM_50D=0;SM_4402=0;SM_260022124=0;SM_230000012=0;
   SM_260011310=0;SM_260033365=0;SM_6021=0;SM_6021KOM=0;
   SM_19042=0;SM_8402=0;SM_9104=0;SM_7302=0;
   SM_5001D=0;
   SM_0804=0;
   SM_1001111=0;
   SM_1003000=0;
   SM_1003100=0;
   SM_1003200=0;
   SM_1005000=0;
   SM_1006=0;
   SM_1009000=0;
   SM_230078027=0;


 
AlexSerp   (2004-05-19 13:48) [15]

SM_260022128=0;
   SM_260022130=0;
   SM_4401=0;
   SM_4403=0;
   SM_910494=0;
   SM_9703=0;
   SM_8401=0;
   SM_7902K=0;
   SM_1002200=0;
   SM_1008=0;
   SM_910451=0;
   SM_230071027=0;
   for
   Select SM,DB,KR,N from BUX_OBOROT
   where
   (KLIENT_N=:N_SOTR and DATA>=:DATA_N and DATA<=:DATA_K
   and MODUL in (5,51))
   or
   (N_SOTRUD>0 and N_SOTRUD=:N_SOTR and DATA>=:DATA_N and DATA<=:DATA_K
   and MODUL=3)
   order by DB,KR
   into :SM_SH,:SH2,:SH1,:N_BUX do begin
    if (SM_SH is Null) then SM_SH=0;
    if (SH1 is Null) then SH1="";
    if (SH2 is Null) then SH2="";
    /*DEBET*/
    if (SH2 like "7101%") then begin
      if (SH1 like "7102%") then SM_7102=SM_7102+SM_SH;
      if (SH1 like "51%") then SM_51=SM_51+SM_SH;
      if (SH1 like "50%") then SM_50K=SM_50K+SM_SH;
      /*if (SH1 like "5101%") then SM_5101=SM_5101+SM_SH;*/
      /*if (SH1 like "5102%") then SM_5102=SM_5102+SM_SH;
      /*if (SH1 like "5103%") then SM_5103=SM_5103+SM_SH;
      /*if (SH1 like "5104%") then SM_5104=SM_5104+SM_SH;
      /*if (SH1 like "5105%") then SM_5105=SM_5105+SM_SH;
      /*if (SH1 like "5106%") then SM_5106=SM_5106+SM_SH;
      /*if (SH1 like "5107%") then SM_5107=SM_5107+SM_SH;
      /*if (SH1 like "5108%") then SM_5108=SM_5108+SM_SH;*/
      if (SH1 like "5004%") then SM_5004=SM_5004+SM_SH;
      if (SH1 like "5001%") then SM_5001K=SM_5001K+SM_SH;
      if (SH1 like "7902%") then SM_7902=SM_7902+SM_SH;
    end
    /*KREDIT*/
    if (SH1 like "7101%") then begin
      if (SH2 like "7102%") then SM_7102D=SM_7102D+SM_SH;
      if (SH2 like "5002%") then SM_5002D=SM_5002D+SM_SH;
      if (SH2 like "910421%") then SM_910421D=SM_910421D+SM_SH;
      if (SH2 like "50%") then SM_50D=SM_50D+SM_SH;
      if (SH2 like "5001%") then SM_5001D=SM_5001D+SM_SH;
      if (SH2 like "4402%") then SM_4402=SM_4402+SM_SH;
      if (SH2 like "260022124%") then SM_260022124=SM_260022124+SM_SH;
      if (SH2 like "230000012%") then SM_230000012=SM_230000012+SM_SH;
      if (SH2 like "260011310%") then SM_260011310=SM_260011310+SM_SH;
      if (SH2 like "260033365%") then SM_260033365=SM_260033365+SM_SH;
      /*if (SH2 like "6021%") then SM_6021=SM_6021+SM_SH;
      if (SH2 like "6021kom%") then SM_6021KOM=0;*/
      if (SH2 like "19042%") then SM_19042=SM_19042+SM_SH;
      if (SH2 like "8402%") then SM_8402=SM_8402+SM_SH;
      /*if (SH2 like "9104%") then SM_9104=SM_9104+SM_SH;*/
      if (SH2 like "7302%") then SM_7302=SM_7302+SM_SH;
      if (SH2 like "0804%") then SM_0804=SM_0804+SM_SH;
      if (SH2 like "1001111%") then SM_1001111=SM_1001111+SM_SH;
      if (SH2 like "1003000%") then SM_1003000=SM_1003000+SM_SH;
      if (SH2 like "1003100%") then SM_1003100=SM_1003100+SM_SH;
      if (SH2 like "1003200%") then SM_1003200=SM_1003200+SM_SH;
      if (SH2 like "1005000%") then SM_1005000=SM_1005000+SM_SH;
      if (SH2 like "1006%") then SM_1006=SM_1006+SM_SH;
      if (SH2 like "1009000%") then SM_1009000=SM_1009000+SM_SH;
      if (SH2 like "230078027%") then SM_230078027=SM_230078027+SM_SH;
      if (SH2 like "260022128%") then SM_260022128=SM_260022128+SM_SH;
      if (SH2 like "260022130%") then SM_260022130=SM_260022130+SM_SH;
      if (SH2 like "4401%") then SM_4401=SM_4401+SM_SH;
      if (SH2 like "4403%") then SM_4403=SM_4403+SM_SH;
      if (SH2 like "910494%") then SM_910494=SM_910494+SM_SH;
      if (SH2 like "9703%") then SM_9703=SM_9703+SM_SH;
      if (SH2 like "8401%") then SM_8401=SM_8401+SM_SH;
      if (SH2 like "7902%") then SM_7902K=SM_7902K+SM_SH;
      if (SH2 like "1002200%") then SM_1002200=SM_1002200+SM_SH;
      if (SH2 like "1008%") then SM_1008=SM_1008+SM_SH;
      if (SH2 like "910451%") then SM_910451=SM_910451+SM_SH;
      if (SH2 like "230071027%") then SM_230071027=SM_230071027+SM_SH;
     end
   end
   SM_DB1=SM_7102+SM_50K+SM_5101+SM_5102+SM_5103+SM_5104+SM_5105
   +SM_5106+SM_5107+SM_5108+SM_7902;
   NS=0;
   if (SM_7102=0) then begin SM_7102=Null; NS=NS+1; end
   if (SM_51=0) then begin SM_51=Null; NS=NS+1;  end
   if (SM_50K=0) then begin SM_50K=Null; NS=NS+1;  end
   if (SM_5101=0) then begin SM_5101=Null; NS=NS+1;  end
   if (SM_5102=0) then begin SM_5102=Null; NS=NS+1;  end
   if (SM_5103=0) then begin SM_5103=Null; NS=NS+1;  end
   if (SM_5104=0) then begin SM_5104=Null; NS=NS+1;  end


 
AlexSerp   (2004-05-19 13:48) [16]

if (SM_5105=0) then begin SM_5105=Null; NS=NS+1;  end
   if (SM_5106=0) then begin SM_5106=Null; NS=NS+1;  end
   if (SM_5107=0) then begin SM_5107=Null; NS=NS+1;  end
   if (SM_5108=0) then begin SM_5108=Null; NS=NS+1;  end
   if (SM_5001K=0) then begin SM_5001K=Null; NS=NS+1;  end
   if (SM_7902=0) then begin SM_7902=Null; NS=NS+1;  end
   SM_KR1=SM_7102D+SM_5002D+SM_910421D+SM_50D+SM_4402+SM_260022124+SM_230000012+
   SM_260011310+SM_260033365+SM_6021+SM_19042+SM_8402+
   SM_9104+SM_7302
   +SM_0804+SM_1001111+SM_1003000+SM_1003100+SM_1003200+
   SM_1005000+SM_1006+SM_1009000+SM_230078027+SM_260022128+
   SM_260022130+SM_4401+SM_4403+SM_910494+SM_9703+SM_8401+SM_7902K+SM_1002200+
   SM_1008+SM_910451+SM_230071027;
   SM_ITOGO=SM_KR1;
   if (SM_ITOGO=0) then SM_ITOGO=Null;
   if (SM is Null) then SM=0;
   SM_DB_KR=SM+(SM_DB1-SM_KR1);
   if (SM=0) then SM=Null;
   if (SM_DB_KR>0) then begin SM_DBK=SM_DB_KR;SM_KRK=Null; end
   if (SM_DB_KR<0) then begin SM_KRK=-SM_DB_KR;SM_DBK=Null;end
   if (SM_DB_KR=0) then begin SM_KRK=Null;SM_DBK=Null; SM_DB_KR=Null; end
   if (SM_7102D=0) then begin SM_7102D=Null; NS=NS+1; end
   if (SM_5002D=0) then begin SM_5002D=Null; NS=NS+1; end
   if (SM_910421D=0) then begin SM_910421D=Null; NS=NS+1; end
   if (SM_50D=0) then begin SM_50D=Null;  NS=NS+1; end
   if (SM_4402=0) then begin  SM_4402=Null; NS=NS+1;  end
   if (SM_260022124=0) then begin  SM_260022124=Null; NS=NS+1;  end
   if (SM_230000012=0) then begin  SM_230000012=Null; NS=NS+1;  end
   if (SM_260011310=0) then begin  SM_260011310=Null; NS=NS+1;  end
   if (SM_260033365=0) then begin  SM_260033365=Null; NS=NS+1;  end
   if (SM_6021=0) then begin  SM_6021=Null; NS=NS+1;  end
   if (SM_6021KOM=0) then begin  SM_6021KOM=Null; NS=NS+1;  end

   if (SM_19042=0) then begin  SM_19042=Null; NS=NS+1;  end
   if (SM_8402=0) then begin  SM_8402=Null; NS=NS+1;  end
   if (SM_9104=0) then begin  SM_9104=Null; NS=NS+1;  end
   if (SM_7302=0) then begin  SM_7302=Null; NS=NS+1;  end
   if (SM_5001D=0) then begin  SM_5001D=Null; NS=NS+1;  end
   if (SM_0804=0) then begin  SM_0804=Null; NS=NS+1;  end
   if (SM_1001111=0) then begin  SM_1001111=Null; NS=NS+1;  end
   if (SM_1003000=0) then begin  SM_1003000=Null; NS=NS+1;  end
   if (SM_1003100=0) then begin  SM_1003100=Null; NS=NS+1;  end
   if (SM_1003200=0) then begin  SM_1003200=Null; NS=NS+1;  end
   if (SM_1005000=0) then begin  SM_1005000=Null; NS=NS+1;  end
   if (SM_1006=0) then begin  SM_1006=Null; NS=NS+1;  end
   if (SM_1009000=0) then begin  SM_1009000=Null; NS=NS+1;  end
   if (SM_230078027=0) then begin  SM_230078027=Null; NS=NS+1;  end
   if (SM_260022128=0) then begin  SM_260022128=Null; NS=NS+1;  end
   if (SM_260022130=0) then begin  SM_260022130=Null; NS=NS+1;  end
   if (SM_4401=0) then begin  SM_4401=Null; NS=NS+1;  end
   if (SM_4403=0) then begin  SM_4403=Null; NS=NS+1;  end
   if (SM_910494=0) then begin  SM_910494=Null; NS=NS+1;  end
   if (SM_9703=0) then begin  SM_9703=Null; NS=NS+1;  end
   if (SM_8401=0) then begin  SM_8401=Null; NS=NS+1;  end
   if (SM_7902K=0) then begin SM_7902K=Null; NS=NS+1;  end
   if (SM_5004=0) then begin  SM_5004=Null; NS=NS+1;  end
   if (SM_1002200=0) then begin  SM_1002200=Null; NS=NS+1;  end
   if (SM_1008=0) then begin  SM_1008=Null; NS=NS+1;  end
   if (SM_910451=0) then begin  SM_910451=Null; NS=NS+1;  end
   if (SM_230071027=0) then begin  SM_230071027=Null; NS=NS+1;  end

   /*if ((FIO<>"нет") and (SM_DB1<>0 or SM_KR1<>0
   or SM_DBN<>0 or SM_KRN<>0)) then suspend;*/
   /*if (FIO<>"нет") then suspend;*/
   if ((FIO<>"нет") and (SM_DBN<>0 or SM_KRN<>0 or NS<>48)) then begin
     NSTR=NSTR+1;
   suspend;
   end

 end
END


 
AlexSerp   (2004-05-19 13:50) [17]

Те два поля выделены жирным.
Ниже по тексту идет разблюдовка по полям.


 
Johnmen ©   (2004-05-19 13:57) [18]

Видимо дело в  арифметических операциях со значением NULL.
Т.е. 123+NULL=NULL и т.п.


 
AlexSerp   (2004-05-19 14:04) [19]

Johnmen, пустота присваивается после вычислений.


 
MIKE kouzmine ©   (2004-05-19 14:17) [20]

Они исчезают из выборки? Или что?


 
AlexSerp   (2004-05-19 14:27) [21]

MIKE kouzmine, именно.
Хотя в каждом отдельном запросе сотрудник выбирается без проблем.
Запросы неизменными остались.
Добавилось только два поля и их заполнение.


 
Digitman ©   (2004-05-19 14:35) [22]

и какой же (слов нет кто он) все это писал-то ?)

а завтра в корреспонденции с заданным фикс.счетом окажется новый счет, которого до сей поры не было в справочнике - и что ? снова процедуру переписывать ? еще поле добавлять ? а если послезавтра еще косой десяток счетов бухгалтеру стукнет в голову добавить ? так и будем раздувать кол-во реквизитов таблиц/запросов/процедур/взглядов ? они ж не резиновые))


 
MIKE kouzmine ©   (2004-05-19 14:35) [23]

А исчезают именно только они или случайные? Если они, то пройти отладкой именно по ним и понять, почему суспенд не выполняется.
if ((FIO<>"нет") and (SM_DBN<>0 or SM_KRN<>0 or NS<>48)) then begin
    NSTR=NSTR+1;
  suspend;
end


 
AlexSerp   (2004-05-19 14:44) [24]

Digitman >и какой же (слов нет кто он) все это писал-то ?)

Это ж какие ты слова подобрал! ;-) Я обычно говорю ............ вот уже несколько лет, постоянно разгребая все, что понаписали доблестные разработчики.
База даже не спроектирована, это просто хранилище данных.
Проги написаны так, что постоянно что-то исчезает или задваивается/затраивается/....
Причем происходит все бессистемно.
Ну да ладно. Боремся помалек.

MIKE kouzmine, именно один и тот же сотрудник.
Отладкой пользовался из QuickDesk.
Видно совсем башкой ослаб.
Ща попробую шнягу с комментированием и оставлением каждого запроса отдельно. Может выплывет что-нть.


 
Соловьев ©   (2004-05-19 14:47) [25]


> Отладкой пользовался из QuickDesk.

качай - http://www.ibexpert.com/rus/ibe_sfx.exe


 
Digitman ©   (2004-05-19 14:49) [26]


> AlexSerp   (19.05.04 14:27) [21]


как это у тебя запись исчезает из выборки ?
у тебя процедура же селективная ?
вот смотри сюда :

если таки WHERE-условие SELECT-предложения верно (т.е. однозначно приводит к выборке одной записи), то далее я вижу, что собственно suspend у тебя выполняется условно

  if ((FIO<>"нет") and (SM_DBN<>0 or SM_KRN<>0 or NS<>48)) then begin
    NSTR=NSTR+1;
  suspend;
  end

если условие в этом if не выполняется, то и suspend не выполнится !

о чем это говорит ? говорит это о том, что если обращение клиента к процедуре происходит как к селективной процедуре , то выборка будет пуста

отсюда вывод : проверяй правильность формирования этого if-условия, оно у тебя напрямую зависит от вычисленных значений переменных, и в связи с добавлением новых полей эти вычисленные значения запросто могут не соответствовать ожидаемым в условиях сравнения с константами

и оч важно здесь замечание Johnmen ©   (19.05.04 13:57) [18] - скорей всего оттуда и растут ноги у проблемы


 
AlexSerp   (2004-05-19 15:07) [27]

Digitman, до того, как я прочитал твое сообщение,
уже именно это
if ((FIO<>"нет") and (SM_DBN<>0 or SM_KRN<>0 or NS<>48)) then begin
   NSTR=NSTR+1;
 suspend;
 end

и проверил.
От же ж блин, оно ж работало без тех двух полей.
А теперь нет.
Поставил вместо AND -> OR.
Сотрудник появился.
Только там осталось покопаться в дебётах/кредётах.

Вот же как на админском деле мозги закисают.
Кабы в программеры обратно.
Нет ни у кого места в Москве? ;-)


 
Digitman ©   (2004-05-19 15:29) [28]


> Поставил вместо AND -> OR


от балды, чувствуется, поставил ? абы задышало хоть как-то, а дальше - трава не расти ? ну так еще и XOR попробуй)

если "работало", то, значит, именно AND был нужен по логике !

и задача твоя, коль  уж на то пошло, - выяснить, в какой точке кода процедуры происходит нечто ведущее к нарушаению истинности условного выражения

(FIO<>"нет") and (SM_DBN<>0 or SM_KRN<>0 or NS<>48)


 
AlexSerp   (2004-05-19 16:06) [29]

Ребята, да, наобум "ИЛИ" поставил.
Точно мозги закисли.
Там везде формируется какая-та переменная NS.
Похоже на то, что когда писалась эта процедура разработчик таким образом прикрыл какую-то дыру.
Меня,есссно, в известность никто не ставил.
Оказалось, что тот сотрудник и попал под раздачу - NS=48 у него было.
Огромное всем спасибо.
Все решилось.
И с остаткоами на конец периода тоже.


 
Digitman ©   (2004-05-19 16:31) [30]


> AlexSerp   (19.05.04 16:06) [29]


ну и умница

только вот еслим так и дальше будет продолжаться в том же духе - геморрой тебе гарантирован)

не царское (не админское !) это дело - лезть в дебри прикладного программингга чего бы то ни было ... не работает чья-то задача ? нафиг ее сразу ! и - ставь перед фактом руководство ..


 
AlexSerp   (2004-05-19 16:42) [31]

Digitman, ситуация поганенькая.
Программы сданы. Исходники переданы.
Кажин месяц гемор бессистемный.
Уже задолбало все до жути.

А мое дело не только админить, но и ошибки исправлять (исходники-то сданы). А также наполнять программы новой функциональностью (жаль только редко программировать удается) как на Делфи, так и на ИБ. Если б вы только видели исходники тех программ! Без слез не взглянешь. Я, когда ошибки исправляю, то разговариваю только матом.

А вообще, если б я знал, что проги будут писать дилетанты в прикладном программировании, то не пошел бы на эту работу. Правда, в тот момент мне предложили хорошую зарплату.
Теперь ищу место программиста.


 
Digitman ©   (2004-05-19 17:07) [32]


> AlexSerp   (19.05.04 16:42) [31]


мне искренне жаль, что ты торчишь в этой заднице

желаю выбраться из нее поскорей, иначе - кирдык ... ввязнешь по самые ухи ..


 
Andriano   (2004-05-20 08:35) [33]

М-да... Закончил складской учет писать. Там и доки и справочники с деревьями, и журналы, и отчеты, и всякие сервисы. Но НИ ОДНОЙ такой процедуры или что-то подобного.

Настоятельно рекомендую: разберись в данных, да напиши свои запросы и процедуры.

Признаюсь, терпения не хватило понять смысл опубликованной процедуры. Да и нет там смысла, просто кого-то переклинило на хранимых процедурах.


 
Digitman ©   (2004-05-20 09:20) [34]


> Andriano   (20.05.04 08:35) [33]


> Признаюсь, терпения не хватило понять смысл опубликованной
> процедуры


примерный смысл, кажется, понятен судя по названию

GURNAL_SCHET_71S

типа, журнал какой-то отчетности по счетам, корреспондирующим с 71-ым счетом

судя по куче полей в выборке, большинство полей предназначено для возврата инф-ции по тому или иному узлу счет/субсчет/шифр_аналитики/и т.д., фигурирующему на момент вызова в справочнике счетов ... растет-плодится справочник - растет и число полей в выборке !

дурней логики и в кошмарном сне не придумаешь ..



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.035 c
4-1084198491
MASTERD
2004-05-10 18:14
2004.06.13
Поиск COM портов


14-1085510987
i-s-v
2004-05-25 22:49
2004.06.13
Торба.Ком перестанет существовать


14-1085383304
PEVEC
2004-05-24 11:21
2004.06.13
Karaoke


3-1084477476
Inspired
2004-05-13 23:44
2004.06.13
Создать поле в табл Access из Delphi6 через адо query


1-1086038890
Eagle
2004-06-01 01:28
2004.06.13
SetDecimalSeparator - текст процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский