Страница 1 из 2
По конфигуратору
Добавлено: 28 янв 2011, 14:22
galover
Докомпилирую фейс, добавляю в брауз новую колонку. Проблема в том, что она вставляется в конец, а я хочу вставить после определенной колонки.
Можно ли добиться желаемого?
Код: Выделить всё
var columnId : longint;
var hRes : longint;
hRes := cfsCreateObject('TreeColumn', 'BRCALPLAN1', 'FinPlanVid', false, columnId);
if (hRes = cfOk)
{
cfsSetProp(columnId, 'Title', 'Вид платежа');
cfsSetProp(columnId, 'TextAlign', taCenter);
cfsSetProp(columnId, 'Size_X', 20);
}
Re: По конфигуратору
Добавлено: 28 янв 2011, 15:08
Den
Сам не пробовал, но..у объекта бравсе колонка есть свойство index. Ну или еще можно попробовать вначале поубирать все колонки cfsDestroyObject и потом надобавлять в нужном порядке.
Re: По конфигуратору
Добавлено: 28 янв 2011, 15:47
Алексей
именно это поле. вообще если добавлять поля в браузер, надо мышкой тыкать на то поле, ПЕРЕД которым вы хотите добавить своё.
Re: По конфигуратору
Добавлено: 28 янв 2011, 16:00
galover
При чем тут мышка! Поле программно добавляю. Index ставил (значение в 5), но происходит странное - добавляемое поле становится первым
Re: По конфигуратору
Добавлено: 28 янв 2011, 16:05
Алексей
galover писал(а):При чем тут мышка! Поле программно добавляю. Index ставил (значение в 5), но происходит странное - добавляемое поле становится первым

