Страница 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
				не даёт плюсануть, ибо в прошлый раз вас же плюсовал  
