Страница 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"