Страница 1 из 4

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

Добавлено: 25 Апрель 2021, 21:18
mpn2
Всем знатокам! Здравствуйте!
Я пишу процедурку на С6.3 (создаю темплатку). Все уже почти работает, но столкнулся с проблемой, которую решить не могу.
Мне надо получить префикс Браузера.
Пока список в окне один - проблем нет, т.к. префикс первого и единственного списка ?List всегда BRW1:
А вот префикс второго ?List:2 уже может быт и BRW3:: и BRW5:: и ....... т.д.

Пишу стандартный код для данного случая:
#ATSTART
#DECLARE(%InstancePrefix)
#SET(%InstancePrefix,'BRW' & %ActiveTemplateInstance & ':')
#ENDAT

Но на выходе для первого списка вместо BRW1: - получаю BRW8:
А для второго списка вместо BRW5: - получаю BRW9:
------------------------------
Помогите горю, зарание спасибо!

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

Добавлено: 25 Апрель 2021, 22:02
ingasoftplus
префикс первого и единственного списка ?List всегда BRW1
а откуда такое утверждение??? Циферька зависит именно от %ActiveTemplateInstance, который содержит номера всех процедурных шаблонов в данной процедуре. Если у вас уже добавлены другие процедурные шаблоны то и нумерация будет идти от них...

вот как создается префикс для броуза в станд шаблонах:
#CALL(%SetClassDefaults, 'Default', 'BRW'&%ActiveTemplateInstance, %BrowserType)

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

Добавлено: 25 Апрель 2021, 23:05
mpn2
вот как создается префикс для броуза в станд шаблонах:
#CALL(%SetClassDefaults, 'Default', 'BRW'&%ActiveTemplateInstance, %BrowserType)
----------------------
Хорошо! Префикс создался (в стандартном шаблоне)
Для ?List он у меня создался как BRW1
Для ?List:2 он у меня создался как BRW5

Как мне получить: %ActiveTemplateInstance = "1" для ?List
и Как мне получить: %ActiveTemplateInstance = "5" для ?List:2

В конечном итоге мне надо получить (написать) вот так:

#ATSTART
#DECLARE(%Prefix)
#SET(%Prefix,'BRW' & %ActiveTemplateInstance & ':')
#ENDAT
!====================================
%Prefix:LocateMode=LocateOnEdit
DO %Prefix:LocateRecord
DO RefreshWindow
SELECT(%ListControl)

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

Добавлено: 25 Апрель 2021, 23:59
kreator
А можно вопрос? Зачем Вам именно "BRWXXX"? Лист без шаблона броуза не рассматривается?
Или Вы пишете шаблон, у которого родитель будет шаблон броуза? Тогда надо посмотреть как сделано в шаблоне "ViewButton" или "UpdateButtons".

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

Добавлено: 26 Апрель 2021, 9:00
mpn2
Или Вы пишете шаблон, у которого родитель будет шаблон броуза?
Именно так:
Родительский шаблон - это шаблон Синявского для просмотра и редактирования файлов.
Я просматриваю два файла и хочу двигать записи в каждом файле вниз и вверх, т.е. менять позицию записи.
Для этого я под каждый файл "ручками" писал процедуру: "изменение позиции записи", мне это надоело и я решил написать темплатку, которая данную процедуру будет писать "сама". Я на каждый файл (список) добавляю нужные кнопки (мои кнопки) и их нажатие приводит мою процедуру в действие.
Но после того как запись встает на новую позицию мне надо передернуть (обновить) список.
Первый список (?list) я передергиваю вот так:
BRW1::LocateMode=LocateOnEdit
DO BRW1::LocateRecord
DO RefreshWindow
SELECT(?List)
Второй список (?list:2) я передергиваю вот так:
BRW5::LocateMode=LocateOnEdit
DO BRW5::LocateRecord
DO RefreshWindow
SELECT(?List:2)
!-------------------------------------------
Но чтобы это написать в Моей темплатке мне надо поиметь префиксы "1" и "5", которые соответствуют первому и второму списку, которые получились в Browse от стандартного шаблона Синявского.

Я думал что префиксы можно получить вот так:
#SET(%InstancePrefix,'BRW' & %ActiveTemplateInstance & ':')
Но на выходе для первого списка вместо BRW1: - получаю BRW8:
А для второго списка вместо BRW5: - получаю BRW9:
ingasoftplus писал(а): 25 Апрель 2021, 22:02 Циферька зависит именно от %ActiveTemplateInstance, который содержит номера всех процедурных шаблонов в данной процедуре.
-----------------
Я вас понял! Скорей всего я получаю номера моих шаблонов, которые я сам и вставил в Browse.
Тогда сформулирую вопрос более грамотно:
Как получить номер "процедурного шаблона" для соответствующего списка, файла или очереди который получился в "данной процедуре".

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

