×
×
+ Ответить в теме
Показано с 1 по 4 из 4
  1. #1
    Аноним
    Гость

    Программирование в среде БЭСТ4+ (функции Scatter() и Gather())

    Здравствуйте!

    в файле помощи "Программирование в среде БЭСТ4+" есть очень скромное описание функций Scatter() и Gather(aBuf, [aLogic]) - правда описание очень скудное, кто-нибудь уже использовал эти функции. может быть есть пример использования.
    Заранее большое спасибо!
    Поделиться с друзьями

  2. #2
    Клерк
    Регистрация
    08.12.2006
    Адрес
    Самара
    Сообщений
    201
    Scatter() – читает содержимое текущей записи в массив значений по порядку полей в записи.
    Самый лучший способ понять работу функции - провести опыты.
    если заявлено, что читает в массив, значит объявляем массив
    открываем базу и пробуем scatter() и проверяем результат.

    Для примеров, берем Инструментарий разработчика с исходными кодам функций и примерами использования и изучаем.
    Для этого делаем поиск файла содержащий текст scatter по всем каталогам с программами (из фара очень удобно, отметить и поиск по отмеченным).
    потом из результатов берем и открываем, по f7 сразу попадешь на найденную функцию.
    вот к примеру что нашел
    Код:
    FUNCTION ScatterS(buf)
      // запоминает в 2-мерный массив {<имя поля>,<значение>}  
       IF buf == NIL
          buf := ARRAY(FCOUNT())
       ENDIF
    
      If LEN(buf)>0
         AEVAL(buf,{|x,i| buf[i] := {FIELDNAME(i),FIELDGET(i)} })
      EndIF
    RETURN (buf)
    
    /**********
    *  Function: Gather()
    *  Notes: write to database from array to current record
    ***/
    FUNCTION Gather(aBuf,aLogic)
    //[aLogic]-массив длиною как aBuf - значащее поле (.T.) или нет (.F.), в этом случае пмшутся только значащие
    LOCAL lRecLock
      IF (lRecLock := (ASCAN(dbRLockList(),{|nRec| nRec = RECNO() }) != 0)) .OR. RecLock()
        AEVAL(aBuf, {|x,i|IF(EMPTY(aLogic).OR.aLogic[i],FIELDPUT(i,x),NIL)},1,FCOUNT())
        IF !lRecLock
          dbUnlock()
        ENDIF
      ENDIF
    RETURN (FCOUNT())
    Примеров использования много, и понять несложно
    скачать инструментарий можно на spb4plus.ru

  3. #3
    Аноним
    Гость
    вот что у меня получилось, функции оказались очень полезными...
    Код:
       Function main()
        // копируем документы прихода  из одной базы в другую
        Private ssc
        Private aSet, aSetKey
        // путь к другой БД
        Private Cpath2, aMdoc, aMdocM
        aSet:=SaveSet()
        aSetKey:=SaveSetKey()
        DBPUSH()
        сPath2:="f:\b4_1201_1\dbaseold\zapas\"
        netuse("mdoc2",cPath2+"mdoс.dbf")
        netuse("mdocm2",cPath2+"mdoсm.dbf")
        aMdoс:={}
        aMdocM:={}
        aMdoc:=mdoc->(Scatter())
    // пометим документ пришедший из другой базы....
         aMdoc[35]:="?"
        mdocm->(ordsetfocus('MDOCM'))
        mdocm->(setscope())
       ssс:="UPPER(MDOС->(SCLAD+VID+TYPE+CODEDOC+NUMDOC+DTOS(DATE)))"
      mdocm->(setscope(SSC,Upper(MDOC->(SCLAD+VID+Type+CODEDOC+NUMDOC+DtoS(Date)))))
        mdocm->(DbGoTop())
        mdoc2->(addrec())
        mdoc2->(Gather(aMdoc))
        mdoc2->(f_dbunlock())
        Do While mdocm->(!EoF())
           aMdocm:=mdocm->(Scatter())
           mdocm2->(addrec())
           mdocm2->(Gather(aMdocm))
           mdocm2->(f_dbunlock())
           mdocm->(DbSkip())
        EndDo
        mdocm->(setscope())
        DBPOP()
        RestSet(aSet)
        RestSetKey(aSetKey)
        Return
    ? а как передавать параметры из формы вызова спец.функции? т.е. как его потом получить в обработке.

  4. #4
    Клерк
    Регистрация
    08.12.2006
    Адрес
    Самара
    Сообщений
    201
    Параметры передаются в программу пользователя как элементы специального массива с фиксированным именем aPars. Количество и тип параметров может быть произвольным.
    Очень наглядно можно ознакомиться с работой этого механизма в режиме отладчика.
    Много примеров есть в справочнике

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы можете создавать новые темы
  • Вы можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •