Заполнение временной таблицы

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

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

Ответить
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Заполнение временной таблицы

Сообщение Marisha_P »

Здравствуйте!
Подскажите, пожалуйста,почему у меня неправильно заполняется временная таблица.
Задача в том, чтобы номер договора брать из ДО, если его нет то из связанного документа, для корректирующей СФ брать из основной.
Запрос вот такого вида:

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

select * from
pick,schfact(readonly), stepdoc(readonly), basedoc(readonly),dogovor(readonly),synonym dogovor dogovor3,synonym dogovor dogovor2(readonly),
synonym schfact  schfact_osn,synonym stepdoc  stepdoc_osn,synonym basedoc  basedoc_osn,synonym dogovor dogovor_osn
where ((
6==pick.wlist
and pick.crec==schfact.corg
and date1<<=schfact.dfact
and date2>>=schfact.dfact

and schfact.CRECS[7] ==  schfact_osn.nrec
and schfact.cstepdoc==stepdoc.nrec
and stepdoc.cbasedoc==basedoc.nrec
and basedoc.cdogovor==dogovor.nrec

and schfact_osn.cstepdoc==stepdoc_osn.nrec
and stepdoc_osn.cbasedoc==basedoc_osn.nrec
and basedoc_osn.cdogovor==dogovor_osn.nrec

and schfact.csoprhoz==soprhoz.nrec
and soprhoz.csoprdoc ==katsopr.nrec
and soprhoz.cdogovor==dogovor3.nrec
));           
А далее заполнение таблицы идет следующим образом:

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

_loop pick
 { _loop schfact
     { m:=false;
       if (schfact.direct=1) 
       { _loop stepdoc
         { m:=true; //контроль привязки ДО
            _loop basedoc
             {_loop dogovor
               { if (schfact.tipuser<>7240) then
                   {Ins_TmpTab(dogovor.nrec, schfact.nrec, schfact.summa);
                    nextvisual;}
                  else
                   {Ins_TmpTab(dogovor_osn.nrec, schfact.nrec, schfact.summa);
                     nextvisual;}
               }
            } //basedoc
         } //stepdoc

         if m<>true then // Если ДО не привязано, будем искать номер договора в сопроводительных документах
           {  if (schfact.tipuser<>7240) then
               { Ins_TmpTab(dogovor3.nrec, schfact.nrec, schfact.summa);nextvisual;
                 Message('счет-фактура ' + schfact.num + '  номер договора  '+ dogovor3.nodoc);
               }
            else
                {Ins_TmpTab(dogovor_osn.nrec, schfact.nrec, schfact.summa);nextvisual;
               }
          }
     }
   } //schfact
 } //pick  


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

Re: Заполнение временной таблицы

Сообщение edward_K »

добавьте проверку на валидность dogovor3
if isvalid(tnDogovor3) ...
вообще связка schfact.csoprhoz не совсем правильная в случае авансов
лучше искать and schfact.nrec == soprhoz.cschfact
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: Заполнение временной таблицы

Сообщение Marisha_P »

не помогает почему-то эта проверка(((
Ответить