Страница 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 и падение :sad:

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 :grin:

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 :-(