видимо так быстро читал, что и не заметил
может попробовать у других полей так же индексы сменить.
Re: По конфигуратору
Добавлено: 28 янв 2011, 16:11
edward_K
лучше попробовать конфигуратором и выгрузить скрипт - сразу увидите, что происходит.
Все поля поле добавленной колонки меняют индекс. Если ваше поле совпадет с индексом стандартной колонки то как правило отобразится в конце. Исключения если та колонка скрыта.
Re: По конфигуратору
Добавлено: 28 янв 2011, 16:50
galover
ну это все понятно, непонятно только как мне нормальным способом без всяких хаков (все удалить потом вставить, пройтись по все колонкам и поменять индекс) добиться желаемого
Re: По конфигуратору
Добавлено: 28 янв 2011, 17:43
Vik
Тоже сталкивался с такой проблемой. Попробуйте в cmInit сначала добавить вашу колонку, потом вызвать Inherited::HandleEvent(cmInit)
Код: Выделить всё
HandleEvent
cmInit:
{
var l_obj : longint;
if (cfsCreateObject ('Column', 'BRMC1_', 'KatMc.tnVed', false, l_obj)
= cfOk)
{
cfsSetProp(l_obj, cfpTitle, 'Код WindChill');
cfsSetProp(l_obj, cfpIndex, integer(6));
cfsSetProp(l_obj, cfpDefWidth, integer(20));
}
Inherited :: HandleEvent(cmInit);
}
Re: По конфигуратору
Добавлено: 28 янв 2011, 18:09
galover
делал так, но не прокатило. У вас заработало?
Re: По конфигуратору
Добавлено: 28 янв 2011, 18:12
Vik
да, у меня работает так. Crf-ок никаких лишних не подключено? Может, dsk и tmp все убить стоит.
Re: По конфигуратору
Добавлено: 29 янв 2011, 02:45
Ged
И не должно работать. по идее перед тем как что то деласть с функ. Api конфигуратора надо установить тек. контейнер (фейс, окно )
Писал или пробовал давно... Но примерно так
Код: Выделить всё
#component "F_CloSch"
Alter Interface GoNewPer;
#declare CaseMessErr(iErr)
#iErr : Message('Error create Object #iErr')
#end
#declare CreateCluster(ScrName)
lErr:=cfsCreateObject('ClusterItem',#ScrName,#ScrName+'_Dop',false, aSelf);
cfsSetProp(#ScrName+'_Dop', cfpVisible,true);
cfsSetProp(#ScrName+'_Dop', cfpSkip,false);
cfsSetProp(#ScrName+'_Dop', cfpTitle,'Новый кластер в чек боксе');
cfsSetProp(#ScrName+'_Dop', cfpIndex,6);
cfsSetProp(#ScrName+'_Dop', cfpDataIndex,6);
case lErr of
#CaseMessErr(cfErrObjectTypeNotExist);
#CaseMessErr(cfErrContainerObjectNotExist);
#CaseMessErr(cfErrCantCreateObject);
#CaseMessErr(cfErrCreateObjectError);
#CaseMessErr(cfErrObjectAlreadyExist);
#CaseMessErr(cfErrBadFieldType);
end; //case
#end
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
Function AddCluster:boolean;
Var aSelf, lErr : LongInt;
{
AddCluster := false;
if(cfsSetCurrentContainer('F_CloSch::goNewPer') <> cfOk)
{
Message(''#3'Ошибка установки корневого контейнера', Error);
Exit;
}
#CreateCluster('cb_SCCLOSACC_GONEWPER.VIDDATA') //Protect
#CreateCluster('cb_SCWCLOSACC_GONEWPER.VIDDATA')//Edit
}
handleevent
cmInit:
{
if(inherited :: HandleEvent (cmInit)=heOk)
{
AddCluster;
}
}
end; //handleevent
End. // Interface;
Re: По конфигуратору
Добавлено: 31 янв 2011, 10:43
Vik
Контейнер автоматом определяется - берется интерфейс, которому соответствует выполняемый HandleEvent
Re: По конфигуратору
Добавлено: 31 янв 2011, 12:18
galover
Ged
Как написал Vik cfsSetCurrentContainer в моем случае вызывать не обязательно
В обработчике handleEvent интерфейса VIP автоматически устанавливается текущий корневой контейнер, равный интерфейсу, чей handleEvent выполняется в данный момент.
За код спасибо, но в моем случае не чек бокс, а колонка, возможно и поведение несколько иное.
Кстати увидел, что в секции макроопределения вызывается другое макроопределение, раньше такое компилятор не пропускал (был даже ПИР), круто что доработали.
Ну а вообще что-то странное творится - поведение разное если функции вызвать так cfsSetProp(columnId, cfpIndex, integer(4)) и вот так cfsSetProp(columnId, cfpIndex, 4). Hz с чем это связано, но добиться нормального отображения колонок так и не смог. Код урезал до такого
Код: Выделить всё
#component "L_Dogovor"
alter interface CalPlan;
handleEvent
cmInit:
{
inherited::handleEvent(cmInit);
cfsSetProp('c_BRCALPLAN1_HOZOPERVIEWNAME_Наименование_ТХО', 'Hidden', true);
cfsSetProp('c_BRCALPLAN1_SMARKER', 'Hidden', true);
var columnId : longint;
if (cfsCreateObject('TreeColumn', 'BRCALPLAN1', 'CalPlan1.Cont_Fio', false, columnId) = cfOk)
{
cfsSetProp(columnId, cfpTitle, 'Вид платежа');
cfsSetProp(columnId, cfpTextAlign, taCenter);
cfsSetProp(columnId, cfpSize_X, 10);
cfsSetProp(columnId, cfpProtect, true);
cfsSetProp(columnId, cfpIndex, integer(4));
}
if (cfsCreateObject('TreeColumn', 'BRCALPLAN1', 'CalPlan1.CondStatus', false, columnId) = cfOk)
{
cfsSetProp(columnId, cfpTitle, 'Объект строительства');
cfsSetProp(columnId, cfpPickButton, true);
cfsSetProp(columnId, cfpStatusCtx, sci1378Esc);
cfsSetProp(columnId, cfpProtect, true);
cfsSetProp(columnId, cfpIndex, integer(5));
}
}
end;
end.
Может кто посмотрит, кому не влом. Вызывается через кнопку план для договора.
Re: По конфигуратору
Добавлено: 31 янв 2011, 12:44
Vik
Вот так у меня работает как надо:
Код: Выделить всё
#component "L_Dogovor"
alter interface CalPlan;
handleEvent
cmInit:
{
putCommand(cmValue30);
}
cmValue30:
{
cfsSetProp('c_BRCALPLAN1_HOZOPERVIEWNAME_Наименование_ТХО', 'Hidden', true);
cfsSetProp('c_BRCALPLAN1_SMARKER', 'Hidden', true);
var columnId : longint;
if (cfsCreateObject('TreeColumn', 'BRCALPLAN1', 'CalPlan1.Cont_Fio', false, columnId) = cfOk)
{
cfsSetProp(columnId, cfpTitle, 'Вид платежа');
cfsSetProp(columnId, cfpTextAlign, taCenter);
cfsSetProp(columnId, cfpSize_X, 10);
cfsSetProp(columnId, cfpProtect, true);
cfsSetProp(columnId, cfpIndex, integer(4));
}
if (cfsCreateObject('TreeColumn', 'BRCALPLAN1', 'CalPlan1.CondStatus', false, columnId) = cfOk)
{
cfsSetProp(columnId, cfpTitle, 'Объект строительства');
cfsSetProp(columnId, cfpPickButton, true);
cfsSetProp(columnId, cfpStatusCtx, sci1378Esc);
cfsSetProp(columnId, cfpProtect, true);
cfsSetProp(columnId, cfpIndex, integer(5));
}
}
end;
end.
Re: По конфигуратору
Добавлено: 31 янв 2011, 13:16
galover
Vik
Спасибо! Только опять какое-то шаманство

И нет вызова inherited::handleEvent(cmInit). Что если в событии родителя что-то важное делается?