Страница 2 из 6
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 22 мар 2012, 15:41
savov
Вопрос решен ( в частном случае

.
Например, уменьшаем размеры броузера и в образовавшееся пространство лепим свой скрин с кнопкой.
Код
Код: Выделить всё
HandleEvent
cmInit:
{
inherited::handleEvent(cmInit);
cfsSetCurrentContainer('L_ADVREP::DOGURGENT');
cfsSetProp('BRURGENTM', cfpRectB_Y ,17); // было 20
cfsCreateObject('screen', 'L_ADVREP::DOGURGENT', 'scrPrint', FALSE, scrPrint); // создали скрин с нужными размерами
cfsSetProp ( scrPrint, cfpRectA_X, 1 );
cfsSetProp ( scrPrint, cfpRectA_Y, 18 );
cfsSetProp ( scrPrint, cfpRectB_X, 115 );
cfsSetProp ( scrPrint, cfpRectB_Y, 19);
cfsSetProp ( scrPrint, cfpVisible,TRUE);
cfsCreateObject('button', 'scrPrint', 'ButPrint', FALSE, ButPrint);//создали кнопку
cfsSetProp ( ButPrint, cfpOrigin_X, 17 );
cfsSetProp ( ButPrint, cfpOrigin_Y, 10 );
cfsSetProp ( ButPrint, cfpSize_X, 119 );
cfsSetProp ( ButPrint, cfpSize_Y, 29 );
cfsSetProp ( ButPrint, cfpCommand, cmPrintMes );
cfsSetProp ( ButPrint, cfpTitle, 'ПЕЧАТЬ' );
}
cmPrintMes:
{
Message('Print?',0);
}
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 23 мар 2012, 13:12
edward_K
Для броуса проще в локальное меню добавить
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 23 мар 2012, 13:35
savov
edward_K писал(а):Для броуса проще в локальное меню добавить
А как имя этого меню вычислить, не имея в саппорте соответствующего ПО? У меня не получилось через конфигуратор.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 28 мар 2012, 10:13
edward_K
Ну найти то можно. Самый простой способ спросить на этом форуме указав, что вернет getifccurrentfieldname в месте вызова.
Чуть сложнее покопавшись в консоли управления - но придется сравнивать все меню компоненты с тем, что видите в галке.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 24 апр 2012, 12:00
zna
Здравствуйте, коллеги. Пытаюсь и я повторить по данному примеру добавление кнопки в интерфейсе редактирования производственного заказа: "Планирование производства" -> "Документы" -> "Производственные заказы". Делаю в viper'e, подключил ресурс M_MnPlan.
Код: Выделить всё
#component 'm_mnplan'
const
cmMyTestButton = 9987;
end;
alter interface irmnplan;
overload end;
HandleEvent
cmInit: {
inherited::handleevent(cmInit);
Message('cfsGetCurrentContainerSelf = '+cfsGetCurrentContainerSelf);
if (cfsSetCurrentContainer('M_MNPLAN::IRMNPLAN') <> cfOk) { // <- Здесь ошибка!!!
Message(''#3'Ошибка установки корневого контейнера', Error);
Exit;}
var l: longint;
if ( cfsCreateObject('Button', 'IRMNPLAN', 'cmMyTestButton', False, l) = cfErrCreateObjectError) {
Message(''#3'Ошибка создания объекта', Error);
Exit;
}
cfsSetProp(l, cfpOrigin_X, 5);
cfsSetProp(l, cfpOrigin_Y, 110);
cfsSetProp(l, cfpSize_X, 140);
cfsSetProp(l, cfpSize_Y, 25);
cfsSetProp(l, cfpTitle, 'TestButton');
cfsSetProp(l, 'Command', cmMyTestButton);
}
cmMyTestButton: {message('gotcha!');
}
end;
end.
Получаю ошибку:
"Нет такой функции, поля или метода : CFOK IRMNPLAN.vip(стр. 11, поз. 60)"
Похоже, что я что-то недоподключил..
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 24 апр 2012, 12:31
savov
Возможно, что cfOK описана в cfg_all.inc. У меня не было полной версии этого файла, а только часть констант, я обошелся без cfOK ( см. выше в теме).
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 25 апр 2012, 11:33
zna
Да, у меня тоже урезанный cfg_all.inc, в котором нет cfOK (может, кто поделится?). Попробовал добавить screen по идее savov для своего случая. Вот фото подключенных интерфейсов, модифицирую интерфейс M_MNPLAN::IRSPMNPLAN, контейнер, в который вставляется screen- SCRMNPLAN:
Код:
Код: Выделить всё
#component 'm_mnplan'
const
cmMyTestButton = 9987;
end;
alter interface IRSPMNPLAN;
overload end;
HandleEvent
cmInit: {
inherited::handleEvent(cmInit);
cfsSetCurrentContainer('M_MNPLAN::IRSPMNPLAN');
cfsSetProp('SCRMNPLAN', cfpRectB_X ,100); // было 111 < - Здесь ошибка!!
cfsCreateObject('screen', 'M_MNPLAN::IMNPLANEDIT', 'scrPrint', FALSE, scrPrint); // создали скрин с нужными размерами
cfsSetProp ( scrPrint, cfpRectA_X, 101 );
cfsSetProp ( scrPrint, cfpRectA_Y, 1 );
cfsSetProp ( scrPrint, cfpRectB_X, 110 );
cfsSetProp ( scrPrint, cfpRectB_Y, 6);
cfsSetProp ( scrPrint, cfpVisible,TRUE);
cfsCreateObject('button', 'scrPrint', 'ButPrint', FALSE, ButPrint);//создали кнопку
cfsSetProp ( ButPrint, cfpOrigin_X, 17 );
cfsSetProp ( ButPrint, cfpOrigin_Y, 2 );
cfsSetProp ( ButPrint, cfpSize_X, 109 );
cfsSetProp ( ButPrint, cfpSize_Y, 5 );
cfsSetProp ( ButPrint, cfpCommand, cmPrintMes );
cfsSetProp ( ButPrint, cfpTitle, 'ПЕЧАТЬ' );
}
cmMyTestButton: {message('gotcha!');
}
end;
end.
При компиляции получаю:
Нет такой функции, поля или метода : CFPRECTB_X IRMNPLAN.vip(стр. 12, поз. 43)

Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 25 апр 2012, 12:48
Dmitry_Sol
Мне кажется вы допустили при докомпиляции две ошибки:
1. Этот интерфейс вызывается как embedded, поэтому докомпилировать лучше не cmInit, а функцию InitVidWindow
2. При работе с дизайнером интерфейсов лучше пользоваться именами параметров в кавычках.
Вот мой работающий код
Код: Выделить всё
#component "M_MNPLAN"
const
cmButSP1=121129;
end;
alter interface IRSPMNPLAN;
var ButSP1: longint;
overload Function InitVidWindow : Boolean; end;
Function InitVidWindow : Boolean; {
inherited::InitVidWindow;
if PWORKTYPE=17
{
cfsSetCurrentContainer('SCRMNPLAN');
if cfsCreateObject ('button','SCRMNPLAN','ButSP1',true,ButSP1)=0
{
cfsCreateObject ('button','SCRMNPLAN','ButSP1',false,ButSP1)
cfsSetProp('ButSP1','Origin_X',950);
cfsSetProp('ButSP1','Origin_Y',3);
cfsSetProp('ButSP1','Size_X',185);
cfsSetProp('ButSP1','Size_Y',25);
cfsSetProp('ButSP1','Title','Текст кнопки');
cfsSetProp('ButSP1','StatusCtx',sci13Esc);
cfsSetProp('ButSP1','Command',cmButSP1);
}
}
}
handleevent
cmButSP1:{
message('Надавили на батон :-)')
}
end;
end.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 25 апр 2012, 13:28
zna
Что-то скомпилилось, благодарю, Дмитрий. Я только начинаю в это тему вникать..
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 25 апр 2012, 14:54
savov
При компиляции получаю:
Нет такой функции, поля или метода : CFPRECTB_X IRMNPLAN.vip(стр. 12, поз. 43)

Так это свойство все в том же файлике сидит
include в vip или в проекте дадут счастье, или как написал Dmitry_Sol
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 26 апр 2012, 14:26
zna
Да, инслудники нужны.. Теперь вот константу "sci13Esc" не находит. Без неё компилится.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 26 апр 2012, 14:58
savov
zna писал(а):Да, инслудники нужны.. Теперь вот константу "sci13Esc" не находит. Без неё компилится.
Указанная константа сидит в galnet.csc, который прописан в глобальном galnet.inc ( там этих констант туча

). Данный файл имеется в поставке Гал-ки в отчетах.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 20 сен 2012, 10:47
zna
Вернулся к теме добавления визуальных элементов в интерфейсы. Все инклудники нашлись но, есть пара вопросов:
1. С интерфейсом irSpMnPlan чудеса: в результате одной из попыток кнопка добавилась, но потом, в последующих компиляциях перестала вызываться функция InitVidWindow..
2. Благодаря примеру
mwoland в первом посте по аналогии легко добавилась кнопка в интерфейс приходных ДО L_BaseDoc::LSchetb, за что ему +1. Интересует ещё добавление в этот интерфейс поля с выбором, в конфигураторе такое поле описывается как PanelInputLine. Попытался так:
Код: Выделить всё
#Component "L_BASEDOC"
#include Galnet.inc
alter interface VSCHETB;
window WVSCHET;
const
cmBut = 9987;
cmPanelInput = 11111;
end;
HandleEvent
cmInit:
{
inherited::handleEvent(cmInit);
if (cfsSetCurrentContainer('L_BASEDOC::vschetb') <> cfOk) {
Message(''#3'Ошибка установки контейнера L_BASEDOC::vschetb', Error);
Exit;}
var l1, l2: longint;
cfsCreateObject('Button', 'SCVSCHET', 'cmMnPlan', False, l1);
cfsSetProp(l1, cfpOrigin_X, 278);
cfsSetProp(l1, cfpOrigin_Y, 201);
cfsSetProp(l1, cfpSize_X, 77);
cfsSetProp(l1, cfpSize_Y, 19);
cfsSetProp(l1, cfpTitle, 'Кнопка');
cfsSetProp(l1, 'Command', cmBut);
if cfsCreateObject('PanelInputLine', 'SCVSCHET', 'cmPanelInput', FALSE, l2) = cfErrCreateObjectError
{
Message(''#3'Ошибка создания cPanelInput, cfErrCreateObjectError = '+cfErrCreateObjectError, Error);
}
cfsSetProp(l2,'Size_X',179);
cfsSetProp(l2,'Size_Y',12);
cfsSetProp(l2,'Origin_X', 359);
cfsSetProp(l2,'Origin_Y', 204);
if cfsSetProp(l2, 'StatusCtx', sci1378Esc) <> cfOk then message(''#3'Ошибка StatusCtx', Error);
if cfsSetProp(l2, 'pickButton', cmPick) <> cfOk then message(''#3'Ошибка pickButton', Error); ;
}
cmBut:
{
message('gotcha!');
}
cmPanelInput:
{
}
end;
end;
end.
но не катит, творческий тупик..
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 20 сен 2012, 11:02
Den
Обратите внимание на 3-й параметр
cfsCreateObject('PanelInputLine', 'SCVSCHET', 'cmPanelInput', FALSE, l2)
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 20 сен 2012, 11:07
zna
Дак я и спрашиваю про правильность описания этого объекта