Страница 1 из 2
					
				Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:21
				 Zver
				Уважаемые форумчане, не могли бы поделиться параметрами вызова интерфейса.
В частности хочу через него осуществлять множественный выбор МЦ через таблицу Pick.
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:26
				 m0p3e
				Parameters
  pMC,         // KatMC.NRec  МЦ по умолчанию
  pMask        // MaskMC.NRec Шаблона МЦ для фильтра
;
bounds ByMaskMC    =
                  pMask == KatMC.cMaskMC
                  ordered by TableOrder
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:34
				 RAJAH
				Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
 
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:35
				 Zver
				RAJAH писал(а):Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
 
А можно описание параметров этого интерфейса?
 
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:40
				 m0p3e
				parameters
  pMC;  // -12345, если не нужно запрашивать кол-во
        // -12346, то же + пометить все по умолчанию
        // -12347  без кол-ва, без удаления Pick
        // -12348  с инвертированием Pick-а
        // -12349  без кол-ва, выбирать только МЦ из маркера 'GetSomeParty_NRecSaldoMC'
        // -12350  подсветка серым МЦ не являющиеся комплектом
        //     Возвращает   :
        // -111, если Pick инвертирован (только когда передавался параметр -12348)
        // 222 - во всех остальных случаях
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 17:42
				 Den
				Zver писал(а):RAJAH писал(а):Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
 
А можно описание параметров этого интерфейса?
 
.\exe\galdoc\l_mcu.chm
 
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 18:04
				 Zver
				Уже смотрел документацию. Может что-то не так делаю, или неправильная документация, но в разделе "Объекты" вижу только то, что есть объект GETSOMEMC, но более подробной информации нет. 
Может у меня неполная справка?
На всякий случай, L_MCU.chm у меня от 26.12.2012, размер 312кб.
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 18:17
				 Den
				есть есть там все в chm от 26/12/2012 
"
Interface L_MCU::GetSomeMC
Назначение: Выбор материальных ценностей Параметры: pMC: -12345, если не нужно запрашивать кол-во -12346, то же + пометить все по умолчанию -12347 без кол-ва, без удаления Pick -12348 с инвертированием Pick-а -12349 без кол-ва, выбирать только МЦ из маркера 'GetSomeParty_NRecSaldoMC' -12350 подсветка серым МЦ не являющиеся комплектом Возвращает : -111, если Pick инвертирован (только когда передавался параметр -12348) 222 - во всех остальных случаях 
Параметры
pMC : Comp 
Окна
window GetSomeMC 
Главное окно интерфейса 
window wSelectNastr 
Окно настройки выбора МЦ 
Информация
Версия : Компонент L_MCU 8.10.87.0
"
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 19 фев 2014, 18:35
				 Zver
				Den, огромное спасибо 

 
			 
			
					
				Кое-что об интерфейсе L_MCU :: KatMc
				Добавлено: 09 янв 2020, 14:46
				 zna
				Решил встроить в browse этого интерфейса окно редактирования внешних аттрибутов с помощью сервиса Attribu_.vih
Код: Выделить всё
...
#include Attribu_.vih 
alter interface KatMc;
var  ExtAttr: iExtAttr;
    refAttr: Attribute;
Embedded brExAttr interface;      
  show at (,25,,);
