Дополнить browse своей колонкой
Модераторы: m0p3e, edward_K, Модераторы
Дополнить browse своей колонкой
Реально ли внести в стандартный browse свою колонку? Докомпилить или еще что. Есть план снабжения, все аналитики уже заняты под что-то, остается внешний атрибут, но заходить по Alt+A и смотреть - есть ли что - неудобно. Можно ли добавить новую колонку в которой можно было бы просматривать и редактировать этот внешний атрибут. Есть ли есть пример кода, буду особенно признателен
Re: Дополнить browse своей колонкой
Мне вот тоже надо обработать событие.
В Browse через CNF добавлен атрибут. При его изменении нужно менять другой атрибут.
А ссылка http://forum.galaktika.by/viewtopic.php ... 55c7f4eae5 , похоже, померла.
В Browse через CNF добавлен атрибут. При его изменении нужно менять другой атрибут.
А ссылка http://forum.galaktika.by/viewtopic.php ... 55c7f4eae5 , похоже, померла.
Re: Дополнить browse своей колонкой
Держи
https://forum.topsoft.by/viewtopic.php? ... 55c7f4eae5
но я бы сразу докомпилировал интерфейс добавив колонку и ее обработчик, без конфигуратора.
https://forum.topsoft.by/viewtopic.php? ... 55c7f4eae5
но я бы сразу докомпилировал интерфейс добавив колонку и ее обработчик, без конфигуратора.
Re: Дополнить browse своей колонкой
Собственно, меня как раз больше бы устроил вариант с докомпиляцией и обработчиком, только я не очень представляю, как в коде обработчика сослаться на поле из атрибутов. У него же "нечеловеческое" имя вида 'ExtAttr: KATNAZNA,281474976741359,2,0,0,0,Дата закрытия заказа'.oiko писал(а):Держи
https://forum.topsoft.by/viewtopic.php? ... 55c7f4eae5
но я бы сразу докомпилировал интерфейс добавив колонку и ее обработчик, без конфигуратора.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Дополнить browse своей колонкой
В alter значит дайте ему человеческое имя )
и избавьтесь от cnf, как сказали уже
и избавьтесь от cnf, как сказали уже
Re: Дополнить browse своей колонкой
Рад бы, но CNF'ы лепит клиент по своему желанию. Мы с ними долго на эту тему дискутировали.
Я могу только предложить вынести что-то из этих CNF в альтер.
Я могу только предложить вынести что-то из этих CNF в альтер.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Дополнить browse своей колонкой
Ну в обработчике cmpick смотри значение этого атрибута ДО вызова обработчика родителя и ПОСЛЕ .
Если оно поменялось - вызывай код свой нужный ... И имя поля по барабану будет какое там в cnf сгенерилось.
Если оно поменялось - вызывай код свой нужный ... И имя поля по барабану будет какое там в cnf сгенерилось.
Re: Дополнить browse своей колонкой
Спасибо!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Дополнить browse своей колонкой
Вот вам два варианта
Добавляете сие в объект со static и добавление сводится к вызову одной функции. Если обратите внимание они умеют добавлять в любое место. Вторая функция удобна, когда нужно добавить несколько колонок.
Код: Выделить всё
//--------------------------------------------------
#Doc
Добавить колонку
Add_Column (cfsGetCurrentContainerSelf,'BRWPERSONS','KARTANM' ,10,'Карта' ,12)
#end
Procedure Add_Column(Container:Longint
; ww_browse :string
; ww_fieldname : string
; ww_width: integer
; ww_title:string
; ww_index:integer=30
; isTree :boolean=false
);
{ var ww_int:integer;
var ww_field:longint;
var i :integer;
//----------------- сначала нужно все сдвинуть
/*
iVisHidd.SetVisibleForField( cfsGetCurrentContainerSelf
, GetInterfaceComponentName
, #(__InterfaceName__)
, 'brwPersons');
*/
var Res : integer;
var ObjList : array [1] of string;
var _sSubContName :string;
var sFieldName : string;
_sSubContName := Upcase(Trim(ww_browse));
//Res := cfsSetCurrentContainer(cfsGetCurrentContainerSelf);
Res := cfsSetCurrentContainer(Container);
SetLimit(ObjList, 0);
// загрузить список объектов, вставленных в данный контейнер
if cfsEnumObjects(_sSubContName, ObjList, false) = cfOk
{ //for(i := 1; i <= Count(ObjList); Inc(i))
for(i := Count(ObjList);i>=1; i--)
{ ww_int:=0;
cfsGetProp(ObjList[i], cfpIndex, ww_int);
cfsGetProp(ObjList[i], cfpName , sFieldName);
if ww_int>=ww_index
{ ww_int++;
cfsSetProp(ObjList[i], cfpIndex, ww_int);
}
} //for(i := 1; i <= Count(ObjList); Inc(i))
}
else
{
}
//------------- добавляем колонку
//message('1')
ww_field:=0;
var _sTypeFld:string= if(isTree ,'Tree','' )+'Column';
cfsCreateObject ( _sTypeFld, ww_browse ,ww_fieldname,FALSE,ww_field);
//ww_int:=15;
cfsSetProp(ww_field,'Visible',False);//ww_fieldname
ww_int:=ww_index;
cfsSetProp(ww_field,'Index',ww_int);
cfsSetProp(ww_field,'Protect',True);
//cfsSetProp(ww_fieldname,'Title', ww_title);
//message('2')
//cfsSetProp(ww_fieldname,'SKIP',False);
ww_int:=10;
ww_int:=ww_width;
cfsSetProp(ww_field,'DefaultWidth',ww_int);
cfsSetProp(ww_field,'StatusCtx', 'sci1Esc');
cfsSetProp(ww_field,'Visible',True);
cfsSetProp(ww_field,cfcQuickChoice,True);
cfsSetProp(ww_field,cfpTitle, ww_title);
} //Procedure Add_Column(Container:Longint
//------------------------------------------------------------------------------
#doc
структура для добавления полей в функции ADD_Column_A
#end
Type TAdd_FLD = Record
Fld_Count : Longint;
Fld_Type : Longint;//Тип создаваемых объектов 0 - Column, 1 - TreeColumn
Fld_Name : Array[0..0] Of String ; //Наименование Поля
Fld_Title : Array[0..0] Of String ; //Заголовок поля
Fld_Visible : Array[0..0] Of boolean; //Видимость
Fld_Hidden : Array[0..0] Of boolean; //True - скрыть
Fld_Protect : Array[0..0] Of boolean; //Защитить от ручного ввода
Fld_SKip : Array[0..0] Of boolean; //Запретить позиционирование
Fld_Index : Array[0..0] Of Integer; //
Fld_StatusCtx : Array[0..0] Of Integer; //
Fld_PassiveFormat : Array[0..0] Of String ; //'\2p[|-]36`666`666`666`666.88'
Fld_DefaultWidth : Array[0..0] Of Integer; //Ширина колонки по умолчанию (текстовые координаты)
Fld_ButtonType : Array[0..0] Of Integer; //16 для ... inPickButton + DefaultPickButton=True
Fld_DefaultPickButton: Array[0..0] Of boolean; //
Fld_FontColor : Array[0..0] Of String ; // функция
Fld_FontBold : Array[0..0] Of String ; // функция
end;
#Doc
Добавить колонки
Add_Column_A (cfsGetCurrentContainerSelf,'BRWPERSONS',pAdd_FLD)
#end
Procedure Add_Column_A(Container:Longint
; ww_browse :string
; pAdd_FLD :TAdd_FLD
);
{ var ww_int:integer;
var ww_field:longint;
var i,j :integer;
//----------------- сначала нужно все сдвинуть
/*
iVisHidd.SetVisibleForField( cfsGetCurrentContainerSelf
, GetInterfaceComponentName
, #(__InterfaceName__)
, 'brwPersons');
*/
var Res : integer;
var ObjList : array [1] of string;
var _sSubContName :string;
var sFieldName : string;
_sSubContName := Upcase(Trim(ww_browse));
//Res := cfsSetCurrentContainer(cfsGetCurrentContainerSelf);
Res := cfsSetCurrentContainer(Container);
SetLimit(ObjList, 0);
// загрузить список объектов, вставленных в данный контейнер
var _boObjLoad:boolean=cfsEnumObjects(_sSubContName, ObjList, false) = cfOk;
//------------- добавляем колонку
//message('1')
ww_field:=0;
var _sTypeFld:string= if(pAdd_FLD.Fld_Type=1 ,'Tree','' )+'Column';
var _ObjCount:longint=Count(ObjList);
var _Delta :integer;
For(j:=pAdd_FLD.Fld_Count;j>0;j--)
{ _Delta:=pAdd_FLD.Fld_Count+1-j;
if _boObjLoad
{ for(i := _ObjCount;i>=1; i--)
{ ww_int:=0;
cfsGetProp(ObjList[i], cfpIndex, ww_int);
cfsGetProp(ObjList[i], cfpName , sFieldName);
if ww_int>=pAdd_FLD.Fld_Index[j]
{ ww_int:=ww_int+_Delta;
cfsSetProp(ObjList[i], cfpIndex, ww_int);
}
if ww_int>0
if ww_int<=pAdd_FLD.Fld_Index[j]
{ _ObjCount:=i; break;// По идее дальше сдвигать не нужно
}
}
} //if _boObjLoad
cfsCreateObject ( _sTypeFld, ww_browse ,pAdd_FLD.Fld_name[j],FALSE,ww_field);
//ww_int:=15;
cfsSetProp(ww_field,'Visible',False);//ww_fieldname
ww_int:=pAdd_FLD.Fld_Index[j]+(_Delta-1);// сложный вопрос
cfsSetProp(ww_field,'Index',ww_int);
cfsSetProp(ww_field,'Protect', pAdd_FLD.Fld_Protect[j]);
//cfsSetProp(ww_fieldname,'Title', ww_title);
//message('2')
cfsSetProp(ww_field,'SKIP',False);
ww_int:=10;
if pAdd_FLD.Fld_DefaultWidth[j]>0
ww_int:=pAdd_FLD.Fld_DefaultWidth[j];
cfsSetProp(ww_field,'DefaultWidth',ww_int);
cfsSetProp(ww_field,'StatusCtx', 'sci1Esc');
if pAdd_FLD.Fld_StatusCtx[j]<>0
cfsSetProp(ww_field,'StatusCtx', pAdd_FLD.Fld_StatusCtx[j]);
cfsSetProp(ww_field,'Visible',pAdd_FLD.Fld_Visible[j]);
cfsSetProp(ww_field,'Hidden' ,pAdd_FLD.Fld_Visible[j]);
cfsSetProp(ww_field,cfcQuickChoice,True);
cfsSetProp(ww_field,cfpTitle, pAdd_FLD.Fld_title[j]);
cfsSetProp(ww_field,cfpSKip, pAdd_FLD.Fld_SKip[j]);
cfsSetProp(ww_field,cfpPassiveFormat ,pAdd_FLD.Fld_PassiveFormat ); //'\2p[|-]36`666`666`666`666.88'
cfsSetProp(ww_field,cfpDefWidth ,pAdd_FLD.Fld_DefaultWidth ); //Ширина колонки по умолчанию (текстовые координаты)
cfsSetProp(ww_field,cfpButtonType ,pAdd_FLD.Fld_ButtonType ); //16 для ... inPickButton + DefaultPickButton=True
cfsSetProp(ww_field,cfpDefaultPickButton,pAdd_FLD.Fld_DefaultPickButton); //
cfsSetProp(ww_field,cfpFontColor ,pAdd_FLD.Fld_FontColor ); // функция
cfsSetProp(ww_field,cfpFontBold ,pAdd_FLD.Fld_FontBold ); // функция
}//For(j:=pAdd_FLD.Fld_Count;j>0;j--)
} //Procedure Add_Column(Container:Longint