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

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 10:18
VWV
Добрый день!

с10 abc (! Новичок)

На Browse добавил control FileDrop, который использую для фильтрации данных окна.
Подскажите в какой embed и какой код добавить, чтобы
в выпадающий список добавились новые строки, которых нет в таблице и которые нужны только
на время работы приложения. Сильно не пинайте. Спасибо

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 12:14
kreator
Методы класса для формирования списков примерно похожи (что лист, что дроп-лист, что комбо), но немного неодинаково работают. SV объявляли об идее привести всё к одному и тому же, но похоже руки не дошли. Попробуй вставить свой текст в метод ResetQueue после Parent Call. Только нужна проверка на количество записей в очереди. Сдаётся мне, что этот метод не один раз вызывается (в отличии от обычного Browse). И ещё нужно не забыть о сортировке или принудительном добавлении своих записей на определённую позицию в очереди. Если не получиться (что может быть), то можно попробовать вставить в SetQueueRecord. Тоже с проверкой, например на отсутствие записей.

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 12:20
kreator
Сам код простой, типа:

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

FDB1.Q.Field1 = 1
FDB1.Q.Field2 = 2
add(FDB1.Q)
...
FDB1 можно заменить на self. Наверно.

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 15:08
VWV
Да..., после ШВС не привычно. Как и предсказывалось выше в методе ResetQueue добавилось, но стало работать. В SetQueueRecord добавилось многократно. В общем перебором :) получил нужный мне результат в Reset после parent. Спасибо

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 15:19
kreator
ИМХО в Reset неправильно ставить. В общем случае метод ResetQueue может быть вызван отдельно (не из Reset) и Вы потеряете свои строчки. Что нет так с ResetQueue?

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 15:28
morkovin
!для дроп-контрола на окне указываешь источник-очередь

From : GLO:RaionQ

!где-то в словаре прописываешь очередь
!declare Global queue
RaionQ QUEUE,PRE(Glo)
RaionName STRING(50)
END
...........
!заполняешь очереди из ini-файла
!fill drop boxes in main windows open
IniMgr.FetchQueue('Status','Stat',Glo:StatusQ,Glo:StatusQ.Status)
IniMgr.FetchQueue('Nadbavka','Period',Glo:PeriodQ,Glo:PeriodQ.Period)
IniMgr.FetchQueue('Vyplat','StatVypl',Glo:VyplStatQ,Glo:VyplStatQ.VypStatus)
IniMgr.FetchQueue('Raion','RaionName',Glo:RaionQ,Glo:RaionQ.RaionName)

!-------- так это выглядит в file.INI ----
[Raion]
RaionName=9
RaionName_1=Центральный
RaionName_2=Советский
RaionName_3=Дзержинский
RaionName_4=Ворошиловский
RaionName_5=Кировский
RaionName_6=Краснооктябрьский
RaionName_7=Тракторозаводский
RaionName_8=Красноармейский
RaionName_9=иногородний
RaionName_10=
RaionName_11=
RaionName_12=
RaionName_13=


использую это для мелких дроп-листов, которые редко но могут изменяться

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 16:09
VWV
kreator, в ResetQueue по клику моей записи фильтруются данные как будто я щелкаю по предыдущей. С записями созданными шаблонами все нормально

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 16:32
kreator
Вот такой кусок обнаружил (правда, не мой, коллеги, но, видимо, работает):

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

FDB4.SetQueueRecord PROCEDURE

  CODE
  IF RECORDS(FDB4.Q) = 0 
    FDB4.Q.PS:NOMER = ''
    FDB4.Q.PS:NAME = '> Все подразделения...' 
    ADD(FDB4.Q,1) 
    IF ERRORCODE() THEN STOP(ERROR()).
  END
  PS:NAME = CLIP(PS:NOMER) & ' ' & CLIP(PS:NAME)
И ещё. Есть сейчас опция для дроплиста "All". Так вот эта строчка добавляется в ResetQueue.
И ещё. Знаю, что в комбо могут быть проблемы, потому что там идёт поиск по первым буквам. Может сейчас что-то изменилось, но раньше проблемы были.
VWV писал(а): 18 Октябрь 2018, 16:09 kreator, в ResetQueue по клику моей записи фильтруются данные как будто я щелкаю по предыдущей. С записями созданными шаблонами все нормально
Вот не очень понятно. Как у Вас происходит передача значения из дроплиста? Руками? Или в Actions положили параметр? Я бы отменил настройку в Actions. Делал бы руками. Стандартно происходит обращение в таблицу. В таблице этого значения нет, берётся старое. Перестраховались.
Можете привести кусок текста как вы добавляете свои записи.

Дополнить dropList своими записями

Добавлено: 18 Октябрь 2018, 18:16
ingasoftplus

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

! Add the custom row in the reset method

FDBLocation.Reset PROCEDURE
  CODE
  ! Add <All> entry to the queue
  IF Records(SELF.Q) = 0
    Clear(SELF.Q)
    SELF.Q.PRE:DisplayFieldName = '<All>'
    Add(SELF.Q)
  END
  PARENT.Reset

! Then later on when the selection occurs detect if the user has selected our custom row and deal with it.
FDBLocation.TakeNewSelection PROCEDURE
  CODE
  PARENT.TakeNewSelection

  IF SELF.Q.PRE:DisplayFieldName = '<All>'
    Clear(PRE:Record)
    ! Do whatever else you need to do here I guess!
END

Дополнить dropList своими записями

Добавлено: 19 Октябрь 2018, 10:24
VWV
Парни, спасибо за науку и помощь. Все получилось. За 2 дня узнал во сто крат больше, чем от чтения help-а

Дополнить dropList своими записями

Добавлено: 19 Октябрь 2018, 12:03
kreator
VWV писал(а): 19 Октябрь 2018, 10:24 Парни, спасибо за науку и помощь. Все получилось. За 2 дня узнал во сто крат больше, чем от чтения help-а
Видимо, специфика ООП, что help трудно доходит. Я взял за привычку смотреть сразу соурсы в каталоге \libsrc. Ну не сразу, но вообще очень полезная штука.