Страница 4 из 6
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 29 янв 2016, 10:22
zna
Доброй пятницы, коллеги. На пути к совершенствованию замечательного интерфейса M_MNPLAN::IRSPMNPLAN
потребовалось добавить вторую кнопку в дополнение к добавленной ранее. Казалось бы, ничего сложного- делай, как первую. Сделал, вторая кнопка видна, но на её нажатие реакции нет. Отключил первую- реакция на вторую появилась.
Как сделать, чтобы вторая кнопка нормально обрабатывалась?

Ctrl+F4 на кнопку 1:
'M_MNPLAN::IRMNPLAN.WMNEDIT.SCMNEDIT.M_MNPLAN::IMNPLANEDIT.SCMNPLAN.
M_MNPLAN::IRSPMNPLAN.SCRMNPLAN.cmButSP2'
Ctrl+F4 на кнопку 2:
'M_MNPLAN::IRMNPLAN.WMNEDIT.SCMNEDIT.M_MNPLAN::IMNPLANEDIT.SCMNPLAN.
M_MNPLAN::IRSPMNPLAN.SCRMNPLAN.cmButSP1'
Обработка такая:
Код: Выделить всё
#component "M_MNPLAN"
const
cmButSP1=55591;
cmButSP2=55593;
end;
alter interface IRSPMNPLAN;
var lButSP1, lButSP2: longint;
..
overload Function InitVidWindow : Boolean; end;
Function InitVidWindow : Boolean;
{
if inherited::InitVidWindow = true and PWORKTYPE = 17 then
{
if cfsSetCurrentContainer(cfsGetCurrentContainerSelf) = cfOk then
{
if cfsCreateObject ('Button','SCRMNPLAN','cmButSP1',true, lButSP1) = cfOk then
{
cfsCreateObject ('Button','SCRMNPLAN','cmButSP1',false,lButSP1)
cfsSetProp(lButSP1, cfpTitle, 'Загрузить продолжительность рабочих дней');
cfsSetProp(lButSP1,'Command', cmButSP1);
....
}
if cfsCreateObject ('Button','SCRMNPLAN','cmButSP2',true, lButSP2) = cfOk then
{
cfsCreateObject ('Button','SCRMNPLAN','cmButSP2',false,lButSP2)
cfsSetProp(lButSP2, cfpTitle, 'Передать данные в табель');
cfsSetProp(lButSP2,'Command', cmButSP2);
...
}
}
InitVidWindow:= true;
}
}
Handleevent //Главное окно
{
cmButSP1: {message('Button1');}
cmButSP2: {message('Button2');}
}
end;
end.
??
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 29 янв 2016, 11:14
Алексей
Попробуйте так переделать...
cfsCreateObject ('Button','SCRMNPLAN','ButSP1',false,ButSP1)
cfsSetProp('ButSP'1, cfpTitle, 'Загрузить продолжительность рабочих дней');
cfsSetProp('ButSP1','Command', cmButSP1);
вторую по аналогии
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 29 янв 2016, 11:28
edward_K
а причем здесь Ctrl+F4? Надо в конфигураторе смотреть свойство - Command
Вообще лучше юзать cmValue. Поскольку разработчики обычно юзают из начала, то надо брать например cmValue60 и идти вниз
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 29 янв 2016, 12:02
zna
Алексей писал(а):Попробуйте так переделать...
cfsCreateObject ('Button','SCRMNPLAN','ButSP1',false,ButSP1)
cfsSetProp('ButSP'1, cfpTitle, 'Загрузить продолжительность рабочих дней');
cfsSetProp('ButSP1','Command', cmButSP1);
вторую по аналогии
Да, так помогло, причём только у 2-й кнопки переделал.. Благодарю!
To Edward Свойство "Сommand" у обеих кнопок совпадает с объявленными константами. Попробую с cmValue тожe, а то непонятно, как константы назначать.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 29 янв 2016, 13:27
zna
В итоге так получилось, более удобно со встроенными константами:
Код: Выделить всё
#component "M_MNPLAN"
end;
alter interface IRSPMNPLAN;
var lButSP1, lButSP2: longint;
..
overload Function InitVidWindow : Boolean; end;
Function InitVidWindow : Boolean;
{
if inherited::InitVidWindow = true and PWORKTYPE = 17 then
{
if cfsSetCurrentContainer(cfsGetCurrentContainerSelf) = cfOk then
{
if cfsCreateObject ('Button','SCRMNPLAN','lButSP1',true, lButSP1) = cfOk then
{
cfsCreateObject ('Button','SCRMNPLAN','lButSP1',false,lButSP1)
cfsSetProp('lButSP1', cfpTitle, 'Загрузить продолжительность рабочих дней');
cfsSetProp('lButSP1','Command', cmValue59);
....
}
if cfsCreateObject ('Button','SCRMNPLAN','lButSP2',true, lButSP2) = cfOk then
{
cfsCreateObject ('Button','SCRMNPLAN','lButSP2',false,lButSP2)
cfsSetProp('lButSP2', cfpTitle, 'Передать данные в табель');
cfsSetProp('lButSP2','Command', cmValue60);
...
}
}
InitVidWindow:= true;
}
}
Handleevent //Главное окно
{
cmValue59: {message('Button1');}
cmValue60: {message('Button2');}
}
end;
end.
Алексей +
Как добавить обработку спецификации плана?
Добавлено: 04 фев 2016, 17:00
zna
Ещё пара вопросов по интерфейсу, прошу ответить.
1. Как обработать изменение числового поля спецификации производственного заказа? Встроенные интерфейсы. Путь на поле:
'M_MNPLAN::IRMNPLAN.WMNEDIT.SCMNEDIT.M_MNPLAN::IMNPLANEDIT.SCMNPLAN.
M_MNPLAN::IRSPMNPLAN.SCRSP.M_MNPLAN::ISPSPPL01.TR2.FLD2'

