Всё об интерфейсе L_MCU :: KatMc

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Всё об интерфейсе L_MCU :: KatMc

Сообщение Zver »

Уважаемые форумчане, не могли бы поделиться параметрами вызова интерфейса.
В частности хочу через него осуществлять множественный выбор МЦ через таблицу Pick.
Программист-самоучка
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение m0p3e »

Parameters
pMC, // KatMC.NRec МЦ по умолчанию
pMask // MaskMC.NRec Шаблона МЦ для фильтра
;

bounds ByMaskMC =
pMask == KatMC.cMaskMC
ordered by TableOrder
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение RAJAH »

Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Zver »

RAJAH писал(а):
Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
А можно описание параметров этого интерфейса?
Программист-самоучка
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение m0p3e »

parameters
pMC; // -12345, если не нужно запрашивать кол-во
// -12346, то же + пометить все по умолчанию
// -12347 без кол-ва, без удаления Pick
// -12348 с инвертированием Pick-а
// -12349 без кол-ва, выбирать только МЦ из маркера 'GetSomeParty_NRecSaldoMC'
// -12350 подсветка серым МЦ не являющиеся комплектом
// Возвращает :
// -111, если Pick инвертирован (только когда передавался параметр -12348)
// 222 - во всех остальных случаях
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Den »

Zver писал(а):
RAJAH писал(а):
Zver писал(а):осуществлять множественный выбор МЦ через таблицу Pick.
L_MCU::GETSOMEMC
А можно описание параметров этого интерфейса?
.\exe\galdoc\l_mcu.chm
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Zver »

Уже смотрел документацию. Может что-то не так делаю, или неправильная документация, но в разделе "Объекты" вижу только то, что есть объект GETSOMEMC, но более подробной информации нет.

Может у меня неполная справка?

На всякий случай, L_MCU.chm у меня от 26.12.2012, размер 312кб.
Программист-самоучка
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение 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
"
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Zver »

Den, огромное спасибо :)
Программист-самоучка
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Кое-что об интерфейсе L_MCU :: KatMc

Сообщение 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:
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Den »

Быстрее всего это какой то баг Alter конкретного.
Т.е. собранный ваш Alter-наследник katmc в каком-то месте до Cminit почему то грузит экземпляр VipInterface Attribute.
Вы просто явно не весь код Alter привели. Рискну предположить, что в нем есть обработчик где-то cmPositionChanged, оный дергает RefAttr.reDraw(coKatmc, Katmc.nRec);
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение Den »

К примеру, прикладник может в коде загрузчика Cminit "кинуть" ProcessCommand и выполнение уйдет в другую команду сразу (где может быть упоминание метода какого нить RefAttr - и все. переменная проинициализируется.). Почти ,наверняка. что то и происходит подобное. Чтобы ответить точно, нужно сделать sil протокол и изучить его (чтобы понять что именно приводит к этому).
Пока, как выход, пытаться делать if NullVipRef(refAttr).... до директивы наследования кода родителя (inherited :: HandleEvent(cmInit))
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение edward_K »

В примере без {}
if NullvipRef (refAttr)
LoadVipInterface (refAttr);
BindEmbeddedInterface(brExAttr, refAttr);
объект лучше объявить как
var refAttr : Attribute New;
в этом случае и LoadVipInterface не нужен по идее.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение zna »

Den писал(а):Быстрее всего это какой то баг Alter конкретного.
.. Рискну предположить, что в нем есть обработчик где-то cmPositionChanged, оный дергает RefAttr.reDraw(coKatmc, Katmc.nRec);
Да, действительно, есть такой обработчик.. Эта проблема решена.. Событие cmPositionChanged создало экземпляр до cmInit :grin:
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Всё об интерфейсе L_MCU :: KatMc

Сообщение 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 :-(
Ответить