Как получить префикс от Browse

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

finsoftrz писал(а): 27 Апрель 2021, 11:17 Вместо multi поставьте REQ(BrowseBox(Clarion))
----------------------
Спасибо! Теперь переменная %ActiveTemplateParentInstance возвращает правильный префикс! МОЛОДЕЦ!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Как получить префикс от Browse

Сообщение finsoftrz »

Хорошо так меня приложили. Или это про себя? :-)
C6/C11, ШВС, tps/btrieve.
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

Это от души! Спасибо. На самом деле на форумах мало кто кому реально может помочь. В основном все стебаются.
Я сюда заходил года 2 назад, сказал что пишу на С6.3, так половина стала ржать, а вторая половина показывать какие они умные относительно меня. А я пишу себе потихоньку (для самого себя любимого) и пишу..... трудновато (я на английском не читаю) Хелпов почитать не могу..... но ничего не смертельно, еще раз Спасибо! Это моя первая темплатка и работает.....удивительно и приятно!
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

А у вас нет случайно темплатки по Копированию записи. Хочу написать такую кнопку, но один товарищ сказал, что это ОЧЕНЬ сложно!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Как получить префикс от Browse

Сообщение finsoftrz »

На этом форуме есть достаточно квалифицированные ребята, которые реально помогают. Постебаться все любят, но по доброму. :-)

Без копирования никакое приложение не обходится. Бывают разные варианты. Простое копирование отдельной записи, копирование набора связанных записей (например, документа с многострочной частью), копирование одного набора записей в другой (в просторечье ввод на основании). Разумеется, все это реализуется на уровне контрол шаблонов. У меня есть все эти варианты, но они заточены на использование стандартной кнопки на тулбаре, общей для всех броузов во всех окнах. Точнее двух кнопок, копирование и ввод на основании.
C6/C11, ШВС, tps/btrieve.
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

Простое копирование отдельной записи
Обычно ручками я пишу так:
На кнопке, в Spr_процедуре:
! End of "Обработка события в поле до сгенерированного кода"
DO SyncWindow
! Start of "Обработка события в поле после сгенерированного кода"
! [Priority 4000]

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

     [b]  !Копирование записи (Начало-F5) ==========================================
          GET(Plan,Pla:Key_000)           !Зачитаем запись
          CopyPla = Pla:Record            !Запомним запись в Глобальную переменную: CopyPla Like(Pla:Record),PRE(CPLA)
          POST(EVENT:Accepted,?Insert)    !Вызвать процедуру -=Insert=-
        !=========================================================================[/b] 
! End of "Обработка события в поле после сгенерированного кода"

в Upd_процедуре:
! End of "После чтения статуса окна из INI-файла"
! Start of "После того, как окно открыто"
! [Priority 4000]

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

 [b] !------- Данная процедура копирует запись (Продолжение-F5) ------------------
           if CPla:id <> 0 then           ! Если  переменная для копирования не пуста,
              id# = Pla:id                ! тогда запомним код вновь созданной записи
              Pla:Record = CopyPla        ! присвоим новой записи значение старой
              Pla:id = id#                ! вернем   новой записи ее код
              Clear(CopyPla)              ! очистим Глобальную переменную для копирования
  
           !очистим необходимые поля: ---------------------------------------
             Clear(PLA:Name2)
             Clear(PLA:Ed_izm)
             Clear(PLA:Prim)
           end
  !----------------------------------------------------------------------------[/b]
! End of "После того, как окно открыто"
! Start of "Подготовка кодов завершения окна"
! [Priority 3500]
Последний раз редактировалось mpn2 28 Апрель 2021, 13:07, всего редактировалось 1 раз.
Аватара пользователя
SergioRaguzini
Активист
Сообщения: 130
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край

Как получить префикс от Browse

Сообщение SergioRaguzini »

mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1164
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Как получить префикс от Browse

Сообщение RaFaeL »

