BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Отображение в MAKEREFER только записей, удовлетворяющих определенному условию

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Отображение в MAKEREFER только записей, удовлетворяющих определенному условию
 
Здравствуйте!
Нужно, чтобы при открытии справочника партнеров в нем отображались только партнеры у которых ИНН
имеет определенное начальное значение.
Вот рабочий код.
Но при открытии отображаются все партнеры.
Может следующую строку надо как-то иначе задавать?
Код
_tagsp:=FormulPars('_SPARTNER->( SETSCOPE(upper("CODE_PR"),cINN,,{"FULTAG_INN"}) )',{''})

Код
///********** запрашиваем код партнера  **********************************************
FUNCTION _Dialog()
//функция возвращает 
//  код контрагента
Local _top,_bot,_left,_right,_heads,_pic,_ref,_app,_spec,_getbl
Private  cINN:='5933'
altd()
aSet:=SAVESET()
aSetKey:=SAVESETKEY()


NetUse("_SPARTNER",LoadPath()+"PARTNER.dbf")
_out0:=SPACE(6) //код контрагента
//выходные параметры  -_out0  ,входящие в массив aDial
   _top:=7
   _bot:=8
   _left:=10
   _right:=70
   _heads:={{{_top,_left+32},"_out0"}}
   _pic:={'XXXXXX'}      
   _ref:={'SPARTN'}
   _app:=1
   _spec:='RESTOFF'
   _getbl:={NIL}

    DISPBOX(_top-1,_left-1,_bot+1,_right+1,'╔═╗║══╚║ ',"N/BG")
    SAYSCREEN(" ВЫБИРЕТЕ КОД ПАРТНЕРА ",_top-1,_left+2)
          SAYSCREEN("Партнер......................: ",_top,_left+2)

      _SPRAV_PARTN()
    QINPUT(_top,_left,_bot,_right,_heads,;  
           _app,_ref,_pic,,,;
           ,,,,_spec,;          
           _getbl,,,,,;   
         ,,,,"Сформировать отчет ?")
         
     _SPARTNER->(dbCloseArea()) 
  IF LASTKEY()!=27
     aDial:={_out0}
    else
     aDial:={}
  endif
RESTSETKEY(aSetKey)
RESTSET(aSet)
return aDial

   //функция вызова справочника партнеров
FUNCTION _SPRAV_PARTN()
    Local sAr,sAra,_namspr,_headspr,_typspr,_heads_sp,_mestosp,_colsp,_pnamsp,_pernamsp
    Local _cKeyVal,_fieldsp,_aSortSeek,_bPreDisp
    Local _findsp,_bYesArray,_bYesReplArray,_bYesNoRepl,_nOrdSeek,_cLeftKey
    sAr:=SELECT()
    sAra:=    SELECT("_SPARTNER")  
    _namspr:= "SPARTN"           
    _headspr:="Справочник контрагентов"
    _typspr:=1
    _heads_sp:={" КОД ","    НАИМЕНОВАНИЕ КОНТРАГЕНТА    ","         ИНН/КПП                "}
    _mestosp:={3,5,15}
    _colsp:='n/w,w+/n'
    _pnamsp:={"CODE"}  //массив имен полей справочника для занесения в GET-переменные
    _pernamsp:={"aIn[1]"}   //массив имен GET-переменных, в которые заносятся значения,полей справочника (их имена должны быть PRIVATE или PUBLIC)
    _cKeyVal:='UPPER(aIn[1])'
    _fieldsp:={{||FIELD->CODE},{||FIELD->SHORTNAME},{||FIELD->CODE_PR}}   //массив блоков кода для считывания содержимого полей справочника, по умолчанию считываются все поля целиком;
    _aSortSeek:={;
          {"- по коду        ",{"Шифр         "}, {'CODE'},'UPPER(aIn[1])',,,,'FULLCODE'},;
          {"- по наименованию",{"Наименование "}, {'SHORTNAME'},'UPPER(aIn[1])',,,,'FULLNAME'};
          } 

    _bPreDisp:=Nil //блок, выполняющийся перед отображениием справочника .
    _findsp:='cFind$UPPER(SHORTNAME)'  //контекстный поиск
