Страница 4 из 4

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

Добавлено: 12 сен 2012, 16:40
zna
Благодарю за подсказку, разбираюсь..

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

Добавлено: 17 сен 2012, 13:26
zna
Итак, новость плохая: в результате "разбирательства" освоить маркер не получилось, непонятки остались.
Новость хорошая: помеченные записи легко выгрузились в Pick благодаря коду, приведённому выше от aleks1232321, за что ему +1. Спасибо KATZ и edward_K, интерфейс заработал.

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

Добавлено: 10 сен 2020, 18:24
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?

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

Добавлено: 11 сен 2020, 12:23
oiko
Интерфейс нерабочий. Множеству записей таблицы persons ты сопоставляешь единственную переменную q123.
Таблице можно сопоставить другую таблицу.

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

Добавлено: 11 сен 2020, 13:17
smmmmm
oiko писал(а):Интерфейс нерабочий. Множеству записей таблицы persons ты сопоставляешь единственную переменную q123.
Таблице можно сопоставить другую таблицу.
в чём нерабочесть? окошечко открывается, записи есть, у каждой записи есть поле с выпадающим списком, где я могу выбрать тип карты... маркер запоминает покрашенное, могу получить нреки
может, сделано и неправильно, тогда подскажите как правильно?

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

Добавлено: 11 сен 2020, 13:33
smmmmm
Изображение

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

Добавлено: 11 сен 2020, 14:55
Den
smmmmm писал(а):
oiko писал(а):... у каждой записи есть поле с выпадающим списком, где я могу выбрать тип карты
а вы после задания типа карты у нескольких записей, нажмите Ctrl+PgDown ,и, увидите, что ничего не самом деле вы не задали.

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

Добавлено: 14 сен 2020, 18:17
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 есть еще несколько наследников, в принципе вы можете и свой сделать.

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

Добавлено: 29 сен 2020, 16:51
smmmmm
благодарю за подсказку!

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

Добавлено: 29 сен 2020, 16:53
smmmmm
не даёт плюсануть, ибо в прошлый раз вас же плюсовал :)