SergioRaguzini писал(а): 27 Апрель 2021, 16:14 mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
Потом надо что-то поправить и править в 100500 местах?
Нет, проще один раз написать шаблон
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

SergioRaguzini писал(а): 27 Апрель 2021, 16:14 например, поменять BRW5 на BRW8 проще чем создавать для этого template
---------------
Темплатка создается для того, чтобы создать ПРОЦЕДУРУ, которая меняет позицию записи в файле по определенному ключу сортировки в определенном ограниченном диапазоне, а диапазон задает (как правило) предпоследнее поле данного ключа. А после изменения записи, список надо передернуть. Но в одном Brоwse может быть и два и три файла и поэтому надо знать префиксы, т.к. надо знать какой список надо передернуть! Исходный текст темплатки см. выше.
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

RaFaeL писал(а): 27 Апрель 2021, 16:30 Нет, проще один раз написать шаблон
Именно так !!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1543
Зарегистрирован: 25 Март 2009, 21:55

Как получить префикс от Browse

Сообщение gopstop2007 »

mpn2 писал(а): 27 Апрель 2021, 14:24 ...В основном все стебаются. Я сюда заходил года 2 назад, сказал что пишу на С6.3, так половина стала ржать, а вторая половина показывать какие они умные относительно меня. ...
На плюйте на условности, идите к своей цели, все живые люди, сегодня смеются, а завтра помогают. Я когда начинал сам над собой смеялся и до сих пор смеюсь :D
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Как получить префикс от Browse

Сообщение finsoftrz »

Причем, надо отметить, смех продлевает жизнь. Это даже Игорь знает. :-)
C6/C11, ШВС, tps/btrieve.
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

gopstop2007 писал(а): 27 Апрель 2021, 19:07 На плюйте на условности, идите к своей цели
------------------
Хорошо буду идти! Спасибо за поддержку!
PavelNK
Старожил
Сообщения: 234
Зарегистрирован: 15 Март 2011, 8:02

Как получить префикс от Browse

Сообщение PavelNK »

RaFaeL писал(а): 27 Апрель 2021, 16:30
SergioRaguzini писал(а): 27 Апрель 2021, 16:14 mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
Потом надо что-то поправить и править в 100500 местах?
Нет, проще один раз написать шаблон
Неправда! Не нужно будет даже в 2-х местах править, а не то что в 100500. Все зависит от того как писать.
mpn2
Посетитель
Сообщения: 32
Зарегистрирован: 24 Февраль 2015, 17:15

Как получить префикс от Browse

Сообщение mpn2 »

PavelNK писал(а): 27 Апрель 2021, 22:17 Неправда! Не нужно будет даже в 2-х местах править, а не то что в 100500. Все зависит от того как писать.
--------------------------
У меня в одной из программ 23 файла и в 8-ми из них я ручками пишу процедуру: "Изменение позиции записи", т.е. у меня ВОСЕМЬ однотипных процедур, в которых меняется только имя файла, префиксы и ключи. Спрашивается нахнена это все писать каждый раз?
Более того: Иногда данная процедура нужна через год или через два и просто тупо забываешь что писал и как, и начинаешь заново вникать в код процедуры.... нахрена если можно написать темплатку?

Вот текст процедуры:
Попробуйте написать короче, буду приятно удивлен!!!

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