//    _tagsp:=2                          //номер тега, по которому производится Seek по cKeyVal
    _tagsp:=FormulPars('_SPARTNER->( SETSCOPE(upper("CODE_PR"),cINN,,{"FULTAG_INN"}) )',{''})   //номер тега, по которому производится Seek по cKeyVal

     _nOrdSeek:='FULLNAME'  //индекс для возможности непосредственного поиска  по первым буквам
     _cLeftKey:="UPPER(aIn[1])"//ПОЧЕМУ_ТО нарушает работу _nOrdSeek старшая часть ключа для непосредственного поиска по буквам

     DBSELECTAREA(sAra)
    _SPARTNER->(MAKEREFER(_namspr,_headspr,_typspr,_heads_sp,_mestosp, ;
               _colsp,_pnamsp,_pernamsp,_cKeyVal,_fieldsp,;
               _aSortSeek,,,,, ;
                ,,,,, ; 
                ,,,,, ; 
                ,_findsp,_tagsp,,,;
                ,,,,, ;
                ,,,,, ; 
                ,,,,, ; 
                ,_nOrdSeek))

    DBSELECTAREA(sAr)
RETURN Nil
 
 
Добрый день.

В Вашем случае нужно писать блок не в "номер тега, по которому производится Seek по cKeyVal" (туда, собственно, пишется только либо номер, либо имя тэга), а в bPreDisp. Это специальный блок для такого рода действий. И писать придётся не setscope(), а dbsetfilter(). Поскольку отображение справочника производится не по ИНН, а по коду или имени, установить скоп по ИНН невозможно. Если установить скоп по ИНН на конкретный индекс ('FULLTAG_INN', как Вы делаете), то по индексам отображения скопа не будет. Если установить скоп на все индексы, то справочник скорей всего будет пуст, поскольку ИНН не совпадает с кодом или именем.
Так что в bPreDisp устанавливаете фильтр, в bPostDisp() его снимаете.
С уважением, Новиков Алексей.
 
Здравствуйте!
Переписал я код
Код
///********** запрашиваем код партнера  **********************************************
FUNCTION _Dialog()
//функция возвращает 
//  код контрагента
Local _top,_bot,_left,_right,_heads,_pic,_ref,_app,_spec,_getbl
Private  cINN:='5933'
altd()
aSet:=SAVESET()
aSetKey:=SAVESETKEY()


NetUse("_SPARTNER",LoadPath()+"PARTNER.dbf")
_SPARTNER->(ordsetfocus("FULTAG_INN"))
_out0:=SPACE(6) //код контрагента
//выходные параметры  -_out0  ,входящие в массив aDial
   _top:=7
   _bot:=8
   _left:=10
   _right:=70
   _heads:={{{_top,_left+32},"_out0"}}
   _pic:={'XXXXXX'}      
   _ref:={'SPARTN'}
   _app:=1
   _spec:='RESTOFF'
   _getbl:={NIL}

    DISPBOX(_top-1,_left-1,_bot+1,_right+1,'╔═╗║══╚║ ',"N/BG")
    SAYSCREEN(" ВЫБИРЕТЕ КОД ПАРТНЕРА ",_top-1,_left+2)
          SAYSCREEN("Партнер......................: ",_top,_left+2)

      _SPRAV_PARTN()
    QINPUT(_top,_left,_bot,_right,_heads,;  
           _app,_ref,_pic,,,;
           ,,,,_spec,;          
           _getbl,,,,,;   
         ,,,,"Сформировать отчет ?")
         
     _SPARTNER->(dbCloseArea()) 
  IF LASTKEY()!=27
     aDial:={_out0}
    else
     aDial:={}
  endif
RESTSETKEY(aSetKey)
RESTSET(aSet)
return aDial

   //функция вызова справочника партнеров
