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