end;
HandleEvent 
cmInit: {
  ...
 if NullVipRef(refAttr)  //Здесь получаю false- уже есть экземпляр refAttr что-ли? 
 {
    LoadVipInterface (refAttr);
    BindEmbeddedInterface(brExAttr, refAttr);
    RefAttr.reDraw(word(1411), katmc.nRec) 
...  
 
Функция NullVipRef(refAttr) возвращает false- получается, что есть уже загруженный экземпляр? Как его обойти?
Если попытаться убрать 
 if NullVipRef(refAttr) , то на строке 
BindEmbeddedInterface(brExAttr, refAttr); получаю runtime и падение 

 
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 10 янв 2020, 02:27
				 Den
				Быстрее всего это какой то баг Alter конкретного. 
Т.е. собранный ваш Alter-наследник katmc в каком-то месте до Cminit почему то грузит экземпляр VipInterface Attribute.
Вы просто явно не весь код Alter привели. Рискну предположить, что в нем есть обработчик где-то cmPositionChanged, оный дергает RefAttr.reDraw(coKatmc, Katmc.nRec);
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 10 янв 2020, 12:48
				 Den
				К примеру, прикладник может в коде загрузчика Cminit "кинуть"  ProcessCommand и выполнение уйдет в другую команду сразу (где может быть упоминание метода какого нить RefAttr - и все. переменная проинициализируется.). Почти ,наверняка. что то и происходит подобное. Чтобы ответить точно, нужно сделать sil протокол и изучить его (чтобы понять что именно приводит к этому).
Пока, как выход, пытаться делать if NullVipRef(refAttr).... до директивы наследования кода родителя (inherited :: HandleEvent(cmInit))
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 13 янв 2020, 04:05
				 edward_K
				В примере без {}
   if NullvipRef (refAttr)
     LoadVipInterface (refAttr);
   BindEmbeddedInterface(brExAttr, refAttr);
объект лучше объявить как   
var refAttr : Attribute New;
в этом случае и LoadVipInterface не нужен по идее.
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 13 янв 2020, 09:46
				 zna
				Den писал(а):Быстрее всего это какой то баг Alter конкретного. 
.. Рискну предположить, что в нем есть обработчик где-то cmPositionChanged, оный дергает RefAttr.reDraw(coKatmc, Katmc.nRec);
Да, действительно, есть такой обработчик.. Эта проблема решена.. Событие cmPositionChanged создало экземпляр до cmInit  

 
			 
			
					
				Re: Всё об интерфейсе L_MCU :: KatMc
				Добавлено: 13 янв 2020, 11:33
				 zna
				Осталась проблема с BindEmbeddedInterface, проверил аргументы- вроде нормально. Код alter сократил до минимума, вот он в полном виде
Код: Выделить всё
#statusline "statgal"
#include galnet.inc
end;
#include glovars.inc
#component "L_MCU"
#include Attribu_.vih
alter interface KatMc;
var l0: longint;
    cur_obj, cont_inf, aObjType: string;
    refAttr: Attribute;// noauto;
Embedded brExAttr interface;
  show at (,25,,);
end;
HandleEvent  //События главного окна
cmInit: {
  if inherited::handleEvent(cmInit) <> heOk exit;
  if (cfsSetCurrentContainer(cfsGetCurrentContainerSelf) <> cfOk) then
     {Message(''#3'Ошибка установки контейнера', Error); Exit;}
  if cfsGetObjInfo('sclongname', cur_obj, l0, cont_inf, aObjType) = cfOk
    and cfsDestroyObject(l0) = cfOk {}  //Освобождаем место для встроенного
  else {
     message('destroying of the sclongname is bad');
     exit;
  }
 _try {
      if NullVipRef(refAttr) {
        LoadVipInterface(refAttr);
        message('Загружен интерфейс ' + VipFullName(refAttr)+', brExAttr = '+string(brExAttr)); //Нормально
        BindEmbeddedInterface(brExAttr, refAttr);           //Падение
        message('2');
        RefAttr.reDraw(word(1411), katmc.nRec)
      } else message('Интерфейс refAttr уже инициализирован..');
  }
 _except
   on ExPanelNotEmbedded: message('ExPanelNotEmbedded..');
   on ExObjIfcNoLoad: message('ExObjIfcNoLoad..');
   on ExObjIfcBadVar: message('ExObjIfcBadVar');
}
//cmPositionChanged: if not NullVipRef(refAttr) refAttr.reDraw(word(1411), katmc.nRec);
//cmDone: FreeVipInterface (refAttr);
end;
end.          
Компиляция проходит без каких-либо сообщений, но при выполнении получаю сообжение
Загружен интерфейс C_EXTCLASS::ATTRIBUTE, brExAttr = -65533
 за которым runtime и вылет.. Даже _try не помогает
Всё сделано по инструкции из  Attribu_.vih 