FUNCTION _SPRAV_PARTN()
    Local sAr,sAra,_namspr,_headspr,_typspr,_heads_sp,_mestosp,_colsp,_pnamsp,_pernamsp
    Local _cKeyVal,_fieldsp,_aSortSeek,_bPreDisp,_bPostDisp
    Local _findsp,_bYesArray,_bYesReplArray,_bYesNoRepl,_nOrdSeek,_cLeftKey
    sAr:=SELECT()
    sAra:=    SELECT("_SPARTNER")  
    _namspr:= "SPARTN"           
    _headspr:="Справочник контрагентов"
    _typspr:=1
    _heads_sp:={" КОД ","    НАИМЕНОВАНИЕ КОНТРАГЕНТА    ","         ИНН/КПП                "}
    _mestosp:={3,5,15}
    _colsp:='n/w,w+/n'
    _pnamsp:={"CODE"}  //массив имен полей справочника для занесения в GET-переменные
    _pernamsp:={"aIn[1]"}   //массив имен GET-переменных, в которые заносятся значения,полей справочника (их имена должны быть PRIVATE или PUBLIC)
    _cKeyVal:='UPPER(aIn[1])'
    _fieldsp:={{||FIELD->CODE},{||FIELD->SHORTNAME},{||FIELD->CODE_PR}}   //массив блоков кода для считывания содержимого полей справочника, по умолчанию считываются все поля целиком;
    _aSortSeek:={;
          {"- по коду        ",{"Шифр         "}, {'CODE'},'UPPER(aIn[1])',,,,'FULLCODE'},;
          {"- по наименованию",{"Наименование "}, {'SHORTNAME'},'UPPER(aIn[1])',,,,'FULLNAME'};
          } 

    _bPreDisp:= {||DBSETFILTER({||_SPARTNER->CODE_PR=cINN,"_SPARTNER->CODE_PR=cINN"})} //блок, выполняющийся перед отображениием справочника .
    _bPostDisp:={||_SPARTNER->(DbClearFilter())}
    _findsp:='cFind$UPPER(SHORTNAME)'  //контекстный поиск
    _tagsp:=1                          //номер тега, по которому производится Seek по cKeyVal
//    _tagsp:=FormulPars('_SPARTNER->( SETSCOPE(upper("CODE_PR"),cINN,,{"FULTAG_INN"}) )',{''})   //номер тега, по которому производится Seek по cKeyVal

     _nOrdSeek:='FULLNAME'  //индекс для возможности непосредственного поиска  по первым буквам
     _cLeftKey:="UPPER(aIn[1])"//ПОЧЕМУ_ТО нарушает работу _nOrdSeek старшая часть ключа для непосредственного поиска по буквам

     DBSELECTAREA(sAra)
    _SPARTNER->(MAKEREFER(_namspr,_headspr,_typspr,_heads_sp,_mestosp, ;
               _colsp,_pnamsp,_pernamsp,_cKeyVal,_fieldsp,;
               _aSortSeek,,,,, ;
                ,_bPreDisp,_bPostDisp,,, ; 
                ,,,,, ; 
                ,_findsp,_tagsp,,,;
                ,,,,, ;
                ,,,,, ; 
                ,,,,, ; 
                ,_nOrdSeek))

    DBSELECTAREA(sAr)
RETURN Nil
 
Прописал :
Код
 _bPreDisp:= {||DBSETFILTER({||_SPARTNER->CODE_PR=cINN,"_SPARTNER->CODE_PR=cINN"})}
    _bPostDisp:={||_SPARTNER->(DbClearFilter())}
Но все равно отображает все записи!
 
Вот так у меня работает:
_bPreDisp:= {|| DBSETFILTER({|| field->CODE_PR=cINN }, 'field->CODE_PR=cINN') }
Правда я ещё неоднозначности в объявлении переменных устранил.
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
{|| DBSETFILTER({|| field->CODE_PR=cINN }, 'field->CODE_PR=cINN') }
Да ,виноват ,каюсь "проморгал" и сделал синтетическую ошибку ( фигурную скобку не в том месте закрыл)
Попробовал написать так :
Код
    _bPreDisp:= {||DBSETFILTER({||_SPARTNER->CODE_PR=cINN},"_SPARTNER->CODE_PR=cINN")} 
Вроде тоже работает.
Спасибо!
 
Цитата
Алексей Новиков пишет:
Вот так у меня работает:
_bPreDisp:= {|| DBSETFILTER({|| field->CODE_PR=cINN }, 'field->CODE_PR=cINN') }
Правда я ещё неоднозначности в объявлении переменных устранил.
Еще остался Вопрос .
А аргументы в функции DBSETFILTER
field->CODE_PR=cINN и 'field->CODE_PR=cINN'
всегда должны соответствовать друг другу?
 
Символьный аргумент необходим для того, чтобы другой код мог получить информацию об установленном фильтре.
Снять его, установить свой, потом вернуть прежний. Или включить условие фильтра в какое-нибудь выражение.
Если ничего такого не предвидится (например, не будут использоваться функции dbpush() - dbpop()) то можно и не писать символьную строку.
Но лучше писать всегда и она должна соответствовать устанавливаемому фильтру. Хуже не будет.
С уважением, Новиков Алексей.
 
Вот спасибо за помощь!
Страницы: 1
Читают тему (гостей: 1)