Alter F_OS::KATOSS

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

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

Ответить
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Alter F_OS::KATOSS

Сообщение Irina_ »

Здравствуйте.
Не получается решить проблему при разработке Alter F_OS::KATOSS. В картотеку ОС добавила столбец с ВА ссылочного типа на пользовательскую аналитику. Сделала обработку выбора значения ВА. Но никак не получается обработать удаление значения ВА: в обработчик cmDelOnProtect не попадаю. Как решить проблему?

Код: Выделить всё

#include GetKau.vih
#include ExtAttrClassInfo.vih

#Component "F_OS"
//Картотека ОС - список.
//Browse PDOCUMENT:
//- Добавление нового столбца 'Проект' со значением ВА 'Проект' ссылочного типа  на пользовательскую
//аналитику 'Проекты', код табл.10096, индекс=6, с редактированием.

Alter interface KATOSS;

Var cAttrP, NrecRet : Comp;
    var1            : iExtAttrClassInfo;
    wTabKau         : Word;

Create view
  as select
   If( ( var1.ExtAttr_ValueExistsID( coKatOs, KatOs.Nrec, cAttrP ) = False ), '', var1.sGetAttrID( coKatOs, KatOs.Nrec, cAttrP ) )
   ( Fieldname=CheckP )
;

// Изменение свойств столбцов в списке карточек ОС.
Procedure ChangeObjIndex;
Var sObj_ : String;
{
  cfsSetProp( 'c_PDOCUMENT_FKATPODRNAME_Подразделение', 'Index', Integer(7) );
  cfsSetProp( 'c_PDOCUMENT_KATMOL.NAME_МОЛ', 'Index', Integer(8) );
  cfsSetProp( 'c_PDOCUMENT_SPKATOS.DATEK_Дата_ввода', 'Index', Integer(9) );
  cfsSetProp( 'c_PDOCUMENT_BRCOLUMNPERSTOIM_Сумма_резерва', 'Index', Integer(10) );
  cfsSetProp( 'c_PDOCUMENT_BRCOLUMNSTOIM_Стоимость', 'Index', Integer(11) );
  cfsSetProp( 'c_PDOCUMENT_BRCOLUMNSUMIZN_Амортизация', 'Index', Integer(12) );
  cfsSetProp( 'c_PDOCUMENT_BRCOLUMNSIZNM_Амортизация_за_период', 'Index', Integer(13) );
  cfsSetProp( 'c_PDOCUMENT_OSTSROKPOLISP_Срок_исп.', 'Index', Integer(14) );
  cfsSetProp( 'c_PDOCUMENT_KATOS.REGNUM_Регистрац._номер', 'Index', Integer(15) );
  cfsSetProp( 'c_PDOCUMENT_PROBTRCURR.MES[13]_Текущий_месяц', 'Index', Integer(16) );
  cfsSetProp( 'c_PDOCUMENT_KATOS.DTRESERV1_Дата_ликвидации', 'Index', Integer(17) );
  cfsSetProp( 'c_PDOCUMENT_Отчетный_период', 'Index', Integer(18) );
  cfsSetProp( 'c_PDOCUMENT_VBR', 'Index', Integer(19) );

  sObj_:= 'c_PDOCUMENT_CheckP_Проект';
  cfsSetProp( sObj_, 'DefaultWidth', Integer(15) );
  cfsSetProp( sObj_, 'Index', Integer(6) );
} // proc ChangeObjIndex

ExtendFormats PDOCUMENT;
Browse PDOCUMENT;
Table KATOS;
Fields
  CheckP 'Проект' :[ 15 ], Protect, PickButton;
