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

Одна browse много update form

Добавлено: 26 Май 2017, 19:02
gopstop2007
Таблица с таб-ами, в зависимости от таб-а и нажатии клавиши Update должна вызваться "нужная" Update Form.
В стандартной Browse нет возможности вклинится в execute для подстановки своих Update Form, решение только с помощью OMIT ? :cat:

Одна browse много update form

Добавлено: 26 Май 2017, 19:39
Yufil
1 вариант. Напиши Update-процедуру типа Source, которая вызывает ту или иную форму, в зависимости от...
2 вариант - создать совсем пустую процедуру Dummy, которая вообще ничего не делает, поставить её в качестве формы обновления, а потом взглянуть в код и до/после вызова Dummy вставить выбор той или иной формы.

Вот, нашёл в работающем коде, нужно было вызвать процедуру testeditor или ScreenEditor в зависимости от типа записи

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

ThisWindow.Run PROCEDURE(USHORT Number,BYTE Request)
ReturnValue          BYTE,AUTO

  CODE
  ReturnValue = PARENT.Run(Number,Request)
  !-- Это я вставил 
  IF SELF.Request = ViewRecord
    ReturnValue = RequestCancelled                         ! Always return RequestCancelled if the form was opened in ViewRecord mode
  ELSE
    GlobalRequest = Request
    IF Loc:ScreenType = 'T' 
        TestEditor(1)
    ELSE
        ScreenEditor(1)  
    END 
    ReturnValue = GlobalResponse
  END
  RETURN ReturnValue 
  !--- А это сгенерировано 
  IF SELF.Request = ViewRecord
    ReturnValue = RequestCancelled                         ! Always return RequestCancelled if the form was opened in ViewRecord mode
  ELSE
    GlobalRequest = Request
    Dummy
    ReturnValue = GlobalResponse
  END
  RETURN ReturnValue

Одна browse много update form

Добавлено: 26 Май 2017, 20:26
kreator
А зачем разные Update Form? Разные таблицы/файлы редактируются? Временное решение какое-то?
Было дело, я форму рисовал с несколькими закладками (активные/не активные в зависимости от условий).
А вообще метод Run для разных хитрых штук с Update Form.
А в десятке ещё заложена возможность по условию делать Update Form или EIP.

Одна browse много update form

Добавлено: 27 Май 2017, 8:57
gopstop2007
Yufil писал(а): 26 Май 2017, 19:39 Вот, нашёл в работающем коде, нужно было вызвать процедуру testeditor или ScreenEditor в зависимости от типа записи
Спасибо Yufil, я так и вставляю с помощью OMIT , думал еще есть решение кроме этого :)
kreator писал(а): 26 Май 2017, 20:26 А зачем разные Update Form?
В зависимости от условий, наличие и скрытие дополнительных таб-ов в форме не выход, одна Update форма на два поля, другая на пол-экрана :) и потом использовать раздельные Update формы в зависимости от условий проще.

Одна browse много update form

Добавлено: 27 Май 2017, 9:46
kreator
gopstop2007 писал(а): 27 Май 2017, 8:57 одна Update форма на два поля, другая на пол-экрана
Как вариант, два поля можно в EIP редактировать. Это в шаблонах предусмотрено. Как раз, может, для таких случаев. И логика вроде бы в этом есть - зачем открывать тяжёлую форму для редактирования пары-тройки полей.

Одна browse много update form

Добавлено: 27 Май 2017, 10:06
gopstop2007
kreator писал(а): 27 Май 2017, 9:46 Как вариант, два поля можно в EIP редактировать. Это в шаблонах предусмотрено. Как раз, может, для таких случаев. И логика вроде бы в этом есть - зачем открывать тяжёлую форму для редактирования пары-тройки полей.
я два поля для примера привел :), а например форма для перемещения и форма для розничной продажи, + форму для продажи через штрих код, + форму для планшета и т.д.... :)

Одна browse много update form

Добавлено: 27 Май 2017, 11:17
Yufil
Тогда самый простой вариант - сделать Update Procedure типа Source и передать ей параметр каким-то образом (если шаблон допускает, то напрямую, если нет - через какую-то глобальную переменную)

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

UpdateSourceProcedure    PROCEDURE(...)
                                      Code 
                                      CASE  UpdateType
                                      OF 1 
                                         UpdateProcedure1() 
                                      OF 2 
                                         UpdateProcedure2()
                                      ....
                                      RETURN 
И никаких игрищ с OMIT

Одна browse много update form

Добавлено: 27 Май 2017, 13:08
gopstop2007
Yufil писал(а): 27 Май 2017, 11:17 Тогда самый простой вариант - сделать Update Procedure типа Source и передать ей параметр каким-то образом (если шаблон допускает, то напрямую, если нет - через какую-то глобальную переменную)
И никаких игрищ с OMIT
Спасибо Yufil, попробую для сравнения :)

Одна browse много update form

Добавлено: 28 Май 2017, 18:45
finsoftrz
Я тоже через source процедуру делаю. В данном случае, без параметра, анализируется тип документа и вызывается соответствующая форма. А EIP вообще никогда не использую. Формы всякими шаблонами автоматически распознаются и навешивается разный функционал (логические блокировки, логирование, распределение прав доступа и т.п.). С EIP, наверно, тоже можно что-то придумать, но для единообразия не стал заморачиваться... Когда некоторые клиенты переходили с 1С, думал, будут роптать, там при редактировании документов раньше был только EIP. Нет, не роптали, быстро привыкли, им даже удобнее показалось. Единственная хитрость, когда жмыкают по колонке в броузе, форма открывается с автоматическим позиционированием на нужное поле. Это шаблоном соответствующим обеспечивается.