----------------------
Спасибо! Теперь переменная %ActiveTemplateParentInstance возвращает правильный префикс! МОЛОДЕЦ!
Модератор: Дед Пахом
----------------------
Обычно ручками я пишу так:Простое копирование отдельной записи
Код: Выделить всё
     [b]  !Копирование записи (Начало-F5) ==========================================
          GET(Plan,Pla:Key_000)           !Зачитаем запись
          CopyPla = Pla:Record            !Запомним запись в Глобальную переменную: CopyPla Like(Pla:Record),PRE(CPLA)
          POST(EVENT:Accepted,?Insert)    !Вызвать процедуру -=Insert=-
        !=========================================================================[/b] Код: Выделить всё
 [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]Потом надо что-то поправить и править в 100500 местах?SergioRaguzini писал(а): 27 Апрель 2021, 16:14 mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
---------------SergioRaguzini писал(а): 27 Апрель 2021, 16:14 например, поменять BRW5 на BRW8 проще чем создавать для этого template
На плюйте на условности, идите к своей цели, все живые люди, сегодня смеются, а завтра помогают. Я когда начинал сам над собой смеялся и до сих пор смеюсьmpn2 писал(а): 27 Апрель 2021, 14:24 ...В основном все стебаются. Я сюда заходил года 2 назад, сказал что пишу на С6.3, так половина стала ржать, а вторая половина показывать какие они умные относительно меня. ...
Неправда! Не нужно будет даже в 2-х местах править, а не то что в 100500. Все зависит от того как писать.RaFaeL писал(а): 27 Апрель 2021, 16:30Потом надо что-то поправить и править в 100500 местах?SergioRaguzini писал(а): 27 Апрель 2021, 16:14 mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
Нет, проще один раз написать шаблон
--------------------------PavelNK писал(а): 27 Апрель 2021, 22:17 Неправда! Не нужно будет даже в 2-х местах править, а не то что в 100500. Все зависит от того как писать.
Код: Выделить всё
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 "Локальные процедуры"