Попытка добавить строку
приводит к
ошибке загрузки описателя таблицы "ISPSPPL01=>TMPBUFFORMPL" родительского интерфейса C:\Viper\160121_irMnPlan_Trud_MKS\irMnPlan_Trud_MKS.vip(стр. 669, поз. 26)
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 04 фев 2016, 17:14
edward_K
строка аже 669. Вы что все фейсы в один файл пихаете? Лучше и правильней придерживаться правила - один фейс = один файл и лучше, чтобы имена фейсов совпадали с именем фейса. Это не аксиома, но желательно. После этого вы могли бы привести весь фейс, а не одну строчку.
ошибке загрузки описателя таблицы
- выдается при компиляции или при запуске интерфейса? Если при компиляции, то для начала проверьте версию vip и exe(21 вип не пашет на ресах, собранных на 22), а также соотв. vih файлов. Если при запуске(что я вижу чаще), то собрали не тех ресах.
Вот с таблицей вам не повезло - ее описание сидит в каждом фейсе, и там оно свое, но вроде не было особых проблем.
Как добавить обработку спецификации плана?
Добавлено: 05 фев 2016, 10:17
zna
От перемены слагаемых результат не изменился. Ошибка компиляции на простейшем варианте
Код: Выделить всё
#component "M_MNPLAN"
#include galnet.inc
end;
#make "TestSomeOne.vip"
//Файл TestSomeOne.vip:
alter interface IRSPMNPLAN;
end.
Alter interface ispSpPl01;
end.
Версии всегда мирно сосуществовали, проблем не было:
atlexec.exe- 5.4.44.5
vip.exe- 5.4.43
Галактика 8.10
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 05 фев 2016, 10:58
edward_K
Вчера случайно увидел повтор этой ошибки. Но там была таблица описана в vih, а в подключенном ресе таблица была еще старая.
Попробуйте добавить в фейс(сразу после alter)
Код: Выделить всё
Table Struct TmpSort
(
cRec : tNRec,
Sort : String [240]
)
With Index
(
TmpSort01 = Sort
);
Table Struct TmpBufFormPl
(
FormPlNRec : tNRec
)
With Index
(
TmpBufFormPl01 = FormPlNRec
);
Table Struct TmpSpMnPlan
(
cRec : tNRec,
NewNumSort : comp
)
With Index
(
TmpSpMnPlan01 = cRec
);
Но вообще все таки vip надо привести к той же версии. Закономерность следующая - новый вип успешно работает с ресами, скомпилированными более старыми версиями. Старый вип может не работать с ресурсами, собранными более новой. То есть тут может быть вопрос - на какой версии собирал M_MNPLAN.
А вот это зачем?
Код: Выделить всё
#component "M_MNPLAN"
#include galnet.inc
end;
#make "TestSomeOne.vip"
Alter ....
По всей видимости вы докомпилцию делается прям в проекте.
Лучше так
Код: Выделить всё
#statusline "statgal"
#include galnet.inc
end;
#component "M_MNPLAN"
#make "Alter\M_MNPLAN_ispSpPl01.vip"
//или #make "Alter\*.vip"
и докомпиляцию делать уже в Alter\M_MNPLAN_ispSpPl01.vip с коментами в #doc - потом же забудете, что это. Судя по стилю вы любите один проект= один файл - это не есть гуд - должно быть 2-5 ваших ресов на все, разделенных по контурам.
Как добавить обработку спецификации плана?
Добавлено: 05 фев 2016, 16:05
zna
Благодарю за рекомендации, Эдвард. Добавил описание таблиц в alter- не помогло. Подозреваю, что надо пользовать свойства каких-то объектов, относящихся к интерфейсу ПЗ, например-iSetPl, iOm.. Примерчик бы..
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 16 фев 2016, 19:26
Masygreen
Один из удивительных косяков.. при докомпиляции накладной на снабжение, кнопка добавляется и работает.
Но перестает работать Alt+S и меню по правой кнопке "просмотр ордеров" .. с значением константы cmMyFuncStrCU игрался .. хелп??
Код: Выделить всё
#component 'L_SOPRDOC'
const
cmMyFuncStrCU = 15222;
end;
alter interface SOPRDOCB;
create view;
procedure prSetCU;
{
//5) Если по документу сформированы ордера - не запускаем интерфейс
if(katsopr.dopr = 0)
runInterface('MBUH_RES::mIntCreateCU', katsopr.nrec);
else
message('Удалите ордер', Information);
}
window EDITSOPR EscClose;
HandleEvent
cmMyFuncStrCU:
prSetCU;
end;
end;
HandleEvent
cmInit:
{
inherited:: HandleEvent(cmInit);
if(cfsSetCurrentContainer('L_SOPRDOC::SOPRDOCB') <> cfOK)//интерфейс
{
Message(''#3'Ошибка установки корневого контейнера', Error);
Exit;
}
//#region кнопки собственное
var
iObjBtn00: longint;
if (cfsCreateObject(cfcButton, 'SCRHEADER', 'cmMyFuncStrCU', FALSE, iObjBtn00) = cfErrCreateObjectError)
{
Message(''#3'Ошибка создания объекта', Error);
Exit;
}
cfsSetProp(iObjBtn00, cfpOrigin_X, 890);//по горизонтали
cfsSetProp(iObjBtn00, cfpOrigin_Y, 253);//по вертикали
cfsSetProp(iObjBtn00, cfpSize_X, 212);//длинна
cfsSetProp(iObjBtn00, cfpSize_Y, 26);//ширина
cfsSetProp(iObjBtn00, cfpCommand, cmMyFuncStrCU);
cfsSetProp(iObjBtn00, cfpVisible, TRUE);
cfsSetProp(iObjBtn00, cfpTitle, 'Разноска');
//#endregion
};
end;
end.
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 16 фев 2016, 19:36
edward_K
Выше уже писал - нежелательно юзать свои константы - лучше cmValue60 и вниз, а уж если юзаете, то ставьте их значение выше стандартных 30000 и выше
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 16 фев 2016, 19:42
Masygreen
edward_K писал(а):Выше уже писал - нежелательно юзать свои константы - лучше cmValue60 и вниз, а уж если юзаете, то ставьте их значение выше стандартных 30000 и выше
Ну это уже от безнадежности .. пробовал разные значения константы, заменил на cmValue60 .. один фиг ..
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 17 фев 2016, 01:42
Den
Masygreen, собрал тупо ваш код - проверил работает alt+s и "просмотр ордеров" в лок меню
Re: Как добавить кнопку в стандартный интерфейс
Добавлено: 17 фев 2016, 10:23
edward_K
тогда скорей всего при сборке не было в проекте строк
#statusline "statgal"
#include galnet.inc end;
#include glovars.inc