По конфигуратору

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

По конфигуратору

Сообщение 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);
       }
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: По конфигуратору

Сообщение Den »

Сам не пробовал, но..у объекта бравсе колонка есть свойство index. Ну или еще можно попробовать вначале поубирать все колонки cfsDestroyObject и потом надобавлять в нужном порядке.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: По конфигуратору

Сообщение Алексей »

именно это поле. вообще если добавлять поля в браузер, надо мышкой тыкать на то поле, ПЕРЕД которым вы хотите добавить своё.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: По конфигуратору

Сообщение galover »

При чем тут мышка! Поле программно добавляю. Index ставил (значение в 5), но происходит странное - добавляемое поле становится первым
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: По конфигуратору

Сообщение Алексей »

galover писал(а):При чем тут мышка! Поле программно добавляю. Index ставил (значение в 5), но происходит странное - добавляемое поле становится первым
:) видимо так быстро читал, что и не заметил :)
может попробовать у других полей так же индексы сменить.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: По конфигуратору

Сообщение edward_K »

лучше попробовать конфигуратором и выгрузить скрипт - сразу увидите, что происходит.
Все поля поле добавленной колонки меняют индекс. Если ваше поле совпадет с индексом стандартной колонки то как правило отобразится в конце. Исключения если та колонка скрыта.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: По конфигуратору

Сообщение galover »

ну это все понятно, непонятно только как мне нормальным способом без всяких хаков (все удалить потом вставить, пройтись по все колонкам и поменять индекс) добиться желаемого
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: По конфигуратору

Сообщение 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);

}
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: По конфигуратору

Сообщение galover »

делал так, но не прокатило. У вас заработало?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: По конфигуратору

Сообщение Vik »

да, у меня работает так. Crf-ок никаких лишних не подключено? Может, dsk и tmp все убить стоит.
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: По конфигуратору

Сообщение 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;
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: По конфигуратору

Сообщение Vik »

Контейнер автоматом определяется - берется интерфейс, которому соответствует выполняемый HandleEvent
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: По конфигуратору

Сообщение 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.
Может кто посмотрит, кому не влом. Вызывается через кнопку план для договора.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: По конфигуратору

Сообщение 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.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: По конфигуратору

Сообщение galover »

Vik
Спасибо! Только опять какое-то шаманство :( И нет вызова inherited::handleEvent(cmInit). Что если в событии родителя что-то важное делается?
Ответить