end;

 TableEvent
   Table KATOS;
    cmPositionChanged:
    {
      Inherited::HandleEvent( cmPositionChanged );
    } // cmPositionChanged

    cmPick:
    {
      Case Inherited::HandleEvent( cmPick ) of
        heAbort :  { Abort; Exit; }
        heStop  :  Stop;
      end;
      Case CurField of
        #CheckP:
          {
// одиночный выбор без редактирования, только листья. Пользовательская аналитика 'Проекты'.
            If iGetKau.GetCodeKau( cgiPick or cgiNotEdit or cgiPickLeaf, wTabKau, NrecRet ) > 0
              {
                var1.coSetAttrID( coKatOs, KatOs.Nrec, cAttrP, NrecRet, ShowKau( wTabKau, NrecRet ) );
                Set CheckP;
                RescanPanel( #KatOs );
              }
          }
      end; // case
    } // cmPick

    cmDelOnProtect:
    {
Message( 'cmDelOnProtect таблицы' );  //не попадаю сюда
      Case Inherited::HandleEvent( cmDelOnProtect ) of
        heAbort :  Abort;
        heStop  :  Stop;
      end;

      Case CurField of
        #CheckP:
          {
            var1.ExtAttr_DeleteValueID( coKatOs, KatOs.Nrec, cAttrP );
            Set CheckP;
            RescanPanel( #KatOs );
          }
      end; // case
    } // cmDelOnProtect

 end; // TableEvent

Window WIEDITKATOS EscClose;

 HandleEvent // WIEDITKATOS
  cmInit:
   {
     Case Inherited::HandleEvent( cmInit ) of
       heAbort :  Abort;
       heStop  :  Exit;
     end;
   } // cmInit
  end;  // HandleEvent for WIEDITKATOS
 end;   // Window WIEDITKATOS

  HandleEvent // for interface
  cmInit :
    {
      Case Inherited::HandleEvent( cmInit ) of
        heAbort :  Abort;
        heStop  :  Exit;
      end;
      cAttrP:= var1.ExtAttr_ID( coKatOs, 'Проект' ); // Nrec ВА к KatOs
      wTabKau:= Word( 10096 ); // 'Проекты'
      ChangeObjIndex;
    } // cmInit
 end; // HandleEvent for interface
end.  // interface

Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Alter F_OS::KATOSS

Сообщение Irina_ »

Здравствуйте.
Проблему решила сама: добавила обработчик cmDelOnProtect интерфейса, только с Message, чтобы знать, что попадаю в него. Сообщение не получила, но после этого получила сообщение, что попадаю в табличный обработчик cmDelOnProtect, в котором реализовано удаление ВА. ВА удалился. Если удаляю обработчик интерфейса, то проблема проявляется.
Осталась в замешательстве. Возможно кто-то подскажет, почему добавление обработчика интерфейса без обработки решило проблему?
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Alter F_OS::KATOSS

Сообщение Irina_ »

Еще один вопрос.
В картотеке ОС в Browse записи выделяются цветом. Насколько я поняла, как минимум 3 цветами (а может и больше), в зависимости от условий:
-выбывшие ОС
-не выбывшие ОС, остаточная стоимость которых <> 0
-не выбывшие ОС, остаточная стоимость которых = 0.
Добавленный мною столбец выделяется на фоне остальных: он всегда одного цвета. Каким образом можно сделать, чтобы значение в нем было того же цвета, что и остальные реквизиты в записи?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Alter F_OS::KATOSS

Сообщение m0p3e »

Irina_ писал(а):Добавленный мною столбец выделяется на фоне остальных: он всегда одного цвета. Каким образом можно сделать, чтобы значение в нем было того же цвета, что и остальные реквизиты в записи?
Ирина, попробуйте вот так:

Код: Выделить всё

ExtendFormats PDOCUMENT;
Browse PDOCUMENT;
Table KATOS;
Fields
  CheckP 'Проект' :[ 15 ], Protect, PickButton, {FONT = {COLOR = COLORZAP}};
end;
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Alter F_OS::KATOSS

Сообщение m0p3e »

Irina_ писал(а):Но никак не получается обработать удаление значения ВА: в обработчик cmDelOnProtect не попадаю. Как решить проблему?
В обработчике интерфейса блокируется обработка, если находимся в главном интерфейсе:

Код: Выделить всё

 if CurWindow = wnMainWindow
   stop;
Если необходимо это корректно обойти, то можно описать обработчик интерфейса как

Код: Выделить всё

 if CurField <> #CheckP
   inherited::handleevent(cmDelOnProtect);
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Alter F_OS::KATOSS

Сообщение Irina_ »

Сергей. Большое спасибо за помощь! Все получилось, как надо.
Ответить