28.01.2009, 12:07 | #1 |
Участник
|
Добрый день. Я не программист, но очень хочется разобраться.
Задача следующая: вывести на документы с табличной частью субформу для ввода и просмотра измерений к каждой конкретной строке. На журнальных формах сделать это просто, потому что в таблице с данными основной формы есть номер строки. А как быть с документами типа счетов покупки (на его же примере опишу свои действия)? Субформу на субформу нав сделать не может. Я добавил в таблице Purchase Header поле Line No. Субформу с измерениями привязал к таблице Purchase Header: Document No.=FIELD(No.),Document Type=FIELD(Document Type),Line No.=FIELD(Line No.). Теперь пытаюсь сделать так, чтобы поле Line No. таблицы Purchase Header заполнялось номером текущей строки. В триггер OnAfterGetCurrRecord() формы Purch. Invoice Subform добавил PurchaseHeader."Line No." := "Line No.". Что ещё надо сделать, чтобы эта конструкция заработала? Или я вообще всё делаю неправильно? |
|
28.01.2009, 13:02 | #2 |
Участник
|
Обычно такие вещи реализуются с помощью триггера OnTimer. На форму кладете 2 сабформы. По таймеру из основной сабформы получаете текущую запись, и передаете ее в подчиненную сабформу и на основании этого ставите там фильтры.
Также решение этой задачи представлено на mibuso: http://www.mibuso.com/dlinfo.asp?FileID=321 (с использованием таймера) и http://www.mibuso.com/dlinfo.asp?FileID=290 (не знаю как сделано, подозреваю, что тоже таймер). Скачайте объекты - посомтрите. |
|
28.01.2009, 13:24 | #3 |
Участник
|
Запускать из субформы другую форму с наложенными фильтрами не вариант? Мне кажется есть свойство формы, которое позволит при вызове ее RUNом динамически менять отображаемую инфу при движении по записям вызывающей формы. То есть, реализовать не субформой, а вызываемой отдельной формой. Потому что таймер - это ОЧЕНЬ ОЧЕНЬ неудобно. Это практически отказ от дебага связанных объектов..
|
|
28.01.2009, 14:40 | #4 |
Участник
|
Цитата:
Сообщение от romeo
Запускать из субформы другую форму с наложенными фильтрами не вариант? Мне кажется есть свойство формы, которое позволит при вызове ее RUNом динамически менять отображаемую инфу при движении по записям вызывающей формы. То есть, реализовать не субформой, а вызываемой отдельной формой. Потому что таймер - это ОЧЕНЬ ОЧЕНЬ неудобно. Это практически отказ от дебага связанных объектов..
К тому же хочу обратить внимание, что в заказах продажи и покупки открытие измерений в стандарте производится в модальном режиме. Возможно это имеет какой-то тайный смысл (для заголовка это может быть необходимо чтобы вывести окошко "вы поменяли измерения, обновить строки?", а вот почему в строках в модальном - не знаю, видимо чтобы исключить недоразумения пользователя, привыкшего к обновлениям подчиненной формы при движении по главной). |
|
28.01.2009, 15:20 | #5 |
Участник
|
Цитата:
Сообщение от Alterant
К сожалению, это не работает для вызова из кода. Это свойство не формы, а menuitem или button. Называется оно RunFormLinkType. Форма будет обновляться только в том случае, если ее открыли нажав на кнопку (или выбрав пункт меню) у которого PushAction = RunObject, RunObject = Form XXX, определена связь RunFormLink и RunFormLinkType = OnUpdate. Т.е. в сабформе придется размещать кнопку, что не удобно.
|
|
28.01.2009, 16:04 | #6 |
Участник
|
Цитата:
Сообщение от Васыо
Задача следующая: вывести на документы с табличной частью субформу для ввода и просмотра измерений к каждой конкретной строке. На журнальных формах сделать это просто, потому что в таблице с данными основной формы есть номер строки. А как быть с документами типа счетов покупки (на его же примере опишу свои действия)? Субформу на субформу нав сделать не может. Я добавил в таблице Purchase Header поле Line No. Субформу с измерениями привязал к таблице Purchase Header: Document No.=FIELD(No.),Document Type=FIELD(Document Type),Line No.=FIELD(Line No.). Теперь пытаюсь сделать так, чтобы поле Line No. таблицы Purchase Header заполнялось номером текущей строки. В триггер OnAfterGetCurrRecord() формы Purch. Invoice Subform добавил PurchaseHeader."Line No." := "Line No.". Что ещё надо сделать, чтобы эта конструкция заработала? Или я вообще всё делаю неправильно?
Там что-то похожее, правда связь "форма-сабформа". Может Вашу задачу можно так же "трансформировать"? |
|
28.01.2009, 17:20 | #7 |
Участник
|
Большое спасибо за советы. Попробовал через триггер OnTimer. Работает.
|
|
28.01.2009, 17:21 | #8 |
MCTS
|
На всякий случай.
В строках (например, заказа покупки) можно сделать видимыми 8 полей, в которых могут отображаться измерения. Два из них это глобальные измерения, а остальные 6 - это наиболее популярные измерения. Чтобы настроить список популярных измерений нужно: 1. Финансы, Настройка, Финансовые операции Настройка 2. Закладка Измерения - указать популярные измерения (3-8) |
|
28.01.2009, 17:24 | #9 |
Участник
|
|
|
28.01.2009, 17:41 | #10 |
Участник
|
Цитата:
Сообщение от Васыо
Добрый день. Я не программист, но очень хочется разобраться.
Задача следующая: вывести на документы с табличной частью субформу для ввода и просмотра измерений к каждой конкретной строке. На журнальных формах сделать это просто, потому что в таблице с данными основной формы есть номер строки. А как быть с документами типа счетов покупки (на его же примере опишу свои действия)? Субформу на субформу нав сделать не может. Я добавил в таблице Purchase Header поле Line No. Субформу с измерениями привязал к таблице Purchase Header: Document No.=FIELD(No.),Document Type=FIELD(Document Type),Line No.=FIELD(Line No.). Теперь пытаюсь сделать так, чтобы поле Line No. таблицы Purchase Header заполнялось номером текущей строки. В триггер OnAfterGetCurrRecord() формы Purch. Invoice Subform добавил PurchaseHeader."Line No." := "Line No.". Что ещё надо сделать, чтобы эта конструкция заработала? Или я вообще всё делаю неправильно? P.S. Пока выводил фразу почти все уже отписали за меня )))) Так же, кроме метода Alternat со стандартным таймером, есть способ и через XML DOM. Как использовать обе эти вещи можно посмотреть здесь. Но и тот и другой способ лучше применять, когда уже никакой альтернативы придумать не сможете! |
|
30.01.2009, 17:46 | #11 |
Administrator
|
|
|