Move::KS2  PROCEDURE (SIGNED direction)
Saved::KS2 LIKE(KS2:Record), PRE(SAV_)


    CODE

    ! direction: -1 = вверх, 1 = вниз, 0 = новая сортировка, а от всего остального отказываемся.
    IF direction = 0 then message('Позиции будут переопределены по порядку')
    elsif ABS(direction) <> 1 then halt(0, 'Неожиданное значение параметра direction: ' & direction & ', я так не могу').
    !========================= Начинаем процедуру =======================================================================================
    !====================================================================================================================================
    STREAM(KS2)                                        !Выделяем оперативную память
    Get(KS2,KS2:Key_Plan_Per_Poz)                                      !Зачитываем запись на которой стоим
    Saved::KS2 = KS2:Record                    !Сохраняем запись
    Old# = KS2:Poz                                     !и запоминаем ee номер позиции

  IF DIRECTION = 0                                                                                           !Позиции по порядку

     i# = 0                                                  !Счетчик в НОЛЬ
     CLEAR(KS2:Record)                               !Чистим запись
     KS2:Plan = SAV_:Plan
     KS2:Period = SAV_:Period
     SET(KS2:Key_Plan_Per_Poz,KS2:Key_Plan_Per_Poz)                                          !Ключ и сортировка по ключу
    LOOP
     NEXT(KS2)                                             !Зачитываем записи от НУЛЯ ВНИЗ!!!
       IF ErrorCode() |
          OR SAV_:Plan <> KS2:Plan |
          OR SAV_:Period <> KS2:Period |
       THEN BREAK.
     i# -=1                                                  !Счетчик ОТРИЦАТЕЛЬНЫХ чисел
     KS2:Poz = i#                                          !присвоим
     PUT(KS2)                                              !пишим
     IF ERRORCODE() THEN Stop(ErrorCode()).
    End
    !--------------------------------------------------------------------------------------------

     i# = 0                                                  !Второй цикл, Счетчик в НОЛЬ
     CLEAR(KS2:Record)                               !Чистим запись
     KS2:Plan = SAV_:Plan
     KS2:Period = SAV_:Period
     SET(KS2:Key_Plan_Per_Poz,KS2:Key_Plan_Per_Poz)                                          !Ключ и сортировка по ключу
    LOOP
     PREVIOUS(KS2)                                         !Зачитываем записи от НУЛЯ (SmeM:Poz = 0) ВВЕРХ!!!
       IF ErrorCode() |
          OR SAV_:Plan <> KS2:Plan |
          OR SAV_:Period <> KS2:Period |
       THEN BREAK.
     i# +=1                                                  !Счетчик ПОЛОЖИТЕЛЬНЫЙ от "1"
     KS2:Poz = i#                                          !присвоим
     PUT(KS2)                                              !пишим
     IF ERRORCODE() THEN Stop(ErrorCode()).
    End
    !===============================================================================================
    Message('Обработано записей= '& i#)


  ELSE

    new# = old# + direction    !Новая позиция записи (которая будет)
    KS2:Poz = new#
    SET(KS2:Key_Plan_Per_Poz, KS2:Key_Plan_Per_Poz)
    !--------------------- Зачитываем следующую запись -------------------------
    CASE direction
    OF -1
        previous(KS2)
    OF  1
        next(KS2)
    END

    !====================== ПРОВЕРКА ДИАПАЗОНА ПОЗИЦИИ =============================
    IF ErrorCode() |
       OR SAV_:Plan <> KS2:Plan |
       OR SAV_:Period <> KS2:Period |
        THEN
        KS2:Record = Saved::KS2
        GET(KS2, KS2:Key_Plan_Per_Poz)
        RETURN
     END
    !==============================================================================

      IF KS2:Poz <> new#
         ! есть свободное место, просто двинуть
         KS2:Poz = old#
         get(KS2, KS2:Key_Plan_Per_Poz)
         KS2:Poz = new#
         put(KS2)
      ELSE
         ! поменять местами две записи
         KS2:Poz = old#
         get(KS2, KS2:Key_Plan_Per_Poz)
         KS2:Poz = -100
         put(KS2)

         KS2:Poz = new#
         get(KS2, KS2:Key_Plan_Per_Poz)
         KS2:Poz = old#
         put(KS2)

         KS2:Poz = -100
         get(KS2, KS2:Key_Plan_Per_Poz)
         KS2:Poz = new#
         put(KS2)
      END
  END
  FLUSH(KS2)  !освобождаем оперативную память =========================================================
! [Priority 8500]

! End of "Локальные процедуры"
Последний раз редактировалось mpn2 28 Апрель 2021, 13:05, всего редактировалось 1 раз.
Ответить