Первые попытки в API конфигуратора

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Первые попытки в API конфигуратора

Сообщение Max_Ural »

Задача достаточно проста
В скрине выбирается дата, в зависимости от нее мне надо установить заголовки второй и третьей колонки броуза.
В броузе выводится таблица в памяти

Написал следующее:

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

BROWSE B1 ('');
    Show at(,8,,);
    TABLE mtTPRICE
    FIELDS
        mtTPRICE.SKATMC       'Объект недвижимости' :[20], SKIP;
        mtTPRICE.PRICE        'Цена 1':[, '\0p[|-]366`666`666`667'], NOPROTECT;
        mtTPRICE.PRICE2       'Цена 2':[, '\0p[|-]366`666`666`667'], NOPROTECT;
END;

        cmInit:{
            if(not readmydsk(dCurDate,TheCodeProject+'dCurDate',true)){
                dCurDate := Date(1, Month(Cur_Date), Year(Cur_Date));
                dPrevDate:= Sub_Months(dCurDate,1);
            }
            err:=cfsSetProp(mtTPRICE.PRICE,cfpTitle,DateToStr(dPrevDate,'Month YYYY'));
            ShowResult(err,'Установка первой цены при инициализации');
            err:=cfsSetProp(mtTPRICE.PRICE2,cfpTitle,DateToStr(dPrevDate,'Month YYYY'));
            ShowResult(err,'Установка Второй цены при инициализации');
        }

        cmPick:{
            #_setDATE : {
                var tmpdate : Date;
                tmpdate := dCurDate;
                if(RunDialog(DialogGetDate, tmpdate) = cmOK){
                    dCurDate := Date(1, Month(tmpdate), Year(tmpdate));
                    dPrevDate:= Sub_Months(dCurDate,1);
                    SaveMyDsk(dCurDate,TheCodeProject+'dCurDate');
                    err:=cfsSetProp(mtTPRICE.PRICE,cfpTitle,'ффф123');
                    ShowResult(err,'Установка первой цены при выборе');
                    err:=cfsSetProp(mtTPRICE.PRICE2,cfpTitle,DateToStr(dPrevDate,'Month YYYY'));
                    ShowResult(err,'Установка Второй цены при выборе');
                }
            }
В cmInit выдает cfOk

В cmPick - CfErrBadFieldType

Хотя параметр один и тот же

Ни в первом ни во втором случае заголовки колонок не изменяются

Подскажите пожалуйста, в чем моя ошибка
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

Процедура SetColumnTitle

Назначение: Установить заголовок колонки.

Описание: procedure SetColumnTitle (iВrows : longInt; fld : longInt; title : string);

Параметры:
iВrows - имя Вrows в описании интерфейса.
fld - номер поля в логической таблице.
title - строка с новым заголовком. Для того чтобы сделать заголовок, состоящий из двух строк по вертикали, можно использовать символы-разделители #13 и Chr(13).

Пример
SetColumnTitle (b2One, #DateStart, 'Дата'+Chr(13)+'выборов');
SetColumnTitle (b2One, #DateStart, 'Дата'#13'выборов');

Версия
Формат поля fld изменился с integer на longInt начиная с Атлантис 5.1.
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Сообщение Max_Ural »

Получается, что пример, приведенный в документации "Пример использования функций API конфигуратора" устарел?

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

...
browse brObjects;
  show at(,1,,7);
  table cfsObjects;

fields
  cfsObjects.Npp     #3'N п/п'  ('Порядковый номер объекта',,) :  [5], protect;
  cfsObjects.Name    #3'Объект' ('Имя объекта',,)              : [20], protect;
  cfsObjects.objType #3'Тип объекта' ('Тип объекта',,)         : [20], protect;
end;

//---------------------------------------------------------

browse brProps;
  show at(,8);
  table cfsProps;

fields
  cfsProps.Npp      #3'N п/п'  ('Порядковый номер объекта',,)     :  [5], protect;
  cfsProps.Name     #3'Свойство' ('Свойство',,)                   : [20], protect;
  cfsProps.Value    #3'Значение свойства' ('Значение свойства',,) : [10], noProtect;
end;

//---------------------------------------------------------

handleEvent

cmInit:
  Fill_cfsObjects;

cmUpdateRecord:
{
  var sValue: string;
  var wValue: word;
  var rc    : longInt;

  case cfsProps.Name of

    'Title':
    {
      sValue := cfsProps.Value;
      rc := cfsSetProp(cfsObjects.Name, cfpTitle, sValue);
      if (update current cfsProps <> tsOK) {};
    }

    'TextAlign':
    {
      wValue := cfsProps.Value;
      rc := cfsSetProp(cfsObjects.Name, cfpTextAlign, wValue);
      if (update current cfsProps <> tsOK) {};
    }

  end;
}

end // handleEvent

end.
Функция SetColumnTitle отработала корректно.
Спасибо
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Вообще-то в функции конфигуратора надо передавать не поля, а имена конфигурируемых объектов.
Ответить