Добавлено: 26 Апрель 2021, 9:57
finsoftrz
Если нужно получить номер родительского шаблона, то есть стандартный символ %ActiveTemplateParentInstance.
Например:
#SET(%FiltrPrefix,'Filtr'&%ActiveTemplateParentInstance)
Ну а внутри дочернего шаблона доступны символы, объявленные в родительском шаблоне.
Например, в дочернем шаблоне обращаемся к символу родительского шаблона:
DO %InstancePrefix:LocateRecord

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

Добавлено: 27 Апрель 2021, 9:35
mpn2
finsoftrz писал(а): 26 Апрель 2021, 9:57 Например: #SET(%FiltrPrefix,'Filtr'&%ActiveTemplateParentInstance)
Ну что ж, продолжим:
Создал стандартный Броузер Синявского (С6.3) "для просмотра и редактирования файлов" с двумя файлами:
Получился ?List ,которому соответствует префикс BRW1:
и Получился ?List:2 ,которому соответствует префикс BRW5:

Пишу вот так:
#PROMPT('Список для обработки (?List)', FROM(%Control, %ControlType = 'LIST')), %ListControl, REQ
Выпадает список Списков и я выбираю или ?List или ?List:2
...... тут все "ОК"

Далее пишу вот так:
#DECLARE(%InstancePrefix)
#SET(%InstancePrefix,'BRW' & %ActiveTemplateInstance & ':')
На выходе: %InstancePrefix = BRW7:

Пишу вот так:
#SET(%InstancePrefix,'BRW' & %ActiveTemplateParentInstance & ':')
На выходе: %InstancePrefix = BRW0:
-------------------------------------------------
Ну и как мне получить BRW1: для ?List
Ну и как мне получить BRW5: для ?List:2

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

Добавлено: 27 Апрель 2021, 9:49
finsoftrz
Надо, чтобы броуз был родительским шаблоном. А Вы пытаетесь его в промпте выбрать.
#CONTROL(BrowseFiltr,'Фильтр для BrowseBox'),DESCRIPTION('Фильтр в таблице BrowseBox для ' & %Primary),REQ(BrowseBox(Clarion))

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

Добавлено: 27 Апрель 2021, 9:52
finsoftrz
Мы хоть про контрол шаблон говорим?

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

Добавлено: 27 Апрель 2021, 9:56
finsoftrz
Если не про контрол, то надо курить #CONTEXT.

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

Добавлено: 27 Апрель 2021, 10:35
finsoftrz
Сорри, не вник. Вам нужен контрол шаблон с 2 кнопками перемещения записей вверх и вниз. У меня есть такой, он достаточно навороченный. Цеплять надо к броузу через REQ, как я написал.

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

Добавлено: 27 Апрель 2021, 10:52
mpn2
finsoftrz писал(а): 27 Апрель 2021, 9:52 Мы хоть про контрол шаблон говорим?
У меня начало вот такое:
#!CONTROL(New_Position_mpn, 'Смена позиции записи'), WINDOW, MULTI
#!===================================================================================================
#PROMPT('Список для обработки (?List)', FROM(%Control, %ControlType = 'LIST')), %ListControl, REQ
#!--------------------------------------------------------------
#PROMPT('File Name:', FILE), %PosFile, REQ
#!--------------------------------------------------------------
#PROMPT('Ключ сортирови позиции:', KEY), %PosKey, REQ
#!--------------------------------------------------------------
#ENABLE(%PosKey)
#PROMPT('Поле ключа с позицией:', COMPONENT(%PosKey)), %PosField, REQ
#ENDENABLE
#!----------------Временно как выход из ситуации --------------------------------------------
#PROMPT('BRW_Name:', @s4), %BRW, default('BRW1')
#!===================================================================================================
#ATSTART
#!-----------------------Не работает !!! --------------------------------------
#!DECLARE(%InstancePrefix)
#!SET(%InstancePrefix,'BRW' & %ActiveTemplateInstance & ':')
#!---------------------------------------------------------------------------------

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

Добавлено: 27 Апрель 2021, 11:04
mpn2
finsoftrz писал(а): 27 Апрель 2021, 10:35 Сорри, не вник. Вам нужен контрол шаблон с 2 кнопками перемещения записей вверх и вниз. У меня есть такой, он достаточно навороченный. Цеплять надо к броузу через REQ, как я написал.
------------------
У меня тоже получился навороченный. У меня три кнопки. Третья кнопка перехреначивает все позиции по порядку (это когда в позициях есть "дырки")
Может я вам весь текст сброшу? Я не профи я самоучка и многого просто не знаю.... я пишу на основе старых разработок, которые уже были написаны кем то до меня.

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

Добавлено: 27 Апрель 2021, 11:17
finsoftrz
Не, не, у меня своих дел хватает. Вместо multi поставьте REQ(BrowseBox(Clarion)), а первый промпт не нужен.

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

Добавлено: 27 Апрель 2021, 11:21
mpn2
Вот мое творчество, вдруг скучно будет когда нибудь!:
Все хорошо работает, но если найдете ошибки буду рад за совет.
*** - маленькая тонкость: Поле "Позиция сортировки" не любит "BYTE", так как при работе процедуры получаются отрицательные значения.
Поэтому поле "Позиция сортировки" должно быть "LONG"