Страница 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). Что если в событии родителя что-то важное делается?