Еще раз...Множественный выбор в интерфейсе

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

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

zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение zna »

Благодарю за подсказку, разбираюсь..
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение zna »

Итак, новость плохая: в результате "разбирательства" освоить маркер не получилось, непонятки остались.
Новость хорошая: помеченные записи легко выгрузились в Pick благодаря коду, приведённому выше от aleks1232321, за что ему +1. Спасибо KATZ и edward_K, интерфейс заработал.
smmmmm
Посетитель
Сообщения: 35
Зарегистрирован: 24 июн 2014, 15:48

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение smmmmm »

добрый день!
interface DialogTest_prob 'Выбор сотрудников'
var sss:string; qq:longint; ggg:IMarker(marker) new; _nrec:comp;
create view
var q123:integer=1;
as select persons.* from persons
where (('С' == persons.ISEMPLOYEE)) and persons.department=4612057684249321181
order by persons.fio;
browse B;recmarker=ggg;
fields
persons.tabnmb 'Табельный'
('Табельный') : [10], Protect;
persons.fio 'ФИО'
('ФИО') : [50], Protect;
q123 'Тип'
('Тип карты') : [list 1 'Обычная', 2 'ВИП'],protect;
end;
такой вот интерфейс... сделал тут колонку типа выпадающий список, где хочу для каждого помеченного сотрудника выбирать тип банковской карты... потом я могу из маркера вытащить нрек из persons... как вытащить ещё вот это самодельное поле q123?
oiko
Местный житель
Сообщения: 417
Зарегистрирован: 29 мар 2005, 17:49

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение oiko »

Интерфейс нерабочий. Множеству записей таблицы persons ты сопоставляешь единственную переменную q123.
Таблице можно сопоставить другую таблицу.
smmmmm
Посетитель
Сообщения: 35
Зарегистрирован: 24 июн 2014, 15:48

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение smmmmm »

oiko писал(а):Интерфейс нерабочий. Множеству записей таблицы persons ты сопоставляешь единственную переменную q123.
Таблице можно сопоставить другую таблицу.
в чём нерабочесть? окошечко открывается, записи есть, у каждой записи есть поле с выпадающим списком, где я могу выбрать тип карты... маркер запоминает покрашенное, могу получить нреки
может, сделано и неправильно, тогда подскажите как правильно?
smmmmm
Посетитель
Сообщения: 35
Зарегистрирован: 24 июн 2014, 15:48

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение smmmmm »

Изображение
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение Den »

smmmmm писал(а):
oiko писал(а):... у каждой записи есть поле с выпадающим списком, где я могу выбрать тип карты
а вы после задания типа карты у нескольких записей, нажмите Ctrl+PgDown ,и, увидите, что ничего не самом деле вы не задали.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение edward_K »

Поле с типом картой должно быть вычисляемым выражением, зависящим от persons.nrec или прямым полем в таблице.
Например внешний атрибут через wGetAttr. Если это не поле в таблице persons, вам придется сделать одну из обработок в cmExprFieldChanged, cmCheckField, cmPick. В первом значение будет ExprFieldValue, в последних двух для вычисляемых выражений вам скорей всего придется использовать GetViewerData() - напрямую нельзя обращаться, поскольку это приведет к перерасчету выражения.

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

cmExprFieldChanged:
{
  Case(CurField)Of
    #ExtAttrRegNum:
    {
      if (vSFCanModifySchFact(SchFact.Nrec))
      {
        sSetAttrID(coSchFact, SchFact.nrec, pVA_SCHFACT_RegNum, ExprFieldValue);
        SetModified(True);
        ReScanPanel(tnSchFact);
      }
end;
}
Переменные старайтесь называть либо как в доке, либо чуть чуть посложнее чем ggg - мне больше нравятся длинные названия из нескольких слов без пробела, где каждое слово с большой буквы + 1,2 буквы в начале под тип. p- указатель, s - строка, b или bo(от bogetTune привычка) - boolean. Для автопометки это pMarker, pSpMarker. По своей сути объект IMarker - таблица объект и в рамках табличных функций вы можете работать с ней как с любой таблицей - getfirst, getnext, loop, update,insert - все это будет работать. При этом когда вы указываете его в recmarker компилятор в автомате добавляет 2 bounds с этой таблицей. Где то это в vipprogr написано если iMarker поищите. Вот пример правильного обхода выбранных записей

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

if pSpMarker.Count>0
    { //pSpMarker.ExportTo(_Marker_Tmp);
      PushPos(#SpDocs);
      SubBounds(tbRmSpDocs1);
      AddBounds(tbRmSpDocs2);
      _Loop pSpMarker
      { InsertMarker(_Marker_Tmp, pSpMarker.pNRec);
        }
      SubBounds(tbRmSpDocs2);
      AddBounds(tbRmSpDocs1);
      PopPos(#SpDocs);
      ReScanPanel(#SpDocs);
    }
При поиске старайтесь не использовать поля(они же Property ) вне индекса или включайте их в and () внутри (( )). В объекте есть прямая функция ExportToMarker, но на большом кол--ве записей она может тормозить. На iMarker есть еще несколько наследников, в принципе вы можете и свой сделать.
smmmmm
Посетитель
Сообщения: 35
Зарегистрирован: 24 июн 2014, 15:48

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение smmmmm »

благодарю за подсказку!
smmmmm
Посетитель
Сообщения: 35
Зарегистрирован: 24 июн 2014, 15:48

Re: Еще раз...Множественный выбор в интерфейсе

Сообщение smmmmm »

не даёт плюсануть, ибо в прошлый раз вас же плюсовал :)
Ответить