----------------------
Спасибо! Теперь переменная %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
На плюйте на условности, идите к своей цели, все живые люди, сегодня смеются, а завтра помогают. Я когда начинал сам над собой смеялся и до сих пор смеюсь
Неправда! Не нужно будет даже в 2-х местах править, а не то что в 100500. Все зависит от того как писать.RaFaeL писал(а): ↑27 Апрель 2021, 16:30Потом надо что-то поправить и править в 100500 местах?SergioRaguzini писал(а): ↑27 Апрель 2021, 16:14 mpn2, а не проще ли было один раз написать пр-ру и потом ее копировать, меняя что нужно, ведь, например, поменять BRW5 на BRW8 проще чем создавать для этого template
Нет, проще один раз написать шаблон
--------------------------
Код: Выделить всё
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 "Локальные процедуры"